Оберон - это Модула-2 с наследованием типа. А сама Модула-2 - это Паскаль с модулями/пакетами. А Паскаль - это Алгол-60 с указателями и записями. Где уникальность Оберона? Это все было в других языках.
Уникальные языки: Фортран, Алгол-58 (предшественник Алгол-60, не путать с Алгол-68), Симула-67 (классы до C++), Лисп (списки), Пролог (ленивая эвалюация), ( . . .), Snobol (шаблоны), Форт (стековая машина с минимализмом), Occam (каналы для многопроцессорных систем) и т.д.
Немного о персоналиях:
= Фёдор Васильевич Ткачёв (1956—2021) — российский физик-теоретик, доктор физико-математических наук (с 2003 года), ведущий научный сотрудник отдела теоретической физики Института ядерных исследований РАН. Он был разработчиком элементов теории многопетлевых вычислений в квантовой теории поля, что является значительным вкладом в современную теоретическую физику. Кроме того, Ткачёв был основателем проекта ИНФОРМАТИКА-21.
Его научные методы и результаты получили признание на мировом уровне и продолжают использоваться в современной физике элементарных частиц. Ткачёв оставил заметный след в области квантовой теории поля и теоретической физики в целом. =
У него, как и у Вас Юрий, был широкий спектр интересов.
Позволю себе процитировать Фёдора Васильевича ( предисловие (?) "О новой версии классического учебника Никлауса Вирта" к книге Вирт Н. Алгоритмы и структуры данных. Новая версия для Оберона + CD / Пер. с англ. Ф. В. Ткачев. – М.: ДМК Пресс, 2010. – 272 с.: ил. ISBN 978-5-94074-584-6.):
= Оберон – последний большой проект Никлауса Вирта, выдающегося инженера, ученого и педагога, вместе с Бэкусом, А. Ершовым, Дейкстрой, Хоаром и другими пионерами компьютерной информатики превратившего программирование в систематическую дисциплину и лучше всего известного созданием серии все более совершенных языков программирования – Паскаля (1970), Модулы-2 (1980) и, наконец, Оберона (1988, 2007). В этих языках отражалось все более полное понимание проблематики эффективного программирования. Языки эти сохраняют идейную и стилевую преемственность, и коммерсант, озабоченный сохранением доли рынка, не назвал бы их по-разному =
В другой статье Ф.В. Ткачёва, указывается, что имеет смысл говорить о Pascal-70, Pascal-80, Pascal-88.
И, собственно, про уникальность:
-- известный эксперимент в "Pascal-88" ( иллюстрация - с OpenNet.Ru) :
= FOR есть :Pascal (1970) FOR есть :│ FOR есть :└─→ Modula (1975) FOR есть : │ FOR есть : └─→ Modula-2 (1978-1980) FOR есть : │ FOR-а нет: ├─→ Oberon (1988) FOR есть : │ │ FOR есть : │ └─→ Oberon-2 (1991) FOR есть : │ │ FOR есть : │ ├─→ Component Pascal (1994) FOR есть : │ ├─→ Active Oberon (1998) FOR есть : │ └─→ Oberon-07 (2007) FOR есть : │ FOR есть : └─→ Modula-3 (1988) =
-- одна из областей применения "Pascal-80":
Язык программирования Modula-2 успешно применялся для разработки бортового программного обеспечения спутников, в частности в СССР и, позднее, России. Он был выбран для создания ПО спутников в рамках проекта ГЛОНАСС и других спутников связи и навигации, разрабатываемых ОАО «Информационные спутниковые системы» имени академика М.Ф. Решетнёва [1] [2] [4].
Основные факты и контекст применения Modula-2 в космической сфере:
Первая попытка применения Modula-2 для бортового ПО спутников была сделана в НПО ПМ (подмосковный Зеленоград) в конце 1980-х — начале 1990-х годов в сотрудничестве с Институтом систем информатики СО РАН (Новосибирск) [2].
Выбор Modula-2 был обусловлен его простотой, надежностью, строгой типизацией и структурированностью, что важно для долговременного сопровождения ПО спутников с длительным сроком эксплуатации (10-15 лет) [2].
На Modula-2 написано всё бортовое программное обеспечение, включая операционную систему реального времени, среду программного управления и подсистемы спутника. Объём кода превышает 90 000 строк, в разработке участвует несколько десятков программистов [2].
Программное обеспечение для спутников ГЛОНАСС-М и серии спутников связи «Экспресс-АМ» создавалось на Modula-2, что подтверждается более чем десятилетним опытом эксплуатации [4].
Modula-2 обеспечивает высокую переносимость программ, что позволяет использовать один и тот же код на разных бортовых вычислительных машинах, а также удобство тестирования и отладки [2] [4].
В настоящее время Modula-2 продолжает использоваться для программирования бортового ПО российских спутников связи, что подтверждается включением компилятора GNU Modula-2 в состав GCC и современными проектами [1] [5].
Таким образом, Modula-2 применяется в России для разработки бортового программного обеспечения спутников, в частности в проектах ГЛОНАСС и спутников связи, начиная с конца 1980-х годов и по настоящее время, благодаря своим техническим достоинствам и надёжности [1] [2] [4] [5].
Не совсем понятно, почему Вы беспокоитесь о перезагрузках серверов или СУБД: обе СУБД способны работать в кластере. Соответственно, перезагружать узлы можно когда угодно.
Согласен, тем более что с 1978 года begin зачастую не нужен: while i < j do ·····var ··········temp := arr[i]; ·····begin ··········arr[i] := arr[j]; ··········arr[j] := temp; ·····end; ·····Inc(i); ·····Dec(j); end;
Синтаксис -- условный: нижний регистр из DECWRL Modula-2, объявление "по месту" из Modula-3
P.S. "·····" -- борьба с "улучшенным" режимом редактирования Хабра. Исправлю, если расскажите, как жить без них... Спасибо!
Пример с ELSIF и ( см."VAR j") объявлением переменной "по месту" в стиле Ada ( это же с WITH в примере с Heapsort) :
PROCEDURE GetData (alg: T) RAISES {Thread.Alerted} =
VAR
rand := NEW (Random.Default).init ();
BEGIN
WITH a = alg.a, N = alg.N, input = alg.data DO
N := FormsVBT.GetInteger(input, "data");
IF FormsVBT.GetBoolean(input, "increasing") THEN
FOR i := 1 TO N DO a[i] := i; END;
ELSIF FormsVBT.GetBoolean(input, "decreasing") THEN
FOR i := 1 TO N DO a[i] := N - i + 1; END;
ELSE
FOR i := 1 TO N DO alg.a[i] := i; END;
FOR i := N TO 2 BY -1 DO
VAR j := rand.integer (1, i); t := a[i];
BEGIN a[i] := a[j]; a[j] := t; END;
END;
END;
a[0] := 0;
a[N + 1] := N + 1;
SortIE.Init(alg, N, alg.passes());
FOR i := 1 TO N DO SortIE.SetVal(alg, i, a[i]); END;
END
END GetData;
Вложенные процедуры, LOOP + EXIT, FOR с "STEP -1", исключения ( RAISES):
(***************************** Heapsort *****************************)
PROCEDURE HeapNew (): Algorithm.T =
BEGIN
RETURN NEW(
HeapSort,
defaultN := 400,
data := ZeusPanel.NewForm("SortData.fv")).init()
END HeapNew;
PROCEDURE HeapPasses (alg: HeapSort): CARDINAL =
BEGIN
RETURN alg.N + alg.N DIV 2
END HeapPasses;
PROCEDURE HeapRun (alg: HeapSort) RAISES {Thread.Alerted} =
VAR H: INTEGER;
PROCEDURE SiftDown (k: CARDINAL) RAISES {Thread.Alerted} =
VAR j: CARDINAL; v: Sort.Key;
BEGIN
WITH a = alg.a DO
v := a[k];
LOOP
IF (k > H DIV 2) THEN EXIT; END;
j := k + k;
IF (j < H) THEN
IF a[j] < a[j + 1] THEN j := j + 1; END;
END;
IF v >= a[j] THEN EXIT; END;
SetVal(alg, k, a[j]);
k := j;
END;
SetVal(alg, k, v);
END
END SiftDown;
BEGIN
GetData (alg);
WITH N = alg.N DO
H := N;
FOR k := N DIV 2 TO 1 BY -1 DO
SortIE.StartPass(alg);
SiftDown(k);
END;
ZeusPanel.Pause(alg, "Heap made; ready to sort...");
FOR k := N TO 2 BY -1 DO
SortIE.StartPass(alg);
SwapElts(alg, 1, H);
H := H - 1;
SiftDown(1);
END;
END
END HeapRun;
Как проходивший "допуски и посадки", примерно за год до начертательной геометрии на 3-ем или 4-ом курсе ( код специальности - 22.04 ) и обладатель ГДР-овской железной дороги, возьму на себя смелость утверждать, что это излишне: паровозик повезёт три пассажирских вагончика даже "при расширенном диапазоне качества" строительных работ.
Отчасти, напоминает задачу из статьи Э.Дейкстры, любезно опубликованной в книге "Простое и сложное в программировании". И реакцию на ход её решения представителей разных профессий, в том числе "чистых математиков".
Репост ( с любезного разрешения автора) начала обсуждения статьи в T-m «чате» по Ada:
В Алголе 68 были ограничения, (...). В Паскале — нет.
Сергей Дюков:
Вирт вышел из группы разработки языка Алгол 68, потому что был не согласен с концепцией формального описания языка через бесконечную контекстно-зависимую грамматику. Там получалось всё очень сложно и очень непонятно. Авторы формального описания языка Алгол 68 утверждали, что выбранная ими КЗ-грамматика позволяет описывать семантику языка, но это было далеко не так. После подстановки МЕТА-лексем в МЕТА-правила получалась КС-грамматика и при автоматизации построения компилятора почти вся семантическая информация терялась. Исходная КЗ-грамматика давала лишь некую гибкость построения промежуточной КС-грамматики. Например это позволяло выбрать естественный язык для набора ключевых слов, выбрать символы либо ключевые слова для операторных скобок, выбрать символы для индексных скобок и т.д., то есть выбрать и настроить лексику языка.
В связи с сложностью формального описания язык Алгол 68 в Америке популярности не получил.
В СССР вышла книга «Неформальное введение в язык программирования АЛГОЛ68», в которой, по сути, была описана грамматика языка после подстановки набора МЕТА-лексем в МЕТА-правила и, главное, была описана реальная семантика конкретного варианта языка Алгол68. Благодаря этой книге, Алгол68 в СССР был довольно популярен.
Вирт создавал язык ПАСКАЛЬ как язык обучения студентов программированию, как регулярной дисциплине. Формальное описание языка получилось очень компактным и понятным. Можно сказать — просто гениальным! Этот язык был скорее развитием языка АЛГОЛ60.
Из-за навязчивых вопросов и предложений (в основном бывших студентов), Вирт, буквально через два года, создал для системного программирования язык MODULA. Вот его можно назвать неким развитием АЛГОЛ68. Его описание было также компактным, простым и понятным. Для описания синтаксиса Вирт применил синтаксические диаграммы.
Язык МОДУЛА ( В.В.М.: Modula, 1975г.) описан в книге Янга «Алгоритмические языки реального времени».
В СССР язык Modula-2 был довольно популярным.
«A Superscalar Out-of-Order x86 Soft Processor for FPGA» Henry Wong, Ph.D. Thesis, University of Toronto, 2017
We have shown in this thesis the design of an out-of-order soft processor
that achieves double the singlethreaded (wall-clock) performance of
a performance-tuned Nios II/f (2.2x on SPECint2000) at a cost of 6.5 times the area of
the same processor. This area is about 1.5% of the largest Altera (Stratix 10) FPGA.
We presented a methodology for simulating and verifying the microarchitecture of
our processor, which we used to design a microarchitecture that is sufficiently complete and correct
to boot most unmodified 32-bit x86 operating systems. We showed that the FPGA substrate differences
from custom CMOS do affect processor microarchitecture design choices, such as our use of a physical
register file organization, low-associativity caches and TLBs, and a relatively large TLB. The
resulting microarchitecture did not require major microarchitectural compromises to fit an FPGA
substrate, and remains a fairly conventional design. As a result, the per-clock performance of our
microarchitecture compares favourably to commercial x86 processors of similar design. Our two-issue
design has slightly higher perclock performance than the three-issue out-of-order Pentium Pro (1995)
and slightly less than the newer two-issue out-of-order Atom Silvermont (2013).
Немного о персоналиях:
=
Фёдор Васильевич Ткачёв (1956—2021) — российский физик-теоретик, доктор физико-математических наук (с 2003 года), ведущий научный сотрудник отдела теоретической физики Института ядерных исследований РАН. Он был разработчиком элементов теории многопетлевых вычислений в квантовой теории поля, что является значительным вкладом в современную теоретическую физику. Кроме того, Ткачёв был основателем проекта ИНФОРМАТИКА-21.
Его научные методы и результаты получили признание на мировом уровне и продолжают использоваться в современной физике элементарных частиц. Ткачёв оставил заметный след в области квантовой теории поля и теоретической физики в целом.
=
У него, как и у Вас Юрий, был широкий спектр интересов.
Позволю себе процитировать Фёдора Васильевича ( предисловие (?) "О новой версии классического учебника Никлауса Вирта" к книге Вирт Н. Алгоритмы и структуры данных. Новая версия для Оберона + CD / Пер. с англ. Ф. В. Ткачев. – М.: ДМК Пресс, 2010. – 272 с.: ил. ISBN 978-5-94074-584-6.):
=
Оберон – последний большой проект Никлауса Вирта, выдающегося инженера, ученого и педагога, вместе с Бэкусом, А. Ершовым, Дейкстрой, Хоаром и другими пионерами компьютерной информатики превратившего программирование в систематическую дисциплину и лучше всего известного созданием серии все более совершенных языков программирования – Паскаля (1970), Модулы-2 (1980) и, наконец, Оберона (1988, 2007). В этих языках отражалось все более полное понимание проблематики эффективного программирования. Языки эти сохраняют идейную и стилевую преемственность, и коммерсант, озабоченный сохранением доли рынка, не назвал бы их по-разному
=
В другой статье Ф.В. Ткачёва, указывается, что имеет смысл говорить о Pascal-70, Pascal-80, Pascal-88.
И, собственно, про уникальность:
-- известный эксперимент в "Pascal-88" ( иллюстрация - с OpenNet.Ru) :
=
FOR есть :Pascal (1970)
FOR есть :│
FOR есть :└─→ Modula (1975)
FOR есть : │
FOR есть : └─→ Modula-2 (1978-1980)
FOR есть : │
FOR-а нет: ├─→ Oberon (1988)
FOR есть : │ │
FOR есть : │ └─→ Oberon-2 (1991)
FOR есть : │ │
FOR есть : │ ├─→ Component Pascal (1994)
FOR есть : │ ├─→ Active Oberon (1998)
FOR есть : │ └─→ Oberon-07 (2007)
FOR есть : │
FOR есть : └─→ Modula-3 (1988)
=
-- одна из областей применения "Pascal-80":
Язык программирования Modula-2 успешно применялся для разработки бортового программного обеспечения спутников, в частности в СССР и, позднее, России. Он был выбран для создания ПО спутников в рамках проекта ГЛОНАСС и других спутников связи и навигации, разрабатываемых ОАО «Информационные спутниковые системы» имени академика М.Ф. Решетнёва [1] [2] [4].
Основные факты и контекст применения Modula-2 в космической сфере:
Первая попытка применения Modula-2 для бортового ПО спутников была сделана в НПО ПМ (подмосковный Зеленоград) в конце 1980-х — начале 1990-х годов в сотрудничестве с Институтом систем информатики СО РАН (Новосибирск) [2].
Выбор Modula-2 был обусловлен его простотой, надежностью, строгой типизацией и структурированностью, что важно для долговременного сопровождения ПО спутников с длительным сроком эксплуатации (10-15 лет) [2].
На Modula-2 написано всё бортовое программное обеспечение, включая операционную систему реального времени, среду программного управления и подсистемы спутника. Объём кода превышает 90 000 строк, в разработке участвует несколько десятков программистов [2].
Программное обеспечение для спутников ГЛОНАСС-М и серии спутников связи «Экспресс-АМ» создавалось на Modula-2, что подтверждается более чем десятилетним опытом эксплуатации [4].
Modula-2 обеспечивает высокую переносимость программ, что позволяет использовать один и тот же код на разных бортовых вычислительных машинах, а также удобство тестирования и отладки [2] [4].
В настоящее время Modula-2 продолжает использоваться для программирования бортового ПО российских спутников связи, что подтверждается включением компилятора GNU Modula-2 в состав GCC и современными проектами [1] [5].
Таким образом, Modula-2 применяется в России для разработки бортового программного обеспечения спутников, в частности в проектах ГЛОНАСС и спутников связи, начиная с конца 1980-х годов и по настоящее время, благодаря своим техническим достоинствам и надёжности [1] [2] [4] [5].
Источники:
[1] https://ru.wikipedia.org/wiki/Модула-2
[2] http://www.kronos.ru/about/koltashev
[3] https://habr.com/ru/companies/ua-hosting/articles/391821/
[4] https://cyberleninka.ru/article/n/ispolzovanie-yazyka-programmirovaniya-modula-2-pri-sozdanii-rossiyskih-sputnikov-svyazi-i-navigatsii
[5] https://oberoncore.ru/infobase/modula-2
[6] https://informatika-21.ru/wirth/wirth.htm
Некоторые примеры содержатся и в Преимущества реализации цикла
FOR
в Modula-3Да, прямая интеграция проекта GNU Modula-2 Гая Малли (Gaius Mulley) в состав GCC удобна и для Гая, и для пользователей
В общем-то, вот актуальный вариант для cm3 Modula-3 ( единственная активно поддерживаемая реализация Modula-3):
MODULE Helloutf8 EXPORTS Main;
IMPORT IO;
BEGIN
IO.Put ("ЭКС-ГРАФ? ПЛЮШ ИЗЪЯТ. БЬЁМ ЧУЖДЫЙ ЦЕН ХВОЩ!\n");
IO.Put ("Экс-граф? Плюш изъят. Бьём чуждый цен хвощ!\n");
IO.Put ("экс-граф? плюш изъят. бьём чуждый цен хвощ!\n");
END Helloutf8.
P.S. Искусственный интеллект, кстати, уверен что:
Текущее состояние
Поддержка: Проект поддерживается небольшим сообществом энтузиастов. Основной репозиторий находится на GitHub: CM3 GitHub.
Активность: Периодические обновления (последние коммиты в 2022–2024 гг.)
Поддерживает Linux, MacOS, Windows ( нативно и через Cygwin), BSD.
Генерирует нативный код для различных архитектур (x86, ARM и др.).
Не совсем понятно, почему Вы беспокоитесь о перезагрузках серверов или СУБД: обе СУБД способны работать в кластере. Соответственно, перезагружать узлы можно когда угодно.
Или cluster -а нет?
Бог с ними, "с хромбуками". По крайней мере, на время.
На "Луна-25" MIPS R4000 или "однофамилец" ?
"Детей жалко"
Контрольный вопрос: в элитных частных школах тоже самые дешёвые компьютеры?
P.S. А когда-то на Apple II детей учили новейшему Object Pascal
Согласен, тем более что с 1978 года begin зачастую не нужен:
·····while i < j do
var
··········temp := arr[i];
·····begin
··········arr[i] := arr[j];
··········arr[j] := temp;
·····end;
·····Inc(i);
·····Dec(j);
end;
Синтаксис -- условный: нижний регистр из DECWRL Modula-2, объявление "по месту" из Modula-3
P.S. "·····" -- борьба с "улучшенным" режимом редактирования Хабра. Исправлю, если расскажите, как жить без них... Спасибо!
Это появилось в ноябре 1988 года.
Без излишнего VAR , кстати
Только в Modula-3. И ещё раньше в Ada
Я не совсем понимаю Ваши проблемы.
Например, на какой странице УК написано, что что-либо применять нельзя?
И не являются ли данные запреты прямым ( и наглым) нарушением прав человека? Т.к. сегрегируют людей по странновому ( фактически расовому) признаку?
Т.е. всё разрешилось? И Windows реабилитирован?
Т.к. достаточно взять ту версию ПО, где соблюдается элементарная дисциплина разработки?
С Clarion я работал плотно. Закупили у "Арсис" и CfD 2.X, и обновление до CDD 3.X
Выше ( не вы) писали, что Clarion a) не выжил b) и не выжил именно из-за встроенного в среду языка программирования.
На деле: жив, выходят новые версии и т.п. Соответственно, раз нет события, то нет и его причины.
Так же существует альтернативная реализация -- clarion2java
Если и конкурировал, то с FoxPro.
Ничего сверх-нетрадиционного в ЯП Clarion нет.
Wiki вообще уверена, что это Modula-2 семейство ( не совсем)
Пример с ELSIF и ( см."VAR j") объявлением переменной "по месту" в стиле Ada ( это же с WITH в примере с Heapsort) :
Вложенные процедуры, LOOP + EXIT, FOR с "STEP -1", исключения ( RAISES):
Да, Modula-3 был создан, как раз, тогда. В язык и позже вносились изменения, возможно, относительно давно.
Но сама экосистема и компилятор активно развиваются "прямо сейчас".
} молоток и напильник
Как проходивший "допуски и посадки", примерно за год до начертательной геометрии на 3-ем или 4-ом курсе ( код специальности - 22.04 ) и обладатель ГДР-овской железной дороги, возьму на себя смелость утверждать, что это излишне: паровозик повезёт три пассажирских вагончика даже "при расширенном диапазоне качества" строительных работ.
Отчасти, напоминает задачу из статьи Э.Дейкстры, любезно опубликованной в книге "Простое и сложное в программировании". И реакцию на ход её решения представителей разных профессий, в том числе "чистых математиков".
Насколько помню, достаточно было программировать "по документации".
Часто просто использовали Btrieve.
Но это уже CDD 3.X
Да.
И Clarion всегда, по крайней мере, начиная с Clarion 2.X for DOS умел ( и работал) "по сети".
Сергей Дюков:
Вирт вышел из группы разработки языка Алгол 68, потому что был не согласен с концепцией формального описания языка через бесконечную контекстно-зависимую грамматику. Там получалось всё очень сложно и очень непонятно. Авторы формального описания языка Алгол 68 утверждали, что выбранная ими КЗ-грамматика позволяет описывать семантику языка, но это было далеко не так. После подстановки МЕТА-лексем в МЕТА-правила получалась КС-грамматика и при автоматизации построения компилятора почти вся семантическая информация терялась. Исходная КЗ-грамматика давала лишь некую гибкость построения промежуточной КС-грамматики. Например это позволяло выбрать естественный язык для набора ключевых слов, выбрать символы либо ключевые слова для операторных скобок, выбрать символы для индексных скобок и т.д., то есть выбрать и настроить лексику языка.
В связи с сложностью формального описания язык Алгол 68 в Америке популярности не получил.
В СССР вышла книга «Неформальное введение в язык программирования АЛГОЛ68», в которой, по сути, была описана грамматика языка после подстановки набора МЕТА-лексем в МЕТА-правила и, главное, была описана реальная семантика конкретного варианта языка Алгол68. Благодаря этой книге, Алгол68 в СССР был довольно популярен.
Вирт создавал язык ПАСКАЛЬ как язык обучения студентов программированию, как регулярной дисциплине. Формальное описание языка получилось очень компактным и понятным. Можно сказать — просто гениальным! Этот язык был скорее развитием языка АЛГОЛ60.
Из-за навязчивых вопросов и предложений (в основном бывших студентов), Вирт, буквально через два года, создал для системного программирования язык MODULA. Вот его можно назвать неким развитием АЛГОЛ68. Его описание было также компактным, простым и понятным. Для описания синтаксиса Вирт применил синтаксические диаграммы.
Язык МОДУЛА ( В.В.М.: Modula, 1975г.) описан в книге Янга «Алгоритмические языки реального времени».
В СССР язык Modula-2 был довольно популярным.
«A Superscalar Out-of-Order x86 Soft Processor for FPGA» Henry Wong, Ph.D. Thesis, University of Toronto, 2017