Обновить

Как я изобрёл велосипед: создание языка программирования с нуля ради одной игры и Telegram-бота

Уровень сложностиСредний
Время на прочтение20 мин
Охват и читатели11K
Всего голосов 12: ↑12 и ↓0+12
Комментарии4

Комментарии 4

Хорошая идея языка программирования на русском.

Так как в русском у слов есть рода, может быть добавить псевдонимы для ключевых слов? Вместо “индекс РАВНО индекс_два” Будет “индекс РАВЕН индексу_два”

У одной переменной может быть несколько наименований, задавать их через №псевдоним.

Работа с массивом выглядит монструозно, лучше было бы приравнять круглые скобки к квадратным и объявлять массивы как питоновские кортежи, а обращаться к элементу через “массив(индекс)”, и “словарь(ключ)” для словарей.

Лучше не идти по пути пхп с внешними функциями по отношению к данным, а следовать ООП, чтобы у обьекта были функции, не “изменить_в_массиве(массив, индекс, значение)”, а “массив:изменить(индекс, значение)”, если по какой-то причине невозможно реализовать “массив(индекс) = значение”, или “массив№индекс = значение”.

Синтаксис форматирования строк я бы заменил с {} на %%, чтобы избежать переключения раскладки.

Как я рад получить комментарий с обратной связью) Это ценно!

Касательно псевдонимов для ключевых слов я очень много думал сделать это, но мне казалось, что это какая-то плохая идея. Не знаю почему) Но раз не только мне это в голову пришло, вполне себе можно доработать ЯП чтобы он воспринимал такого рода псевдонимы.

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


ЗАДАТЬ человек  = Человек();
СИНОНИМЫ ДЛЯ человек (
    человека;
    человеку;
    люди;
)




И последнее. Мне самому неприятно работать с такими цепочками вызовов “изменить_в_массиве(массив, индекс, значение)”, но дело в том, что FFI интеграция позволяет собирать для LawScript из Python только процедуры. Я думал о том, чтобы дать возможность писать на питоне классы для LawScript, но принял более простое решение, я просто делаю нативные классы на LawScript и в них прячу вызовы процедур на Python. Например, так я сделал класс "Список", чтобы обернуть массивы эти ужасные.

Вот укороченный пример, как я сделал такой класс:

ОПРЕДЕЛИТЬ КЛАСС Список (
    ОПРЕДЕЛИТЬ КОНСТРУКТОР (ссылка)(мас=массив()) (
        ссылка:_массив = мас;
    )

    ОПРЕДЕЛИТЬ МЕТОД (ссылка) удалить(индекс) (
        ВЕРНУТЬ удалить_из_массива(ссылка:_массив, индекс);
    )

    ОПРЕДЕЛИТЬ МЕТОД (ссылка) добавить(элемент) (
        ВЕРНУТЬ добавить_в_массив(ссылка:_массив, элемент);
    )


) 


Вот так им можно пользоваться:

ЗАДАТЬ список = Список();

список:добавить(1);
список:добавить(2);
список:добавить(3);

список:длина(); ! 3

список:в_массив(); ! Каст в страшный массив :)




Вот кстати на счет форматирования надо подумать, но тогда придется переписывать все тесты, а мне так не хочется это делать))) Но я прекрасно понимаю, что подход с % реально лучше звучит

Короче говоря, однозначно надо делать синонимы. Пока писал и для переменных тоже захотелось добавить их :)

По адскому синтаксису массивов - вроде бы решение это использовать класс "Список"

А вот про % надо думать, самому не удобно постоянно переключаться, но надо тестовые скрипты переписать :(

Вы можете выбрать jvm вместо питона, и компилировать байт код. Из плюсов: высокая скорость работы (ибо jvm), подробные ошибки, поддерживаемые нативно в байткоде, обширная экосистема java, возможность рефлексии для автобиндов, типобезопасность, ООП из коробки, графика (swing) из коробки, сетевой стек из коробки… и сотни других фич.

СИНОНИМЫ ДЛЯ и подобные конструкции выглядят многословно, так что решите, либо язык многословный и более понятный не программистам, либо более лаконичный (и понятный программистам).

Синонимы можно с небольшим сахаром: ЗАДАТЬ человек (ОН ЖЕ человеку) = Человек()

(ссылка) - может заменить на (сам (ОН ЖЕ мой, моя, моё))

тогда для человека будет: моё:имя = … моя:фамилия = …

И, возможно, от ; в конце строки лучше отказаться, так как для неё нужно зажимать шифт и использовать её для комментариев, а ! зарезервировать под что-то на будущее.

Спасибо за советы) Синонимы для оператора РАВНО я добавил в ЯП - действительно очень удобно. Осталось сделать для остальных, но механизм там универсальный я сделал, можно быстро добавить.

Касательно синонимов для переменных - да, наверное так лучше, но я наверное разделю их на две конструкции:

Было: ЗАДАТЬ человек (ОН ЖЕ человеку) = Человек()
Стало: ЗАДАТЬ человек = Человек()
человек ОН ЖЕ (
человеку
люди
)


Точку с запятой я очень зря как-то в начале добавил и теперь на неё многое завязано. Уже раза два пытался убрать её. Но, увы, пока не совладал со своим же кодом :))) Однако, когда-нибудь я точно её уберу

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации