Size: a a a

Compiler Development

2020 February 22

PS

Peter Sovietov in Compiler Development
Vladimir Kazanov
Не понимаю про "гнуть". Питон и руби вообще сколь угодно строгой семантикой вроде не обладают. Для схемы же сто лет в обед как все есть :-)

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

KR

K R in Compiler Development
Peter Sovietov
Питон и Ruby тоже строгой семантикой обладают, не наговаривайте на них :)
Она просто очень сложная.
источник

PS

Peter Sovietov in Compiler Development
K R
Она просто очень сложная.
Разумеется. Поэтому имеет смысл рассуждать с прикладной точки зрения в духе: "такие-то виды анализа программ эффективно работают с такими-то абстрактными интерпретаторами".
источник

KR

K R in Compiler Development
По-поводу скобок и лиспов. Кажется естественной мысль, что с Лиспами можно сделать то же самое, что сделали с Хаскелем - добавить двумерное (для пуристов "квази двумерное") представление, сократив часть скобок. Причём для этого достаточно просто плагина к редактору (скрывающего часть скобок) и автоформата.

Этим кто-нибудь занимался?
источник

K

Kir in Compiler Development
K R
По-поводу скобок и лиспов. Кажется естественной мысль, что с Лиспами можно сделать то же самое, что сделали с Хаскелем - добавить двумерное (для пуристов "квази двумерное") представление, сократив часть скобок. Причём для этого достаточно просто плагина к редактору (скрывающего часть скобок) и автоформата.

Этим кто-нибудь занимался?
Я делал восстанавливатель структуры из отступов https://bitbucket.org/heimdell/lang/src/50db9863d37ba1be74fcae094496288b39acd8f4/Lexer.hs#lines-78:122
источник

AT

Alexander Tchitchigin in Compiler Development
K R
По-поводу скобок и лиспов. Кажется естественной мысль, что с Лиспами можно сделать то же самое, что сделали с Хаскелем - добавить двумерное (для пуристов "квази двумерное") представление, сократив часть скобок. Причём для этого достаточно просто плагина к редактору (скрывающего часть скобок) и автоформата.

Этим кто-нибудь занимался?
Да Лисп в таком "квазидвумерном" формате спокон веков и пишут. Все Лисп-моды умеют в автоформат. Есть темы, которые просто "приглушают" скобки. Но бывалые Лисперы на них и так внимания не обращают. 🤷‍♀️
источник

AT

Alexander Tchitchigin in Compiler Development
Paredit вообще в "квазидеревянном" режиме работает.
источник

KR

K R in Compiler Development
Alexander Tchitchigin
Да Лисп в таком "квазидвумерном" формате спокон веков и пишут. Все Лисп-моды умеют в автоформат. Есть темы, которые просто "приглушают" скобки. Но бывалые Лисперы на них и так внимания не обращают. 🤷‍♀️
Ну да, это "блочная структура". А общепринятая формализация этой структуры есть?
источник

AT

Alexander Tchitchigin in Compiler Development
K R
Ну да, это "блочная структура". А общепринятая формализация этой структуры есть?
А как должна выглядеть такая формализация?
источник

KR

K R in Compiler Development
Хотя, это же Лисп, какая к чёрту "общепринятая".
источник

PS

Peter Sovietov in Compiler Development
Впервые я идею "двумерного" синтаксиса для Лиспа вычитал в сборнике тьюринговских лауреатов. Марвин Минский в своей лекции ее предлагал. И на тот момент (1969) он был в этой области далеко не первым :)
источник

AT

Alexander Tchitchigin in Compiler Development
Можно сделать диалект Dylan с Python-like syntax. Если такого варианта ещё нет. 😁
источник

PS

Peter Sovietov in Compiler Development
А мне нравится синтаксис Лого. Это ведь тоже Лисп, только упрощенный.
источник

KR

K R in Compiler Development
Peter Sovietov
Впервые я идею "двумерного" синтаксиса для Лиспа вычитал в сборнике тьюринговских лауреатов. Марвин Минский в своей лекции ее предлагал. И на тот момент (1969) он был в этой области далеко не первым :)
Ну тогда на пробелах экономили. А сейчас это совершенно не нужно, кроме того, очень широко распространились программы форматирования. Самое время таки сделать плагин к редактору Vim. 😊
источник

PS

Peter Sovietov in Compiler Development
Вот здесь Брайан Харви показывает, как на Лого написать компилятор Паскаля (ссылка специально для тех, которые "но Лого — это же про черепашек!"): https://people.eecs.berkeley.edu/~bh/pdf/v3ch05.pdf
источник

KR

K R in Compiler Development
Я думаю, что если просто убрать скобочки, заменив их на двумерный синтаксис, читаемости Лиспу это качественно не добавит. Нужно что-то ещё сделать, чтобы читать было легко и приятно.
источник

PS

Peter Sovietov in Compiler Development
K R
Я думаю, что если просто убрать скобочки, заменив их на двумерный синтаксис, читаемости Лиспу это качественно не добавит. Нужно что-то ещё сделать, чтобы читать было легко и приятно.
Да, и это что-то называется "#lang" :)
источник

KR

K R in Compiler Development
Peter Sovietov
Да, и это что-то называется "#lang" :)
Это уже "психология восприятия" 😞. Всякие там дизайн и вёрстка - почему в книге выделять текст курсивом, а не жирным шрифтом. И т.д. Совершенный off-topic.
источник

PS

Peter Sovietov in Compiler Development
K R
Это уже "психология восприятия" 😞. Всякие там дизайн и вёрстка - почему в книге выделять текст курсивом, а не жирным шрифтом. И т.д. Совершенный off-topic.
Во-первых, очень хорошо, что Вы проявляете бдительность на тему возможных оффтопиков в чате. Все бы так, я не шучу!
А по сути — языково-ориентированное программирование это не совсем про дизайн и верстку. См., например, https://cs.brown.edu/~sk/Publications/Papers/Published/cffk-macros-to-dsls/paper.pdf
источник

KR

K R in Compiler Development
Peter Sovietov
Во-первых, очень хорошо, что Вы проявляете бдительность на тему возможных оффтопиков в чате. Все бы так, я не шучу!
А по сути — языково-ориентированное программирование это не совсем про дизайн и верстку. См., например, https://cs.brown.edu/~sk/Publications/Papers/Published/cffk-macros-to-dsls/paper.pdf
Я догадался, что #lang вы имели ввиду директиву Racket (или что-то подобное).

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

А проблема Лиспа в том, что он плохо читаем человеком (а машиной отлично). Частично это исправляется блочной структурой, но явно недостаточно. Раскрашивание вроде помогает. Может быть ещё что-то?

И когда вы строите DSL эта проблема восприятия встаёт в полный рост.
источник