Русский язык в программировании / Хабр
Судя по результатам голосований (на compiler.su и даже здесь на Хабре) идею программирования на русском поддерживает не так уж и мало людей.
В данной статье приводится мой краткий обзор некоторых языков программирования и решений, которые позволяют программировать на русском.
Язык 1С: Предприятия
Несмотря на то, что это самый популярный язык программирования с русскоязычным синтаксисом, я его рассматривать не буду, дабы не разводить холивар. По аналогичной причине я не буду рассматривать OneScript и Перфолента.Net (последний хотя и является самостоятельным языком программирования, но его синтаксис основан на встроенном языке 1С: Предприятия).
1C: Исполнитель
Какая-то странная смесь C# [с его Console.Write()
], Java [var obj = new Object()
] и наверное Julia[с ;
вместо end
].
Также, судя по всему, разработчики 1С: Исполнитель вдохновлялись Scala/Kotlin, выбрав ключевое слово знч
для неизменяемых переменных. ИМХО, слово пост
конст
уже занято).Кроме того, неудачно выбраны ключевые слова попытка
, поймать
, выбросить
.
Выбор ключевого слова метод
\method
для объявления функций также вызывает вопросы.
Впрочем, есть и хорошие решения, которые вопросов не вызывают. Например, создание массива записью [1, 2, 3]
, множества записью {1, 2, 3}
и соответствия (то бишь «словаря») записью {"a": 1, "b": 2}
. Совсем как в Python.
Но в целом язык подходит лишь для весьма ограниченного круга задач и его практическая ценность пока ещё под вопросом.
КуМир
Уже исходя из названия (Комплект Учебных МИРов) понятно, что область применения данного языка ограничена обучением. А это, как я считаю, тупиковый путь. Мало кто захочет серьёзно изучать язык, который кроме обучения программированию, ни для чего не пригоден/не используется.
Однако некоторые идеи и решения, принятые в КуМир-е, можно позаимствовать. Например то, что математические функции в нём оставлены на английском (sqrt, sin, abs, min, max и т.д.). И я считаю это вполне оправданным. На уроках математики мы же пишем sin x и ничего.
Компилятор C++ от Интерстрон
Русификация служебных/ключевых слов C++ выполнена автором легендарной статьи ‘‘Редкая профессия’’ Евгением Зуевым.
Евгением была проделана огромная работа, однако в этом и состоит главная проблема: переведённых слов слишком много, и специфика их такова, что запомнить русскоязычный эквивалент для них слишком трудно.
Глагол
Проблема Глагола в том, что он основан на непопулярном языке [Oberon-2], и к тому же использует достаточно нетрадиционную терминологию, например:
- «вид», а не «тип»;
- «ряд», а не «массив»;
- «задача», а не «процедура»/«функция»;
- «отдел», а не «модуль»;
- «ячцел», а не «байт»;
- «знак», а не «символ»;
- «кольцо», а не «цикл»/«повтор».
В этом отношении я согласен с Юрием [автором сайта compiler.su]:
ruscomp.bb24.ru/viewtopic.php?id=20#p411:То есть обычные русские слова уже не являются для вас «общепринятым» языком?Общепринятые – это те, которые я читаю в книгах, в том числе по программированию. Когда читаю «байт», мне всё понятно. Это общепринятое. Когда я прочитаю «запись размером 40 слогов» — я буду долго размышлять. А вот «файл размером 40 байтов» — мне сразу понятно, да и Вам тоже. Да, там заимствованные слова, но не я их заимствовал и не я их глубоко внедрил в наш язык. Чтобы быть понятым, я вынужден их использовать.
RuSL
RuSL (Russian Scripting Language) — новый скриптовый язык программирования с синтаксисом на русском языке. После беглого знакомства с языком я выделил несколько [возможно субъективных] недостатков:
- Для объявления переменных используется нетрадиционное ключевое слово
изм
. - Нет поддержки целых чисел (все числа вещественные).
- Операторы присваивания
+=
,-=
и т.д. записываются в обратном порядке (т.е.=+
,=-
и т.д.). Особенно забавно получается с записьюn=-n
, которая работает не какn = -n
, а какn-=n
, т.е.n = n - n
:)(: - Для стандартных функций
input()
иprint()
был выбран переводввести()
ивывести()
вместо более привычноговвод()
ивывод()
.
11l
Семантика 11l берёт за основу язык Python (самый популярный язык программирования на данный момент [согласно рейтингам TIOBE, PYPL, IEEE Spectrum]), а синтаксис разработан/спроектирован с учётом когнитивно-эргономического подхода таким образом, что забыть его [синтаксис 11l] практически невозможно (особенно если это первый изучаемый язык программирования).
Для перевода названия метода map
в 11l было выбрано слово применить
, т.к. как сказано в Википедии «в функциональной форме map
часто называется «применить-ко-всем»«.
Также слово «применяет»/«применение» используется в различных описаниях функции `map()` в Python
pyneng.readthedocs.io/ru/latest/book/10_useful_functions/map.html:
Функция map применяет функцию к каждому элементу последовательности и возвращает итератор с результатами.
Использование функции map в Python :
Встроенная в Python функцияmap()
используется для применения функции к каждому элементу итерируемого объекта
pythonist.ru/python-map-znakomstvo:
map() перебирает элементы итерируемого массива (или коллекции) и возвращает новый массив (или итерируемый объект), который является результатом применения функции преобразования к каждому элементу
Для бросания исключения в 11l используется слово исключение
по аналогии с переводом ключевого слова throw
Евгением Зуевым. Ключевые подслова исключение.контроль
и исключение.перехват
также взяты из перевода Зуева.
Для числовых типов используются вполне общепринятые (принятые в том числе в языке РАЯ) названия Цел
и Вещ
.
Вместо того чтобы выполнять перевод всех и каждой функции стандартной библиотеки языка, в 11l осуществлён перевод лишь тех возможностей языка, которые требуются для решения задач по спортивному программированию.
Вот примеры решения задач на русском 11l
Задача ‘Mocha и прогулка’ (на основе этого решения):
цикл 1..Цел(ввод()) пер n = Цел(ввод()) пер a = ввод().разделить(‘ ’).применить(Цел) пер ответ = (0 .< n).применить(н -> н + 1) // можно сократить до `пер ответ = Массив(1..n)` если a.послед == 0 вывод_эл(ответ [+] (n + 1)) иначе цикл(н) 0 .< a.длина если a[н] == 1 вывод_эл(ответ[0.<н] [+] (n + 1) [+] ответ[н..]) цикл.прерватьЗадача ‘Запрещённая подпоследовательность’ (на основе этого решения):
цикл 1..Цел(ввод()) пер s = ввод() пер t = ввод() s = сортй(Массив(s)).соединить(‘’) если t == ‘abc’ & (‘a’ св s) & (‘b’ св s) & (‘c’ св s) s = s[0 . < s.найти_и(‘b’)]‘’(‘c’ * s.колво(‘c’))‘’(‘b’ * s.колво(‘b’))‘’s[s.об_найти_и(‘c’) + 1 ..] вывод(s)
Задача ‘Задача на доске’ (на основе этого решения):
цикл 1..Цел(ввод()) пер s = ввод() пер m = Цел(ввод()) пер b = ввод().разделить(‘ ’).применить(Цел) пер массив = сортй(Массив(Множество(Массив(s)))) пер ответ = [Символ("\0")] * m // как в Python (1-ый вариант решения) //пер ответ = "\0" * m // только в 11l (2-ой вариант решения) цикл сумма(b) != -m Множество[Цел] индексы цикл(i) 0 .< m если b[i] == 0 индексы.доб(i) b[i] = -1 цикл пер q = массив.извлечь() если индексы.длина <= s.колво(q) цикл(i) индексы ответ[i] = q // в 11l строки можно изменять цикл.прервать цикл(i) индексы цикл(j) 0 .< m если b[j] != -1 b[j] -= abs(i - j) вывод(ответ.соединить(‘’)) // (1-ый вариант решения) //вывод(ответ) // (2-ой вариант решения)
Кроме того, 11l поставляется со скриптом, который переводит код на русском в код на английском (в том числе переводит имена общеупотребимых переменных).
Несмотря на поддержку русских ключевых слов, названий функций и типов, я считаю, что имена коротких переменных в большинстве случаев целесообразно писать на английском.
Так принято и в учебном алгоритмическом языке:
ввод n; S:=0
А также в русских текстах задач по программированию используются английские/латинские буквы:
codeforces.com/contest/1559/problem/C?locale=ru:
В первой строке находится одно целое число t …
Первая строка набора входных данных содержит одно целое число n
И аналогично в книгах:
habr.com/ru/post/667022:
Напечатайте все возрастающие последовательности длины k, элементами которых являются натуральные числа от 1 до n.
На этом у меня всё. Спасибо за внимание.
Русский Язык Программирования / Хабр
Начал разработку русского языка программирования.
Сокращенно: РЯП.
РЯП напоминает язык КуМир, но будут существенные отличия и преимущества в сравнении с другими языками.
Переменные не надо объявлять, так как при первом обнаружении переменной в листинге программы интерпретатор автоматически создаст с таким именем переменную типа Double (вещественное число).
Интерпретатор пишу в 32-битной версии среды разработки «Lazarus» (язык программирования Паскаль).
В ряпе конечно же есть зарезервированные слова: начало, конец, если, цикл.
Но зарезервированные слова можно использовать в качестве имен переменных!
По ссылке можете скачать архив, в нем содержатся бинарник (версия 0.2), простые программы:
архив
Си и Паскаль уйдут, Питон утонет, Яву скурят!
Свободно скачивайте и распространяйте, пишите программки, пишите мне о глюках.
Только, пожалуйста, не делите на ноль! 🙂
ДОПОЛНЕНИЕ 1 (от 28 февраля 18:30 МСК):
1) Кто-то посмеялся над названием языка, предложил свои варианты. (возведение в степень),
% (процент), mod (остаток от деления на число), and (битовое И), xor (битовое исключающее ИЛИ),
or (битовое ИЛИ), >> (битовый сдвиг вправо).
Унарные команды: ЛИнверт (LInvert; логическое инвертирование переменной), округлить (round; округление вещественного числа до целого числа), показать (show; отобразить имя и значение переменной)
Вот код для вычисления простых чисел:
число = 3 конец = 60 начало цикл = число / 5 округлить цикл простое = 1 начало цикл2 = цикл + 1 остаток0 = число mod цикл2 остаток = остаток0 ЛИнверт остаток если остаток простое = 0 цикл = цикл - 1 если остаток цикл = 0 цикл цикл если простое показать число число = число + 2 конец = конец - 1 цикл конец
Результат:
число = 3 число = 5 число = 7 число = 11 число = 13 число = 17 число = 19 число = 23 число = 29 число = 31 число = 37 число = 41 число = 43 число = 47 число = 53 число = 59 число = 61 число = 67 число = 71 число = 73 число = 79 число = 83 число = 89 число = 97 число = 101 число = 103 число = 107 число = 109 число = 113
P. S. На перспективу:
— Механизм массивов.
— Вместо присвоения одной переменной можно написать формулу,
в левой части которой может стоять не только переменная, но и операция с другой переменной.
— Анализ кода.
Выдача подробных подсказок программисту.
— Автоматическое переформатирование кода в нужный стиль.
— Имя переменной можно сокращать.
Интерпретатор сам определит, какую переменную из объявленных имели в виду.
— Иногда допускается, что между конструкцией языка (цикл, если) и переменной нет пробела.
— Любой код можно записать в одну строку.
— Объединение нескольких файлов кода в одном файле.
— Любое количество букв в названии конструкции языка.
Как работают термины программирования на других языках
Программирование позволяет нам заставить компьютеры делать что-то за нас. Он стоит за всем, от калькуляторов до текстовых процессоров и видеоигр.
Но как сказать компьютерам, что мы от них хотим?
Компьютеры используют двоичный код, своего рода машинный язык, полностью состоящий из единиц и нулей. Языки программирования (такие как Python или C++) используют специальные программы, называемые компиляторами , для преобразования удобочитаемого текста в то, что компьютер может понять и выполнить.
Теоретически язык программирования можно построить из любого набора символов. Однако на практике большинство языков программирования основаны на английском языке.
Языки программирования, не основанные на английском языке
Даже люди из стран, где английский не является местным языком, по-прежнему используют английский для программирования. Фактически, некоторые из наиболее широко используемых языков программирования пришли из неанглоязычных стран: Ruby был создан в Японии, Jua — в Бразилии, а Python — в Нидерландах.
Были созданы локализованные версии Python для поддержки различных языков. Возможно, вы захотите попробовать некоторые упражнения для начинающих в реализациях Python, отличных от английского, таких как Teuton (немецкий), китайский Python (китайский), Sawa (яванский) или Setonas (литовский). Некоторые задачи для начинающих могут включать в себя изучение того, как сортировать список, как использовать словари или как инвертировать строку.
Ниже приведена таблица с некоторыми примерами ключевых слов в Python и описанием того, как они были локализованы на немецкий и китайский языки.
Когда используются неанглийские языки программирования?
Большинство программистов во всем мире работают на английском языке, но локализованные реализации некоторых языков могут использоваться для конкретных образовательных или деловых целей. (Например, Teuton — это немецкая реализация Python.)
Некоторые языки программирования были созданы для развлечения и используют неанглийские символы, такие как языки-шутки, перечисленные здесь. Возможно, вы слышали о некоторых из наиболее известных, таких как * или 2D-Reverse.
Неанглийский язык программирования, широко используемый в России и набирающий популярность во всем мире, — 1С. Этот русский язык программирования используется в бизнес-приложениях, таких как ERP (планирование ресурсов предприятия), POS (точки продаж) и WMS (система управления складом). Платформа разработки 1С называется 1С:Предприятие.
Программисты, использующие 1С, могут переключаться между английскими и русскими ключевыми словами. Вот несколько простых английских ключевых слов, используемых для условных операторов, а также их аналоги в кириллице.
Вот скриншот редактора скриптов 1С:Предприятия. Это основное рабочее пространство для разработчиков.
Источник изображения: 1C:EDTЯзыковые пакеты и языки интерфейса
Интегрированная среда разработки (IDE) — это программный инструмент, помогающий программистам писать программы.
IDE имеют множество функций, включая функции текстового редактора, компилятора и отладчика. Они также предлагают удобный графический интерфейс пользователя (GUI), который позволяет программистам видеть результаты своей работы в режиме реального времени. IDE существуют на разных языках и при необходимости можно легко переключаться между языками интерфейса.
Например, в Visual Studio 2022 вы можете загружать языковые пакеты и переключаться между ними. Эти настройки доступны через Tools > Options > Environment > International Settings.
Языковые параметры Visual Studio 2022В Atom вы просто загружаете пакет языкового меню по вашему выбору, а затем запускаете его.
Пакет французского меню включен в редакторе AtomИзменение языка меню IDE в Eclipse требует еще нескольких шагов, но его языковые пакеты Babel поддерживают несколько десятков языков.
По мере того, как все больше стран внедряют новые технологии, глобальный язык программирования завтрашнего дня может оказаться чем-то другим, а не английским. Имея это в виду, игра с другими языками интерфейса может быть очень практичной идеей — и это также отличный способ добавить немного дополнительного погружения в вашу повседневную жизнь!
Языки программирования с языковыми опциями
Некоторые языки программирования направлены на преодоление языковых барьеров за счет предоставления встроенных «локализованных языков программирования». Ожидается/предлагается другой синтаксис в зависимости от языка, на котором пользователь указывает, что он будет работать.
Например, Citrine специально разработана для пользователей, которые хотят писать сценарии на своем родном языке. Для этого команда принимает помощь от переводчиков, которые помогают с такими вещами, как перевод руководства пользователя и внесение изменений в локализацию синтаксиса Citrine. Однако в настоящее время Citrine в основном приходится полагаться на машинный перевод.
Этот язык программирования является объектно-ориентированным и имеет заметное сходство с Smalltalk и Self. Citrine очень прост в освоении, поэтому написание простой программы может стать хорошим упражнением на вашем пути к изучению нового языка.
Работа программистом по всему миру
Если вы программист, нанятый компанией в неанглоязычной стране, или если вы являетесь цифровым кочевником в такой стране, вы, скорее всего, должны общаться с вашей командой на другом языке. Естественно, если ваша команда говорит на языке, который вы не понимаете, вам может быть трудно следить за тем, что происходит.
Англоговорящим повезло, потому что английский в настоящее время является универсальным языком программирования. Считается лучшей практикой, когда код пишется на английском языке, и те, у кого другой родной язык, должны выучить английский язык, чтобы они могли писать и читать код.
Чтобы вам было легче следить за ходом собраний команды, вы можете создать шпаргалку для наиболее распространенных фраз, используемых в программировании. Вам не нужно быть экспертом или свободно владеть другим языком, чтобы понимать код. Пока вы можете распознать ключевые термины, вы можете получить представление о том, что происходит.
Конечно, хотя программирование, скорее всего, будет происходить на английском языке, возможно, что ваш менеджер проекта предпочтет общаться на своем родном языке.
Фото Z / UnsplashКак язык влияет на программный бизнес?
Язык и культура являются основными факторами, формирующими корпоративную культуру и структуру во всем мире. Популярным методом управления рабочим процессом, используемым в разработке программного обеспечения Agile и DevOps, является Канбан. Этот термин происходит от 看板 (かんばん; канбан ), что в переводе с японского означает «знак».
Созданный Тайити Оно, японским инженером-технологом Toyota, Канбан начинался как метод бережливого производства. Несмотря на то, что система планирования «Канбан» долгое время была нарицательным среди производственных кругов, совсем недавно она была принята командами разработчиков программного обеспечения по всему миру.
Согласно отчету Gitlab за 2021 год, наиболее часто используемой (по самооценке) методологии разработки является DevOps (35,9% опрошенных), за которой следует Agile/Scrum (31,78%). 13,02% респондентов сообщили об использовании канбана в качестве конкретной реализации.
Различия в рабочей культуре по всему миру
Вы нашли работу в другой стране? Большой! Вот несколько быстрых советов, предназначенных для рабочих сред по всему миру.
Япония
Избегайте прямых вопросов начальства: это считается грубым и, как правило, неприемлемым. Вы также должны установить взаимопонимание со своей командой, прежде чем предлагать какие-либо серьезные изменения. Если вы совершили ошибку, не ищите оправданий. Вместо этого возьмите на себя ответственность и извинитесь за обиду.
Вы можете попробовать посмотреть некоторые японские дорамы, чтобы увидеть некоторые из этих рабочих привычек в действии.
Китай
Основными аспектами китайской культуры труда являются усердие и трудолюбие.
Китай отказывается от своей печально известной культуры работы 996 (с 9:00 до 21:00, шесть дней в неделю), а китайское трудовое законодательство утверждает, что работники не должны превышать восьми часов в день. Несмотря на это, по-прежнему принято работать сверхурочно. Вам также придется посещать рабочие собрания в нерабочее время, чтобы сохранить лицо.
Франция
Сотрудники обычно дружно приветствуют друг друга по утрам; кроме того, упор делается на дружеские и непринужденные беседы. Более длительные перерывы приветствуются и являются нормой, но в результате рабочий день иногда продлевается до вечера. Не удивляйтесь, если ваш французский босс возьмет двухчасовой обеденный перерыв!
Германия
Рабочий день начинается рано. Дети начинают ходить в школу примерно с 7:30 до 8:00, поэтому вполне естественно, что работа тоже начинается рано. В Германии высоко ценятся эффективность и пунктуальность.
Если вы опоздаете на встречу или превысите отведенную продолжительность встречи, вы, скорее всего, оскорбите и разозлите своих коллег.
Россия
Дресс-код в России обычно довольно формальный и консервативный. Акцент также сделан на пунктуальности. В России иерархия является ключевым элементом как на рабочем месте, так и вне его: социальный статус человека определяется возрастом, занимаемой должностью и опытом.
Тем не менее, российские компании по-прежнему призывают сотрудников сообщать о своих проблемах.
Индия
Пунктуальность не так важна при работе в Индии. Часто люди приходят на работу поздно и работают до поздней ночи.
Иерархии, однако, важны. Нужно уважать тех, кто занимает более высокие должности. Для менеджера было бы необычно обедать с подчиненными ниже его по служебной лестнице.
В заключение
Если вы работаете на языке, которого не понимаете, может быть трудно понять, на что вы смотрите. Это особенно верно, когда встречи и инструкции проводятся на другом языке. Таким образом, даже если вам не нужно изучать другой язык, чтобы изучать программирование, все же полезно знать язык страны, в которой вы надеетесь работать.
Хотя в настоящее время английский язык является лингва-франка в мире программирования, ситуация может измениться по мере того, как в неанглоязычных странах будет разрабатываться больше основных технологий.
Николас Рубрайт Нужно быстро выучить язык?- Преимущества владения несколькими языками: 10 самых важных языков для бизнеса
- Этот забытый трюк беглой речи использовался тысячи лет
- Советы по изучению языка при загруженном графике
- Следуйте за нами на YouTube / Instagram / Facebook
Подписаться на блог Глоссика
Получайте последние сообщения прямо в свой почтовый ящик
Алгол 68 – 25 лет в СССР.
Российский виртуальный компьютерный музейГлавная → Статьи → Алгол 68 – 25 лет в СССР
Буленков М.А., Рар А.Ф., Терехов А.Н. доктора Ершова в 1966. Возникли тогда в России три очага, в которых внимательно наблюдали за текущей работой группы ван Вейнгардена. Это группа доктора Ершова в Новосибирске, доктора Лаврова в Подлипках Московской области, доктора Левинсона в Москве. В этих местах стали присылать многочисленные замечания по языку и учитывать его русскую терминологию. Процесс перевода отчета об Алголе 68 на русский язык настолько тесно следовал за процессом его обновления на английском языке, что и сам Отчет, и его русский перевод [1] были изданы в одном и том же 19-м году.69.
Еще до этого, в феврале 1968 г., первые лекции по новому языку были проведены в Бакуриани, Грузия, на специальной Зимней школе по алголу 68.
В дальнейшем распространение языка в СССР было заметным, но ограниченный. Группы ярых приверженцев Алгола 68 появились в Киеве, Харькове (Украина), Ижевске, Казани, Томске, Бердске и других городах России. Наиболее сильной и плодотворной из этих групп была группа Ленинградского государственного университета. В течение многих лет Алгол 68 был основным языком программирования, изучаемым на курсе информатики в Ленинградском университете. Ленинградские реализации Алгола 68 будут обсуждаться позже. Но все эти алгольские острова были редкостью в океане Фортрана, а позднее и в морях Паскаля, Модулы, Ады.
Начиная с 1976 г. начала действовать официальная национальная организация по Алголу 68, под чьим наблюдением находились перевод Пересмотренного отчета, издание литературы, тестирование и принятие на вооружение компиляторов. До 1982 г. этот орган назывался «Научно-техническая комиссия» и возглавлялся А. П. Ершовым. В последнее время он стал «Рабочей группой» во главе с Г. С. Цейтиным. Последняя сессия группы состоялась в 1988 году, на которой был принят национальный стандарт Алгола 68. С тех пор не было предпринято никаких попыток созвать новую сессию Группы.
Наша первая публикация Отчета, о которой говорилось выше, была двуязычной. В нем был весь текст Доклада со всеми прагматическими замечаниями и картинками Винни-Пуха. Работа над русским переводом и особенно кропотливая работа по преобразованию синтаксических и метасинтаксических правил в русскую форму породили соображения о том, как формализовать правила создания национальных вариантов Алгола 68. Методы построения синтаксических и метасинтаксических схем Алгола 68 также учитывались, и к публикации прилагались правильно оформленные диаграммы. Обе эти проблемы стали темами доклада, представленного на Рабочей конференции «Внедрение Алгола 68», которую ИФИП провел в Мюнхене 19 июля.70 [2]. Соображения по построению национальных вариантов были учтены авторами Доработанного отчета, и соответствующие предложения были частично включены в этот Отчет.
Перевод Доработанного отчета был выполнен не так быстро, как в случае с предыдущим Отчетом. Он постоянно и тщательно создавался одним автором, а не четырьмя, но под неусыпным надзором национальной комиссии по Алголу 68, и окончательный результат был опубликован только в 1980 [3].
После этого в нашей стране публикаций по Алголу 68 было немного. Можно упомянуть переводы «Неофициального введения» Ч. Х. Линдсея и С. Г. ван дер Меулена [4] и «Практического руководства» Ф. Г. Пагана [5]. Что касается оригинальных книг по языку, то можно упомянуть краткие описания А. Н. Маслова [6], В. А. Васильева [7], а также «Введение в Алгол 68» А. Н. Терехова. Последняя входит в состав книги. с описанием Ленинградского компилятора [8].
Как было сказано ранее, национальный Стандарт Алгола 68 был принят в 1988 году. Текст этого Стандарта был текстом русского перевода Пересмотренного Отчета с небольшими изменениями по форме, но не по существу. В то же время был принят другой национальный стандарт, а именно «Стандарт расширенного Алгола 68». В этом документе использованы предложения ИФИП по модулям и раздельной компиляции, а также предложения Г. С. Цейтина по обработке исключений.
Сложность Алгола 68, присущая ему, способствовала тому, что язык был вложен преимущественно в академическую и университетскую среду и не нашел большой поддержки в отрасли. Существовала опасность, что Алгол 68 мог стать объектом чисто математических исследований со всей присущей им тщательностью. Члены Рабочей группы ясно осознавали эту проблему и уделяли значительное внимание практической реализации Алгола 68 как основного пути его распространения. Не было ни одного заседания группы, на котором не были бы опущены проблемы языковой реализации.
Было несколько попыток внедрить Алгол 68 в СССР. По некоторым причинам, о которых будет кратко сказано ниже, уцелела только одна из них, а именно ленинградская, но она получила действительно широкое распространение.
Одна из первых реализаций Алгола 68 была сделана на Киевском компьютерном заводе в конце семидесятых годов для компьютеров Сименс. Его авторы — С. И. Штительман, М. Г. Штейнбух, Л. А. Макогон. Реализация была ориентирована на систему управления информацией под названием «СТАРТ», для которой Алгол 68 был единственным используемым языком. Авторов проекта Алгол 68 интересовал прежде всего как источник языка базы данных. Киевская реализация предвосхитили многие особенности современных языков такого типа: постоянные объекты, развитую систему типов, ортогональный дизайн, большую долю интерпретативности и т. д. Система типов и ортогональность были фактически обусловлены самим Алголом 68, но сохраняемость особенность потребовала некоторых исправлений языка, а именно введена «вечная блокировка», предназначенная для сохранения между выполнениями программы тех объектов, которые могут использоваться другими программами. Фактически это была база данных. Некоторые другие вариации также были сделаны без каких-либо усилий по стандартизации для Алгола 68: все массивы считались гибкими, управляющая переменная цикла была длинной int, а не int, комплексные значения отсутствовали и т.д. Принят Рабочей группой в 1979 этой системы больше не существует из-за замены оборудования на заводе.
В то же время Алгол 68 реализовывался на основе архитектуры DEC. Эта реализация выполнялась под руководством доктора М. Левинсона. Несмотря на незавершенность, он привнес в технику реализации несколько оригинальных идей. Основное отличие этой реализации заключалось в проверке области действия: время жизни любого объекта не ограничивалось временем выполнения блока, в котором объект был объявлен.
Реализация компилятора Алгола 68 для ЭВМ «Эльбрус» была разработана Бролем В.В., Гущиным В.М., Яковлевым В.Б. (Москва). Исходным языком является полный Алгол 68, определенный Ревизским отчетом и расширенный некоторыми средствами работа с модулями.Компилятор обеспечивает хорошее качество объектного кода, достаточно полную диагностику ошибок.Хорошо использует сходство между основными понятиями Алгола 68 и архитектуры и операционной системы «Эльбрус». Компилятор был принят национальной рабочей группой в 1985. Ленинградская группа активно участвовала в испытаниях этого компилятора. Около десяти крупных пакетов приложений, разработанных в Ленинградском университете, были почти без проблем перенесены на «Эльбрус». Но трагедия компилятора «Эльбруса» заключалась в том, что это были практически единственные живые программы, которые он обрабатывал.
Перспективный «проект БЕТА» в Новосибирске, в первую очередь разработанный докторами А. П. Ершовым, М. Шварцманом, А. А. Бэрсом, был предназначен для почти автоматического создания компиляторов на основе языковых описаний, и в его основе лежали Algol 68, PL/I и Simula 67. первые цели [9]. Система действительно создана, но не в том виде, о котором задумывалась изначально, а языки, которые она сейчас охватывает, — Simula 67, Pascal (эти языки реализуются Г. Г. Степановым и С. Б. Покровским), Modula 2 (Л. А. Захаров), подмножество Ada (S.V. Ten), но не Algol 68 или PL/I [10]. Тем не менее, концепции Алгола 68 были использованы в системе БЕТА для создания как универсальной схемы компиляции, так и внутреннего языка.
Наибольшее развитие получили работы по реализации Алгола 68 в Ленинградском университете, в группе под руководством д.б.н. Г.С. Цейтина и д.б.н. А.Н. Терехова. В первую очередь эти работы были согласованы с работой над системой БЕТА в рамках стратегии, разработанной Рабочей группой. Предполагалось, что ленинградская группа создаст отладочный компилятор, этакий авангард, призванный завоевать новые области приложения основных сил, а именно базовый компилятор, который будет построен в Новосибирске. Естественно было предположить, что любая прикладная программа, отлаживаемая ленинградским компилятором, должна работать на новосибирском компиляторе без необходимости модификации.
Как уже было сказано, ленинградский проект изначально был ориентирован на практическое применение, что определило как его принципиальные решения, так и его историю.
Первая версия Ленинградского компилятора была завершена к 1976 году. Его анализирующая часть была написана на Алголе 60 и работала на ЭВМ ОДРА 1204. Его генераторная часть была написана на Макроассемблере и работала на мейнфрейме IBM.
После этого весь компилятор был переписан на Алголе 68 и расширен: каждая процедура компилятора (их более 1000) переведена на ODRA с Алгола 68 на промежуточный язык (IL), полученная перфолента ввода на компьютер IBM и переведены из IL в объектный код IBM. Перевод средней процедуры занимал 10 минут на ODRA и 20 минут на IBM. Поскольку отладка этих процедур требовала их повторной модификации и перекомпиляции, затраты времени были еще больше. Результатом этого процесса начальной загрузки стал резидентный компилятор, который компилировал каждую процедуру за 2-3 минуты.
В 1978 году была сделана первая начальная загрузка, и получившийся компилятор был предоставлен множеству пользователей в различных областях (математическая физика, радарная техника, моделирование). Сразу после этого началась вторая загрузка. В этот момент разработчики осознали необходимость библиотечных прелюдий и отдельной компиляции процедур. Поэтому в Algol 68 была добавлена новая конструкция, которая оказалась чем-то вроде гнезда, еще не известного авторам.
Потребовались большие усилия для оптимизации вызовов процедур. Размер кода уменьшен с 16 до 6 байт на вызов. Для сравнения, компилятор PL/I-F выполняет 150 команд за вызов, а оптимизирующий PL/I — 30 команд. Десять лет спустя возникла идея изменить направление стека, что обеспечило значительное сокращение кода для вызовов процедур.
Вторая загрузка была завершена до 1979 года, и эта версия просуществовала более 10 лет с минимальными изменениями. В то время проектировщики были заняты в основном технологией программирования, так как оказалось, что Алгол 68 слишком сложен для того, чтобы быть языком для простых задач, а для больших задач (например, реального времени) не хватает только языковых возможностей. Но проблемы компиляции не были забыты: был собран десяток кросс-компиляторов для различных специализированных компьютеров, усовершенствована методика оптимизации, компилятор интегрировался с другими техническими средствами.
В этот момент стало ясно, что появление базового компилятора крайне маловероятно. Поэтому в компилятор Ленинград был включен новый проход, а именно проход оптимизации. В отличие от того, что было запланировано в проекте БЕТА, компилятор Ленинграда использовал только локальные оптимизации, потому что введение глобальной оптимизации потребовало бы значительного пересмотра структуры компилятора. Позже статистика показала, что даже среди всех локальных оптимизаций наиболее эффективными являются только две из них — для передачи параметров и для индексации массива.
В некотором смысле реализация Algol 68 подорвала социальную основу глобальной оптимизации: в большинстве случаев результаты глобальной оптимизации могут быть выражены на одном языке.
В 1980 году в Ленингардскую группу обратилось научно-производственное объединение «Красная Заря» (крупнейшее предприятие по производству телефонов в СССР) с предложением о сотрудничестве в программировании большого класса задач управления и связи и, в В частности, на разработку функционального программного обеспечения для телефонных станций, управляемых специализированными компьютерами.На то, чтобы вникнуть в специфику новой области, разработать опытные реализации и решить организационные вопросы, потребовалось несколько лет.Ленинградская группа убедилась в своих предыдущих опыта, что использование языков программирования высокого уровня абсолютно необходимо. Однако начинать их нужно было с повышения культуры программирования прикладных программистов.Это было вызвано тем, что традиционно в области встроенных компьютеров для разработки программного обеспечения реального времени с -используется стандартная архитектура, ориентированная на предметную область (на самом деле не очевидно, какой должна быть эта ориентация. Например, если специализированный компьютер хорошо выполняет некоторые специальные операции, но плохо работает с ветвлениями и вызовами процедур, которые встречаются в тысячи раз чаще, чем специализированные операции, то можно ли считать его ориентированным на эту прикладную область?). Нестандартная архитектура и небольшое количество специализированных компьютеров приводят к отсутствию достаточно развитых операционных систем, компиляторов, отладчиков и других общепринятых средств программирования. Так что группе пришлось иметь дело с перфокартами и коммутаторами.
В короткие сроки были разработаны новые кросс-ассемблер и интерпретатор, которые вместе с системой документации и некоторыми сервисными программами составили основу первой промышленной технологической системы на Алголе 68 и интенсивно использовались сотнями прикладных программистов. Естественно, технология была весьма ограниченной, но все же популярной по следующим объективным причинам:
- Вместо специализированных компьютеров использовался общедоступный мэйнфрейм с широким набором сервисов.
- Богатые средства отладки интерпретатора, невозможные на специализированном компьютере.
- Осознание прикладными программистами необходимости документации и простоты ее подготовки, исправления и копирования в новой среде.
- Практически неограниченные возможности для развития технологии. Это было на удивление быстро принято прикладными программистами и дало обратную связь идеям и предложениям.
В настоящее время Ленинградская группа имеет большой опыт использования Алгола 68 в различных прикладных областях. Компилятор A68LGU, используемый в качестве средства реализации, имеет вполне удовлетворительные характеристики надежности, времени компиляции и качества объектного кода. Однако недавно авторы Алгола 68 предложили новые интересные расширения языка, касающиеся модульности, раздельной компиляции и обработки исключений. С другой стороны, оказалось, что компилятор A68LGU плохо подходит для включения новых технологических средств, которые не были предусмотрены проектом, т.е. отладка с точки зрения исходного текста. В ходе длительной эксплуатации компилятора были обнаружены и другие мелкие недостатки (например, слишком узкий диапазон целых чисел), а также более серьезные ошибки, такие как неправильное выделение памяти в некоторых случаях. Это привело к решению разработать новую систему программирования, которая получила название WBC.
Отличительными чертами новой системы программирования являются целостность и интерактивный стиль работы. Он имеет специальные средства для контроля конфигурации и поддержки разработки крупных проектов. Еще одной особенностью системы WBC является ее одновременная ориентация на несколько компьютеров (мейнфрейм IBM, архитектура DEC, CAMCOH, PS 1001, ПК-совместимые и некоторые специализированные компьютеры). На базе компилятора A68LGU реализовано несколько кросс-компиляторов. Был опыт портирования компилятора на разные компы. Сам факт того, что большая часть компилятора написана на Алголе 68, наводит на мысль о его переносимости. Однако реальное портирование оказалось намного сложнее. Необходимо было реорганизовать всю структуру компилятора и его динамического окружения, точно указать части, зависящие от аппаратного обеспечения или операционной системы, унифицировать механизмы связи. Интерфейс с таблицами компилятора был задан таким образом, что различные блоки, реализующие интерфейс, были возможны даже на одном и том же компьютере в зависимости от задач конкретного компилятора.
Все компиляторы систем WBC имеют следующие общие компоненты и особенности:
- синтаксис промежуточных языков;
- структура таблиц компилятора и процедуры доступа;
- программ независимого и зависимого от режима анализа, фрагменты фазы оптимизации, генерации листинга, отладчика и монитора;
- алгоритмов распределения памяти и регистров;
- техника кодогенерации; поддержка
- во время выполнения, включая процедуры ввода/вывода;
- способ выбора вариантов компиляции языковых конструкций;
- Algol 68 в качестве языка реализации.
Такая унификация делает систему открытой для расширения на другие компьютеры, а прогресс на пути от мэйнфреймов IBM к архитектуре DEC, к CAMCOH, к IBM PC и т.д. может быть оправданием для этого.
Литература
- Отчет об алгоритмическом языке Алгол 68, русский перевод А. А. Бэрса, А. П. Ершова, А. Ф. Рара и Л. Л. Змиевской. «Кибернетика», Киев, часть 6 из 1969 и ч. 1 от 1970 г.
- А. А. Бэрс, А. П. Ершов, А. Ф. Рар. Об описании синтаксиса Алгола 68 и его национальных вариантов. В: «Реализация Алгола 68», под редакцией Дж. Э. Л. Пека, NH Publ. Co., Амстердам-Лондон, 1971.
- Пересмотренный отчет об алгоритмическом языке Algol 68. А. ван Вейнгаарден, Б. Дж. Майлу, Дж. Э. Л. Пек, Ч. А. Костер, М. Синцов, Ч. Х. Линдси, Л. Г. Л. Т. Меертенс и Р. Г. Фискерс (ред.). Русский перевод А. А. Берса, издательство «МИР», Москва, 1980.
- Ч. Х. Линдси и С. Г. ван дер Меулен. Неформальное введение в Алгол 68. Русский перевод Л. Лейфмана, Издательство «МИР», Москва, 1977.