Pull to refresh
-2
0
Send message

Оберон - это Модула-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].

Источники:
[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

Да, прямая интеграция проекта 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

На мой взгляд, begin и end выглядят как шум.

Согласен, тем более что с 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

Я не совсем понимаю Ваши проблемы.

Например, на какой странице УК написано, что что-либо применять нельзя?

И не являются ли данные запреты прямым ( и наглым) нарушением прав человека? Т.к. сегрегируют людей по странновому ( фактически расовому) признаку?

Intel в какую-то версию Quartus в 2021 или 2022 году вставил неподписанные драйверы

Т.е. всё разрешилось? И Windows реабилитирован?

Т.к. достаточно взять ту версию ПО, где соблюдается элементарная дисциплина разработки?

С Clarion я работал плотно. Закупили у "Арсис" и CfD 2.X, и обновление до CDD 3.X

Выше ( не вы) писали, что Clarion a) не выжил b) и не выжил именно из-за встроенного в среду языка программирования.

На деле: жив, выходят новые версии и т.п. Соответственно, раз нет события, то нет и его причины.

Так же существует альтернативная реализация -- clarion2java

Если и конкурировал, то с FoxPro.

Ничего сверх-нетрадиционного в ЯП Clarion нет.

Wiki вообще уверена, что это Modula-2 семейство ( не совсем)

Пример с 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;

Да, Modula-3 был создан, как раз, тогда. В язык и позже вносились изменения, возможно, относительно давно.

Но сама экосистема и компилятор активно развиваются "прямо сейчас".

} молоток и напильник

Как проходивший "допуски и посадки", примерно за год до начертательной геометрии на 3-ем или 4-ом курсе ( код специальности - 22.04 ) и обладатель ГДР-овской железной дороги, возьму на себя смелость утверждать, что это излишне: паровозик повезёт три пассажирских вагончика даже "при расширенном диапазоне качества" строительных работ.

Отчасти, напоминает задачу из статьи Э.Дейкстры, любезно опубликованной в книге "Простое и сложное в программировании". И реакцию на ход её решения представителей разных профессий, в том числе "чистых математиков".

Насколько помню, достаточно было программировать "по документации".

Часто просто использовали Btrieve.

Но это уже CDD 3.X

Да.

И Clarion всегда, по крайней мере, начиная с Clarion 2.X for DOS умел ( и работал) "по сети".

Репост ( с любезного разрешения автора) начала обсуждения статьи в 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).

1
23 ...

Information

Rating
3,588-th
Registered
Activity