Comments 19
А поясните задачу подробнее, сжатое абстрактное описание не совсем объясняет зачем понадобился еще один новый узкоспецифичный язык, дублирующий уже имеющиеся.
Хотелось бы увидеть модель взаимодействия между человеком и программой, и объяснение, какие инструменты необходимы, но не доступны в языках общего назначения.
1) Во-первых, совершенно неправильно реализовать отдельный интерпретатор для узкого подмножества или модифицированного множества грамматики существующего языка и назвать его тем же именем. Нам не нужна полная мощь вариативность конструкций современного языка, особенно «мульти – парадигменного» со всей трудоемкостью поддержки стандарта в некоторой версии.
2) При эволюции существующих языков совместимость с прошлыми версиями может быть нарушена. Наше базовое требование – полная работоспособность исходного текста (не байт-кода) при неизбежном расширении языка. По этой причине мы зарезервировали под верхний регистр все служебные идентификаторы, чтобы исключить риски попадания пользовательских идентификаторов в будущие зарезервированные слова.
3) У нас своеобразная концепция связывания компонентов в крупные системы, которая пока прямо не воспроизводится в известных нам языках. Частично это можно решить вариантом с условной компиляцией и директивами (pragma) интепретатору, но в итоге получится не очень хорошо.
Чтобы сделать низким порог освоения мы используем хорошо знакомые всем синтаксические элементы, в нескольких следующих статьях расскажу о логике отбора. Здесь я вдохновлен циклом Robert Nystrom по Lox Language craftinginterpreters.com/the-lox-language.html Даже если вы не совсем согласны со всеми тезисами автора по его учебному языку Lox, но сама работа просто замечательная.
Как я понимаю, ваша цель — создать систему, которая может корректировать сама себя, при этом начальное зерно задается программистом. Т.е. утрированно, вы создаете высокоуровневый аналог примитивной машины Тьюринга, которая идя по ленте, технически может перезаписывать части этой ленты для адаптации программы на лету.
Но мне все равно не совсем ясна задача, которая будет решаться такой системой. В статье как пример используется gcd. Мы хотим от системы, которой на вход подана gcd реализация, некоторой трансформации этой программы. Как будет проведена трансформация — на уровне исходного кода, байт кода или ассемблерных инструкций нам не принципиально. Но почему мы хотим трансформацию, почему конкретную трансформацию, и что мы получим как результат трансформации — вот на эти вопросы хотелось бы получить ответы.
Есть гипотезы, как частным образом решить эту главную проблему для программ, близких к игровым. Здесь очень нужен язык, удобный для экспериментов. Именно поэтому важны те тезисы, которые описаны в статье, в том числе по абсолютной исполнимости однажды написанных программных компонентов при расширении языка.
Очередное испытание GPT-3 завершено успешно. Только один прокол: "Нет" — не слишком удачное название для языка.
Если уж речь зашла о взаимодействии программных агентов с исходным кодом и генерации кода то собственно диалект Lisp'a был бы отличным кандидатом, какие особенности вашего языка делают его лучшим выбором в вашей задаче?
Ну, положим для арифметики можно макрос наваять. Базовые циклы тоже есть, это не хаскел, можно жить без рекурсии, но зачем? Лисп ведь тем и хорош, что для людей можно сделать dsl, при этом сохраняя гомоиконность и полную мощь для машины.
А так не ясно чем это лучше обычного чтовыизучалившколе?
Вот тема «чтовыизучалившколе» мне кажется очень актуальна. Я видел недавно как школа предлагала архаично выглядещую среду с сомнительным названием «КУМИР». Полагаю, это лучшее средство отбить охоту программировать вообще. А есть ли сейчас такие приложения, которые позволяют быстро в игровой манере с удовольствием на алгоритмическом языке начать программировать игры и головоломки без изучения сложных сопутствующих фреймвороков и библиотек вида XCode (не важно на каком языке)?
Лисп имеет свою органичную логику, вероятно, не самая красивая идея навешивать дополнения, чтобы его приблизить к «императивному» стилю мышления.
ну что вы, лисп мультипарадигменный язык, имеющий в том числе и императивные возможности. Кроме того "лиспов" существует много и создать еще один вполне легко и логично.
А есть ли сейчас такие приложения, которые позволяют быстро в игровой манере с удовольствием на алгоритмическом языке начать программировать игры и головоломки без изучения сложных сопутствующих фреймвороков и библиотек вида XCode (не важно на каком языке)?
как насчет scratch?
Какая связь между обратной польской записью и лиспом?
Hi Programming Language