К слову, избавился от точек с запятой. Теперь они не обязательны. Но и работать они стали "правильно"! Раньше, они просто были, а теперь через них можно строить цепочки выражений:
ЗАДАТЬ число = 1; число = число + 1; вывод(в_строку(число))
Про оператор ОН ЖЕ Я все еще думаю, потому что его проще заменить на
ЗАДАТЬ ( человек = 1 человеку = человек человека = человек )
И не придется вводить новый оператор, а это сделать просто синтаксическим сахаром, который на самом деле будет компилироваться в такое:
ЗАДАТЬ человек = 1 ЗАДАТЬ человеку = человек ЗАДАТЬ человека = человек
А, еще добавил оператор ОТЛОЖИТЬ работает в точности как defer в go, только на уровне блока кода, где был объявлен, а не на уровне всей функции.
Спасибо за советы) Синонимы для оператора РАВНО я добавил в ЯП - действительно очень удобно. Осталось сделать для остальных, но механизм там универсальный я сделал, можно быстро добавить.
Касательно синонимов для переменных - да, наверное так лучше, но я наверное разделю их на две конструкции:
Было: ЗАДАТЬ человек (ОН ЖЕ человеку) = Человек() Стало: ЗАДАТЬ человек = Человек() человек ОН ЖЕ ( человеку люди )
Точку с запятой я очень зря как-то в начале добавил и теперь на неё многое завязано. Уже раза два пытался убрать её. Но, увы, пока не совладал со своим же кодом :))) Однако, когда-нибудь я точно её уберу
Как я рад получить комментарий с обратной связью) Это ценно!
Касательно псевдонимов для ключевых слов я очень много думал сделать это, но мне казалось, что это какая-то плохая идея. Не знаю почему) Но раз не только мне это в голову пришло, вполне себе можно доработать ЯП чтобы он воспринимал такого рода псевдонимы.
Псевдонимы для переменных - идея классная, но не уверен, что стоит её реализовывать. Но блин, зацепила меня она) Если делать, то я бы что-то типа такого сделал:
ЗАДАТЬ человек = Человек();
СИНОНИМЫ ДЛЯ человек (
человека;
человеку;
люди;
)
И последнее. Мне самому неприятно работать с такими цепочками вызовов “изменить_в_массиве(массив, индекс, значение)”, но дело в том, что FFI интеграция позволяет собирать для LawScript из Python только процедуры. Я думал о том, чтобы дать возможность писать на питоне классы для LawScript, но принял более простое решение, я просто делаю нативные классы на LawScript и в них прячу вызовы процедур на Python. Например, так я сделал класс "Список", чтобы обернуть массивы эти ужасные.
Вот укороченный пример, как я сделал такой класс:
ОПРЕДЕЛИТЬ КЛАСС Список (
ОПРЕДЕЛИТЬ КОНСТРУКТОР (ссылка)(мас=массив()) (
ссылка:_массив = мас;
)
ОПРЕДЕЛИТЬ МЕТОД (ссылка) удалить(индекс) (
ВЕРНУТЬ удалить_из_массива(ссылка:_массив, индекс);
)
ОПРЕДЕЛИТЬ МЕТОД (ссылка) добавить(элемент) (
ВЕРНУТЬ добавить_в_массив(ссылка:_массив, элемент);
)
)
Вот так им можно пользоваться:
ЗАДАТЬ список = Список();
список:добавить(1);
список:добавить(2);
список:добавить(3);
список:длина(); ! 3
список:в_массив(); ! Каст в страшный массив :)
Вот кстати на счет форматирования надо подумать, но тогда придется переписывать все тесты, а мне так не хочется это делать))) Но я прекрасно понимаю, что подход с % реально лучше звучит
Короче говоря, однозначно надо делать синонимы. Пока писал и для переменных тоже захотелось добавить их :)
По адскому синтаксису массивов - вроде бы решение это использовать класс "Список"
А вот про % надо думать, самому не удобно постоянно переключаться, но надо тестовые скрипты переписать :(
Пришел сказать спасибо за советы) Добавил в язык синонимы) Теперь конструкции:
1 РАВНО 1илияблоки РАВНЫ 4Будут валидны)
Указал Вас в релизе) Хотя, кроме меня, за этими релизами никто не смотрит, но дань уважения отдать стоило! :))
https://github.com/B-E-R-K-Y-T/LawScript/releases/tag/Release-version-0.0.8
К слову, избавился от точек с запятой. Теперь они не обязательны. Но и работать они стали "правильно"! Раньше, они просто были, а теперь через них можно строить цепочки выражений:
ЗАДАТЬ число = 1; число = число + 1; вывод(в_строку(число))Про оператор
ОН ЖЕЯ все еще думаю, потому что его проще заменить наЗАДАТЬ (
человек = 1
человеку = человек
человека = человек
)
И не придется вводить новый оператор, а это сделать просто синтаксическим сахаром, который на самом деле будет компилироваться в такое:
ЗАДАТЬ человек = 1
ЗАДАТЬ человеку = человек
ЗАДАТЬ человека = человек
А, еще добавил оператор
ОТЛОЖИТЬработает в точности какdeferв go, только на уровне блока кода, где был объявлен, а не на уровне всей функции.К JWM пока даже не приступал - страшно :))
Спасибо за советы) Синонимы для оператора РАВНО я добавил в ЯП - действительно очень удобно. Осталось сделать для остальных, но механизм там универсальный я сделал, можно быстро добавить.
Касательно синонимов для переменных - да, наверное так лучше, но я наверное разделю их на две конструкции:
Было: ЗАДАТЬ человек (ОН ЖЕ человеку) = Человек()
Стало: ЗАДАТЬ человек = Человек()
человек ОН ЖЕ (
человеку
люди
)
Точку с запятой я очень зря как-то в начале добавил и теперь на неё многое завязано. Уже раза два пытался убрать её. Но, увы, пока не совладал со своим же кодом :))) Однако, когда-нибудь я точно её уберу
Как я рад получить комментарий с обратной связью) Это ценно!
Касательно псевдонимов для ключевых слов я очень много думал сделать это, но мне казалось, что это какая-то плохая идея. Не знаю почему) Но раз не только мне это в голову пришло, вполне себе можно доработать ЯП чтобы он воспринимал такого рода псевдонимы.
Псевдонимы для переменных - идея классная, но не уверен, что стоит её реализовывать. Но блин, зацепила меня она) Если делать, то я бы что-то типа такого сделал:
И последнее. Мне самому неприятно работать с такими цепочками вызовов “изменить_в_массиве(массив, индекс, значение)”, но дело в том, что FFI интеграция позволяет собирать для LawScript из Python только процедуры. Я думал о том, чтобы дать возможность писать на питоне классы для LawScript, но принял более простое решение, я просто делаю нативные классы на LawScript и в них прячу вызовы процедур на Python. Например, так я сделал класс "Список", чтобы обернуть массивы эти ужасные.
Вот укороченный пример, как я сделал такой класс:
Вот так им можно пользоваться:
Вот кстати на счет форматирования надо подумать, но тогда придется переписывать все тесты, а мне так не хочется это делать))) Но я прекрасно понимаю, что подход с % реально лучше звучит
Короче говоря, однозначно надо делать синонимы. Пока писал и для переменных тоже захотелось добавить их :)
По адскому синтаксису массивов - вроде бы решение это использовать класс "Список"
А вот про % надо думать, самому не удобно постоянно переключаться, но надо тестовые скрипты переписать :(