
Комментарии 4
Хорошая идея языка программирования на русском.
Так как в русском у слов есть рода, может быть добавить псевдонимы для ключевых слов? Вместо “индекс РАВНО индекс_два” Будет “индекс РАВЕН индексу_два”
У одной переменной может быть несколько наименований, задавать их через №псевдоним.
Работа с массивом выглядит монструозно, лучше было бы приравнять круглые скобки к квадратным и объявлять массивы как питоновские кортежи, а обращаться к элементу через “массив(индекс)”, и “словарь(ключ)” для словарей.
Лучше не идти по пути пхп с внешними функциями по отношению к данным, а следовать ООП, чтобы у обьекта были функции, не “изменить_в_массиве(массив, индекс, значение)”, а “массив:изменить(индекс, значение)”, если по какой-то причине невозможно реализовать “массив(индекс) = значение”, или “массив№индекс = значение”.
Синтаксис форматирования строк я бы заменил с {} на %%, чтобы избежать переключения раскладки.
Как я рад получить комментарий с обратной связью) Это ценно!
Касательно псевдонимов для ключевых слов я очень много думал сделать это, но мне казалось, что это какая-то плохая идея. Не знаю почему) Но раз не только мне это в голову пришло, вполне себе можно доработать ЯП чтобы он воспринимал такого рода псевдонимы.
Псевдонимы для переменных - идея классная, но не уверен, что стоит её реализовывать. Но блин, зацепила меня она) Если делать, то я бы что-то типа такого сделал:
ЗАДАТЬ человек = Человек();
СИНОНИМЫ ДЛЯ человек (
человека;
человеку;
люди;
)
И последнее. Мне самому неприятно работать с такими цепочками вызовов “изменить_в_массиве(массив, индекс, значение)”, но дело в том, что FFI интеграция позволяет собирать для LawScript из Python только процедуры. Я думал о том, чтобы дать возможность писать на питоне классы для LawScript, но принял более простое решение, я просто делаю нативные классы на LawScript и в них прячу вызовы процедур на Python. Например, так я сделал класс "Список", чтобы обернуть массивы эти ужасные.
Вот укороченный пример, как я сделал такой класс:
ОПРЕДЕЛИТЬ КЛАСС Список (
ОПРЕДЕЛИТЬ КОНСТРУКТОР (ссылка)(мас=массив()) (
ссылка:_массив = мас;
)
ОПРЕДЕЛИТЬ МЕТОД (ссылка) удалить(индекс) (
ВЕРНУТЬ удалить_из_массива(ссылка:_массив, индекс);
)
ОПРЕДЕЛИТЬ МЕТОД (ссылка) добавить(элемент) (
ВЕРНУТЬ добавить_в_массив(ссылка:_массив, элемент);
)
)
Вот так им можно пользоваться:
ЗАДАТЬ список = Список();
список:добавить(1);
список:добавить(2);
список:добавить(3);
список:длина(); ! 3
список:в_массив(); ! Каст в страшный массив :)
Вот кстати на счет форматирования надо подумать, но тогда придется переписывать все тесты, а мне так не хочется это делать))) Но я прекрасно понимаю, что подход с % реально лучше звучит
Короче говоря, однозначно надо делать синонимы. Пока писал и для переменных тоже захотелось добавить их :)
По адскому синтаксису массивов - вроде бы решение это использовать класс "Список"
А вот про % надо думать, самому не удобно постоянно переключаться, но надо тестовые скрипты переписать :(
Вы можете выбрать jvm вместо питона, и компилировать байт код. Из плюсов: высокая скорость работы (ибо jvm), подробные ошибки, поддерживаемые нативно в байткоде, обширная экосистема java, возможность рефлексии для автобиндов, типобезопасность, ООП из коробки, графика (swing) из коробки, сетевой стек из коробки… и сотни других фич.
СИНОНИМЫ ДЛЯ и подобные конструкции выглядят многословно, так что решите, либо язык многословный и более понятный не программистам, либо более лаконичный (и понятный программистам).
Синонимы можно с небольшим сахаром: ЗАДАТЬ человек (ОН ЖЕ человеку) = Человек()
(ссылка) - может заменить на (сам (ОН ЖЕ мой, моя, моё))
тогда для человека будет: моё:имя = … моя:фамилия = …
И, возможно, от ; в конце строки лучше отказаться, так как для неё нужно зажимать шифт и использовать её для комментариев, а ! зарезервировать под что-то на будущее.
Спасибо за советы) Синонимы для оператора РАВНО я добавил в ЯП - действительно очень удобно. Осталось сделать для остальных, но механизм там универсальный я сделал, можно быстро добавить.
Касательно синонимов для переменных - да, наверное так лучше, но я наверное разделю их на две конструкции:
Было: ЗАДАТЬ человек (ОН ЖЕ человеку) = Человек()
Стало: ЗАДАТЬ человек = Человек()
человек ОН ЖЕ (
человеку
люди
)
Точку с запятой я очень зря как-то в начале добавил и теперь на неё многое завязано. Уже раза два пытался убрать её. Но, увы, пока не совладал со своим же кодом :))) Однако, когда-нибудь я точно её уберу
Как я изобрёл велосипед: создание языка программирования с нуля ради одной игры и Telegram-бота