Comments 24
Я прочитал какой-то текст.
Наверное это весь комментарий, который я хотел бы написать к этой статье.
Загони тот экскаватор на участок сортирную яму выкопать — там цветочки, там картошка, там сад, там труба газовая торчит.
Смотрели сюда?
Смотрел, это был один из упоминаемых вариантов, который я отклонил. Он легкий, без jQuerry, но мне не понравилась отзывчивость на мышь — при движении даже со средней скоростью разделитель отрывался от указателя и замирал на месте отрыва. Допускаю, что я могу быть необъективным, но тогда это сыграло свою роль.
Для примера надо было еще заменить все маленькие i
на скриншоте на большие. И получился бы отличный пример как не стоит именовать переменные
Ну зачем же писать ещё один интерпретатор брейнфака? :-) Я вот пытаюсь взять идеи лиспа и сделать язык с человеческим лицом. Моя идея в том, чтобы избавиться от бесконечных скобочек и хаотичного форматирования в пользу формата, заточенного для AST: tree — дерево типизированных узлов и ничего более.
Для примера приведу один из тестов, в котором указан эквивалентный код на лиспе:
test
name \get last element of list
lisp \( car ( last '( one two three ) ) )
case tail
one
two
three
case three
Тут мы создаём список из 3 элементов и получаем из него последний. Не смотря на чуть большую "объёмность", язык jack значительно проще для восприятия при не меньшей мощности.
Я не большой спец в лиспе. Он меня пугает, как и 90% разработчиков. Думаю изменение синтаксиса исправит эту ситуацию. Буду рад дельным советам.
Каждый кулик свои предпочтения защищает. Мне, например, скобочки ничуть не мешают и выглядят очень по-человечески. Впрочем, вы можете выйти с вашим предложением к тому же Ричу Хикки, напишете ему про то, зачем он писал "ещё один интерпретатор брейнфака" и как изменение синтаксиса и убирание скобочек увеличит его комьюнити в 9 раз (придут 90% бывших напуганных разработчиков).
UPD: простите, ошибся — конечно же в 10 раз
Нормального разработчика нормальные языки не пугают — ни лисп, ни хаскель, ни R. Common lisp крайне практичный инженерный язык, нет смысла делать что-то другое «на идеях лиспа», ибо получится явно хуже. Если хочется более понятного и «чистого» (в смысле научности) языка — то есть scheme, тоже очень достойная штука, особенно если это racket, но в плане библиотек и общей взрослости CL всё-таки на голову выше.
И да, синтаксис — это не идея лиспа, это следствие. Если синтаксис поменять, то лисп как раз потеряет одну из своих основных идей — регулярность/консистентность.
dylan, python — я не увидел в них ничего похожего на лисп. Обычные ООП языки с куцым метапрограммированием в рантайме.
Common lisp крайне практичный инженерный язык, нет смысла делать что-то другое «на идеях лиспа», ибо получится явно хуже.
Необоснованное утверждение. Вы считаете лисп верхом совершенства?
Если синтаксис поменять, то лисп как раз потеряет одну из своих основных идей — регулярность/консистентность.
Я вот предложил другой синтаксис, который кроме регулярности/консистентности имеет ещё и такое немаловажное качество, как гарантированная удобочитаемость (невозможно отформатировать неудобочитаемо, минимум визуального шума). Что вы скажете об этой идее?
Вы считаете лисп верхом совершенства?
А разве в этом кто-то сомневается (из тех, кто знает CL не понаслышке)?
Не дружелюбен к новичкам — уже не идеал.
Обоснуйте.
Для начала, он вообще не похож ни на что, привычное новичку.
Новичку вообще никакой язык не привычен.
Разве что на Пайтон и Ямл похож вложением отступами.
Python, YAML, HAML, Jade, CoffeeScript… Их много и с каждым годом появляется всё больше. Как вы думаете, почему?
Далее вы почему-то пишете про язык view.tree
, а не про формат tree
и уж тем более не про язык jack.tree
. Но ладно, давайте разберём и его, раз он вызывает у вас столько боли...
предлагается самостоятельно исследовать правила синтаксиса и семантики вашего языка на основе примера. Сомнительно, что это под силу большинству новичков.
Как раз таки большинство новичков именно так и изучают — смотрят примеры, изменяют их, и смотрят, что получается. Новички не читают документацию — это факт. А ведь в ней расписано, что означает каждая конструкция...
Для начала, на официальном сайте фреймворка есть только примеры.
Может потому, что это не "оффициальный сайт", а демонстрационное приложение? "Оффициальный сайт" — страница на гитхабе.
в Readme дойти до места, где появляются примеры шаблонов, пройти по ссылке на компонент (!) $mol_view, а там, в свою очередь, дойти до раздела
Как вы считаете, может быть выделить эту ссылку капсом?
переменная $my_button имеет значение $mol_view (это чуть теплее, но в очень грубом приближении)
Да нет, это действительно так: $my_button возвращает $mol_view с переопределёнными свойствами. Следующие два кода семантически эквивалентны:
$my_button $mol_view
title \hello
Button $mol_view
title \hello
Разница лишь в том, что первый код объявляет класс, а второй — локальную фабрику.
Вдобавок, позже окажется, что знак доллара здесь обязателен и указывает на то, что это именно имя класса (то есть компонента).
Все глобальные имена в $mol начинаются с доллара. Не важно, класс ли это, или функция, или поле, добавляемое в объект примесью.
Далее с типичным пайтоновским вложением описываются методы описываемого класса в виде пары метод-реализация.
Описываются свойства со значениями по умолчанию. Но компилируется это в полиморфные методы, да.
И это в то время, когда практически любой программист сразу же воспринял бы значение как строковую константу будь она заключена в кавычки.
Как вы думаете, почему в YAML есть 6 форм записи строк, только 2 из которых — в кавычках? Почему в PHP есть 5 форм записи строк, только 2 из которых — в кавычках? И почему в tree достаточно лишь одной формы, и та — без кавычек?
Здесь за именем метода следует обычный слэш, а далее просто список его значений без какого-либо дополнительного синтаксиса.
А зачем тут ещё какой-либо дополнительный синтаксис? Что может быть естественней, чем каждый элемент с новой строки?
При этом с дефиса ВНЕЗАПНО объявляются комментарии, что неожиданно для знающих синтаксис Ямл или Маркдаун.
И ВНЕЗАПНО совершенно обыденная вещь для знающих синтаксис SQL, HTML, XML, SGML.
указать звёздочку, и тогда дочерние пары идентификаторов ВНЕЗАПНО становятся ключом и значением такого массива. То есть ваш синтаксис контекстно зависим.
Любой язык со значимыми отступами контекстно зависим. Я даже скажу более — любой сколь-нибудь полезный язык контекстно зависим.
Во-первых, они способны сами порождать методы создаваемого класса, притом, мемоизированные.
Возможность совмещать использование и объявление — весьма приятная особенность языка, позволяющая каждому подкомпоненту выделять отдельное свойство в родительском компоненте, не теряя при этом визуальную иерархию компонент.
Во-вторых, фоллбэк к дефолтному значению передаётся пробелом
Это не фолбэк, а просто дефолтное значение, которое в дальнейшем можно переопределить, да. И задаётся дефолтное значение вложенным узлом, а не пробелом. Пробелы лишь разделяют имена узлов в упрощённой записи. Но вложенный узел может быть и на отдельной строке.
передача параметра через ?, а указание ключа через!.. Вряд ли какой-либо общеизвестный синтаксис применяет такие неочевидные обозначения для часто используемых операций.
Предложите синтаксис по лучше.
Вот и получается, что Лисп, где практически всё определяется структурой (функция значение1 значение2 значение3...) намного очевиднее, а потому дружелюбнее, новичкам.
Если вам лень ходить по ссылкам, то замечу, что в jack.tree структура столь же тривиальная:
функция
значение1
значение2
значение3
Liscript — web REPL: поцелуи, велосипеды и экскаваторы