LINUX.ORG.RU

Stodin DSL

 , ,


0

3

Здравствуйте!

В данной теме представляю для обсуждения язык программирования, созданный с использованием принципов разработки предметно-ориентированных языков (по книге Мартина Фаулера). Ссылка на проект языка: https://github.com/kupriyanov-sn/StodinDSL

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

В данный момент это работающий прототип. Библиотека языка пока на начальной стадии разработки. Но уже есть 3 небольших приложения-примера, написанных на Stodin (в examples).

Возможно, у кого-нибудь будут идеи, советы, пожелания как по библиотеке, так и по синтаксису.



Последнее исправление: cetjs2 (всего исправлений: 1)

Синтаксис похож на кучу адресов электронной почты на питоне.

Никто не заинтересуется.

anonymous
()
  1. Как дела с поддержкой IDE? LanguageServer написал?
  2. Чем лучше существующих языков? Какие проблемы решает?
dsxl
()
Ответ на: комментарий от anonymous

Приведу пример математического тренажёра тут, чтобы по ссылкам не ходить.

import random
import time

def get_multi_question
    mref a:int b:int answer:int 
    *v @array|int
    for a in 12;99;1
        *c @int a % 10
        if != c 0
            v @add a
    a @random:choice v
    b @random:randint 3 9
    answer = a * b

def math_round
    mref res:bool
    *tAllStart @int @time:time
    *counter @int 0
    for
        *tStart @int @time:time
        *a; *b; *answer @int 0
        a b answer @get_multi_question
        *strAnswer @string @to_string answer
        @print* a " * " b "\n"
        *strRes @string @getline
        if strRes "q"
            res = false
            return
        if strRes strAnswer
            @print "True\n"
            counter + 1
        else
            @print* "False! Correct answer is: " answer "\n"
        *tEnd @int @time:time - tStart
        @print* "t = " tEnd "\n"
        if counter 6
            break
    *tAllEnd @int @time:time - tAllStart
    *speed @double tAllEnd$double / counter
    @print* "speed: " speed "\nEnter to proceed or q to quit: \n"
    *key @string @getline
    res != key "q"

def main
    @print "\nInput an answer or q to quit: \n"
    for *b @bool in b @math_round
        for 0
    
Kogrom
() автор топика
Ответ на: комментарий от dsxl
  1. Поддержки IDE нет. Для Notepad++ есть подсветка синтаксиса, для других редакторов в принципе подсветка Python как-то работает.
  2. Сильно упростив, можно сказать, что это Питон со статической типизацией. Но есть тонкости. На Stodin можно написать конструкцию вида:
person @wake_up @put_on coat; hat @go_to nearest shoop @buy apples; eggs; bread

На питоне аналог будет такой:

person.wake_up()
person.put_on(coat)
person.put_on(hat)
person.go_to(nearest, shoop)
person.buy(apples)
person.buy(eggs)
person.buy(bread) 

Есть некоторый выигрыш в лаконичности.

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

Максимально убогий синтаксис обусловленный только одним - простотой парсинга. Остальное так же.

Какой dsl, если оно не соответствует базовому свойству любого dsl?

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

Поддержки IDE нет. Для Notepad++ есть подсветка синтаксиса, для других редакторов в принципе подсветка Python как-то работает.

Подсветка никому не нужна.

Сильно упростив, можно сказать, что это Питон со статической типизацией.

Это не статическая типизация.

Но есть тонкости. На Stodin можно написать конструкцию вида:

Мусор. Чейнинг выглядит лучше, чем данный синтаксический мусор. К тому же, здесь нигде не используется возврат, а значит уже есть чейнинг и можно писать person.wake_up().put_on(coat)...

Чейнинг для классов без его поддержке есть в каком-нибудь дарте. И выглядит это куда адекватнее - через ...

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

Да. Оно с тем учётом и разрабатывается, чтобы просто было и человеку читать и программному анализатору. Этим язык и отличается от аналогов.

Кстати особенность, взятая из DSL-ов. Stodin скобок он не требует совсем. Вроде бы пустяк, но лично меня немного утомляет работа со скобками, особенно, если IDE пытается автоматически их поставить где не надо или даже убрать.

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

Сильно упростив, можно сказать, что это Питон со статической типизацией

Но ведь в питоне уже есть типизация. https://docs.python.org/3/library/typing.html

написать конструкцию вида

не тянет на киллер-фичу. Откровенно говоря, то, что вот это
person @buy apples; eggs эквивалентно питоновскому person.buy(eggs);person.buy(bread) вообще не очевидно.

Тем более, что в питоне можно сделать методы, принимающие массивы и возврщающие тот же объект:

person.wake_up().put_on(coat, hat).go_to(nearest, shoop).buy(apples, eggs, bread)

vs

person @wake_up @put_on coat; hat @go_to nearest shoop @buy apples; eggs; bread
dsxl
()
Ответ на: комментарий от tosol4

К тому же, здесь нигде не используется возврат, а значит уже есть чейнинг и можно писать person.wake_up().put_on(coat)…

Нет. Это не оно. Возврата ссылки нет. Кроме того, с чейнингом потребуется три раза написать buy для продуктов: buy(apples).buy(eggs).buy(bread). У меня в примере другое. Достаточно один раз использовать функцию.

Это не статическая типизация.

Буду считать это комплиментом.

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

Нет. Это не оно. Возврата ссылки нет.

Чего не оно, ты решил проигнорировать половину тезиса и поиграть в идиота?

Кроме того, с чейнингом потребуется три раза написать buy для продуктов: buy(apples).buy(eggs).buy(bread). У меня в примере другое. Достаточно один раз использовать функцию.

Нелепая чушь. Специально придуманная бездарная херня. К тому же писать нужно столько же. И что самое важное - если множественный buy является каким-то частым кейсом - это выражается на уровне интерфейса. .buy(a, b, c)

Буду считать это комплиментом.

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

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

Но ведь в питоне уже есть типизация. https://docs.python.org/3/library/typing.html Согласен. Есть. Но тут разница в том, что в Python она не везде. Кроме того, мой код транслируется в C++, а значит ему не нужен интерпретатор и по скорости он лучше (хотя скорость мне пока не особо важна).

Kogrom
() автор топика

Кстати, возвращаемся к моему старому наблюдению. Если адепт не любит скобки, но за партой его лабы заставляют сдавать на си с классами огрызке, то вот в чём вопрос.

Почему адепты используют стиль дерьма?

if(x) {
  
}

Это ведь почти питон с его

if(x):

Но почему-то адепты жруть дерьмо и пишут подобный:

if(x)
{
  
}

Здесь явно какие-то проблемы с развитием. Объяснить подобное поведение рациональными доводами невозможно.

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

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

Если это не статическая типизация, то что это? Это точно не динамическая типизация, иначе бы оно строчка в строчку не транслировалось в C++. Для каждой переменной и аргумента функции объявляется тип.

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

мой код транслируется в C++, а значит ему не нужен интерпретатор и по скорости он лучше
по скорости он лучше

Не факт. А вообще, главная проблема dsl-ей - ds. и оно же главное достоинство. Это я к тому, что пытаться скрестить dsl и япон - бесполезная идея. Либо одно, либо другое

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

По стилю похож. Если его сейчас бомбанет на мою персону, то точно он.

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

Если это не статическая типизация, то что это?

А что у Вас будет если попытаться сложить строку и число?

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

Если это не статическая типизация, то что это?

Убожество.

Это точно не динамическая типизация, иначе бы оно строчка в строчку не транслировалось в C++.

Это не С++ - повторю. Это си с классами убожество, типично используемое запартой.

Статическая типизация предполагает куда большие, в противном случае смысла она не имеет. Поэтому С++ является тем, чем является. И потому ты его не используешь.

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

адепт… лабы… огрызке…

Пропаганда? Методичка? Rust? Я правильно понял?

Но это не Rust даже близко. Я то не претендую на замену C++. Я претендую на ускоренное создание небольших программ на C++.

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

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

Зато нужен транслятор и компилятор - неизвестно что хуже.

и по скорости он лучше

Не всегда, зависит от кода. Давеча @metaprog написал транслятор графических диаграмм в си, в итоге его код слил питону в разы по скорости.

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

типизация […] в Python она не везде.

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

мой код транслируется в C++

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

В общем, не вижу смысла в данном языке.

dsxl
()
Последнее исправление: dsxl (всего исправлений: 1)
Ответ на: комментарий от Kogrom

Я претендую на ускоренное создание небольших программ на C++

За счёт чего? Поясни пж, желательно с примером

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

Я претендую на ускоренное создание небольших программ на C++.

А за счет чего именно Ваш подход ускорит создание небольших программ в С++?

AntonI ★★★★★
()
Ответ на: комментарий от tosol4

Поэтому С++ является тем, чем является. И потому ты его не используешь.

Нельзя весь код на C++ написать в стиле шаблон на шаблоне. Останется большая часть кода, привязанная к предметной области. Её то и удобно написать на другом языке.

C++ при этом никуда не уходит. Но на C++ я не могу писать 8 часов в день. Надо сочетать с чем-то более простым.

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

Это я к тому, что пытаться скрестить dsl и япон - бесполезная идея.

япон

Да.

Либо одно, либо другое

Нет. Открою тебе тайну, то язык может быть dsl"ом для написания других dsl"ом. И ключевое свойство этой системы в том, что эти производные dsl"и могут существовать в рамках одного контекста.

Раз ты cpp-сектант, то должен знать, что cpp(настоящий, а не птушное дерьмо) является тем самым dsl"ом для dsl"ей. И это его фундаментальное преимущество.

Правда в нём есть фундаментальный недостаток - это то, что он сам является в базе языком, когда базовый язык должен быть таким же внутренним dsl"ем.

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

Нельзя весь код на C++ написать в стиле шаблон на шаблоне.

Можно и нужно.

Останется большая часть кода, привязанная к предметной области.

Нет.

Её то и удобно написать на другом языке.

Нет.

C++ при этом никуда не уходит. Но на C++ я не могу писать 8 часов в день. Надо сочетать с чем-то более простым.

Ещё раз, повторю - ты не пишешь на С++, поэтому у тебя и возникают проблемы с пониманием. Я выше писал об этом. Шаблоны в С++ существуют для реализации тех самых dsl"ей.

И как раз таки каждая отдельная предметная область в С++ описана своим «языком». Ну в нормальном С++, а не птушном дерьме.

Иди перепиши свой парсер на спирит, генератор на тухлую карму. алгоритмы дерьма на ranges. Начнёшь осознавать С++, а пока это си с классами дерьмо - ты ничего не поймёшь.

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

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

А теперь расскажи как ты это понимаешь.

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

А за счет чего именно Ваш подход ускорит создание небольших программ в С++?

За счёт лаконичности. Про скобки и чейнинг уже говорили. При том у меня чейнинг эффективнее (он не на возврате ссылки сделан, а просто на последовательном помещении функции в транслируемый код) и распространяется по всему коду.

Кроме того, работа с контейнерами (массив, словарь, строка) сильнее включены в синтаксис языка, чем в C++. Конкретно эти три контейнера даже не требуют импорта модулей, поддерживаются питоновские конструкции вида if a in someArray.

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

+100500.

Я помню как царь поначалу кричал что плюсы г-но, си наше все. Теперь царь познал плюсы и кричит что питон и раст г-но. Пройдет еще лет 10-20 и царь познает питон и начнет ругать яву и перл;-)

AntonI ★★★★★
()
Ответ на: комментарий от tosol4

cpp(настоящий, а не птушное дерьмо) является тем самым dsl"ом для dsl"ей

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

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

Иди перепиши свой парсер на спирит

А, так ты поехавший, лол

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

За счёт лаконичности.

Я не уверен что такая лаконичность хороша, ИМНО она идет в ущерб читаемости. Хотя это вкусовщина.

Кроме того, работа с контейнерами (массив, словарь, строка) сильнее включены в синтаксис языка, чем в C++. Конкретно эти три контейнера даже не требуют импорта модулей, поддерживаются питоновские конструкции вида if a in someArray.

Вы так говорите, как будто импорт модулей это что то плохое…

Питон повышает скорость разработки совсем не за счет синтаксиса.

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

А что у Вас будет если попытаться сложить строку и число?

Ошибка компиляции.

Зато нужен транслятор и компилятор - неизвестно что хуже.

Я говорил о скомпилированном приложении. И это важно не только когда говорим про Windows. Есть у меня несколько проектов на Python 2. Эту версию уже прекращают поддерживать. Пока я их перепишу на Python 3 выйдет Python 4. C++, слава Богу, более стабилен. Вот я и думаю, что мне проще, переписывать на Python 3 или на C++ через транслятор.

Давеча @metaprog написал транслятор графических диаграмм в си, в итоге его код слил питону в разы по скорости.

Если даже такие мастера уступают питону, то у меня шансов нет.

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

Я говорил о скомпилированном приложении.

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

Вот я и думаю, что мне проще, переписывать на Python 3 или на C++ через транслятор.

Очевидно значительно проще переписать на py3.

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

Вы так говорите, как будто импорт модулей это что то плохое…

Импорт модулей - это замечательно. Но мне больше понравился подход питона для контейнеров, так как они и так будут использоваться везде, то именно для них импорт избыточен.

Питон повышает скорость разработки совсем не за счет синтаксиса.

Сила Питона в «батарейках», но и синтаксис с динамической типизацией, с выводом списков, работой со словарями и списками даёт скорость разработки. Понятно, что и быстрый запуск интерпретатора тоже даёт выигрыш.

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

Конечно плюсы ужасный ЯП. Хорошо было бы поправить его синтаксис - но:

  1. возникнут проблемы с обратной совместимостью

  2. его синтаксис возник не на пустом месте, там слишком много всего.

Можно попробовать выкинуть часть того что там есть и за счет этого упростить синтаксис… и Вы скорее всего получите какой нить существующий ЯП но с перламутровыми пуговицами;-)

Разработка новых ЯП хороша джаст-фор-фан и для повышения своего уровня. Разработка DSL хороша если вы спец в какой то области а там нет подходящего DSL. А так это в общем пустая трата времени… хотя говорят каждый программист пытается в молодости сделать ЯП имени себя;-)

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

Лаконичность она у всех своя. «Чуть короче» за «намного непонятнее» - это не лаконичность, а фиаско братан. Перловка какая-то на вид.

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

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

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

Очевидно значительно проще переписать на py3

Это зависит от задач. Даже если не говорить про скорость и сборщик мусора, кто даст гарантию, что пока я перепишу уже появится питон 4, несовместимый с питоном 3. Кроме того, есть ОС типа uCLinux, QNX в которых если и есть python, то устаревший или неполноценный. Отдельная проблема - устанавливать туда дополнительные пакеты.

Конечно плюсы ужасный ЯП.

Я так не считаю. Нормальный язык. Хотя я где это возможно перешёл на C#. Везде есть свои плюсы и минусы.

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

говорят каждый программист пытается в молодости сделать ЯП имени себя

В молодости я не успел. Язык назвал в часть книжки Саттера и Александресу про 101 стандарт программирования на C++.

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

Ты что новенький тут что ли совсем, не узнаешь звезду и по совместительству корифея статической типизации? С++ скиптуха, давно бы пора понять своей тарталеторезкой.

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

C++ при этом никуда не уходит. Но на C++ я не могу писать 8 часов в день. Надо сочетать с чем-то более простым.

бобо головушка, или в чем причина?

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

Ты что новенький тут что ли совсем, не узнаешь звезду и по совместительству корифея статической типизации?

Несколько лет читаю форум. Сказать было нечего, поэтому не регистрировался. Царя уважаю, даже фанат, в некотором смысле. Давно заметил, что уникальные эксперты в определённой области любят погорячиться не по делу. Главное, чтобы выдавали крупицы идей в потоке эмоций. Он тут мне задал целей на годы вперёд (совместимость с IDE, шаблоны на шаблонах и прочее).

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

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

бобо головушка, или в чем причина?

Да, ресурсы мои ограниченны. Час или два в день мыслю нормально, в остальное время - обезьяна.

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

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

С другой стороны, незамыленный взгляд это всегда хорошо.

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

пока я перепишу уже появится питон 4, несовместимый с питоном 3

Тогда пока Вы доведете свой DSL до нужного уровня появятся плюсы 24, или вообще земля налетит на небесную ось;-)

У меня та же проблема с переписыванием стоит, но она не фатальна - просто я не хочу этим заниматься.

Но иногда самодельная приспособа подходит лучше.

Безусловно! Но обычно это бывает для каких то узких задач, а вот что бы для общего назначения…

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

Тогда пока Вы доведете свой DSL до нужного уровня появятся плюсы 24

Честно говоря, если через 4 года будет нужный уровень, то будет очень хорошо. Глядишь, в 2030 году уже можно будет в серьёзных программах использовать. Это приемлемо. Время летит быстро, а я никуда не тороплюсь.

Kogrom
() автор топика

Самое смешное, что участники словесной драмы все трое зареганы на далее чем 5 дней назад… ^_^ Не то чтобы я дискриминирую участников по их давности регистрации ;)

Может «анонiмус» забыл таблетки принять

I-Love-Microsoft ★★★★★
()
Последнее исправление: I-Love-Microsoft (всего исправлений: 1)
Ответ на: комментарий от I-Love-Microsoft

Ну у ТС-а хотя бы гит репозиторий обозначен, так что с ним нормально все.

А вот @cppsektant с царем в один день, да и ник наводит на размышления…

AntonI ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.