Язык отечественных ПМК - низкого или высокого уровня?

Язык ПМК не является языком высокого уровня. Грамматика нужна для синтаксического анализа, а в мнемокоде ПМК синтаксиса, как такового, нет. Разбор программы в мнемокоде проще разбора макроассемблерного кода, хватает лексического анализа и списка разрешенных лексем (ключевых слов).

Язык. Я помню, что ты упорно не признаёшь, что ЯМК это язык высокого уровня — несмотря на то, что я тебя тыкал носом в однозначную цитату разработчика ЯМК. Считаешь, что лучше автора знаешь — мне тем более тебя не переубедить.

К счастью, данный вопрос не сводится к этому давнему разногласию. Формальный синтаксис необходим для любого языка. Даже если это язык управления лифтом или конечным аппаратом. Конечно, полное определение языка содержит не только синтаксис и упомянутый тобой список ключевых слов, но и семантику. Но опубликованный формальный синтаксис — это важное требование, отличающее язык программирования от псевдокода или попыток этот язык создать.

Каждой команде (инструкции) языка ПМК соответствует код команды исполняющего устройства. Это называется мнемокод. Синтаксис, т.е. в данном случае следование мнемокодов значения не имеет.

Инструкция ЯВУ транслируется в одну и более команд исполняющего устройства, синтаксис имеет значение.

Код. Это называется код. В Бейсике-80, например MSX-BASIC'е и GW-Basic'е, тоже каждому ключевому слову соответствовал свой шестнадцатеричный код.

  Table 2.20  List of intermediate codes

-------------------   -------------------   -------------------
| >	  |    EE |   | ERR	|    E2 |   | PAINT   |    BF |
| =	  |    EF |   | ERROR	|    A6 |   | PDL     | FF A4 |
| <	  |    F0 |   | EXP	| FF 8B |   | PEEK    | FF 97 |
| +	  |    F1 |   | FIELD	|    B1 |   | PLAY    |    C1 |
| -	  |    F2 |   | FILES	|    B7 |   | POINT   |    ED |
| *	  |    F3 |   | FIX	| FF A1 |   | POKE    |    98 |
| /	  |    F4 |   | FN	|    DE |   | POS     | FF 91 |
| ^	  |    F5 |   | FOR	|    82 |   | PRESET  |    C3 |
| \	  |    FC |   | FPOS	| FF A7 |   | PRINT   |    91 |
| ABS	  | FF 86 |   | FRE	| FF 8F |   | PSET    |    C2 |
| AND	  |    F6 |   | GET	|    B2 |   | PUT     |    B3 |
| ASC	  | FF 95 |   | GOSUB	|    8D |   | READ    |    87 |
| ATN	  | FF 8E |   | GOTO	|    89 |   | REM     | 3A 8F |
| ATTR$   |    E9 |   | HEX$	| FF 9B |   | RENUM   |    AA |
| AUTO	  |    A9 |   | IF	|    8B |   | RESTORE |    8C |
| BASE	  |    C9 |   | IMP	|    FA |   | RESUME  |    A7 |
| BEEP	  |    C0 |   | INKEY$	|    EC |   | RETURN  |    8E |
| BIN$	  | FF 9D |   | INP	| FF 90 |   | RIGHT$  | FF 82 |
| BLOAD   |    CF |   | INPUT	|    85 |   | RND     | FF 88 |
| BSAVE   |    D0 |   | INSTR	|    E5 |   | RSET    |    B9 |
| CALL	  |    CA |   | INT	| FF 85 |   | RUN     |    8A |
| CDBL	  | FF A0 |   | IPL	|    D5 |   | SAVE    |    BA |
| CHR$	  | FF 96 |   | KEY	|    CC |   | SCREEN  |    C5 |
| CINT	  | FF 9E |   | KILL	|    D4 |   | SET     |    D2 |
| CIRCLE  |    BC |   | LEFT$	| FF 81 |   | SGN     | FF 84 |
| CLEAR   |    92 |   | LEN	| FF 92 |   | SIN     | FF 89 |
| CLOAD   |    9B |   | LET	|    88 |   | SOUND   |    C4 |
| CLOSE   |    B4 |   | LFILES	|    BB |   | SPACE$  | FF 99 |
| CLS	  |    9F |   | LINE	|    AF |   | SPC(    |    DF |
| CMD	  |    D7 |   | LIST	|    93 |   | SPRITE  |    C7 |
| COLOR   |    BD |   | LLIST	|    9E |   | SQR     | FF 87 |
| CONT	  |    99 |   | LOAD	|    B5 |   | STEP    |    DC |
| COPY	  |    D6 |   | LOC	| FF AC |   | STICK   | FF A2 |
| COS	  | FF 8C |   | LOCATE	|    D8 |   | STOP    |    90 |
| CSAVE   |    9A |   | LOF	| FF AD |   | STR$    | FF 93 |
| CSNG	  | FF 9F |   | LOG	| FF 8A |   | STRIG   | FF A3 |
| CSRLIN  |    E8 |   | LPOS	| FF 9C |   | STRING$ |    E3 |
| CVD	  | FF AA |   | LPRINT	|    9D |   | SWAP    |    A4 |
| CVI	  | FF A8 |   | LSET	|    B8 |   | TAB(    |    DB |
| CVS	  | FF A9 |   | MAX	|    CD |   | TAN     | FF 8D |
| DATA	  |    84 |   | MERGE	|    B6 |   | THEN    |    DA |
| DEF	  |    97 |   | MID$	| FF 83 |   | TIME    |    CB |
| DEFDBL  |    AE |   | MKD$	| FF B0 |   | TO      |    D9 |
| DEFINT  |    AC |   | MKI$	| FF AE |   | TROFF   |    A3 |
| DEFSNG  |    AD |   | MKS$	| FF AF |   | TRON    |    A2 |
| DEFSTR  |    AB |   | MOD	|    FB |   | USING   |    E4 |
| DELETE  |    A8 |   | MOTOR	|    CE |   | USR     |    DD |
| DIM	  |    86 |   | NAME	|    D3 |   | VAL     | FF 94 |
| DRAW	  |    BE |   | NEW	|    94 |   | VARPTR  |    E7 |
| DSKF	  | FF A6 |   | NEXT	|    83 |   | VDP     |    C8 |
| DSKI$   |    EA |   | NOT	|    E0 |   | VPEEK   | FF 98 |
| DSKO$   |    D1 |   | OCT$	| FF 9A |   | VPOKE   |    C6 |
| ELSE	  | 3A A1 |   | OFF	|    EB |   | WAIT    |    96 |
| END	  |    81 |   | ON	|    95 |   | WIDTH   |    A0 |
| EOF	  | FF AB |   | OPEN	|    B0 |   | XOR     |    F8 |
| EQV	  |    F9 |   | OR	|    F7 |   -------------------
| ERASE   |    A5 |   | OUT	|    9C |
| ERL	  |    E1 |   | PAD	| FF A5 |
-------------------   -------------------

Одна инструкция ЯМК, кстати, транслируется в несколько синхрокоманд (МК-61) или команд ассемблера (МК-161). Которые уже действительно выполняются аппаратно, на исполняющем устройстве. Синтаксис тоже имеет значение — хотя и меньшее, чем в структурных алгоритмических языках.

Да и вообще, товарищ Трохименко уже дал ответ на этот вопрос. Он есть в задачнике. ЯВУ делятся на компактные и алгоритмические.

Нет. Соответствие ключевого слова коду и коду команды исполняющего устройства - совершенно разные концепции. В бейсике IF может интерпретироваться по-разному, например, в зависимости от наличия THEN-оператора или GOTO.

Я говорю о входном языке ПМК, а не о ЯМК.

ЯМК - это просто макронадстройка над языком ПМК, простенький препроцессор. С тем же успехом можно было использовать стандартный и кроссплатформенный "m4" с набором специфичных макросов, а не создавать свой вариант.

В этом случае файл определения макросов решал бы все вопросы по документации расширения.

Кхм. Вот этим и заканчиваются попытки поддерживать свою личную терминологию, отличную от терминологии разработчиков. :-))

ЯМК — это название входного языка советских ПМК, введённое Я.К. Трохименко. Группа таких языков называется компактными языками. Они, наряду с алгоритмическими языками, по определению являются языками высокого уровня. Такие языки разрабатывают для удобства человека, а потом реализуют путём интерпретации программой на машинном языке или компиляции в машинный код. При вводе программы в калькулятор на языке МК или Бейсика она компилируется в промежуточный код, который позже интерпретируется встроенной программой.

«Электроника МК-161» поддерживает ЯМК и расширяет его. Михаил Борисович употребляет термин «расширенный ЯМК» — но касается он входного языка МК-161 или MK.EXE, мне ещё предстоит выяснить. В любом случае здесь должно быть два термина.

m4 можно использовать. Но его выход надо будет подавать на MK.EXE, так что проблемы это не решит. Также напомню, что синтаксис языка определяется в нотации РБНФ, а отнюдь не кодом программы синтаксического разбора (конкретной реализации языка).

Нету в ЯМК никакого синтаксиса. Значит ЯМК = входной язык ПМК. Нету в ЯМК никакого синтаксиса, есть произвольная последовательность 1-2-3-словных команд, записываемых мнемонически. В расширенном ЯМК было введено несколько простых синтаксических конструкций типа меток. Тем не менее, даже расширенный ЯМК не является языком высокого уровня.

Определение языка высокого уровня можно посмотреть в ГОСТе: http://www.rugost.com/index.php?option=com_content&task=view&id=47&Itemi...

ГОСТ 19781-90. Не хотелось бы влазить в холивар, но вот на данный стандарт лучше бы не ссылаться. :)

"Язык высокого уровня - Язык программирования, понятия и структура которого удобны для восприятия человеком"

По данному определению - это предмет, крайне зависящий от субъективной оценки. Далеко не факт, что Си или Паскаль, синтаксические конструкции которых несомненно богаче, удобнее для восприятия неподготовленным человеком, чем ЯМК.

Таки факт. Во-первых, таки факт. Если представить, во что выльется один паскаль-оператор Write('Ускорение:', Acceleration);, будучи транслированным в ЯМК. Или описание массива даже не переменной, а фиксированной длины. Я промолчу про абстрактные типы данных.

Во-вторых, формальных признаков минимум два:

  • Команда ЯВУ транслируется в одну и более команд исполняющего устройства (низкоуровневый язык транслируется покомандно)
  • Абстракции ЯВУ не зависят от типа исполняющего устройства

Факт > Если представить, во что выльется один паскаль-оператор Write

На ЭКВМ - в несколько байт описания формы интерфейса пользователя или в один вызов функции строки комментариев.

> Или описание массива даже не переменной, а фиксированной длины.

Не требуется.

> Во-вторых, формальных признаков минимум два:

То есть про ГОСТ 19781-90 забыли и даём своё определение.

* Команда ЯВУ транслируется в одну и более команд исполняющего устройства (низкоуровневый язык транслируется покомандно)

Что именно считается в данном определении исполняющим устройством? В ПЭВМ, судя по всему, таковым Вы считаете процессор, а в ЭКВМ - виртуальную машину на базе микроконтроллера.

Если не двоемыслить: одна команда ЯМК транслируется в тысячи команд микроконтроллера. Кроме того, не так давно были времена, когда BASIC был зашит в ПЗУ большинства ПЭВМ. Это делало его низкоуровневым ассемблером?

* Абстракции ЯВУ не зависят от типа исполняющего устройства

Абстракции ЯМК не зависят от типа исполняющего устройства. Для примера достаточно рассмотреть ПМК, ЭКВМ и их многочисленные компьютерные эмуляторы.

Если не двоемыслить. Так вы приведите код реализации write с выводом сообщения и значения переменных на ЯМК и все станет очевидно. Массивы в ЯВУ не нужны, а вместо них ассемблероподобная косвенная адресация с завязкой на регистровую архитектуру, т.е непереносимая на другие устройства? Без комментариев.

Если не двоемыслить, то придется признать, что согласно вашим представлениям байт-код явы или IL в .Net - тоже высокоуровневые языки. Они же транслируются в сотни команд процессоров целевых платформ.

Кто и куда зашит - это вообще неважно. Тем не менее, ява-байткод-процессоры есть, бейсик-процессоров нет. По причине уровня языка.

Re: Если не двоемыслить > "согласно вашим представлениям байт-код явы или IL в .Net - тоже высокоуровневые языки. Они же транслируются в сотни команд процессоров целевых платформ."
(Опубликовано Serguei_Tarassov в ср, 25/01/2012 - 10:04.)

???

> "Во-вторых, формальных признаков минимум два:
* Команда ЯВУ транслируется в одну и более команд исполняющего устройства (низкоуровневый язык транслируется покомандно)
..."

(Опубликовано Serguei_Tarassov в вт, 24/01/2012 - 22:52)
http://pmk.arbinada.com/node/881/5101#comment-5101

Мне кажется, содержание предыдущего комментария несколько расходится с названием темы. :-)

Байт-код явы и подобные не удовлетворяют критерию ГОСТ 19781-90. А ЯМК, при всех своих особенностях, ему соответствует: "понятия и структура... удобны для восприятия человеком". В ЯМК используется ввод-вывод в десятичных числах, привычные обозначения функций, регистры памяти, применяемые даже в бухгалтерских и программных калькуляторах и т.д. Или это весь мир вступил в заговор и делает неудобные "для восприятия человеком" простейшие, бухгалтерские и инженерные калькуляторы?

Про переносимость на другие устройства разговор тоже был.

Много ли проблем с использованием корректно написанных программ советских ПМК на ЭКВМ? Являются ли переносимыми программы ОС Windows на MacOS? Являются ли программы калькуляторов TI и HP переносимыми с одного семейства на другое? Является ли неявно подразумеваемое "им - можно" типичным примером двоемыслия? ;-)

Вы запутались. Исполняющим устройством байт-кода явы является виртуальная ява-машина, для нее каждый код - одна команда (с учетом многословных команд).

ЯМК не соответствует и упомянутому ГОСТу - практически все современные ПМК используют высокоуровневый язык в качестве входного.

Переносимость с советских ПМК на МК-161/152 аналог переноса программ между версиями Windows или Linux. Перенос ЯМК-программы на другий ПМК невозможен в принципе, требуется полная переработка с реинжинирингом до уровня алгоритма. Перенос бейсикоподобных программ вполне возможен и практикуется. Перенос Си-программ - тоже, об этом есть статьи на этом и других сайтах.

Виртуальная. Вот эта виртуальность (оторванность от аппаратуры) и поднимает байт код над низким уровнем. Но не до высокого уровня, т.к. высокий уровень предназначен для человека, а не виртуальной машины.

ЯМК разрабатывался для того, чтобы людям было удобно производить вычисления. Поэтому он — высокий уровень. В ГОСТе нет слова "современный" и отсылки к прецедентам, так что твой вывод лишён логики.

Программы для HP 11/12 переносятся на ПМК и обратно, см. справочник Дьяконова. В последующем справочнике, кстати, Дьяконов давал советы по переносу программ на Бейсике. Сложность примерно одинаковая — замена отличающихся операторов, перенумерация строчек и адресов переходов. Можно процесс переноса программы называть западным словом "реинжиниринг", если охота засорять язык.

Одни и те же алгоритмы, например алгоритм Эвклида и метод трапеций, используются при программировании для разных моделях ПМК, и для алгоритмических языков. Вообще, слишком много шума от того, кто программы не пишет и лишь критикует других с диванчика.

Пример современной модели ПМК (т.е. выпуск не ранее конца 80-х гг) без ЯВУ в качестве входного - в студию, пожалуйте :)

Опять выступаете, как моё начальство. Расслабьтесь. Вовсе не такая уж трагедия, что ваши знания (и беседы со школьными друзьями) отличаются от того, что вам говорят инженеры (начиная с Трохименко), учителя, учёные и ГОСТы… пока вам никакой руководящей должности не доверили. :-)

Любопытно, что навязчивое желание унизить советские ПМК пересиливает и точную научную терминологию, и ГОСТы, и даже логику. :-)))

Причём к теме (наличие у языка синтаксиса) совершенно не относится, к какому уровню он относится. Но желание имени Солженицына-Новодворской унизить всё, что делали предки (и восхвалять всё «настоящее, западное»), заставляет развязывать священные войны. Охота пуще неволи. :-)) Или опять эротический паяльник взыграл?

Точную научную терминологию - в студию, пожалуйте!

Работа. А кто мне эту мою профессиональную работу оплачивать будет? :-) Вы — тем, что не обругаете? :-)))

Точную научную терминологию смотрите в книгах профессора Вирта. Читайте, изучайте. Пока же, простите, вы не замечаете разницы между языком высокого уровня, спроектированным для написания на нём программ человеком. И языком низкого уровня, разработанным исходя из требований и удобства реализации.

Цитату из Вирта - в студию, пожалуйте :)

Ищите. Выше написал, что вы не моё начальство. И мне никто не платит за ваше обучение. Перешлите $50 через PayPal, проведу пару часов с вами в IRC, объясняя азы компьютерных наук.

Пока же хотите заблуждаться насчёт ЯВУ, ленитесь лезть в университетский учебник — ваше право.

Учитетелей. Таких "учителей" надо отсылать на второй курс института, чтобы они год слушали "Теоретическое программирование" и делали лабы :))
http://pmk.arbinada.com/node/886#comment-5126

Теория. Ну, теоретика из вас не воспитали. И практика тоже. Значит, такие учителя были, раз их ученик даже синтаксиса классического советского ЯМК в РБНФ написать не может.

Зато, как я уже говорил, воспитали верх благородства. Учитель не работает с тобой нахаляву и позволяет пребывать в заблуждении — значит уже надо начинать его унижать. Пусть вкалывает на окружающих, как шлюха — просто за отсутствие побоев, пока не подохнет с голоду. :-(

5 копеек >Пусть вкалывает на окружающих, как шлюха — просто за отсутствие побоев, пока не подохнет с голоду. :-(<

Читал и не встревал. Но как точно подмечено цитатой выше провакационная позиция матёрых... бойцов форумных фронтов не позволяет не нажать клавиши.
Увы но так часто это встречается в жизни и даже бизнесе наконец. Если нет возможности иначе "палочкой колёсику пособить" - то хоть отвлечь.
Но в данном споре (ИМХО конечно) каждый останется "при своих".
Спор ради спора и ничего более. Отвлечение сил на переписку - хоть так но "пособить".

Грустно, господа присяжные заседатели...
:-(

Вот не хватает опыта мне, а наверное "профи" от кодов было бы несложно за это время "прикрутить" к нескольким старым играм для ПМК графинерфейс ЭКВМ.

Да. Прикрутить можно и интересно, да ещё есть и другой патрон в обойме, ждущий своего часа.

Но пока что я занят другим проектом, а в области ЭКВМ моя активность теплится в проекте «Лунолёта-103». Жаль, товарища Володарского давно на форуме не слышно… надеюсь, с ним всё нормально.

Синтаксис ЯМК. Синтаксис у ЯМК есть — несмотря на то, что он пока нигде не опубликован формально, в РБНФ. Например, lg появляется лишь после F, а после K может идти max. После M должен идти номер регистра 0…9, a, b, c, d или e. После GOTO идёт номер шага, по которому происходит переход и т.д.

Другое дело, что ЯМК не является структурным языком. Но структурность (также, как и модульность) не является необходимым для того, чтобы язык был высокого уровня. Например, не являются структурными алгоритмические языки Фортран и Бейсик (исходные, последние добавления делают их структурными).

Спасибо, что привели ГОСТ. ЯМК по нему является ЯВУ, т.к. изначально разрабатывался так, чтобы «понятия и структура… (были) удобны для восприятия человеком». Калькулятор проектируется так, чтобы на нём людям было удобно считать. Человек вводит команды на ЯМК (высокий уровень), а ЭКВМ уже исполняет их с помощью встроенной программы, написанной на ассемблере однокристалки (низкий уровень).

Нету. F lg - это одна однословная команда. БП адрес - одна двусловная команда и т.д.

"Встроенная программа" тут не причем, этак можно договориться, что байт-код явы тоже высокоуровневый, потому что "встроенная программа" его транслирует в коды конкретных камней.

На байт-коде явы. На байт-коде Джавы человек не программирует.

Поэтому он является промежуточным кодом — посерединке между высоким уровнем (языком Джавы, на котором программы пишет человек) и низким уровнем (ассемблером, который разработан не для удобства выражения своих мыслей человеком, а для записи кода, исполняющегося на конкретном оборудовании).

Если байт код записать в hex-виде, разумеется, синтаксис у такой записи будет. Что-то вроде:
программа = код { пробел код } EOF
код = { пробел } цифра цифра { пробел }
цифра = "0" | "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9" | "A" | "B" | "C" | "D" | "E" | "F"
пробел = " " | "\t" | "\n" | "\r"

Другое дело, что человек на таком языке не программирует и он создан не для удобства программирования, а для удобства реализации — чтобы программа могла исполняться на разных архитектурах. Поэтому для байт-кода Джавы даже трансляторов нет. Его единственное назначение в данной беседе — сферический конь в ваккуме, с помощью которого Арбинада решил по-перестроечному попозорить себя и своих предков.

Пишет человек и машкодах. В ДОСе есть утилита debug.exe. Если встает вопрос эффективности и системных ограничений, то пишут и в машкодах.

Мы в свое время в КЛИПе вели дискуссию, как записывать программы для ПМК. Михаил Храмов и я в итоге пришли к выводу, что записывать вместо мнемоники двоичный код команды ничем не хуже, потому что мы их знали наизусть. А для тиражирования проще и ошибок меньше.

Вот так-то :)

Возраст. Видимо, возраст стимулировал максимализм. :-) Если вы двое знали «все коды» это не означает, что все пользователи знали их.

Разница со случаем программирования в debug принципиальна. В случае калькулятора устройство подстраивается под входной язык, разработанный для человека. Пишется транслятор (в данном случае встроенная программа), понимающий этот входной язык.

В случае низкоуровневого программирования человек подстраивается под язык, разработанный для удобства «железа» — скорость вычислений, удобство реализации и т.д. Конструкции ассемблера (один уровень повыше) однозначно соответствуют этому машинному языку, которое непосредственно управляет «железом».

Советую критически воспринимать свои детские рассуждения. Конечно же, здорово программировать на лёгком ЯМК, разработанном для неспециалистов — и воображать, будто уже пишешь на ассемблере, как взрослые системные программисты. :-)

Дело в другом, каждой команде ЯМК однозначно соответствовал машкод, который исполнялся на этом ПМК (не на камне, а на устройстве, ПМК-машине).

Даже если закодировать операторы и ключевые слова бейсика аналогичными кодами, то машинными они не будут, потому что исполняющее устройство не сможет их принять без предварительного лексического/синтаксического/семантического анализа и генерации действительно исполняемого машкода (для бейсик-машины).

Если разница непонятна, то дискуссию на этом можно завершить, не вдаваясь в возрастные и прочие личностные характеристики.

Бейсик и ЯМК. Как человек, дизассемблировавший и копавшийся в недрах MSX BASIC'а, отмечу, что разница несущественна.

Интерпретатор Бейсика считывает шестнадцатеричные коды (которые однозначно соответствуют командам Бейсика, таблицу я здесь приводил) и исполняет их — в точности, как встроенная программа ЭКВМ считывает и исполняет коды команд ЯМК. Именно это и делает эти языки интерпретируемыми.

Виртовская реализация Паскаля, кстати, была тоже основана на П-коде. Который был стандартен, как коды ПМК, для ряда машин. Буковка "П" означала в то время не только "портабельный", но и "Паскаль". :-) Паскаль, правда, структурный язык и его компиляция в промежуточный язык сложнее, чем один-в-один компиляция Бейсика или ЯМК.

Причём это не «даже если». Однозначное кодирование ключевых слов Бейсика hex-кодами действительно происходило в БК-0010, на Ямахе, Синклере и IBM PC ROM BASIC. Так реализуются ЯВУ на машинах, быстродействие которых и адресное пространство находятся на уровне ЭКВМ.

По технологическим причинам индикатор ПМК отображал не мнемонику ЯМК, а опкоды — зато экран ПК имел технические возможности отображать полную мнемонику команд Бейсика и делал это. С появлением ЭКВМ даже эта разница в реализациях (не имеющая отношения к языку и его синтаксису) исчезла. Сейчас программист может работать прямо на высоком уровне — в мнемонике ЯМК, забыв о кодах операций.

Да неужели? :)

Интерпретатор Бейсика считывает шестнадцатеричные коды и исполняет их — в точности, как встроенная программа ЭКВМ считывает и исполняет коды команд ЯМК.

Да неужели? :) Прямо так и исполняет
50 IF (A > 0) & (SIN(B) - SQRT(C) < 0) THEN PRINT "Совпадает" ELSE GOTO 90

Эх, зря я мучился с грамматиками и объектным кодом в институте, надо было интерпретатор выражений писать, как ЯМК: просто считывать и исполнять коды лексем :)))

Исполнение. И что такого необычного в данном примере? Что вместо обратной бесскобочной — инфиксная логика и её вычислять надо немного по-другому (например, сохраняя в отдельном стеке коды операций), этим хочешь меня удивить?

Исполнение, к примеру, оператора ELSE с двухбайтовым опкодом 3A A1 (который в твоём примере интерпретатор считает сразу после выполнения кодов 91 (опкод PRINT), 22 (код кавычки) и аргумента-строки) — перейти к следующей строке программы. Оператор ELSE даже можно вместо оператора REM (код 3A 8F) использовать, меня это сперва очень удивило. :-)))

Или эти уроки по интерпретации выражений такое впечатление произвели на неокрепший студенческий мозг, что всё кроме инфиксной записи уже заведомо «низкий уровень»? Как тогда поступим с макроассемблером, где человек программирует непосредственно железку — но используемый им компилятор понимает инфиксные выражения?

Хорошо ещё, что скучающие на государственной службе учителя не заставили тебя строить синтаксическое древо выражений и проводить его оптимизацию до этапа компиляции. А то твою похвалу «высокий уровень» стало бы заслуживать куда меньшее количество языков. :-)))

Мне вот интересно, как язык, в котором даже переменных нет, можно назвать высокоуровневым?

Надо уточнить, что речь об императивном языке, к коим относится и мнемокод советских ПМК. В декларативных языках переменных зачастую может не быть согласно концепции.

Уточнить. Для существования декларативных языков требуется, чтобы кто-либо предварительно закодировал весь низлежащий уровень. Императивно. :)

А возможный холивар между тем, за чем будущее, сведётся к вопросу что важнее при строительстве - фундамент или внутренняя отделка. Конечно, жить в доме с голыми бетонными стенами неуютно. Но дизайн и отделка занимает столь важное место ровно до тех пор, пока фундамент не развалился от чрезмерной нагрузки. И хорошо, если будет кому сделать новый или, хотя бы, подлатать трещины в существующем.

Интересней. Функционалка это ещё что.

Интересней, если поверх тупика Мура с транзисторами и булевой логикой реализуют «квантовые вычисления» — на пропаганду которых которых кинут десяток Соросов. А все традиционные школы будут давить, за исключением какого-нибудь микрософт-сертифицированного эксклюзива.

Вот тогда заживём, с Артемиями Лебедевыми вместо инженеров… люди вообще не будут догадываться до принципов, по которым работают устройства, их окружающие.

Почему холивар? Декларативные языки надо применять там, где это даёт преимущества. Императивные - в остальных случаях. На низком уровне кодировать трансляторы нужно в обоих случаях, как минимум, транслятор Си, идущий в комплекте к процессору.

Переменные. Произвольные имена регистров в кросс-версии языка МК имеются. Автоматическое распределение адресов памяти данных, что позволит говорить о настоящих переменных, также предполагается. Принципиальная возможность компиляции этого варианта языка в самой ЭКВМ также существует.

А наличие переменных в типичном ассемблере ещё не делает его высокоуровневым языком.

Определение языка высокого уровня, приведённое в ГОСТ 19781-90 (см. выше) достаточно расплывчато. Потому холивар на тему "является ли ЯМК ЯВУ или нет", как правило, сводится к субъективному ощущению "удобства для восприятия".

Если программист начал с изучения бейсика и всю жизнь программировал на чём-то вроде лого или скретче, то ЯМК для него - кошмарный ужас-ужас в котором нет даже переменных. И китайско-калифорнийские калькуляторы с десятками тысяч готовых опций для этой категории потребителей существуют.

Если программист на практике использует ассемблеры различных типов, знает машинные коды, может читать перфоленту и перфокарты или хоть раз программировал некое устройство двоичными тумблерами и кнопкой "ввод" - для него ЯМК однозначно является ЯВУ. :)

Но этот ЯВУ может дать программисту столько же удовольствия от работы, сколько программирование на ассемблере. Даже больше, поскольку основная часть громоздких операций выведена в функции современных ЭКВМ.

Ведь ассемблер - это "двери в удивительный мир, расположенный за фасадом высокоуровневого программирования, где вращаются те шестеренки, что приводят в движение все остальное. Ассемблер - это разговор с компьютером на естественном для него языке, радость общения с голым железом, высший пилотаж особого полета свободной мысли и безграничное пространство для самовыражения. Ассемблер намного проще большинства языков высокого уровня, он значительно проще, чем Си++ и овладеть им можно буквально за несколько месяцев, главное - взять правильный старт, уверенно продвигаясь в нужном направлении, а не петляя впотьмах наугад."

(К. Касперски "Ассемблер- это просто" http://www.insidepro.com/kk/144r.shtml )

Именно из-за простоты изучения и широких возможностей языка МК, присущих скорее ассемблеру, чем языкам высокого уровня, его ошибочно и относят к низкоуровневым.

История. Отмечу для истории, что разговор возник в другой теме и был перенесён-подтасован под материал с таким заголовком и содержанием задним числом.

Сам же я считаю беседы под статьёй человека, не опубликовавшего для ЭКВМ ни одной серьёзной программы, с глупым заголовком «Равно 2x2 пяти или четырём» и ложным содержанием «2x2=5 патаму што» унизительными.

Обучение должно происходить в достойных условиях. Где ясно, кто и что изучает. Даже когда я объяснял шестнадцатеричную систему счисления хиппи и панкам на уличных скамейках Вильнюса, пыльных крышах Таллина и подвалах города Киева, условия были достойнее этих.

Когда изучающий сложную хэкерскую тему ставит во главу угла не правду, заявленную разработчиками и терпеливо объясняемую учителем, а свои неизбежные мысли-возражения, работа с ним трудна и бессмысленна. В данной теме я бы даже не стал беседовать с Сергеем. Мне от его заблуждений ни тепло, ни холодно.

Точно. Ведь нельзя же всерьёз обсуждать термин "серьёзная программа", куда уж там "язык высокого уровня" :)