Лингвофорум

Общий раздел => Наука и техника => Компьютеры => Тема начата: Алексей Гринь от января 17, 2015, 17:21

Название: Скриптовый язык Гриня. Кто-нибудь потестит?
Отправлено: Алексей Гринь от января 17, 2015, 17:21
Первый публичный релизенг. См. прикрепление. К сожалению, только Windows/x86 пока что. Интересно знать, запустится ли на других машинах вообще (не проверял). (И что насчёт WOW64?)

Фичи:
* статически типизированный
* объектно-ориентированный во все поля (по семантике близок к C#)
* garbage-collected
* рефлективный
* JIT-компилируемый
* легко встраиваемый, легковесный (виртуальная машина - 472 КБ), расширяемый
* большой фокус на замыканиях

Основное применение - небольшие такие обёртки вокруг нативного кода и просто для l33t-хэкинга.

Особенности

В данной версии есть известные проблемы/баги:
а) Запуск скрипта увеличивается прямо пропорционально размеру скрипта, так как всё предкомпилируется сразу (за исключением  managed-to-native callback transition thunks). В данный момент я это обхожу с помощью SplashScreen's (не включено в данный релиз)
б) Если valuetypes рекурсивно ссылаются друг на друга, может произойти segfault (руки не дошли).
в) Сборщик мусора примитивный, но пока мне хватает.
г) Стандартная библиотека недоделанная и куцая (руки не дошли).

В релизе есть следующие файлы
ussr.exe - запускатель скриптов в консоли
ussr-win.exe - запускатель скриптов без консоли
ussrvm10.dll - сама виртуальная машина, независима от ussr.exe
here.bat - для удобного открытия консоли в текущей папке
run-helloworld.bat - сюда можно тыкнуть в первый раз для проверки работы, должен появиться MessageBox. Здесь же можно посмотреть, как вызывать скрипты (ussr /source:path)
папка base - базовые классы
папка examples - примеры на синтаксис и семантику
папка misc/sovietscript.h - заголовочные файлы для общения с VM напрямую (недотестено)
папка misc/sovietscript_notepad++_theme.xml - тема для подсветки синтаксиса Notepad++
Название: Скриптовый язык Гриня. Кто-нибудь потестит?
Отправлено: Wolliger Mensch от января 17, 2015, 17:30
Как-то неинтересно. Вы бы лучше написали бы понятный язык программирования для страдающих математическим кретинизмом. Было бы куда полезнее. :yes:
Название: Скриптовый язык Гриня. Кто-нибудь потестит?
Отправлено: Алексей Гринь от января 17, 2015, 18:11
Цитата: Wolliger Mensch от января 17, 2015, 17:30
Как-то неинтересно
Тут не в интересности дело, а в решении конкретных задач: скриптование С-кода без тонн костылей, как это любят другие языки программирования.
Название: Скриптовый язык Гриня. Кто-нибудь потестит?
Отправлено: Тайльнемер от января 17, 2015, 18:54
Цитата: Wolliger Mensch от января 17, 2015, 17:30
для страдающих математическим кретинизмом
Это вы о себе? (http://lingvowiki.info/wiki/images/5/5a/Sm_eek.svg)

Цитата: Алексей Гринь от января 17, 2015, 17:21
ussr
Как расшифровывается?
Название: Скриптовый язык Гриня. Кто-нибудь потестит?
Отправлено: Алексей Гринь от января 17, 2015, 19:18
Цитата: Тайльнемер от января 17, 2015, 18:54
Как расшифровывается?
The Union of Soviet Socialist Republics
Название: Скриптовый язык Гриня. Кто-нибудь потестит?
Отправлено: Wolliger Mensch от января 17, 2015, 20:58
Цитата: Тайльнемер от января 17, 2015, 18:54
Это вы о себе? (http://lingvowiki.info/wiki/images/5/5a/Sm_eek.svg)

Ну как сказать. Механически запоминая, я осиливал даже интегралы в своё время и какие-то неестественные для себя геометрические загогулины. И программировал для своих нужд, также опираясь на механическое запоминание и широкую аналогию в действиях. Но понятно было, что далеко так не уедешь. Всегда мечтал о понятном языке программирования. С большим чаянием читал про якобы простые и понятные широким массам языки программирования. Всё оказалось блефом: возможно, это языки действительно простые — для людей с математическим складом ума. Но за их пределы простота, по-моему, никогда не выходила. :'(
Название: Скриптовый язык Гриня. Кто-нибудь потестит?
Отправлено: Wolliger Mensch от января 17, 2015, 20:59
Цитата: Алексей Гринь от января 17, 2015, 18:11
Тут не в интересности дело...

Как это? Нет в жизни человека вещей, отношение к которым не зависело бы от интересности.
Название: Скриптовый язык Гриня. Кто-нибудь потестит?
Отправлено: Алексей Гринь от января 17, 2015, 21:11
Цитата: Wolliger Mensch от января 17, 2015, 20:59
Как это? Нет в жизни человека вещей, отношение к которым не зависело бы от интересности.
Есть ещё просто желание сделать чистую легковесную систему под себя, без миллиарда костылей и непонятных зависимостей и registry и whatnot.

Хочется жить в чистоте, а не в грязи.
Название: Скриптовый язык Гриня. Кто-нибудь потестит?
Отправлено: Алексей Гринь от января 17, 2015, 21:16
Цитата: Wolliger Mensch от января 17, 2015, 20:58
Всегда мечтал о понятном языке программирования. С большим чаянием читал про якобы простые и понятные широким массам языки программирования. Всё оказалось блефом: возможно, это языки действительно простые — для людей с математическим складом ума. Но за их пределы простота, по-моему, никогда не выходила. :'(
Э, большое количество кода мало имеет общего с математикой. Это просто объекты и команды к ним на вполне понятном английском языке. Можно спокойно программировать сложные приложения, почти ничего не шаря в математике. Просто используя готовые библиотеки. То есть многие приложения это просто набор готовых блоков, которых ты соединяешь собственным кодом-«клеем».

Ну вот что непонятного в:

окно = создатьОкно();
окно.показать();

?

Другое дело когда пишешь middleware, типа моего вот ГриньСкрипта, или мой UI-фреймворк с 3d-ускорением, тут нужно знать множество тонкостей. Это я один такой дурак; другие же люди не парятся и используют готовые middleware (блоки кода).
Название: Скриптовый язык Гриня. Кто-нибудь потестит?
Отправлено: Wolliger Mensch от января 18, 2015, 01:55
Цитата: Алексей Гринь от января 17, 2015, 21:16
Ну вот что непонятного в:

окно = создатьОкно();
окно.показать();

Зачем там равно? Что значат скобки? Почему во второй строке точка? (http://www.kolobok.us/smiles/standart/popcorm2.gif)
Название: Скриптовый язык Гриня. Кто-нибудь потестит?
Отправлено: Bhudh от января 18, 2015, 02:49
Цитата: Wolliger Mensch от января 18, 2015, 01:55Зачем там равно?
Чтобы показать что окно равно результату действия создатьОкно, которое
Цитата: Wolliger Mensch от января 18, 2015, 01:55значат скобки

Цитата: Wolliger Mensch от января 18, 2015, 01:55Почему во второй строке точка?
Потому, что так разделяются объект окно и его действие показать(ся), применение которого (действия)
Цитата: Wolliger Mensch от января 18, 2015, 01:55значат скобки
Название: Скриптовый язык Гриня. Кто-нибудь потестит?
Отправлено: Тайльнемер от января 18, 2015, 05:12
Цитата: Bhudh от января 18, 2015, 02:49
Чтобы показать что окно равно результату действия создатьОкно, которое
Это не совсем так. Присваивание — это же не равенство в математическом смысле.
Название: Скриптовый язык Гриня. Кто-нибудь потестит?
Отправлено: Алексей Гринь от января 18, 2015, 11:41
Цитата: Wolliger Mensch от января 18, 2015, 01:55
Зачем там равно? Что значат скобки? Почему во второй строке точка?
Равно есть приравнивание.

"окно=создатьОкно()" значит «пусть есть новая переменная (существительное) "окно", и пусть оно будет содержать значение, которое возвратила функция создатьОкно».

Скобки это вызов функции, т.е. глагола. В данном случае нет параметров, поэтому скобки пустые. С помощью скобок мы запускаем глагол, типа повелительного наклонения у глагола.

Точка в "окно.показать();" значит «вызвать глагол под названием "показать", ассоциированный с существительноным "окно"». В объектно-ориентированном программировании глаголы могут быть привязаны к своим словам-хозяинам. То есть, смена контекста. "Показать" может значить одно, если выполняется в контексте "окна", но совсем другое, если выполняется в контексте объекта (существительного) другого типа («показать окно» и «показать фигу» есть разные ситуации, хоть глагол и назван одинаково). То есть, таким образом, многозначность имеем мы.
Название: Скриптовый язык Гриня. Кто-нибудь потестит?
Отправлено: Bhudh от января 18, 2015, 15:46
Цитата: Тайльнемер от января 18, 2015, 05:12Присваивание — это же не равенство в математическом смысле
В момент исполнения — именно равенство. А потом по обстоятельствам.
Название: Скриптовый язык Гриня. Кто-нибудь потестит?
Отправлено: Алексей Гринь от января 18, 2015, 16:32
Цитата: Bhudh от января 18, 2015, 15:46
В момент исполнения — именно равенство. А потом по обстоятельствам.
Равенство чему? Ладно, там, x=5. Но что есть x=foo()?
foo() это не значение, это операция. x не может быть «равна» операции.
Название: Скриптовый язык Гриня. Кто-нибудь потестит?
Отправлено: Bhudh от января 18, 2015, 17:00
Цитата: Алексей Гринь от января 18, 2015, 16:32foo() это не значение, это операция.
Алексей, уж от тебя-то не ожидал! :o
"Операция" (функция) — это foo. А foo() — её вызов.
А когда идёт приравнивание переменной вызову функции, это приравнивание не самой функции, а её результату.
В момент присваивания значение переменной и значение результата функции равны.
Название: Скриптовый язык Гриня. Кто-нибудь потестит?
Отправлено: Wolliger Mensch от января 18, 2015, 17:17
Цитата: Алексей Гринь от января 18, 2015, 11:41
Цитата: Wolliger Mensch от января 18, 2015, 01:55
Зачем там равно? Что значат скобки? Почему во второй строке точка?
Равно есть приравнивание.

"окно=создатьОкно()" значит «пусть есть новая переменная (существительное) "окно", и пусть оно будет содержать значение, которое возвратила функция создатьОкно».

Скобки это вызов функции, т.е. глагола. В данном случае нет параметров, поэтому скобки пустые. С помощью скобок мы запускаем глагол, типа повелительного наклонения у глагола.

Если скобки — это вызов глагола, то при пустых скобках глагола нет. А что такое тогда «создатьОкно»? :what:
Название: Скриптовый язык Гриня. Кто-нибудь потестит?
Отправлено: Bhudh от января 18, 2015, 17:22
Действие само по себе.
Скажем, с реальным окном действие — это, например, выстругивание.
Название: Скриптовый язык Гриня. Кто-нибудь потестит?
Отправлено: Wolliger Mensch от января 18, 2015, 17:25
Цитата: Bhudh от января 18, 2015, 17:22
Действие само по себе.
Скажем, с реальным окном действие — это, например, выстругивание.

Непонятно. :donno:
Название: Скриптовый язык Гриня. Кто-нибудь потестит?
Отправлено: Bhudh от января 18, 2015, 17:27
Окно — результат выстругивания. Само выстругивание абстрактно и имеет смысл только при наличии прямого дополнения.
Название: Скриптовый язык Гриня. Кто-нибудь потестит?
Отправлено: Тайльнемер от января 18, 2015, 18:27
Цитата: Wolliger Mensch от января 18, 2015, 17:17
Если скобки — это вызов глагола, то при пустых скобках глагола нет. А что такое тогда «создатьОкно»? :what:
Вы немного не так поняли.
создатьОкно — это глагол.
Скобки после глагола — это его вызов.
В данном случае глагол непереходный, поэтому скобки пустые, а так, там в скобках могут стоять дополнения через запятую.
Название: Скриптовый язык Гриня. Кто-нибудь потестит?
Отправлено: Bhudh от января 18, 2015, 18:34
Цитата: Тайльнемер от января 18, 2015, 18:27В данном случае глагол непереходный
Переходный, просто уже конкретизированный.
Никто ж не мешает написать окно = создать("окно");.
Название: Скриптовый язык Гриня. Кто-нибудь потестит?
Отправлено: Алексей Гринь от января 18, 2015, 20:21
Цитата: Bhudh от января 18, 2015, 17:00
Алексей, уж от тебя-то не ожидал! :o
"Операция" (функция) — это foo. А foo() — её вызов.
А когда идёт приравнивание переменной вызову функции, это приравнивание не самой функции, а её результату.
В момент присваивания значение переменной и значение результата функции равны.
Понятие равенства имеет смысл только в математике, где функции это отношения между объектами, которые существуют, как бы сказать, извечно, и отсутствует понятие времени.

Программистское x=foo() не может быть «равенством», так как foo() это последовательная, осуществляемая во времени операция, описывающая не извечное отношение, а императивный алгоритм.

Название: Скриптовый язык Гриня. Кто-нибудь потестит?
Отправлено: Алексей Гринь от января 18, 2015, 20:24
Цитата: Wolliger Mensch от января 18, 2015, 17:17
Если скобки — это вызов глагола, то при пустых скобках глагола нет. А что такое тогда «создатьОкно»? :what:
Ну можно провести аналогию, что вызов функции создатьОкно() есть императив, а функция без скобок — создатьОкно — своего рода инфинитив. Не все языки разрешают такое; те же, что разрешают, рассматривают обращение к функциям без скобок (т.е. к инфинитивам) как самим объектам. То есть происходит субстантивация инфинитивной формы. И тогда можно обращаться с функцией как с объектом (существительным).
Название: Скриптовый язык Гриня. Кто-нибудь потестит?
Отправлено: Bhudh от января 18, 2015, 20:27
Цитата: Алексей Гринь от января 18, 2015, 20:21foo() это последовательная, осуществляемая во времени операция, описывающая не отношение, а императивный алгоритм.
Алгоритм это тащемта мыслимая последовательность событий, записанная в теле функции на ЯПе.
А при вызове функции нет нужды мыслить такими категориями.
Результат вызова foo(), равный 5, ничем не отличается в каком-либо выражении от значения переменной foo, равного 5.
Для выражения имеет значение только возвращаемый результат, который выступает как условное "значение функции". А как именно функция его определяет, это дело десятое. Пусть хоть из константы берёт и возвращает.
Название: Скриптовый язык Гриня. Кто-нибудь потестит?
Отправлено: Jumis от января 18, 2015, 20:28
Гринь, может, лучше на Хабру со всем этим?  :-[
Название: Скриптовый язык Гриня. Кто-нибудь потестит?
Отправлено: Bhudh от января 18, 2015, 20:30
Цитата: Алексей Гринь от января 18, 2015, 20:24То есть происходит субстантивация инфинитивной формы. И тогда можно обращаться с функцией как с объектом (существительным).
А чего сразу существительным-то? У инфинитива тоже могут быть свои свойства: вид, время там, а то и залог...
Это в императиве их чаще всего не бывает.
Название: Скриптовый язык Гриня. Кто-нибудь потестит?
Отправлено: Bhudh от января 18, 2015, 20:31
Цитата: Jumis от января 18, 2015, 20:28может, лучше на Хабру со всем этим?  :-[
Там сразу вывесят картинку с 14-ю стандартами.
Название: Скриптовый язык Гриня. Кто-нибудь потестит?
Отправлено: Алексей Гринь от января 18, 2015, 20:34
Цитата: Bhudh от января 18, 2015, 20:27
Результат вызова foo(), равный 5, ничем не отличается в каком-либо выражении от значения переменной foo, равного 5.
В том-то и дело, что нечистые функции могут возвратить то 5, то 3, то ещё чего. Самая переменная x может менять своё значение. Поэтому нельзя говорить, что x=foo() есть равенство, потому что это не так. Это динамические приравнивание, а не статическое отношение равенства.
Название: Скриптовый язык Гриня. Кто-нибудь потестит?
Отправлено: Алексей Гринь от января 18, 2015, 20:36
Цитата: Bhudh от января 18, 2015, 20:30
А чего сразу существительным-то? У инфинитива тоже могут быть свои свойства: вид, время там, а то и залог...
Это в императиве их чаще всего не бывает.
Ну замени инфинитив на герундий. First-class function objects/functors - это по сути программистский аналог герундиев.
Название: Скриптовый язык Гриня. Кто-нибудь потестит?
Отправлено: Алексей Гринь от января 18, 2015, 20:38
Цитата: Jumis от января 18, 2015, 20:28
Гринь, может, лучше на Хабру со всем этим?  :-[
Фу.
Название: Скриптовый язык Гриня. Кто-нибудь потестит?
Отправлено: Bhudh от января 18, 2015, 21:26
Цитата: Алексей Гринь от января 18, 2015, 20:34нельзя говорить, что x=foo() есть равенство, потому что это не так. Это динамические приравнивание
Цитата: Bhudh от января 18, 2015, 15:46В момент исполнения
Название: Скриптовый язык Гриня. Кто-нибудь потестит?
Отправлено: klangtao от января 18, 2015, 22:46
Цитата: Bhudh от января 18, 2015, 21:26
Цитата: Алексей Гринь от января 18, 2015, 20:34нельзя говорить, что x=foo() есть равенство, потому что это не так. Это динамические приравнивание
Цитата: Bhudh от января 18, 2015, 15:46В момент исполнения
Равенство - метод (если говорить в парадигме Гринь-скрипта), возвращающий булево значение. Присвоение возвращает собственно присвоенное значение (ну, или ошибку). Разница как между словосочетанием и предикативным сочетанием.
Название: Скриптовый язык Гриня. Кто-нибудь потестит?
Отправлено: Rusiok от января 18, 2015, 22:53
Цитата: Алексей Гринь от января 18, 2015, 20:24
можно провести аналогию, что вызов функции создатьОкно() есть императив, а функция без скобок — создатьОкно — своего рода инфинитив
А можете, в рамках Вашей аналогии, пояснить лямбда-функцию?
Название: Скриптовый язык Гриня. Кто-нибудь потестит?
Отправлено: Bhudh от января 18, 2015, 23:18
А чем λ-действие так сильно отличается от обычного действия, кроме того, что придумывается на ходу?
Название: Скриптовый язык Гриня. Кто-нибудь потестит?
Отправлено: Алексей Гринь от февраля 1, 2015, 18:02
Обновил версию в прикреплении.

Название: Скриптовый язык Гриня. Кто-нибудь потестит?
Отправлено: Алексей Гринь от февраля 9, 2015, 05:52
Обновил версию в прикреплении.

1) Ускорил время загрузки в 1.5 раза (за счёт переноса ответственности части кода с C compiler на ThunkManager). Собственно компиляция (не считая парсинга и верификации) того 7-мегабайтного примера теперь занимает меньше 5 секунд (аналог в С занимает 35 мегабайт). В будущем будем оптимизировать парсинг (прекэширование структур?)

2) Рудиментарная поддержка отладки прямо изнутри языка: если включён softdebug:true, то специальный оператор break остановит текущий домен и перечислит все локальные переменные в текущем контексте, а также их значения, и далее можно вводить команды (из-под консоли): пока что можно только перечислять свойства локальных переменных и смотреть их значение; в будущем расширю список. Среди ограничений пока что: 1) захваченные переменные не включается в список 2) не выводятся значения valuetypes 3) массивы распознаются при выводе значений, но не Map'ы (в след. версии)

Если softdebug:true не включён, то все операторы break игнорируются (аналогично assert в C)

3) Исправил разные баги (например, имена аргументов могли конфликтовать с inline C)
Название: Скриптовый язык Гриня. Кто-нибудь потестит?
Отправлено: klangtao от сентября 9, 2015, 13:30
Цитата: Rusiok от января 18, 2015, 22:53
А можете, в рамках Вашей аналогии, пояснить лямбда-функцию?
Не совсем в рамках этой аналогии, но вот что-то вроде (http://lingvoforum.net/index.php/topic,79030.html)...