Не совсем понятно, почему Вы беспокоитесь о перезагрузках серверов или СУБД: обе СУБД способны работать в кластере. Соответственно, перезагружать узлы можно когда угодно.
Согласен, тем более что с 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).
Windows 10 — так и вообще каждые два года обновляется
Каждые полгода…
Заодно уж, «языки семейства ALGOL» включают в себя и Си. ( Да, да: из песни слова не выкинешь).
Т.к. Си точно не разновидность Fortran, COBOL или Lisp, то остаётся только один вариант ( и не только поэтому).
Естественно, от такого родственника все отрекаются. Даже создатели BCPL; из него забыли взять ELSIF, кстати.
)
закрывающая фигурная скобка выглядит красивее, чем слово end
Угадайте ( ради интереса), что было ( опционально) в Паскале для БЭСМ вместо begin end.
Когда на протяжении десятилетий вы можете писать на двух языках одновременно.
Двуязычные системы не редкость, например:
XDS Modula-2/Oberon-2
Modula-3, фактически, тоже: там Си и собственно M3.
И раз уж у нас вечер загадок, то каково соотношения кода на этих двух языках в утилите ( уже намекал на этот занятный факт) m3sleep?
Кстати, подсказка: задача интересная и в чисто математическом плане.
P.S. Я, кстати, не могу со 100% уверенностью сказать, что моя теория верна. В «социальных науках» эксперименты ставить сложно.
Но факты (весьма и весьма и весьма немаленькую популярность потомков ALGOL ( В.В.М.: скорее, Pascal) в 1980е и резкое падение оной в 1990е) — моя теория объясняет.
Так что если у вас есть другая, альтернативная, она их должна объяснять тоже.
Причина невероятно простая: как говорил школьникам герой книги ( и фильма) про эсперанто — поменялась международная обстановка.
Поэтому же французы и итальянцы в 1954 — 1991 ( и чуть позже) «жили лучше» чем при развитом социализме.
Показательно, что на Эльбрус-2 были чуть ли не все языки программирования. Кроме, Си. Подозреваю, его наличие заказчик ( и исполнители) просто не считал необходимым…
P.P.S. TopSpeed я недавно где-то видел «на просторах всемирной паутины».
Но регулярные (то есть неоднократные) переходы с потерей всей базы накопленного кода (Modula-2, Modula-3, Oberon и так далее)… добром не кончились.
На C++ можно было использовать старые, проверенные, библиотеки… и новые возможности. ALGOL-векта, увы, такой возможности не давала: либо новые языки и новые фичи… либо старые библиотеки.
Перечисление «через запятую» создаёт некий мираж, поэтому привожу генеалогическое дерево:
Вот все сегодня кричат сейчас о дефектах в технике вследствие софта, кричат, что софт — (VVM: терминология изменена) низкокачественный, но почему-то забывают, что отказы электроники или механики никуда не ушли. Схемы выходят из строя, (...), Берешиты всякие о Луну разбиваются
Мы говорим о Beresheet, где «всё программное обеспечение было написано» «на языке С»?
Хотя в первой найденной ссылке говорили, что «из-за проблем с трансмиссией»,
уже на второй на фотографиях была «палитра эмоций, когда стало известно, что что-то пошло не так».
«За полтора часа до Дня космонавтики» Израиль стал не 4-той страной «в мире, осуществившей посадку космического аппарата на поверхность естественного спутника Земли»,
а 7-мой на орбите и даже просто «стал одной из шести стран, которые каким-либо образом (включая аварийную посадку) посадили космический корабль на Луну».
(
Упрощенно:
«спуск проходил штатно до высоты в 149 метров, на которой основной двигатель внезапно отключился и случилась аварийная перезагрузка бортового компьютера. Аппарат не успел включиться и упал на поверхность.»
слегка подробнее:
«было предпринято «пять-шесть» безуспешных попыток перезапустить двигатель»
«Однако команда, которую получил аппарат перед посадкой, привела к ряду событий, имевших критические последствия, так как отключился основной двигатель»
)
Далее планируется «метод отладки»:
Израиль планирует снова вернуться на Луну в течение следующих 2,5 лет.
Предыдущая попытка космической экспедиции страны провалилась из-за аварийной посадки в апреле 2019, сообщает Daily Mail.
Как отмечается, двигатели на израильском космическом корабле Beresheet вышли из строя из-за компьютерного сбоя при попытке посадки на спутник.
«Теперь создатели аппарата заявили, что отправят Beresheet 2.0 на Луну в течение 2,5 лет», — отмечается в сообщении.
По данным инженеров, программное обеспечение лунного корабля будет модернизировано и иметь новую систему предотвращения помех, чтобы предотвратить возможный сбой.
«Мы очень гордимся и довольны миссией Beresheet, она была первой из многих. Это сделало нас седьмой страной на орбите Луны, четвертой в попытке приземлиться», — сказал в ходе выступления на 70-м Международном астронавтическом конгрессе Эхуд Хаюн, инженер по космическим системам в израильской аэрокосмической промышленности.
Если разрешить на уровне языка определение процедур с произвольным количеством формальных параметров ( да ещё и с произвольными типами аргументов ). В этом случае вся статика летит к чертям.
Зачем же с абсолютно произвольными?
Objective Modula-2
Calling a Variadic Procedure
Index arguments and value terminating arguments are never supplied in the actual parameter
list of a variadic procedure call. The compiler automatically determines and
inserts these arguments into the procedure’s activation record.
Listing 16: variadic procedure calls omit index and value terminating arguments
Variadic Procedures with Counter Terminated Variadic Parameter Lists
The number of variadic parameters of a counter terminated variadic parameter list is
automatically passed as a hidden parameter immediately before the variadic list.
PROCEDURE Variadic(v : VARIADIC OF (p1 : Bar; p2 : Baz));
BEGIN
(* iterate over all variadic tuples by index *)
FOR n OF CARDINAL := 0 to HIGH(v) DO
DoSomethingWithBar(v[n].p1);
DoSomethingWithBaz(v[n].p2);
END; (* FOR *)
END Variadic;
Listing 14: procedure with a counter terminated variadic parameter list
Variadic Procedures with Value Terminated Variadic Parameter Lists
A value terminated variadic parameter list is terminated by a given constant value.
PROCEDURE Variadic(v : VARIADIC [-1] OF (p1 : INT; p2 : Baz));
BEGIN (* v points to first variadic tuple *)
WHILE v # NIL DO (* while there are tuples *)
DoSomethingWithINT(v^.p1);
DoSomethingWithBaz(v^.p2);
v := NEXTV(v); (* next variadic tuple *)
END; (* WHILE *)
END Variadic;
Listing 15: procedure with a value terminated variadic parameter list
В Modula-2 R10 ( в варианте M2Sharp) чуть менее наглядно:
( newVector и PrintList — разные функции; не стал исправлять, привёл 1 к 1, как в первоисточнике )
Variadic Parameters
The extended dialect supports the ARGLIST attribute in formal types and formal parameters. Parameters marked with the ARGLIST attribute may be passed a variable number of arguments.
PROCEDURE newVector ( values : ARGLIST OF REAL ) : Vector;
VAR v1, v2, v3 : Vector;
v1 := newVector(1.2, 3.4); (* two arguments *)
v2 := newVector(1.2, 3.4, 5.6); (* three arguments *)
v3 := newVector(1.2, 3.4, 5.6, 7.8); (* four arguments *)
Within the procedure or function, the argument count may be obtained using built-in function COUNT and the arguments are addressable using array subscript notation.
PROCEDURE PrintList ( values : ARGLIST OF REAL );
VAR index : CARDINAL;
BEGIN
FOR index := 0 TO COUNT(values)-1 DO
WriteReal(values[index]);
WriteLn
END
END PrintList;
Не совсем понятно, почему Вы беспокоитесь о перезагрузках серверов или СУБД: обе СУБД способны работать в кластере. Соответственно, перезагружать узлы можно когда угодно.
Или 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
Каждые полгода…
Заодно уж, «языки семейства ALGOL» включают в себя и Си. ( Да, да: из песни слова не выкинешь).
Т.к. Си точно не разновидность Fortran, COBOL или Lisp, то остаётся только один вариант ( и не только поэтому).
Естественно, от такого родственника все отрекаются. Даже создатели BCPL; из него забыли взять ELSIF, кстати.
)
Угадайте ( ради интереса), что было ( опционально) в Паскале для БЭСМ вместо begin end.
Двуязычные системы не редкость, например:
XDS Modula-2/Oberon-2
Modula-3, фактически, тоже: там Си и собственно M3.
И раз уж у нас вечер загадок, то каково соотношения кода на этих двух языках в утилите ( уже намекал на этот занятный факт) m3sleep?
Кстати, подсказка: задача интересная и в чисто математическом плане.
Причина невероятно простая: как говорил школьникам герой книги ( и фильма) про эсперанто — поменялась международная обстановка.
Поэтому же французы и итальянцы в 1954 — 1991 ( и чуть позже) «жили лучше» чем при развитом социализме.
Показательно, что на Эльбрус-2 были чуть ли не все языки программирования. Кроме, Си. Подозреваю, его наличие заказчик ( и исполнители) просто не считал необходимым…
P.P.S. TopSpeed я недавно где-то видел «на просторах всемирной паутины».
Перечисление «через запятую» создаёт некий мираж, поэтому привожу генеалогическое дерево:
Давайте ограничимся «вектором развития» Pascal to Modula-2 to Modula-3.
Впрочем, есть и конвертер Pascal to CP. А так же, p2ada.
В комплекте DECWRL Modula-2 шёл конвертер с Berkeley Pascal.
Существует и m2tom3.
(
Про Modula-3 и проверенные библиотеки: 1) SWIG 2) m3sleep, как образец
)
Можно ещё вспомнить про семейство компиляторов TopSpeed.
Т.е. множество фактов противоречат теории.
Мы говорим о Beresheet, где «всё программное обеспечение было написано» «на языке С»?
Хотя в первой найденной ссылке говорили, что «из-за проблем с трансмиссией»,
уже на второй на фотографиях была «палитра эмоций, когда стало известно, что что-то пошло не так».
«За полтора часа до Дня космонавтики» Израиль стал не 4-той страной «в мире, осуществившей посадку космического аппарата на поверхность естественного спутника Земли»,
а 7-мой на орбите и даже просто «стал одной из шести стран, которые каким-либо образом (включая аварийную посадку) посадили космический корабль на Луну».
(
Упрощенно:
«спуск проходил штатно до высоты в 149 метров, на которой основной двигатель внезапно отключился и случилась аварийная перезагрузка бортового компьютера. Аппарат не успел включиться и упал на поверхность.»
слегка подробнее:
«было предпринято «пять-шесть» безуспешных попыток перезапустить двигатель»
«Однако команда, которую получил аппарат перед посадкой, привела к ряду событий, имевших критические последствия, так как отключился основной двигатель»
)
Далее планируется «метод отладки»:
Objective Modula-2
В Modula-2 R10 ( в варианте M2Sharp) чуть менее наглядно:
( newVector и PrintList — разные функции; не стал исправлять, привёл 1 к 1, как в первоисточнике )