Письмо от Дмитрия Караваева и его же статья на Хабре
Добавлено: 18.12.18 20:48
#русскийязык #космос #пример
(Публикуется с разрешения автора)
>Вы сказали, что ваш PL/1 - не русскоязычный, а лишь с поддержкой РЯ. В связи с этим хочется всё же чуть больше деталей о том, как РЯ используется на практике в ваших разработках, в тех пределах, в которых это допустимо режимом.
>Например, для каких категорий сущностей вы используете РЯ в программах для МКС - называете ли вы по-русски:
- файлы
- модули
- процедуры и функции
- переменные
>Если да, то какая примерно доля сущностей из перечисленных категорий называется на РЯ и какая на АЯ.
>Речь идёт о прикладных программах.
Попробую ответить.
Дело в том, что для меня переход на PC и PL/1 в начале 1987 года совпал с развертыванием в «Энергии» масштабных работ по созданию ПО системы управления комплексом Энергия-Буран.
Данное ПО как раз разрабатывалось с помощью «русских» (правильнее, советских) языков программирования «ПРОЛ-2» разработки ИПМ и «Эль-76» разработки ИТМ и ВТ. Например, на «Эль-76» в ЦНИИМаш был разработан транслятор с «ПРОЛ-2» в коды бортовой машины. Таким образом, среда и «атмосфера» программирования в то время были русскоязычными, хотя латиница не запрещалась. Естественно, что используя PL/1 для создания контролирующего ПО (для верификации основного ПО), была необходимость как можно больше использовать русский язык. Идея использовать и русские ключевые слова в PL/1 тогда просто не приходила в голову, да и транслятором мы еще слабо владели. Но именно с тех пор привычка давать практически всем переменным процедурам и функциям воспринималась как само собой разумеющееся.
Следующая большая работа – наземное рабочее место для управления поворотной платформой АСПГ-М, расположенной снаружи модуля Квант-2 ОК «Мир» (1994 год). Здесь русский язык стал использоваться более последовательно, в частности в библиотеках.
На сегодня система программирования на PL/1 (и русский язык) используется по теме МКС в следующих проектах:
- программа баллистико-навигационного отображения экипажу полетной обстановки, постоянно работающая на бортовых ноутбуках Российского сегмента;
- система межкомпьютерного обмена (связь бортового ноутбука с наземным компьютером в ЦУПе через штатный канал связи с МКС);
- первичная обработка (опознавание, географическая привязка) снимков земной поверхности, выполненных экипажами МКС;
- создание электронных картографических данных из доступных источников (электронных карт земной поверхности);
- моделирование процессов стыковки (динамическая и кинематическая модель), на основании которого выбираются допустимые и безопасные режимы стыковок.
Таким образом, русский язык при разработке перечисленного выше ПО используется практически 100% для переменных, функций и процедур, модулей (в PL/1 модуль это блок, по сути – та же поцедура). Файлы: имеется внутренняя переменная типа файл – обычно называется как и другие переменные, а вот «внешнее» имя файла не всегда по-русски, оно может быть и результатом работы стороннего ПО.
Справедливости ради, все же следует признать, что мы во многом слишком «испорчены» английскими словами в программах. Например, для меня первой системой была БЭСМ-Алгол разработки ИТМ и ВТ. Она была высокого качества и вся диагностика по-русски. Но вот ключевые слова – не переведены (хотя это разрешал даже международный стандарт) и получился «синдром утенка».
Особенно, когда текст набрасывается тяп-ляп для одного раза и думаешь о задаче – получается дикая окрошка на «лондонско-рязанском» диалекте, поскольку по привычке пишешь по-английски, затем спохватываешься, потом опять забываешься.
Вот первый попавшийся текст как такой кошмарный пример, честно ничего не менял:
(Публикуется с разрешения автора)
>Вы сказали, что ваш PL/1 - не русскоязычный, а лишь с поддержкой РЯ. В связи с этим хочется всё же чуть больше деталей о том, как РЯ используется на практике в ваших разработках, в тех пределах, в которых это допустимо режимом.
>Например, для каких категорий сущностей вы используете РЯ в программах для МКС - называете ли вы по-русски:
- файлы
- модули
- процедуры и функции
- переменные
>Если да, то какая примерно доля сущностей из перечисленных категорий называется на РЯ и какая на АЯ.
>Речь идёт о прикладных программах.
Попробую ответить.
Дело в том, что для меня переход на PC и PL/1 в начале 1987 года совпал с развертыванием в «Энергии» масштабных работ по созданию ПО системы управления комплексом Энергия-Буран.
Данное ПО как раз разрабатывалось с помощью «русских» (правильнее, советских) языков программирования «ПРОЛ-2» разработки ИПМ и «Эль-76» разработки ИТМ и ВТ. Например, на «Эль-76» в ЦНИИМаш был разработан транслятор с «ПРОЛ-2» в коды бортовой машины. Таким образом, среда и «атмосфера» программирования в то время были русскоязычными, хотя латиница не запрещалась. Естественно, что используя PL/1 для создания контролирующего ПО (для верификации основного ПО), была необходимость как можно больше использовать русский язык. Идея использовать и русские ключевые слова в PL/1 тогда просто не приходила в голову, да и транслятором мы еще слабо владели. Но именно с тех пор привычка давать практически всем переменным процедурам и функциям воспринималась как само собой разумеющееся.
Следующая большая работа – наземное рабочее место для управления поворотной платформой АСПГ-М, расположенной снаружи модуля Квант-2 ОК «Мир» (1994 год). Здесь русский язык стал использоваться более последовательно, в частности в библиотеках.
На сегодня система программирования на PL/1 (и русский язык) используется по теме МКС в следующих проектах:
- программа баллистико-навигационного отображения экипажу полетной обстановки, постоянно работающая на бортовых ноутбуках Российского сегмента;
- система межкомпьютерного обмена (связь бортового ноутбука с наземным компьютером в ЦУПе через штатный канал связи с МКС);
- первичная обработка (опознавание, географическая привязка) снимков земной поверхности, выполненных экипажами МКС;
- создание электронных картографических данных из доступных источников (электронных карт земной поверхности);
- моделирование процессов стыковки (динамическая и кинематическая модель), на основании которого выбираются допустимые и безопасные режимы стыковок.
Таким образом, русский язык при разработке перечисленного выше ПО используется практически 100% для переменных, функций и процедур, модулей (в PL/1 модуль это блок, по сути – та же поцедура). Файлы: имеется внутренняя переменная типа файл – обычно называется как и другие переменные, а вот «внешнее» имя файла не всегда по-русски, оно может быть и результатом работы стороннего ПО.
Справедливости ради, все же следует признать, что мы во многом слишком «испорчены» английскими словами в программах. Например, для меня первой системой была БЭСМ-Алгол разработки ИТМ и ВТ. Она была высокого качества и вся диагностика по-русски. Но вот ключевые слова – не переведены (хотя это разрешал даже международный стандарт) и получился «синдром утенка».
Особенно, когда текст набрасывается тяп-ляп для одного раза и думаешь о задаче – получается дикая окрошка на «лондонско-рязанском» диалекте, поскольку по привычке пишешь по-английски, затем спохватываешься, потом опять забываешься.
Вот первый попавшийся текст как такой кошмарный пример, честно ничего не менял:
Код: Выделить всё
/*
ИЩЕТ В ТЕКУЩЕЙ ПАПКЕ ФАЙЛЫ ISS*.TXT, ИЗВЛЕКАЕТ ИЗ НИХ:
ИМЯ ФАЙЛА NASA PHOTO ID (СТРОКА 1),
Lens ID (СТРОКА 17),
Focus Mode (СТРОКА 19)
*/
EXIFTXT:PROC(ПАРАМ) MAIN;
%INCLUDE 'Z:SERVICE.DCL';
ОПС ПАРАМ ТЕКСТ(*)РД;
?DO_KONEC=ДА;
РАЗОБРАТЬ_ОДИН_ФАЙЛ(ПАРАМ);
РАЗОБРАТЬ_ОДИН_ФАЙЛ:PROC(ИМЯ);
ОПИСАНИЕ
ИМЯ CHAR(*)VAR,
(CCC,CC1) CHAR(*)VAR,
(
FILENAME,
LENSID,
FOCUSMODE
) CHAR(*)VAR,
(I,J) FIXED(31),
V720 BIT,
F_EXIF FILE;
КОГДА НЕТ_ФАЙЛА(F_EXIF) ИДТИ НА_ВЫХОД;
ОТКРЫТЬ ФАЙЛ(F_EXIF) ДЛЯ_ВВОДА ТЕКСТОВЫЙ ПО_ИМЕНИ(ИМЯ);
КОГДА КОНЕЦ_ФАЙЛА(F_EXIF) ИДТИ НА_ВЫХОД;
PUT SKIP;
I=0;
V720 = НЕТ;
FILENAME,
LENSID,
FOCUSMODE = '';
ЦИКЛ ПОВТОРЯЯ;
READ FILE(F_EXIF) INTO(CCC);
I+=1;
// ЕСЛИ I ^= 1 & I ^= 17 & I ^= 19 ТОГДА ОПЯТЬ;
ССС=ЗАМЕНИТЬ(CCC,' ','^I');
J=ИСКАТЬ(CCC,':');
ЕСЛИ J=0 ТОГДА ОПЯТЬ;
CC1=ПОДСТРОКА(CCC,1,J);
СС1=ОЧИСТИТЬ(CC1);
ЕСЛИ J=ДЛИНА(ССС)
ТОГДА ССС='';
ИНАЧЕ CCC=ПОДСТРОКА(CCC,J+1);
ССС=ОЧИСТИТЬ(CCC);
ЕСЛИ I = 1 & ИСКАТЬ(СС1,'ExifToolVersion') = 1 ТОГДА
ЕСЛИ index(ССС,'7.')=1 ТОГДА V720 = ДА;
ЕСЛИ V720
ТОГДА
{;
ПРОВЕРИТЬ(2, 'FileName ' ,FILENAME);
ПРОВЕРИТЬ(39, 'FocusMode ',FOCUSMODE);
ПРОВЕРИТЬ(146,'LensID ' ,LENSID);
};
ИНАЧЕ
{;
ПРОВЕРИТЬ(1, 'NASA PHOTO ID:',FILENAME);
ПРОВЕРИТЬ(17, 'Lens ID:' ,LENSID);
ПРОВЕРИТЬ(19, 'Focus Mode:' ,FOCUSMODE);
};
КОНЕЦ;
НА_ВЫХОД:
PUT EDIT(FILENAME,';',LENSID,';',FOCUSMODE)(A);
ВОЗВРАТ;
НА_СООБЩЕНИЕ: PUT SKIP LIST(ИМЯ,I,CC1,CCC);
ПРОВЕРИТЬ:PROC(I1,ОБРАЗЕЦ,КУДА);
ОПИСАНИЕ
I1 FIXED(31),
(ОБРАЗЕЦ,КУДА) CHAR(*)VAR;
//ЕСЛИ I ^= I1 ТОГДА ВОЗВРАТ;
ЕСЛИ ИСКАТЬ(СС1,ОБРАЗЕЦ)=1
ТОГДА КУДА=ССС;
// ИНАЧЕ ИДТИ НА_СООБЩЕНИЕ;
КОНЕЦ ПРОВЕРИТЬ;
КОНЕЦ РАЗОБРАТЬ_ОДИН_ФАЙЛ;
END EXIFTXT;