Вход для пользователей

You are here

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

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

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

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

Изображение пользователя st.

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

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

Код. Это называется код. В Бейсике-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). Которые уже действительно выполняются аппаратно, на исполняющем устройстве. Синтаксис тоже имеет значение — хотя и меньшее, чем в структурных алгоритмических языках.

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

Изображение пользователя st.

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

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

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

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

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

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

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

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

Изображение пользователя st.

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

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

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

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

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

Изображение пользователя st.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Изображение пользователя st.

Если не двоемыслить. Так вы приведите код реализации 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 переносимыми с одного семейства на другое? Является ли неявно подразумеваемое "им - можно" типичным примером двоемыслия? ;-)

Изображение пользователя st.

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

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

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

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

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

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

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

Изображение пользователя st.

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

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

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

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

Изображение пользователя st.

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

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

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

Изображение пользователя st.

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

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

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

Изображение пользователя st.

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

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

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

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

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

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

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

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

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

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

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

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

Изображение пользователя st.

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

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

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

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

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

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

Изображение пользователя st.

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

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

Вот так-то :)

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

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

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

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

Изображение пользователя st.

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

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

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

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

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

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

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

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

Изображение пользователя st.

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

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

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

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

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

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

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

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

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

Изображение пользователя st.

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

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

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

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

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

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

Изображение пользователя st.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Изображение пользователя st.

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