Pull to refresh
-3
0
Send message

Бог с ними, "с хромбуками". По крайней мере, на время.

На "Луна-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).

(
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-векта, увы, такой возможности не давала: либо новые языки и новые фичи… либо старые библиотеки.


Перечисление «через запятую» создаёт некий мираж, поэтому привожу генеалогическое дерево:

Паскаль --} Модула-2 --} Оберон --} Оберон-2 --} Component Pascal
                |             
                +--} Модула-3


Давайте ограничимся «вектором развития» Pascal to Modula-2 to Modula-3.
Впрочем, есть и конвертер Pascal to CP. А так же, p2ada.

В комплекте DECWRL Modula-2 шёл конвертер с Berkeley Pascal.
Существует и m2tom3.

(
Про Modula-3 и проверенные библиотеки: 1) SWIG 2) m3sleep, как образец
)

Можно ещё вспомнить про семейство компиляторов TopSpeed.

Т.е. множество фактов противоречат теории.
Вот все сегодня кричат сейчас о дефектах в технике вследствие софта, кричат, что софт — (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.
(* calling procedure Variadic from Listing 14 *)
Variadic( (* counter omitted *) foo1, bar2, foo2, bar2 );
(* calling procedure Variadic from Listing 15 *)
Variadic( foo1, bar1, foo2, bar2 (* -1 omitted *) );
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;
Мы говорим о Qiuck Basic и наследниках, где уже «всё как у людей» — IF / While, строки без нумерации?

P.S. В январе Вы критиковали один из Basic-ов:
где из переходов только GOSUB/GOTO и из циклов только FOR — то это может быть слишком оторвано от современности.
И чё? На нём же не проект писать, а чисто с алгоритмами экспериментировать.
Для чего-то более серьёзного — переходить на более актуальные языки.
1
23 ...

Information

Rating
Does not participate
Registered
Activity