LINUX.ORG.RU

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

 , ,


0

3

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

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

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

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

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

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



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

оказыться

как Собол так и Object Pascal живее всех живых как раз в бабанках - ибо от бобра борба не изыскивают а просто постепенно апгрейдят работающиее новыми компиляторами и новыми синтаксисами в результате «мультипарадигменность» во все поля - рай для эрудитов

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

вот подумал. чего в алгол68 не хватало для полноценного метапрограммирования.

по соглашениям о вызове, о передаче аргументов были:

  1. call by value – по значению
  2. call by ref – по ссылке на значение

менее очевидное:

  1. call by name – по имени символа

здесь 1-2 относятся к рантайму, логично дополнять 3-4 в сторону компайлтайма.

и как-то передавать что-то вроде исчисления высшего порядка над символами:

добавить в алгол новое

  1. call by type либо call by ref name – по ссылке на символ

логично, что 3-4 здесь должны полноценно работать во время компиляции, раскрывая шаблонный код в какие-то всегда корректно типизированные макросы

наподобие CTMP := Compile Time Meta Programming из Converge = метапрограммного расширения питона.

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

то есть, какое-то любое метаданное символа с этим именем.

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

то есть: например написать на таком метаалголе макрос CTMP, CTFE.

например, написать макросом map, foldr, reduce и т.п.

например, в том примере выше передаются p(i,s[i]) как фактические параметры в рантайме, которые отображаются на формальные параметры «по имени символа» procedure p(a,b); name a,b;

из этого можно было бы сделать полноценный map:

  1. из s[i] подняться в s – деструктурировать «структурное имя» в корень имени и прочие уровни

  2. из имени символа s вычислить тип этого символа

  3. из типа символа s получить тип пакета p_s его обрабатывающего

  4. из типа пакета вызывать итератор по контейнеру этого типа

  5. в общем, написать map перебирающий все элементы этого контейнера как CTFE, CTMP макрос времени компиляции

в общем, далее полученный «алгол с макросами» может оказаться полезным:

  1. например, для высокоуровневого представления ассемблера типа HLA, HLASM, PL360 – заменяем переменные на переменные-регистры и высокоуровневые типы на только машинные, помещающиеся в эти переменные-регистры, остальное в сторону полноценного алголопаскаля делаем макросами.

  2. для реализации чего-то типа лиспа или рефала

  3. для раскрутки такого недолиспа в полноценный модульный лисп с first class objects где object=module, environment, type, function, macros, DSL, … etc

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

кстати. странно, что Эдсгер Дейкстра, который писал компилятор алгола 60 для мейнфрейма – не оценил и ниасилил ни лисп, ни программирование на псевдо естественном языке

проекты программирования на естественном языке are doomed to fail

So-called “natural language” is wonderful for the purposes it was created for, such as to be rude in, to tell jokes in, to cheat or to make love in (and Theorists of Literary Criticism can even be content-free in it), but it is hopelessly inadequate when we have to deal unambiguously with situations of great intricacy, situations which unavoidably arise in such activities as legislation, arbitration, mathematics or programming.” [foreword to Teaching and Learning Formal Methods, edited by C. N. Dean and M. G. Hinchey, Academic Press, 1996]

по поводу нотации лиспа

“And even now my first reaction to formulae, written by someone else, is one of repulsion —in particular when an unfamiliar notational convention is used — and when reading an article, my natural reaction is to skip the formulae.” [“My hopes of computing science” (EWD 709)] слона-то он и не приметил – в первом описании лиспа Джона Маккарти, который ещё в синтаксисе M-выражений и тем более в Lisp-2 там как раз про эту самую идею «язык как алгебра, носитель для другого метаязыка»

наверное, потому что

“Some problems are better evaded than solved.” C.A.R. Hoar

хотя сам, разрабатывая компилятор алгола 60 – он фактически этим занимался :)

не только программированием на естественном языке алгола60 – даже компилятор для него написал :))

в разделе «книги и публикации Э. Дейкстры» есть например, подробное описание

ALGOL The Dijkstra Zonneveld ALGOL-60 Compiler for the X1, sources, stories, explanations F.J. Kruseman Aretz

там приведены исходники на Паскале (я так понимаю, для наглядности переписанные) компилятора Э.Дейкстры и Jaap Zonneveld

написано в духе тех же компиляторов P2, p-code, M-code, O-code:

микрокод/байткод для некоторого мейнфрейма, pcom/pint аналогичное

школа Никлауса Вирта: искусство простоты

занятно, но intel тоже пытался влезть в мейнфреймы – с процессором i432: «Performance Effects of Architechtural Complexity in the Intel 432» начинается с описания архитектуры выского уровня вида common semantic model = object model

микрокод/ассемблер этого процессора не просто выскокоуровневый – он даже объектно-ориентированный с защищёнными ссылками на объекты и тентакль-стеками на рис. 2 «The i432 full addresing path» про защищённые указатели и всякие разные режимы адресации.

оставшаяся часть статьи – про то, почему это всё так сильно тормозило (приводится табличка сравнений, сопоставлений с VAX/68k/8086)

в общем, не взлетело у интел с мейнфреймами. по ссылке выше описываются мейнфреймы Unisys на алголе (есть си и позикс).

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

в общем, мейнфреймы на алголе это тоже интересная тема.

судя по описанию того компилятора Дейкстры X1-algol60 реализация на паскале не сильно сложная.

хотя да, тогда возникает (?) : зачем тут нужен алгол а не какой-то оберон, модула или ада.

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

So-called “natural language” is wonderful for the purposes it was created for, such as to be rude in,..

это по поводу формальных и естественных языков.

по поводу нотации лиспа

это не про лисп, а про формулы. https://www.cs.utexas.edu/users/EWD/transcriptions/EWD07xx/EWD709.html

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

да, но лисп в нотации М-выражений – это же тоже про формулы.

про формулы лиспа.

далее заменили М-выражения на S-выражения аспирантом Маккарти который ниасилил нотацию в духе алгола

и получили гомоиконный хак реализации

который по сути ещё более наглядно показывает тот факт, что

код = данные, данные = код, = это где? в пределах какой-то алгебры носителя метаязыка

например, у А. В. Столярова в InteLib это озвучено явно: идея язык С++ как носитель алгебры программ для реализации лиспа

вот тут тоже самое: Дейкстра смотрит в книгу(про М-выражения), правда, напечатанную на газетной бумаге куда словно пирожки заворачивали

а видит фигу: непонятные закорючки на непонятном языке.

и сразу скипает всю формулу лиспа как метациклический вычислитель самого себя самоприменимого: eval на apply и ещё 5 вспомогательных функциях.

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

– Дейкстра ниасилил нотацию М-выражений и не оценил реализацию интерпретатора/компилятора лиспа на лиспе

по аналогии с pcom/pint.

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

вот цитаты дейкстры о лиспе.

https://kazimirmajorinc.com/Documents/Edsger-W-Dijkstra-on-Lisp/index.html

цитато одного из высказываний в яндекс переводе -

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

В то время радикальные новшества LISP были, например, признаны по его характеристике как "самый интеллектуальный способ неправильного использования компьютера", оглядываясь назад, мы видим его радикальную новизну, потому что это было то, что сейчас известно как язык "функционального программирования", в то время как сейчас, 40 лет спустя, функциональное программирование по-прежнему является рассматривается на многих кафедрах CS как нечто слишком причудливое, слишком изощренное, чтобы его можно было преподавать студентам старших курсов. У LISP были свои серьезные недостатки: то, что стало известно как "неглубокая привязка" (и создало рай для хакеров), было обычной дизайнерской ошибкой; кроме того, продвижение идеи о том, что язык программирования должен иметь возможность формулировать свой собственный интерпретатор (который затем можно было бы использовать в качестве определения языка), вызвало много путаницы, поскольку кровосмесительная идея самоопределения была в корне ошибочной. Но, несмотря на эти недостатки, LISP был фантастическим и в долгосрочной перспективе весьма влиятельным достижением, позволившим создавать некоторые из самых сложных компьютерных приложений.

Должен признаться, что я очень медленно оценивал достоинства LISP. Мое первое знакомство состоялось через статью, в которой семантика LISP определялась в терминах LISP, я не видел, какой в этом может быть смысл, я отклонил статью и LISP вместе с ней. Моей второй попыткой было изучение руководства по LISP 1.5 от MIT, которое я не смог прочитать, потому что это было неполное определение языка, дополненное столь же неполным описанием возможной реализации; это руководство было настолько плохо написано, что я не мог воспринимать авторов всерьез и отверг руководство, а вместе с ним и LISP. (Боюсь, что терпимость к неадекватным текстам не была моей главной характеристикой).
alysnix ★★★
()
Ответ на: комментарий от qulinxao3

Дюна поехавшая PL после батлерианского джихада

смотрел старый 2001 года сериал «Дюна» и «Дети Дюны» последыши.

книжку тоже читал.

так там червяка «создатель» называли. вода жизни и прочий метапрог.

в общем, всё по намшубам Энки и барроузовской нарезке «язык это вирус», который – у Берроуза даже определяет мышление до такой степени, что тотально овладевает тобой, OBEY! THEY LIVE! тотальное

в общем, Берроуз пытается ротоскопировать через cut-up method раскадровку в нелинейный нарратив.

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

сколько на монтажном столе театра памяти пытается развязать линейный нарратив навязанный режисёром – экспьрьментами типа машины для сновидений в нелинейный нарратив типа информовского али инфокомовского CYOA, Choose-Your-Own Adventure.

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

которые каждый читатель текстов и смотритель фильмов может невозбранно склеивать самому как ему вздумаеццо – типа милорада павича «хазарский словарь»

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

начиная с уточнения имён, ога.

а вообще, «прибытие» или «история моей жизни» теда чана – опять же, про языки гектапод а и гектапод б.

и частично тральфмаагарцы курта нашего воннегута в «бойне №5, или крестовый поход против детей» – он тоже про это.

про нелинейность времени.

такие дела.

типа «жена путешественника во времени» – они движутся во времени в разные стороны, поэтому возникает квантово запутанный нелинейный нарратив.

который через time paradox всё объясняет, конечно же :))

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

векторную гипертекстовую, например. многомерного времени.

в общем: язык программирования бы подошёл APL, J, Kx DB, Q.

в тему лекции Бекуса Наура «как освободить от фоннеймановского стиля» которым ящерики нас овладевают в линейное время.

на тему асинхронного одновременного сопрограммирования.

первое приближение многомерного времени: это time user, sys, kernel time = 3xN где N=количество процессов.

вместо 1D времени однозадачного доса.

муатдиб такой муатдиб. тот ещё мыщьх.

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

в описании z-машин есть примеры на ZIL, и ссылки на его интерпретаторы и документацию.

Inform7 реализован через «literate programming» inweb инструмент на перле, которым транслируется в Inform6

Inform6 примерно похож на Objective C только объектная модель другая.

библиотеки – стандартная и расширенные на Inform7 называются «Rule Book». и действительно, они написаны как продукционная система правил обработки глаголов с объектами-существительными.

о которых можно рассуждать (например, NPC умеют в инференс примерно уровня PLANNER того же самого).

да и можно например, реализовать лисп на нём самом.

Inform6, игрушка ListOFlists

поиграться в браузере

исходник lists.tar.Z на inform6 реализует интерпретатор лиспа типа схемы, упрощённый

в общем, ещё на inform6 было можно.

на inform7 – как открыли исходники, появился нормальный API встраивания интерпретатора Inform7 в Си-программы.

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

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

да ладно, это же сама его суть, метациклического метапрога самого на себе

anonymous
()

Самый успешный в коммерческом плане язык(для меня). Программа по чтению с rs-232, написанная «на коленке» ещё долго работала не смотря на апдейты ОС ))) А вот потом, по мере изучению программирования фарт стал покидать(

anonymous
()