Информация об изменениях

Сообщение Re[12]: понимание ООП Алана Кея от 30.03.2023 8:45

Изменено 30.03.2023 9:31 vdimas

Re[12]: понимание ООП Алана Кея
Здравствуйте, Ночной Смотрящий, Вы писали:

НС>>>Там не совсем тот P-код. Там просто упакованноое в удобное для интерпретации представление AST было

V>>Там коды "инструкций" Бейсика.
НС>Там коды ключевых слов.

В ассемблере тоже "коды ключевых слов".
Или ключевые слова для кодов, на вкус.


НС>Причем организовано это строго как написано.


Скорее, наоборот — написать можно строго как положено согласно семантике инструкции.
Ты не сможешь написать строку программы, содержащую ошибку — тебе не дадут выполнить Enter в таких системах, пока ошибка не будет исправлена.


НС>А если посмотреть код "компилятора", то там простейший парсинг и просто подмена символов на их коды.


Верно, как в ассемблере.


НС>Причем оригинал не сохраняется, а восстанавливается при необходимости по этому коду.


Прям обычный дизассеблинг, разве что вместо адресов переменных используются их имена из словаря.


НС>Все. На Р-код это похоже исключительно в силу того, что на Р-код похож сам исходник того бейсика.


Да пофик. Если существует возможность "железной" реализации инструкций бейсика в гипотетическом CPU, то можно смело обзывать p-кодом.
Целиком сокращение означает "псевдо-код", если еще развернуть "код для псевдо-ЦПУ".


НС>Но смысл этого — сэкономить память на хранении программы и убрать из интерпретатора парсинг, а не обеспечить переносимость.


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

Смысл псевдокода зачастую в компактности и готовности к исполнению прямо в своём виде.
Закодированный код Бейсика полностью удовлетворяет этим требованиям.

Например, MS P-Code был разработан и использовался в VB/VBA из соображений компактности и эффективности, а не соображений портируемости.


НС>>>а в описываемых Паскалях это был машинный код виртуального CPU, как сейчас в Java и дотнете.

V>>Немного не понимаю, почему прицепились именно к Паскалю? ))
НС>Я же процитировал:
НС>Two early compilers generating p-code were the Pascal-P compiler in 1973, by Kesav V. Nori, Urs Ammann, Kathleen Jensen, Hans-Heinrich Nageli, and Christian Jacobi, and the Pascal-S compiler in 1975, by Niklaus Wirth.

Я на это уже отвечал — впервые оно было не в Паскале и позже широко использовалось тоже не в Паскале.
Понятие псевдокода существовало задолго до 73-го года.


V>>Технология впервые была использована в другом языке.

НС>Было что то похожее. А в полноценном виде это были именно Паскали.

1. В полноценном виде существовали Паскали и до 73 безо-всякого p-кода.
2. Полноценно эта технология использовалась и до реализации на ней Паскалей.

Из одной из разработок Паскаля родился мем p-code как сокращение от псевдо-код, и ничем более Паскаль в этой истории не примечателен. ))

Сама та разработка идиотская, ИМХО, т.к. Вирт породил Паскаль упростив Алгол-60, т.е. выкинув оттуда прилично конструкций.

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

Нахрена учебному языку создавать переносимый бинарный код?


V>>Мой поинт был в отделении понятия "язык программирования", как совокупности ситнаксиса и семантики от способа реализации этой семантики на стадии исполнения кода

НС>И при этом ты привел в пример спектрумовский бейсик в котором никакого отделения синтаксиса не было, был просто вынос стадии парсинга на этап сохранения строки в память.

Ну, дык, отличный пример отделения языка от реализации.
Для сравнения, реализация VB For DOS честно компиллировала текстовый исходник в честный бинарь.
При этом язык практически тот же (проги из спектрумовского Бейсика компилировались без изменений, если не лезли в память напрямую).


V>>Спекулировать тут можно только насчёт того, что в том же дотнете рефлексия, ExpressionTree и Roslyn идут в базовой поставке и являются частью стандарта, а в С++ это дополнительный инструментарий,

НС>Вот именно. Нет ABI — все, куча сценариев закрывается.

ABI есть, но для конкретного компилятора/платформы.
Например, COM ввел часть устоявшегося на x86 С++ ABI в кач-ве своего стандарта (в разделе виртуальных ф-ий, их организации и вызова).


НС>Но вы тут опять с терминами устроили кашу, уж не знаю, случайно или намеренно. Р-код это непосредственно императивные инструкции и это отдельная песня.


Это ты озвучиваешь своё эвристическое понимание.
P-код — это то же, что и псевдокод. Всё.


НС>А rtti — это другая песня, хоть и упаковываетcя она в те же файлы. Зачем пытаться это все обсуждать одновременно — непонятно.


Была поставлена задача передать код на другую платформу и исполнить.
Потом выяснилось, что задача звучит не так, ну да ладно...
Re[12]: понимание ООП Алана Кея
Здравствуйте, Ночной Смотрящий, Вы писали:

НС>>>Там не совсем тот P-код. Там просто упакованноое в удобное для интерпретации представление AST было

V>>Там коды "инструкций" Бейсика.
НС>Там коды ключевых слов.

В ассемблере тоже "коды ключевых слов".
Или ключевые слова для кодов, на вкус.


НС>Причем организовано это строго как написано.


Скорее, наоборот — написать можно строго как положено согласно семантике инструкции.
Ты не сможешь написать строку программы, содержащую ошибку — тебе не дадут выполнить Enter в таких системах, пока ошибка не будет исправлена.


НС>А если посмотреть код "компилятора", то там простейший парсинг и просто подмена символов на их коды.


Верно, как в ассемблере.


НС>Причем оригинал не сохраняется, а восстанавливается при необходимости по этому коду.


Прям обычный дизассеблинг, разве что вместо адресов переменных используются их имена из словаря.


НС>Все. На Р-код это похоже исключительно в силу того, что на Р-код похож сам исходник того бейсика.


Да пофик. Если существует возможность "железной" реализации инструкций бейсика в гипотетическом CPU, то можно смело обзывать p-кодом.
Целиком сокращение означает "псевдо-код", если еще развернуть — "код для псевдо-ЦПУ".


НС>Но смысл этого — сэкономить память на хранении программы и убрать из интерпретатора парсинг, а не обеспечить переносимость.


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

Смысл псевдокода зачастую в компактности и готовности к исполнению прямо в своём виде.
Закодированный код Бейсика полностью удовлетворяет этим требованиям.

Например, MS P-Code был разработан и использовался в VB/VBA из соображений компактности и эффективности, а не соображений портируемости.


НС>>>а в описываемых Паскалях это был машинный код виртуального CPU, как сейчас в Java и дотнете.

V>>Немного не понимаю, почему прицепились именно к Паскалю? ))
НС>Я же процитировал:
НС>Two early compilers generating p-code were the Pascal-P compiler in 1973, by Kesav V. Nori, Urs Ammann, Kathleen Jensen, Hans-Heinrich Nageli, and Christian Jacobi, and the Pascal-S compiler in 1975, by Niklaus Wirth.

Я на это уже отвечал — впервые оно было не в Паскале и позже широко использовалось тоже не в Паскале.
Понятие псевдокода существовало задолго до 73-го года.


V>>Технология впервые была использована в другом языке.

НС>Было что то похожее. А в полноценном виде это были именно Паскали.

1. В полноценном виде существовали Паскали и до 73 безо-всякого p-кода.
2. Полноценно эта технология использовалась и до реализации на ней Паскалей.

Из одной из разработок Паскаля родился мем p-code как сокращение от псевдо-код, и ничем более Паскаль в этой истории не примечателен. ))

Сама та разработка идиотская, ИМХО, т.к. Вирт породил Паскаль упростив Алгол-60, т.е. выкинув оттуда прилично конструкций.

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

Нахрена учебному языку создавать переносимый бинарный код?


V>>Мой поинт был в отделении понятия "язык программирования", как совокупности ситнаксиса и семантики от способа реализации этой семантики на стадии исполнения кода

НС>И при этом ты привел в пример спектрумовский бейсик в котором никакого отделения синтаксиса не было, был просто вынос стадии парсинга на этап сохранения строки в память.

Ну, дык, отличный пример отделения языка от реализации.
Для сравнения, реализация VB For DOS честно компиллировала текстовый исходник в честный бинарь.
При этом язык практически тот же (проги из спектрумовского Бейсика компилировались без изменений, если не лезли в память напрямую).


V>>Спекулировать тут можно только насчёт того, что в том же дотнете рефлексия, ExpressionTree и Roslyn идут в базовой поставке и являются частью стандарта, а в С++ это дополнительный инструментарий,

НС>Вот именно. Нет ABI — все, куча сценариев закрывается.

ABI есть, но для конкретного компилятора/платформы.
Например, COM ввел часть устоявшегося на x86 С++ ABI в кач-ве своего стандарта (в разделе виртуальных ф-ий, их организации и вызова).


НС>Но вы тут опять с терминами устроили кашу, уж не знаю, случайно или намеренно. Р-код это непосредственно императивные инструкции и это отдельная песня.


Это ты озвучиваешь своё эвристическое понимание.
P-код — это то же, что и псевдокод. Всё.


НС>А rtti — это другая песня, хоть и упаковываетcя она в те же файлы. Зачем пытаться это все обсуждать одновременно — непонятно.


Была поставлена задача передать код на другую платформу и исполнить.
Потом выяснилось, что задача звучит не так, ну да ладно...