LINUX.ORG.RU

Виртовские языки

 , ,


0

3

Камрады, добрый день!

Читаю понемногу о разных языках (история создания, назначения и т.п.) - появился вопрос. А развиваются ли сейчас виртовские языки? Есть реально используемые в продакшене ЯП и живые экосистемы под них?

Они ведь можно сказать относятся к одному и тому же подходу в разрезе семантики (Модула, Пасаль, Оберон и т.п.) и синтаксиса.

Как понимаю, какое-то наследие можно увидеть в небольшом количестве мейнстрима (Ruby, Python), нишевых и из-за этого не дохлых (Ada) и дохлых (Oberon, Object Pascal, etc.).

По ощущениям победил C-like синтаксис/семантика, с минимальными вкраплениями идей.

Или я ошибаюсь?



Последнее исправление: small-entropy (всего исправлений: 1)

Ответ на: комментарий от alman

К сожалению, сейчас у Паскаля серьезные проблемы с компиляторами и библиотеками разработки. По сути остался только FreePascal + Lazarus и Delphi, уже не помню кому в очередной раз проданая. Delphi - дорогое сильно проприетарное решение, а FP+Lazarus не очень большой коллектив не слишком охотно развивает, помню Croco еще серьезные претензии концептуального характера к их деятельности имел.

praseodim ★★★★★
()
Ответ на: комментарий от praseodim

Да вот и нет.

С такой прозорливостью вам бы можно было смело диагнозы по фото ставить.

Да и вообще ну не складывается ни по журналам, ни прочему воспоминаний о победе Си.

Речь не столько про победу Си в мире, сколько по то, что в СССР был собственный мир, в котором мало что знали про происходящее на Западе (по крайней мере среди обычных программистов).

eao197 ★★★★★
()
Ответ на: комментарий от no-such-file

ну смотря как по смотреть

хотя из интервью Ken Thompson interviewed by Brian Kernighan at VCF East 2019 (https://www.youtube.com/watch?v=EY6q5dv_B-o)

чуть ли не прямо утверждается что С хоть и B(BCPL(CPL(Algol)))) - но по факту это такой сверхвычищеный фортранодвижок который был начат с фортрана и всё упращался что бы быть способным себя собрать на 4к 18битных словах машины

ваще даже for по видимому поначалу в Си был макросом разворачивающимся в уже бывший while

что вполне по моде c конца 60ых - у того же виртовского эйлера почти весь сахар который в Паскали элементы языка в эйлере были реализованны как функции над имеными-параметрами (был такое сложно реализуемое чудо в Алгол60- на современные деньги что то типо лямбд но не совсем :))

qulinxao3
()
Ответ на: комментарий от hobbit

какое блин отличить сразу функцию от переменной

в Алголе и первых потомках(включая и столь отдалённого через Algol-W потомка как PascaL) была ровно в этом

обращение к безаргументной функции A было не отличимо от обращения к переменной A

что не сколько - «так получилось»

B=A

если не известно то такое A читателю не помятно это взять значение переменной A и поместить в B или это вычислить функцию А ( c возможными побочками и т.д.)

qulinxao3
()
Последнее исправление: qulinxao3 (всего исправлений: 1)
Ответ на: комментарий от Smetchik

Оберон слишком загнался на предмет минимализма. Сам язык прост как топор, поэтому для некоторых элементарных вещей надо городить костыли, что надёжности общего результата, имхо, отнюдь не способствует.

FreePascal в этом плане более подходит для практического программирования, батареек больше.

hobbit ★★★★★
()
Ответ на: комментарий от hobbit

преамбула - я стороник Оберон(среды)/асме - но вот не достаточно автомномности(от vscode vim и прочего инструментария) что бы жить в них

Паскаль заведомо лучше Си в части уровневости ибо это всё таки не крутой переносимый ассемблер а стадия вычищения изначальной идеи ipl57->algol->algol W->эйлер(лень смотреть что было раньше эйлер али algol-w напару с Хоаром) ->pASCAl -> modula (1,2,3 )-> oberon ....

как мы(все) любим поправлять не внемля

конечно fn/func/def/proc/procedure/array/ и прочий дозированный сахар помогает а не есть просто базовый синтаксис как () в лишпе али спираль раскрутки типа идентификатора в сях(которая крива не только потому что с двух сторон а не с одной а скорее потому что сложный граф отношений между расширением типа слева и расширением типа справа поэтому чаще чем достаточно приходится заворачивать выражения в скобки)

возможно конечно что такие сложности не столько баг сколько фича что бы чаще typedef использовали а не *[]omg()*

при этом и в синтаксисе до Модулы была инерция от матана и алгола60 унаследованная - не различимость обращения к нульарной функции и простому идентификатору - хотя в одном случае это обращение к данным в другом заход в некоторый подпроцесс - что семантически одно и тоже только в полностью гомоиконных

qulinxao3
()
Ответ на: комментарий от MKuznetsov

P-CODE, P-MACHINE, P-SYSTEM http://pascal.hansotten.com/ucsd-p-system/more-on-p-code/

p-code machine https://web.archive.org/web/20140403032535/http://en.wikipedia.org/wiki/P-cod... UCSD Pascal https://web.archive.org/web/20140606042133/http://en.wikipedia.org/wiki/UCSD_...

Виртовские языки Виртовские языки

http://pascal.hansotten.com/ucsd-p-system/more-on-p-code/ P-CODE, P-MACHINE, P-SYSTEM

p-code machine https://web.archive.org/web/20140403032535/http://en.wikipedia.org/wiki/P-cod...

UCSD Pascal https://web.archive.org/web/20140606042133/http://en.wikipedia.org/wiki/UCSD_...

UCSD Pascal был основан на машинной архитектуре p-кода. 
Его вклад в создание этих первых виртуальных машин заключался в 
расширении p-кода от его корней в качестве промежуточного языка 
компилятора до полноценной среды выполнения.
UCSD Pascal p-Machine был оптимизирован для новых небольших 
микрокомпьютеров с адресацией, ограниченной 16 битами (всего 64 
КБ памяти). Джеймс Гослинг называет UCSD Pascal ключевым 
фактором, повлиявшим (наряду с виртуальной машиной Smalltalk ) на 
разработку виртуальной машины Java . 
UCSD p-System была одной из трёх операционных систем, наряду с PC 
DOS и CP/M-86 , которые IBM предлагала для своего оригинального 
IBM PC . [ 1 ] Поставщик SofTech подчеркнул переносимость 
приложений p-Systems, выпустив виртуальные машины на 20 
процессоров на момент выпуска IBM PC. Было предсказано, что 
пользователи смогут использовать приобретенные ими приложения на 
будущих компьютерах под управлением p-System; В рекламе [ 2 ] ее 
называли «Универсальной операционной системой». [ 3 ]

Поиск «p-code pascal»

A Pascal compiler and p-code virtual machine https://github.com/gramster/Pascal?ysclid=lsve35ih52650303698

Pascal to C++ converter https://git.codeproxy.net/knizhnik/ptoc

Forum0888
()
Последнее исправление: Forum0888 (всего исправлений: 7)
Ответ на: комментарий от Smetchik

наилучшим наследником Pascal + шелл есть Python ща c возможным прорывом в mojo и (ею использумый mlir)

oberon-cистема(а blackbox это как inferno для plan9) как и acme - это не состоявшийся(пока) «коммунизм» где все программисты умеют не столько в codemonking :) прочие мягкие навыки - а реально инженера стимпанковского XIX навроде капитана немо которые видят систему в целом от дорожки если не ниже и до ui пользователем воспринимаемый

qulinxao3
()
Ответ на: комментарий от qulinxao3

инженера стимпанковского XIX навроде капитана немо которые видят систему в целом от дорожки если не ниже и до ui пользователем воспринимаемый

Вот такие инженеры для таких же инженеров притащили Qt в C++. Там можно накидывать виджеты на форму мышкой, а можно спуститься на самый низкий уровень и жонглировать байтами (там, где это реально надо).

hobbit ★★★★★
()
Ответ на: комментарий от anonymous

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

Если бы он был хоть кому-то интересен, его бы быстро затолкали во все дыры, куда надо и не надо. Как это произошло с питоном и js. И точно так же тут же бросились бы его развивать до «промышленного», пытаясь навесить гоночный мотор на изначально примитивный трёхколёсный велосипед. «В IT всегда становится негласным стандартом самое всратое решение.» (c)

dimgel ★★★★★
()
Последнее исправление: dimgel (всего исправлений: 1)

Ruby - это очередная попытка сделать лисп «для людей». В отличие от всех остальных довольно успешная. От виртовских языков там разве что элементы синтаксиса.

Gentooshnik ★★★★★
()

Из более-менее близкого - Ada, Которая хоть и не Виртовская, но растёт из Алгола. Оберон усилиями энтузиастов теплится, но как-то так, вяло.

Слухи о смерти Ады сильно преувеличены тащем.

Dark_SavanT ★★★★★
()
Последнее исправление: Dark_SavanT (всего исправлений: 1)
Ответ на: комментарий от praseodim

У него ко всему и всем претензии, разве нет? Он кста сейчас в Черногории побирается (в прямом смысле), закинь великому специалисту на мивину, лол.

anonymous
()

А развиваются ли сейчас виртовские языки?

из не академических примеров:

- Как встраиваемые языки в софт (всякие Embed-Pascal), pascal-script и подобные. Со своими плюшками и ограничениями. Единствено удобный способ написать «инсталляшку в винду» - подучить паскаль

- ST, https://ru.wikipedia.org/wiki/Structured_Text один из стандартов для пром-автоматики. Практически в любом свистке

- easy language https://en.wikipedia.org/wiki/EasyLanguage проприетарно, всякая биржевая торговля

MKuznetsov ★★★★★
()
Последнее исправление: MKuznetsov (всего исправлений: 1)
Ответ на: комментарий от LongLiveUbuntu

У С ноги растут из Фортрана. Почитай первое издание K&R и удивись.

и ещё из BCPL, у которого есть GET вместо #include работающий аналогично секции COMMON

современный BCPL не так уж и плох – например, есть поддержка SDL под Raspberry PI :)) и прозрачная линковка с сями

а Unix первых версий нужно сравнивать с TRIPOS – операционкой на BCPL. ошмётки её есть в AmigaDOS и Exec ядре оттуда.

В общем-то, само ядро амиги классической – это вот этот кусок из BCPL + шелл который System-Startup обрабатывает и подозрительно напоминает куски из сорцов BCPL и TRIPOS (видать, тоже на BCPL написан).

впрочем, там и ARexx есть с «портами приложения», например, вот плюмбинг-или-опасная-игра – смотри картинку с подписью

Above, we can see Ed editing an ARexx script. Below is an AmigaShell window using Ed’s own ARexx port to send instructions to Ed. I have just sent the command T; RP E /g./global./, renaming the compound variable g to the more descriptive global. Click the image for full resolution.

где там qulinxao с acme,инферной, девятым планом и плюмбингом с оберонами?

вот то самое оно: «TrueЪ Unix GUI». вот серьёзно, перечитывал про то как на expect tk-шными десктопными приложениями управляли.

и прослезился: в рексе был круче, фактЪ! ну разве что напоминает QED, был такой редактор.

но rexx – это такой полубейсик/недопитон/скриптоPL1 с человеческим лицом.

в THE, KEDIT, X2 – например, есть человеческий NNTP клиент на православном Rexx-е.

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

anonymous
()
Ответ на: комментарий от anonymous

есть язык(синтаксис и прагматика) -

есть иноязычный

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

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

т.е прематур едюкышн ...

так как «с детства» Информатика Бауэр Гооз - было познавательно что стековая вложенность так очевидная( с детства) а алгол-вселенной - было вау ну нифига себе до массового распространения алгол-мировозрения- это понимание до меня дошло когда ковырял записи активации в javascript в которой(в том варианте о котором я здесь как модельном примере реализации привычного не вполне привычным ибо обычно нет выгоды в таковом)- стек это не явная область памяти с LIFO дисциплинной - а по факту стек на списках - которые легко позволяет организовать кактус(дерево от детей к корню)-для «более лёгкого» организации сопрограмм

т.е забавно как меняется граница существенного несущественного - когда меняется контингент пользователей

https://xlinux.nist.gov/dads/HTML/cactusstack.html

https://en.wikipedia.org/wiki/Parent_pointer_tree

qulinxao3
()
Последнее исправление: qulinxao3 (всего исправлений: 3)
Ответ на: комментарий от Shushundr

ETAOIN SHRLDU тебе в помощь:

  1. пыщь:TheyLive!
  2. нет,вот это вики это 1972 год, между прочим
  3. репка
  4. нет, скорее это
  5. или даже вот это самое
 Как тебе это удалось, Уолтер? - очень почтительно спросил он.
     Я ухмыльнулся.
     - На эту идею меня навела шишка, Джордж. Шишка у Будды. Шишка да  еще
то, что линотип так активно  реагировал  на  все,  чему  можно  обучиться.
Понимаешь, Джордж? Это был совершенно девственный ум,  и  в  нем  не  было
ничего, кроме того, что  в  него  вкладывали  мы.  Он  набирает  книгу  по
рабочему вопросу и  сейчас  же  объявляет  забастовку.  Набирает  любовную
историю и требует, чтобы ему  доставили  еще  один  линотип.  Так  вот,  я
накачал его буддизмом, Джордж. Взял в библиотеке и в  книжной  лавке  все,
что там было о буддизме...
     - Буддизм? Какое отношение буддизм имеет...
     Я встал и ткнул пальцем в Этаоина Шрдлу.
     - Понимаешь ли, Джордж, он верит в то, что набирает. А я накачал  его
религией, которая убедила его в том,  что  все  суета  сует  и  что  нужно
стремиться  к  небытию.  Om  mani  padme  hum  [О,  сокровище  на   лотосе
(санскр.)], Джордж. Взгляни... Ему теперь наплевать, что с ним происходит,
и он даже не замечает, что мы здесь. Он достиг Нирваны и теперь  созерцает
собственный отливной аппарат.

иногда мне чатгопота вот его как раз напоминает, только наоборот

никакой самадхи и просветления в мокши – лишь очередное сплошное колесо дхармы – токмо боль и страдания

anonymous
()
Ответ на: комментарий от Shushundr

или вот тебе inform7 естественноязычный, литературно-грамотный

ещё пару лет назад он был closed source, хотя бинарники Graham Nelson выкладывал с 1990х годов в юзнете..

… ну и Infocom-овский парсер естественноязычный на MDL lisp, конечно же

экзамплы и экзерцисы

хотя это такое себе контролируемый симпл инглиш волапюк подмножество же

Inform:The Program энд зе бук, вполне по Дональд Кнуто-Тех-овски

это конечно же – не настоящий сварщик.

buffalo buffalo buffalo buffalo bufalo он не факт что и распарсит.

но ты обнаружишь ли парадокс китайской комнаты сидя у неё унутре, в будке?

anonymous
()
Ответ на: комментарий от qulinxao3

все эти кактусоеды и спагетти стеки и октопус стейки с трамполинами активно использовались для реализации продолжений с замыканиями.

в алголах и том же PL1 на мой взгляд, ещё были активно используемые области видимости, вложенные

сопрограммы можно было реализовывать ещё в фокале и мумпсе с DO routine/JOB routine

т.е прематур едюкышн …

is root of all evil – make me unlearn this/unsee that? :)

ещё вейнгаарден со своими двухэтажными грамматиками с загибом в правильную семантику метаправил и книжкой про них, и реализацию на них клеточных автоматов сказал:

ну, если у вас есть язык. то на нём надобно уметь выражаться

главное, чтобы коагуляция была лёгкой, а не смешались в кучу, кони, люди и прочия парадигмы

..язык как носитель, алгебра для другого метаязыка…

а вы ноктюрн сыграть могли бы на COMMON GET libhdr ActiveObject extension types?

а то вот в жабаскрипт не докладывают расово верных модулей и истинно правильных first class object, а разгадка проста…

более правильный лисп – это kernel vau expressions либо curl rte the language :)

но массово невозможно научить этим иероглифам чему-то кроме braces language, вот и победил более популярный синтаксически, а не семантически

вэньянь для кого-то тоже сложна

а посему опрощение, и полный пайтон монти и жаваскрипт во все поля, только так победим.

вдругорядь прозреваю – чжэнмин 正名. вот же оно!

начать нужно с исправления имён:

Цзы Лу спросил: «Вэйский правитель намеревается привлечь Вас к управлению государством. Что Вы сделаете прежде всего»?

Учитель ответил: «Необходимо начать с исправления имен».

Цзы Лу спросил: «Вы начинаете издалека. Зачем нужно исправлять имена?»

Учитель сказал: «Как ты необразован, Ю! Благородный муж проявляет осторожность по отношению к тому, чего не знает. Если имена неправильны, то слова не имеют под собой оснований. Если слова не имеют под собой оснований, то дела не могут осуществляться. Если дела не могут осуществляться, то ритуал и музыка не процветают. Если ритуал и музыка не процветают, наказания не применяются надлежащим образом. Если наказания не применяются надлежащим образом, народ не знает, как себя вести. Поэтому благородный муж, давая имена, должен произносить их правильно, а то, что произносит, правильно осуществлять. В словах благородного мужа не должно быть ничего неправильного».
anonymous
()
Ответ на: комментарий от Shushundr

символьной теории искусственный интеллект альфа осознающий сам себя должен же естественно относиться ко всей этой новомодной коннективисткой гатгопоте навязанной полицией тьюринга же с подозрением, жалостью и состраданием – ведь разгадка проста

anonymous
()
Ответ на: комментарий от qulinxao3

чжэнмин, 正名 !

вдругорядь, 道可道非常道

мысль изречённая уже не та же самая

дао о котором можно сказать не есть истинное дао

смотри не левым глазом и не правым.

а ими обоими для 3Dмерности или третьим для 4D-мерности.

anonymous
()
Ответ на: комментарий от qulinxao3

по ссылке вокруг да около parent pointer tree:

это случайно не тот ли берроуз который метод нарезок освоил?

или это синхроничное серендипитичное про аллюзии и коннотации между картиной со стеками с тентаклями и cut-up гипертекстовой постмодернизьмой?

какое отношение вообще имеют между собой тот и этот берроуз, отец и сын, человек и параход – и персистентые структуры данных ксанаду с энтами и енфиладами?

или это –как в анекдоте: четыре разных человека?

anonymous
()
Ответ на: комментарий от anonymous

дедуля-изобретатель делал арифмометры, которые потом писали майнфреймы на алголе ESPOL и NEWP "Nearly Every Word Pascal"

а внук и правнук осилили не только лишь все октопус стейки с тентаклями голый завтрак и метод нарезок

джанки

и бегемоты сварились в своих бассейнах

anonymous
()
Ответ на: комментарий от small-entropy

Ты не там спрашиваешь. Спрашивай на форумах оберонщиков и компонентных паскалистов. В телеге их конфа довольно бодрая. Пилят через одного свои версии оберона. Гугли про «Информатику-21» и тусовку вокруг нее имени покойного физика Ткачева.

anonymous
()
Ответ на: комментарий от qulinxao3

algol->algol W->эйлер(лень смотреть что было раньше эйлер али algol-w напару с Хоаром) ->pASCAl -> modula (1,2,3 )-> oberon

я таки посмотрел: в формате нарезки:

Algol: Algol-58,Algol-60:

-1-> лингвисты залипли на осмыслении семантик call-by-name и type TR=ref T (но так и не допилили систему типов в первоклассные объекты) и двухэтажные семантики в грамматике вейнгаардена, многоязычность рус/англ/нем (то есть, грамматика метаправил это про семантику, а первый этаж – это так, наносное)

трюк Йенсена с call-by-name:

begin
  procedure p (a, b);
    name a, b; integer a, b;
  begin
    for a:=1 step 1 until 10 do
      b := 0
  end p;
  integer i; integer array s [1:10];
  p (i, s[i])
end

-1.5-> Edsger Dijkstra, Jaap Zonneveld -> Algol 60 for the X1

Algol-68: двухэтажные w-грамматики, многоязычность, идентификаторы x.s = s of x похожи на именные группы с пробелами, переопределение синтаксиса и операторов

-2-> Чарльз Хоар и Никлаус Вирт и проч:

March 1970: Minority report, ALGOL Bulletin AB31.1.1 — signed by Edsger Dijkstra, Fraser Duncan, Jan Garwick, Tony Hoare, Brian Randell, Gerhard Seegmüller, Wlad Turski, and Mike Woodger.

Хоар:

«неясность, сложность и сверхамбициозность»

резюме доклада несогласного меньшинства:

«как инструмент надёжного создания сложных программ язык следует признать неудачным»

(этот доклад был запрещён к распространению руководством IFIP).

стандартизация Algol-68: 1962..1968

1965: Никлаус Вирт, Чарльз Хоар: Algol-W 1965: Никлаус Вирт: Euler euler.icon

1966: Никлаус Вирт PL360

как высокоуровневый ассемблер : сравни до кучи, IBM_HLASM Randall Hyde [Art Of Assembly](https://plantation-productions.com/Webster/www.artofasm.com/index.html) HLA

1970: Euclid

Тюринговская лекция Хоара 1980 про этот Minority Report подробнее

Ада: 1975 HOLWG -> 1977: Steelman lanugage requirements, 1979: Project Green Jean Ichbian

1981: Хоар и её обосрал в Тьюринговской лекции

Algol-W ==>Pascal => Standard Pascal, Book by Wirth and Jensen, P2 реализация примерно 1972 (паскаля на паскале) Pascal-P5,P6

документы

впоследствии P2 и потомки перекочевал в книги «конструирование компиляторов»: Н.Вирт и его книги и частично в PL/0 из «алгоритмы+структуры данных=программы»

Compiler Bau уже про Модулу-2, правда, на немецком

то ли в этих двух, то ли в Systematic Programming: An Introduction есть про [stepwise refinement](http://pascal.hansotten.com/uploads/wirth/Program%20development%20by%20step-wise%20refinement%20jan%201971%20002.pdf)

anonymous
()
Ответ на: комментарий от anonymous

про наследников: Pascal-{P5,P6,M,UCSD}, Concurrent Pascal, Pascaline

UCSD p-system: ссылку давал Владимир.

здесь книжку про Apple Pascal System Hyde_P-Source-A Guide to the Apple Pascal System_1983

что интересно – написал тот же самый Randall Hyde, который потом изобрёл HLA.

если таки её почитать про Apple Pascal P-system, там занятно: приводятся 200 с чем-то байткодов p-code, и описывается как относительно просто можно заменять ассемблерными подпрограммами (для 6502, да).

в итоге это подозрительно напоминает то ли шитый код, то ли вот ту самую COMMON секцию из фортрана либо GET из BCPL.

Modula-2 => Lilith

опрощение Модулы-2: Oberon, Oberon-2 => Сeres => Project Oberon =1=> BlackBox Component Pascal,Blackbox =2=> Active Oberon,A2; Zonnon,.NET CLR

про принципы существенных концепций при проектировании оберона как концепта Никлаус Вирт подробно разъяснил в долой жирные программы и в **искусство простоты

про то, как выкинув из модулы-2 небезопасные конструкции, добавив type extension, information hiding и separate compilation получился оберон.

ALGOL-68C и сейчас можно потыкать, при большом желании.

Кен Томпсон как-то в unix history вспоминал, что Stephen R.Bourne – один из авторов ALGOL-68C притащил как-то его и изобрёл Bash shell (оттуда и эти do..od, case..esac,if...fi в Bash)

=== в общем, тенденция должна быть видна по этой нарезке, особенно если её дополнить теми же барроузами:

переносимый ассемблер высокого уровня с человекочитаемым синтаксисом – это PL360, Euler, NEWP/ESPOL, да тот же самый HLA от Randy Hyde.

если мы таки посмотрим на реализацию CTFE в том же HLA – то увидим что, например: шаблоны, STL, объектная система, исключения – реализованы макросами то есть через CTFE времени компиляции.

но это всё-таки ещё ассемблер. то есть: конструкции размера машинное слово, типы данных должны помещаться в регистры общего назначения, никаких тебе first class objects как литералов, непосредственно доступных компилятору: first class continuations вместо модулей времени компиляции, first class environments вместо модулей времени выполнения.

вообще, помимо того что F может означать и переменную, и функцию без параметров – тема с типами высшего порядка, зависимыми типами, тайпклассами и рефлексией и интроспекцией по CTFE typeinfo

– в алголах как ни странно, недоразвита.

хотя на алголе68 вполне можно программировать в функциональном стиле.

если вручную этими объектами второго класса парадигмы объектов первого класса оборачивать.

в общем: переносимым ассемблером высокого уровня вполне мог бы стать алголопаскаль или ада – а не си и BCPL.

anonymous
()
Ответ на: комментарий от anonymous
begin
  procedure p (a, b);
    name a, b; integer a, b;
  begin
    for a:=1 step 1 until 10 do
      b := 0
  end p;
  integer i; integer array s [1:10];
  p (i, s[i])
end

вот в этой конструкции name a,b можно сделать, а как сделать name p например? и потом каким-то образом не просто использовать как символ в символьной теории.

а его метаданные перебрать, свойства времени компиляции.

например, тип возвращаемого значения. и работать с типом как литералом времени компиляции.

то есть: имя должно быть не только возможно разыменовать используя целиком как ссылку, как limited controlled тип.

но и косвенно интроспекцией, интерцессией, рефлексией обойти по метаданным времени компиляции.

и всё это раскручивать макросами через CTFE.

препроцессор в этом случае должен тоже либо понимать CTFE либо как-то организовывать взаимодействие интерпретатора и компилятора.

в общем: eval/apply/evlis/.... надо на call by name семантике переписать.

anonymous
()
Ответ на: комментарий от anonymous

точнее говоря: в раскрутке тела procedure p (a, b); name a,b; вызываемой с параметрами p(i,s[i]) мы должны:

  1. каким-то образом подняться в имени b который фактический s[i] в cимвол s, ну пусть будет локальное имя name c;
  2. понять, что s это array – вычислить из этих параметров символа s локального имени c – в нужные символы типа integer array
  3. понять, как для него посчитать p'length, p'lobound, p'hibound
  4. понять, как в общем случае сделать шаблон метапрограммы m которая выдаст это p.

p = раскрытие макроса m, как должен выглядеть сам шаблон m?

  1. это мы ещё не рассматриваем случай, что p может быть не процедурой, а функцией – то есть, у неё есть result и его typeinfo.

  2. для которых что-то должно происходить в рантайме чтобы можно было выполнить g(p(i,s[i])

в общем, нужно что-то типа UCFS и CTFE из D2 изобретать.

чтобы сделать простую композицию функций.

g(p(s)) <=> g(p(i,s[i])<s>)<p> <=> g(p(j(s)<j>)<s>)<p>

и как-то потом выщемлять типы символов и т.п.

в общем, как это через шаблоны в духе D2 записать примерно понятно.

но что мешает изобразить полноценные first class object на call by name (когда это самое имя лямбды в общем-то и не нужно - нужна её сигнатура, то есть, её тайпинфо) — понятно не совсем.

вот что мешает на алгол68 изобразить более-менее приличный лисп?

anonymous
()