Страница 1 из 1

Письмо от Дмитрия Караваева и его же статья на Хабре

Добавлено: 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 модуль это блок, по сути – та же поцедура). Файлы: имеется внутренняя переменная типа файл – обычно называется как и другие переменные, а вот «внешнее» имя файла не всегда по-русски, оно может быть и результатом работы стороннего ПО.



Справедливости ради, все же следует признать, что мы во многом слишком «испорчены» английскими словами в программах. Например, для меня первой системой была БЭСМ-Алгол разработки ИТМ и ВТ. Она была высокого качества и вся диагностика по-русски. Но вот ключевые слова – не переведены (хотя это разрешал даже международный стандарт) и получился «синдром утенка».

Особенно, когда текст набрасывается тяп-ляп для одного раза и думаешь о задаче – получается дикая окрошка на «лондонско-рязанском» диалекте, поскольку по привычке пишешь по-английски, затем спохватываешься, потом опять забываешься.

Вот первый попавшийся текст как такой кошмарный пример, честно ничего не менял:

Код: Выделить всё

/*
 ИЩЕТ В ТЕКУЩЕЙ ПАПКЕ ФАЙЛЫ 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;

Re: Письмо от Дмитрия Караваева

Добавлено: 04.01.21 19:50
БудДен
И статья на Хабре, примерно от него же:

https://m.habr.com/ru/post/535988/