Ada_Ru форум

Обсуждение языка Ада

Кириллица

Оставить новое сообщение

Сообщения

Maxim Reznik
Кириллица
2002-12-12 06:32:42

Привет

 

Прочел и я AI-285.

Может более продвинутые товарищи просветят, как кириллицу они в Аде видят?

 

Ну будет у нас Ada.Characters.Wide_Cyrillic. Что потом?

 

Куда-то надо Is_Letter Upper и пр.

Это будет Ada.Characters.Wide_Cyrillic.Handling?

 

Как на счет записи, чтения в/из файла?

Это должен делать компилятор через Ada.Wide_Text_IO?

Это значит GNAT патчить надо?

 

Где-то должно быть преобразование из Wide_String в Stream_Element_Array

для заданной кодировки. По крайней мере в Java такое есть.

 

А с 8-ми битными Character, вообще никак?

 

Я себе как-то общей картины не сложу 8-(

 

Максим

Maxim Reznik wrote:

 

Может более продвинутые товарищи просветят, как кириллицу они в Аде видят?

 

Ну будет у нас Ada.Characters.Wide_Cyrillic. Что потом?

 

Куда-то надо Is_Letter Upper и пр.

Это будет Ada.Characters.Wide_Cyrillic.Handling?

 

Похоже места лучше не придумать. Хотя есть вариант своять Ada.Characters.Wide_Handling. По составу почти такой же как и Ada.Characters.Handling. Тут как раз проблем нету.

 

А вот про Ada.Strings.Maps.Constants кто-то задумывался? Ведь уже определен Ada.Strings.Wide_Maps.Wide_Constants. И его придется не просто добавлять, а переделывать. А предлагаемые переделки, похоже, только в тупик и ведут.

 

Ещё хуже дела обстоят с сортировкой по алфавиту. В этой области никто в Ada вообще ничего не придумал. А получать первой в списке заглавную Ё мне лично не хочется. Как и иметь после заглавной Я строчную а.

 

Как на счет записи, чтения в/из файла?

Это должен делать компилятор через Ada.Wide_Text_IO?

Это значит GNAT патчить надо?

 

На самом деле UTF-8 GNAT-овская RTL великолепно обрабатывает. Проверенно лично мной и неоднократно. Жалоб со стороны пользователей также не поступало.

 

Где-то должно быть преобразование из Wide_String в Stream_Element_Array

для заданной кодировки. По крайней мере в Java такое есть.

 

Если можно, представь аннотированную спецификацию такового. Хотя для этого существуют предопределенные атрибуты 'Read, 'Write. В кустах сидит косяк с передачей такой строки между разделами распределенной программы если процессоры гетерогенные. Нужный-то параграф из RM в TC1 удалили.

 

А с 8-ми битными Character, вообще никак?

 

Похоже лучший вариант - временно об этом забыть. Многообразие кодировок раздует что угодно до космических размеров. А делать "сменные" модули в рамках стандарта невозможно.

 

Я себе как-то общей картины не сложу 8-(

 

Зато я её вижу абсолютно четко. Очень похоже на одну большую .... бип, бип, бип.

 

Хотя есть и обходной вариант: не трогать то, что придумано в стандарте. Просто перевести это в разряд "облегченных" и/или "устаревших" решений. А силы сконцентрировать на разработке спецификаций для работы с Unicode.

 

Вадим

hi,

Maxim Reznik wrote:

Привет

>

Прочел и я AI-285.

Может более продвинутые товарищи просветят, как кириллицу они в Аде видят?

для начла, рекомендую почитать с пристрастием(!):

http://www.linux.org.ru:8101/books/locale/index.html

чтобы просто представлять себе то, что называется

locale-зависимым программированием,

и на какие механизмы это хозяйство опирается.

эти механизмы - стандартизированы, но

их реализация, на сегодняшний день, осуществлена

_только_ библиотеками поддержки языков линии C/C++

т.е. ни Паскаль, ни Ада, ни Модула-X, ни какой-либо еще

существующий на сегодняшний день язык программирования

_своих_родных_ средств поддержки не имеет.

Это значит GNAT патчить надо?

сначала, надо иметь _чем_ патчить :)

Где-то должно быть преобразование из Wide_String в Stream_Element_Array для заданной кодировки. По крайней мере в Java такое есть.

Жаба "сидит" на С-шной реализации всех этих

чудес, и причем намертво. если эти механизмы

реализовывать средствами Жабы, то никакой

проц с этим не справиться

А с 8-ми битными Character, вообще никак?

>

Я себе как-то общей картины не сложу 8-(

а в Аде этой картины просто нету, никакой кроме Latin-1.

>

>

Максим

Alex

Oleksandr Havva пишет:

 

Maxim Reznik wrote:

Может более продвинутые товарищи просветят, как кириллицу они в Аде видят?

для начла, рекомендую почитать с пристрастием(!):

http://www.linux.org.ru:8101/books/locale/index.html

чтобы просто представлять себе то, что называется

locale-зависимым программированием,

и на какие механизмы это хозяйство опирается.

эти механизмы - стандартизированы, но

их реализация, на сегодняшний день, осуществлена

_только_ библиотеками поддержки языков линии C/C++

т.е. ни Паскаль, ни Ада, ни Модула-X, ни какой-либо еще

существующий на сегодняшний день язык программирования

_своих_родных_ средств поддержки не имеет.

Java имеет :-)

 

Ссылочку я читал, и как оно работает в С и Java я себе примерно представляю.

Стандарт-стандартом но все это касается только Unix/POSIX и языка Си.

К примеру в Винде все по другому, да?

 

А я спрашиваю, кто как себе *В АДЕ* это дело видит.

Копировать Сишный подход? Это значит иметь что-то типа

 

package Ada.I18N is

 

type Character is mod 256;

type String is array (Positive range <>) of Character;

 

function Is_Letter (X : Character) return Boolean;

function Upper (X : String) return String;

 

end Ada.I18N;

 

И потребовать, чтоб Is_Letter меняла свое поведение в зависимости от

переменной среды окружения LC_ALL.

А потом прийдется добавить Text_IO, и кучу всего, где в стандарте Character и

String используется.

 

И куда мы так придем?

 

Жаба "сидит" на С-шной реализации всех этих

чудес, и причем намертво. если эти механизмы

реализовывать средствами Жабы, то никакой

проц с этим не справиться

Да мне все равно на чем оно реализованно, я имел ввиду интерфейс.

 

Максим

hi,

Maxim Reznik wrote:

Ссылочку я читал, и как оно работает в С и Java я себе примерно представляю. Стандарт-стандартом но все это касается только Unix/POSIX и языка Си. К примеру в Винде все по другому, да?

>

А я спрашиваю, кто как себе *В АДЕ* это дело видит.

Копировать Сишный подход?

дык в том-то и штука, что ежели винимательно посмотреть,

то нынешняя (95) Ада имеет именно POSIX интерфейс

(всякие Is_Letter, Is_Upper...),

а вот реализация (то что под капотом) - поддерживает

только Latin_1

Это значит иметь что-то типа

>

package Ada.I18N is

>

type Character is mod 256;

type String is array (Positive range <>) of Character;

>

function Is_Letter (X : Character) return Boolean;

function Upper (X : String) return String;

>

end Ada.I18N;

>

И потребовать, чтоб Is_Letter меняла свое поведение в зависимости от переменной среды окружения LC_ALL.

LC_ALL - это "аварийный" случай :)

для Is_Letter зависимость будет определять LC_CTYPE

А потом прийдется добавить Text_IO, и кучу всего, где в стандарте Character и

String используется.

именно!!!

И куда мы так придем?

к _стандартно_определенным_библиотекам_ которые управляют

представлением информации с учетом национальных особенностей.

как пример: GNAT тебе сообщения об ошибках компиляции

будет говорить по русски

>Жаба "сидит" на С-шной реализации всех этих

>чудес, и причем намертво. если эти механизмы

>реализовывать средствами Жабы, то никакой

>проц с этим не справиться

>

>

Да мне все равно на чем оно реализованно, я имел ввиду интерфейс.

хе-хе...

вот твое "все равно" и есть твое самое большущее заблуждение :)

объясняю почему.

пример 1)

написать полновесную систему "сидящую" на "голом железе"

на Аде можно? YESSSS, и еще как!

а обеспечить средствами Ады человеко-машинный интерфейс на русском? ...в прЫнципе, да, но! перестроить этот интерфейс для...

скажем чехов - "кровавая битва"

что делать чтобы избежать "кровавой битвы"?

придется тащить С-шную реализацию этой поддержки

в свою "чистую" Ада-систему

пример 2)

делаем софт, например, под Linux. ежели нужны средства

национального вода/вывода - делай импорт из glibc

(glibc, для тех кто не в курсе, - это GNU Lib ___Cи___)

ибо в Аде этих средств просто нет, и все твои

пользовательские интерфейсы,

если ты используешь только стандартные средства Ады,

смогут членораздельно "говорить" _только_на_английском_

теперь понятно почему, в реальности линейка С/С++ не убиенна?

совсем не потому, что С/С++ - это супер-пупер языки программирования для истинно супер-пупер профессионалов

причина в том, что это _единственные_ языки

_родное_ окружение которых поддерживает

национальный ввод/вывод во всей его красе

все остальные доводы за/против - это флейм для пионЭров

>

>

Максим

>

Alex

Oleksandr Havva wrote:

hi,

 

Maxim Reznik wrote:

 

 

Ссылочку я читал, и как оно работает в С и Java я себе примерно представляю.

Стандарт-стандартом но все это касается только Unix/POSIX и языка Си.

К примеру в Винде все по другому, да?

 

А я спрашиваю, кто как себе *В АДЕ* это дело видит.

Копировать Сишный подход?

 

 

дык в том-то и штука, что ежели винимательно посмотреть,

то нынешняя (95) Ада имеет именно POSIX интерфейс

(всякие Is_Letter, Is_Upper...),

а вот реализация (то что под капотом) - поддерживает

только Latin_1

 

Не все так просто. Стандартом прописан не Latin_1 или что другое. Стандартом прописан тип Character как перечислимый с набором компонентов, символьные представления которых совпадает с очередностью символов в Latin_1. Если кто сталкивался с компиляторами на IBM360/370/390, то прекрасно знает, что у них кодировка иная (EBCDIC), а символы как не сравнивай, все в порядке Latin_1 следуют. И это пришло ещё из Ada83. И даже GNAT заглушечку на этот всет имеет. Правда сейчас активировать её уже никому не удасться, но факт...

 

Дабы эту проблему "решить" дали право "реализаторам" менять наполнение типа Character. Должно это делаться некоторым ключом. Этот ключ заодно должен и подменять модули Ada.Characters.Handling, Ada.Strings.Maps.Constants и т.д. Да вот это решение еще большую "засаду" дало. Получается, что языковое окружение задается ПРИ СБОРКЕ ПРОГРАММЫ. А сейчас все это осознали и локти кусают. Ан не выходит...

 

 

Это значит иметь что-то типа

 

package Ada.I18N is

 

type Character is mod 256;

type String is array (Positive range <>) of Character;

 

function Is_Letter (X : Character) return Boolean;

function Upper (X : String) return String;

 

end Ada.I18N;

 

И потребовать, чтоб Is_Letter меняла свое поведение в зависимости от

переменной среды окружения LC_ALL.

 

Не, лучше LA_ALL ;-)

 

 

И куда мы так придем?

 

Кто читал AI, должен был-бы заметить, что буржуи также у разбитого карыта сидят. А Unicode то им хочется. Ох как хочется. Да вот не могут они признаться себе, что придется все программы переписывать.

 

 

как пример: GNAT тебе сообщения об ошибках компиляции

будет говорить по русски

 

Поубиваю всех, если GNAT хоть слово по русски скажет! Сделайте себе C/C++ по русски и не мешайте работать другим! Хоть зарезервированные слова на русский переводите.

 

 

Я уже почти закончил разбираться с обобщяющими категориями символов в Unicode. Программу-генератор данных тоже наваял. Осталось несколько штрихов. Думаю к полуночи закончу. Размер, правда, неимоверный - около 4-х мегабайт (сжатый - 200K). Но это только черновик, прошу не бить. Если есть желающие разобраться c 22-мя нормативными категориями символов и с 15-ю информативными, могу закинуть исходники.

Куда тут POSIX-у с Lower/Upper/Control/Graphic/... Забудьте о нем, господа. Но не на совсем - его время ещё придет, когда обмен данными с внешней средой проектировать будем.

 

 

Вадим

Vadim Godunko wrote:

 

Дабы эту проблему "решить" дали право "реализаторам" менять наполнение типа Character. Должно это делаться некоторым ключом. Этот ключ заодно должен и подменять модули Ada.Characters.Handling, Ada.Strings.Maps.Constants и т.д.

 

Хочу почитать про это подробнее. Где можно?

 

Максим

Maxim Reznik wrote:

Vadim Godunko wrote:

 

 

Дабы эту проблему "решить" дали право "реализаторам" менять наполнение типа Character. Должно это делаться некоторым ключом. Этот ключ заодно должен и подменять модули Ada.Characters.Handling, Ada.Strings.Maps.Constants и т.д.

 

 

Хочу почитать про это подробнее. Где можно?

 

Где? В RM!

 

3.5.2 (4 .. 5), A.3.2 (49), A.3.3 (27), A.4.6 (7)

Новое сообщение:
Страницы: 1

Чтобы оставить новое сообщение необходимо Зарегистрироваться и Войти