LINUX.ORG.RU

Stodin DSL. Тема 4. Квадраты.

 , ,


0

1

Продолжаю серию тем про язык программирования Stodin DSL, который разрабатываю через проекты. В этот раз создал игру «Квадраты», на основе ранее созданной игры «Четыре героя». Основное назначение игры - занять себя чем-то во время видеоконференций или прослушивания «болтологов».

Процесс игры записал на видео: https://www.youtube.com/watch?v=YZUAp45pT8Q (ссылку уже давал в другой теме)

Код игры: https://github.com/kupriyanov-sn/StodinDSL/blob/master/examples/sdl_four_heroes_game

Инструкция и бинарики здесь: https://disk.yandex.ru/d/xJhJrNFPqgNLyg?w=1

Версия для Linux требует библиотеку SDL2. Работу проверял только в Убунте. Также можно запустить под Wine виндовую версию.

Не удержался и внёс изменения в синтаксис языка: добавил case. Через if-elif некоторые конструкции тяжело читать. В питоне в таких случаях делают словарь с указателями на функции, но это сложнее для восприятия. Может быть когда-нибудь и реализую через делегаты.

Вопросов у меня нет. Просто решил поделиться.


«Stodin DSL This document was originally written in Russian. Translated automatically.» - а на русском оригинал где? Ты предлагаешь мне, русскому человеку, читать английскую гугл-трансляцию? И ты припёрся с этим на русскоязычный форум?

anonymous ()
Ответ на: комментарий от anonymous

Чисто процедурный язык?

Да.

так и не понял в чем его главное преимущество.

Главного преимущества нет. Есть много мелких.

  1. Язык ближе к человеческому, чем другие мне известные. Например, в, нормальной, речи, мы, не, ставим, запятую, после, каждого, слова. И всё же понятно. Я уже не говорю о чрезмерном количестве скобок в ЯП типа Си.

  2. Как следствие первого - язык прост для реализации. Даже простейший Лисп, наверное, сложнее реализовать. Безусловно, Лисп более гибок, но мне его гибкость не нужна.

  3. В отличие от C++, можно включить построчную трассировку ошибок. Можно убрать UB для арифметики. Реализацию безопасных операторов можно посмотреть тут: https://github.com/kupriyanov-sn/StodinDSL/blob/master/stodin-lib/__stodin_safe.h

Ну и всякие мелкие плюшки типа отсутствие необходимости в хедерах и ввод-вывод русских символов в виндовой консоли.

Гуй наверно затратно писать

Вывести окошко с квадратами - не затратно. Но GUI - это ещё и контролы, ввод-вывод текста, диалоги и т.д. Я планирую сделать простейший фреймворк, что-то среднее между консолью и нормальным GUI. Данная игрушка является шагом в эту сторону.

Это не очередная версия языка Nim? V lang?

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

И ты припёрся с этим на русскоязычный форум?

Изначально я вообще думал разместиться не в github, а в каком-нибудь русском аналоге. Не нашёл. А раз пошёл к буржуям, то хорошим тоном было сделать документацию на их языке.

Kogrom ()

Не удержался и внёс изменения в синтаксис языка: добавил case. Через if-elif некоторые конструкции тяжело читать.

Взоржал.

Лисп более гибок, но мне его гибкость не нужна.

Я не знаю зачем ты себя мучаешь. Лучше все же посмотри на https://github.com/carp-lang/Carp

Еще какой-то проект есть, который транспилирует cl в плюсы. Забыл как называется.

anonymous ()
Ответ на: комментарий от Kogrom

«Ним - это чудовищный комбайн из возможностей….. только библиотеки наращивал»- так в чем разница? В Ним изначально есть то что ты в библиотеки засунул? Кому как а мне нравится что в языке сразу включено много чего. Иначе приходится искать библиотеки которые порой мохом поросли. А в условиях молодого, развивающегося языка мохом они очень быстро и часто их можно только выбросить и написать новые. В общем тут нужен баланс какой-то.

anonymous ()

Было бы здорово иметь компилируемый яп с интегрированными в него GUI возможностями. Для десктопного GUI-софта. Не биндинги - они нафиг не нужны. Свое собственное что-то. Биндинги часто отстают от библиотек, а то и забрасываются вовсе. И нафиг кросплатфору, а именно андроид и телефоны вообще. Компилируемый яп со своими гуями для десктопного софта. Золотая жила.

anonymous ()
Ответ на: комментарий от Kogrom

Например, в, нормальной, речи, мы, не, ставим, запятую, после, каждого, слова.

Уверен,что правила описания перечислений этого не требуют? Уверен, что твои массивы без запятых,это ближе к естественной речи?

anonymous ()
Ответ на: комментарий от anonymous

Я не знаю зачем ты себя мучаешь.

Я не мучаю. Я так развлекаюсь.

Лучше все же посмотри на https://github.com/carp-lang/Carp

Мне Лисп не нравится. Я понимаю, что у него есть сильные стороны, но использовать его без крайней необходимости не буду.

Что касается этого конкретного примера, то тут ещё лишние зависимости. Ну вот зачем тут Хаскель, например? Ну я ещё понимаю, какой-нибудь Раст бы делали. Но Лисп на Хаскеле делать - извращение. Транслируешь в C++ - ну и транслятор пиши на C++.

Kogrom ()
Ответ на: комментарий от anonymous

В|* @^ нормальной|* @^ речи|* @^ мы|* @^ вот|* @^ так |* @^тоже|* @^ не |* @^пишем.

Собачкой у меня выделяются только названия процедур. Тут будет только @не_пишем. Значок ^ для перечислений и имён локальных модулей. В любом случае, это меньше, чем две скобочки или два двоеточия. | - для индекса в массиве. * - для новой переменной или элемента массива. Этого не надо в таком количестве, как в Вашем примере.

Уверен,что правила описания перечислений этого не требуют? Уверен, что твои массивы без запятых,это ближе к естественной речи?

Это тонкости. Смысл в том, что можно нормально жить без того, чтобы после каждого слова ставить запятую, а также без постоянного подсчёта скобочек. При этом ещё каждое IDE тебе пытается помочь в расстановке скобок. Каждое по своему, каждое не там где нужно.

Kogrom ()
Ответ на: комментарий от Kogrom

Мне Лисп не нравится.

какие-либо рациональные причины, или как обычно?

Что касается этого конкретного примера, то тут ещё лишние зависимости. Ну вот зачем тут Хаскель, например?

ghc конечно огромен, но почему это тебя волнует? написание компиляторов - одна из числа задач неплохо подходящих для хаскелля.

Транслируешь в C++ - ну и транслятор пиши на C++.

как ты думаешь, почему они написали язык который транслируется в другой язык? наверное, потому-что им не совсем нравится писать на том язык в который они транслируют, не? не знаю зачем ты тут придрался.

anonymous ()
Ответ на: комментарий от anonymous

Было бы здорово иметь компилируемый яп с интегрированными в него GUI возможностями. Для десктопного GUI-софта.

Да. У меня есть такая цель. Но GUI будет минимальным и без украшательств. Панель кнопочек, пару панелей для контента (изображений, таблиц, графиков, текста) и панель ввода текста. Ну и один моноширотный растровый шрифт. А кому надо больше - пусть с биндингами возятся.

Kogrom ()
Ответ на: комментарий от Kogrom

Это тонкости

Какие тонкости, если ты сам сказал, что твой язык более приближен к естественному, в то время, как он напротив, более от естественного отдален?

anonymous ()
Ответ на: комментарий от anonymous

какие-либо рациональные причины, или как обычно?

Как обычно. Лисп, как и Хаскель - для безупречного кода эльфов. А мне нужен язык для сурового быдлокода.

написание компиляторов - одна из числа задач неплохо подходящих для хаскелля.

Но не для S-выражений же.

Kogrom ()
Ответ на: комментарий от anonymous

так в чем разница? В Ним изначально есть то что ты в библиотеки засунул? Кому как а мне нравится что в языке сразу включено много чего.

Библиотека включена. Естественно, такой маленький язык как Stodin всё своё носит с собой. Просто библиотека растёт, а синтаксис не меняется. Соответственно, все старые примеры собираются.

Если я правильно понимаю, у Нима даже в зависимости от флагов компиляции может меняться поведение программы, совместимость с библиотеками. У меня же флаги только на более подробный отлов ошибок работают.

Kogrom ()
Ответ на: комментарий от Kogrom

Но не для S-выражений же.

Это вообще малозначительно.

А мне нужен язык для сурового быдлокода.

В таком случае твой выбор пистоносинтаксиса поверх сисимантики очень кстати, спору нет.

anonymous ()
Ответ на: комментарий от anonymous

Было бы здорово иметь компилируемый яп с интегрированными в него GUI возможностями.

https://www.red-lang.org/2016/03/060-red-gui-system.html

об этом я кстати узнал от одного местного сумрачного гения, тот который по стопицот ссылок в свое каждое сообщение сует, just giving credit where credit is due.

anonymous ()
Ответ на: комментарий от Kogrom

Как обычно. Лисп, как и Хаскель - для безупречного кода эльфов. А мне нужен язык для сурового быдлокода.

Не понимаю блядь. CS им свои тайны приоткрыл. Изучай, познавай тайны. Блядь, не хочу. Хочу жрать говно.

anonymous ()
Ответ на: комментарий от anonymous

404

Ну, как бы интересно. Но почему ссылка в 2016 год и на офф страничке выпилены все ссылки на GUI? https://doc.red-lang.org/en/view.html https://doc.red-lang.org/en/draw.html https://doc.red-lang.org/gui/VID.html https://doc.red-lang.org/gui/Draw.html

anonymous ()
Ответ на: 404 от anonymous

Re: 404

вот этого я не знаю, мопед не мой, наверное недавно произошло, просмотров там аж 3 ляма, уже бы кто-нибудь в комментах это упомянул

anonymous ()
Ответ на: комментарий от monk

да-да, при том, что они даже свою ide dr.racket на этом гуе нормально написать не могут. всё течёт, падает, глючит, томозит, шг кругом. отличная реклама возможностей языка.

компилируемый

в байткод?

anonymous ()
Ответ на: комментарий от anonymous

всё течёт, падает, глючит, томозит, шг кругом

???

Ни разу не падало. А тормозит только если фоновый разбор синтаксиса включен. Шрифты сам выбираешь.

в байткод?

В бинарник. А при запуске JIT из байткода в машкод компилирует.

monk ★★★★★ ()