LINUX.ORG.RU

ЯП dao


0

6

http://daovm.org/
llvm, скорость, простые биндинги, наращивают крит. массу либ
синтаксис си образный, впервые вижу чтобы для мотодов применяли ключевое слово routine
ну еще макросы, yield на закуску
наткнулся тут https://github.com/strangeloop/StrangeLoop2013/blob/master/slides/elc/Fu-DaoP...

★★★★

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

Макросы => в топку.

anonymous
()

Неплохо. Особенно понравилось что можно типы не объявлять и есть средства метапрограммирования. Правда, не люблю ЯП написанные на си :(

true_admin ★★★★★
()

Да, как раз питоноподобного говнеца больше всего не хватает.

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

Особенно понравилось что можно типы не объявлять и есть средства метапрограммирования.

Если от языка нужно это, то лучше изучить хаскель и скалу.

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

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

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

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



YO DAWG + We need to go deeper

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

Если от языка нужно это, то лучше изучить хаскель и скалу.

Лучше Common Lisp. Там DSL'и легко пишутся в три строчки без всякого матана.

anonymous
()

любопытно. есть биндинги к Qt, бенчмарки Shootout,

даже своя визуал студия на Qt :)

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

прикольно: 1 китаец наколбасил язык практически в одиночку — такой, что:

1. собирается на 5 платформах (3 стандартные + миникс + хайку)

2. кодогенерация через llvm

3. биндинги к qt из коробки, стандартные биндиги (dao-modules), батарейки

4. элементарно встраивается

5. опять же, эти модули к clang интересны сами по себе

6. ну про прочие мелочки типа модулей, конкурентности, декораторов, макросов как-то даже неудобно вспоминать

7. dao-studio на Qt «из коробки»

8. бенчмарки shootout (не все) из коробки

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

но тормоз же, даже с jit-ом. Плюшки заявлены неплохие, но - на сколько хорошо «конкурентный» gc? Где тесты? Типы есть, но как их анализировать в макрах (не нашёл)? Вопросов больше чем ответов (очень скудно на сайте с описанием) на столько, что даже не возникает желание «потыкать палочкой» :(

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

Правда, не люблю ЯП написанные на си

Erlang же хорош :)

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

А зачем мне писать «DSL'и»?!?

А что, уже придумали другой способ писать программы?

Долбание бойлерплейта дубина и кувалдами кучками профанов, конечно же, за программирование не считается.

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

RTFM про ООП. Никаких других приличных способов писать программы нет и никогда не будет. Бойлерплейт и прочий быдлокод надо искоренять на концептуальном, архитектурном уровне, а не подсовывать подпорки-кодогенераторы. Читай про паттерны, они все не на ровном месте возникли, а как раз как способ устранения архитектурного быдлокода.

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

Вылезай уже из семидесятых, водопадная модель не работает.

А паттерны возникли всего лишь как хаки для преодоления ограничений языка.

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

я и не спорю, что может. поинт в том, что ClangtoXXX генерацию биндингов для своего велосипедного языка через Clang плагином осилил вот только этот конкретный китаец, а остальные студиозусы велосипедят свои костыльные биндинги ручками (или SWIG-уг-ом), и потом ноют и плачутся, дескать, батареек нетути.

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

Да лана, пол гитхаба завалено этим добром на clang.

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

Три строки? Ну да, конечно: http://common-lisp.net/project/iterate/darcs/iterate/

Стоит посомтреть на этот уэас и сразу становится понятно, что CL для написания дслей предназначен чуть менее чем никак. Функционал макросистемы - нулевой, на каждый чих приходится делать заход солнца вручную, даже банальной гигиены - и той нету.

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

Читай про паттерны, они все не на ровном месте возникли, а как раз как способ устранения архитектурного быдлокода.

Паттерны - это как раз причина бОльшей части быдлокода.

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

Как раз таки гигиена дслям мешает. Попробуй встроить в схемку Паскаль, например, чисто на гигиенических недомакросах.

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

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

Как раз таки гигиена дслям мешает.

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

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

А зачем на «чисто гигиенических»?

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

Кто тебе мешает снять гиигену на идентификаторе?

Проблема только в том, что в 99% гигиена нужна. А в 1% - нет. В итоге в каком-нибудь коммон лиспе приходится руками реализовывать ее в тех самых 99% местах. И какие-то тривиальные вещи вроде loop/iterate занимают 3000 строк вместо 300, да при этом еще и глючат.

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

Наоборот - без гигиены дсли писать вообще никак нельзя

Ты идиот.

Есть source AST, есть функция, реализующая компилятор этого языка в твой host-язык. Есть макрос, который не делает ничего, кроме вызова этой функции. Куда ты здесь засунешь свою пидерастическую гигиену? И, главное, на кой она тебе, убогому, вообще понадобилась?

Кто тебе мешает снять гиигену на идентификаторе?

Ты совсем больной, да?

Каком таком «идентификаторе», придурок? Компилятор ничего про твою сраную гигиену не знает и знать не должен.

Проблема только в том, что в 99% гигиена нужна.

Редкостный дебил. Гигиена не нужна вообще никогда. Даже для всяких сахарных говномакросиков (которые сами по себе не нужны).

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

Есть source AST, есть функция, реализующая компилятор этого языка в твой host-язык. Есть макрос, который не делает ничего, кроме вызова этой функции.

Аааа, ну то есть ты таки предлагаешь писать говнокодеволкеры в стиле лупа на пицотыщ строк? Тогда да, если хочется написать много-много кривого вырвиглазного кода - гигиена действительно не нужна.

Но я-то говорю о человеческих макросистемах, в которой твои тысячестрочные кодеволкеры заменяются context-driven анафорами и самораскручивающимися macro-denerated макрами. А тут без гигиены - никуда.

Гигиена не нужна вообще никогда.

Она нужна всегда, когда не требуется явно ее обходить. То есть - нужна практически всегда.

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

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

Аааа, ну то есть ты таки предлагаешь писать говнокодеволкеры в стиле лупа на пицотыщ строк?

Нет, я предлагаю писать нормальные, полноценные компиляторы.

А loop и тому подобный говносахарок тупо не нужны.

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

Ты вообще код писать не умеешь. Так по какому праву мнение имеешь, тупица?!?

Но я-то говорю о человеческих макросистемах,

Придурок, человеческие макросистемы нужны для написания eDSL.

в которой твои тысячестрочные кодеволкеры заменяются context-driven анафорами и самораскручивающимися macro-denerated макрами. А тут без гигиены - никуда.

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

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

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

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

А loop и тому подобный говносахарок тупо не нужны.

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

Придурок, человеческие макросистемы нужны для написания eDSL.

Так я про eDSL и говорю. Написание еДСЛ при помощи макросистемы общелиспа - практически нереальное занятие.

Если для тебя loop - это пример

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

Любое макроговно, которое ты сумеешь накостылять в макросистеме общелиспа, я сделаю в нормальной макросистеме значительно быстрее, проще, короче, надежнее, более гибко, расширяемо и с более широким функционалом. И чем сложнее будет задача - тем значительнее будет разница. от полного отсутствия в случае простейших макрсоов - до выигрыша на десятичные порядки в случае сложных ДСЛей.

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

Вот loop - это как раз и есть пример простенького компилятора.

Loop - пример говносахара.

И уже на его примере видно как кодеволкеры сосут.

Что ты знаешь про кодеволкеры, придурок? Ты nanopass видел?

И чем сложнее компилятор - тем сильнее будет отсос кодеволкера.

Ты некомпетентен, шпана.

Так я про eDSL и говорю. Написание еДСЛ при помощи макросистемы общелиспа - практически нереальное занятие.

Утютюшечки. Напиши встраиваемый в схемку Паскаль на гигиенических недомакросах.

Я же говорю - loop это простенький пример.

Loop это пример сахара, а сахар не нужен в любом виде. Типичный strawman аргумент - сам себе придумываешь проблему, сам ее решаешь, и кричишь потом, что самый умный. А в реале проблемы нет вообще, потому что сахар не нужен.

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

Правильный пример - Паскаль или ML встроить. Обосрешься с «выразительными макросистемами», потому что они будут только мешать.

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

Обосрешься. Сделай Pascal.

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

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

Loop - пример говносахара.

Это не отменяет того факта, что он работает именно так как ты и описа л - компиляруется одной ф-ей в хост-язык.

Что ты знаешь про кодеволкеры

Намного больше тебя.

Ты nanopass видел?

Нет, покажи.

Утютюшечки. Напиши встраиваемый в схемку Паскаль на гигиенических недомакросах.

Давным-давно писал, когда еще не знал как пользоваться макросами. Тоже за вечер в качестве упражнения. Паскаль, кстати, проще лупа (грамматика, а 90% макроса тут - описание грамматики). Делал как раз без раскрутки (не умел тогда в нормальные макросы еще), практически полностью в виде кодеволкера было, потому плохо, конечно. Сейчас бы так не делал.

Loop это пример сахара

Это по функционалу он сахар. А по реализации - это компилятор из некоторого ДСЛ, не имеющего ничего общего с общелиспом в хост-язык (общелисп).

А в реале проблемы нет вообще, потому что сахар не нужен.

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

Правильный пример - Паскаль или ML встроить.

Паскаль вообще тривиальщина (проще лупа, как я уже говорил, конечно, тому, кто ни того ни того не делал - это неизвестно ;))

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

Ну и в любом случае надобность в реализации паскаля или МЛ мне кажется несколько надуманной.

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

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

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

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

Так о чем и речь. В общелиспе ты преобразуешь код, в нормальной макросистеме - ты вообще работаешь на другом уровне абстракции, генерация кода- средство а не самоцель. Есть определенные паттерны, которые предназначены как раз для того чтобы уйти от восприятия процесса экспанда как от процесса преобразования кода. Это все слишком низкоруровнево, невыразительно, требует сотен бойлерплейта и заката солнца руками.

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

В общелиспе ты преобразуешь код, в нормальной макросистеме - ты вообще работаешь на другом уровне абстракции,

Идиот. Какой для компилятора иной уровень абстракции может быть, кроме переписывания кода?

генерация кода- средство а не самоцель.

Это цель существования макросистемы. Другие цели вредны и недопустимы.

Есть определенные паттерны, которые предназначены как раз для того чтобы уйти от восприятия процесса экспанда как от процесса преобразования кода.

Опять про говносахар. У тебя мозг слишком маленький, чтобы вместить что-то большее чем LOOP?

Это все слишком низкоруровнево, невыразительно, требует сотен бойлерплейта и заката солнца руками.

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

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

Это не отменяет того факта, что он работает именно так как ты и описа л - компиляруется одной ф-ей в хост-язык.

Ну тупо-о-ой. Внутри LOOP немножко DSL-сахара и код на Common Lisp. Вне LOOP тоже код на Common Lisp. Для таких (ненужных) сахарных макросов гигиена могла бы быть полезна - чтобы код вне и внутри макры соединить корректно.

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

Внутри нормального DSL будет код на этом DSL. И ничего кроме. Никаких вкраплений host-языка.

Намного больше тебя.

Nanopass не видел, но имеешь наглость вонять. Смешно.

Нет, покажи.

http://www.cs.indiana.edu/~dyb/pubs/nano-jfp.pdf

Это пример того, как надо правильно переписывать код. Никакого boilerplate вообще.

Давным-давно писал, когда еще не знал как пользоваться макросами.

Сейчас напиши. С гигиеной.

А по реализации - это компилятор из некоторого ДСЛ, не имеющего ничего общего с общелиспом в хост-язык (общелисп).

Тупой, да? Внутри LOOP может быть сколько угодно кода на CL.

Паскаль вообще тривиальщина

Сделай.

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

ML проще Паскаля.

Ну и в любом случае надобность в реализации паскаля или МЛ мне кажется несколько надуманной.

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

Не хочешь писать язык общего назначения - сделай проще, напиши ОПТИМИЗИРУЮЩИЙ компилятор eBNF, встраиваемый в Схему. Ключевое слово здесь «оптимизирующий». Гигиена тебе будет мешать.

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

LOOP пишется в пять строк, вообще-то. Паскаль - в 25. А убогие «средства» во всяких схемках с ракетками ни для чего практичного не годятся вообще, даже если очень сильно извращаться. Что может быть более убогим, чем чмошный syntax-case?!?

Сравни это с возможностями nanopass и опухни от стыда.

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

Что за средства?

Такие, как nanopass, очевидно. DSL для описания AST языка и описания правил переписывания этого AST.

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

ты вообще работаешь на другом уровне абстракции

Ну расскажи про «другой уровень абстракции». На примере реализации такого eDSL: на входе регулярное выражение, на выходе оптимизированный DFA.

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

Такие, как nanopass, очевидно. DSL для описания AST языка и описания правил переписывания этого AST.

Круто, спасибо. MBase напомнило.

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

У хашкеллистов есть свой аналог - Scrap Your Boilerplate.

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

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

Компилятор - это уже низкоуровневое перекладывание байтиков.

Это цель существования макросистемы.

Неверно. Это цель существования убогих макросистем типа общелиспа.

Опять про говносахар.

При чем тут сахар? Как раз при написании простых макросов не так важно пидорасишь ли ты списки или работаешь с более высокоуровневыми понятиями.

Оно и понятно, что ты про компиляторы

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

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

Внутри LOOP немножко DSL-сахара и код на Common Lisp.

Внутри loop нету кода на common lisp. Там своя собственная грамматика. Именно по-этому луп - пример простенького компилятора, о котором ты говоришь. Сложнее паскаля, конечно, но простенького.

И ничего кроме. Никаких вкраплений host-языка.

Это очень плохой ДСЛ. Возможность исполдьзовать как можно больше средств хост-языка - свойство хорошего дсл. Написать ДСЛ, который тебя ограничивает и не дает средства языка использовать - очень просто, да. Опять приходим к тому, с чего начали - если тебе нужно нефункциональное нерасширяемое неподдерживаемое и нечитабельное говнецо - макросистема коммон лиспа действительно будет хорошим выбором. Если же ты хочешь написать еДСЛ - на нахуй.

Сейчас напиши. С гигиеной.

Ок. Если ты пообещаешь выкатить свой вариант. Не дать ссылку на чью-то реализацию, заметь - а выкатить свой. Договорились? И никакие отмазки не принимаются - я даю свою реализацию, ты даешь свою, либо идешь нахуй. Договорились?

Внутри LOOP может быть сколько угодно кода на CL.

Конечно. Но это конкретные куски, имеющие смысл literal.

ML проще Паскаля.

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

Именно это и есть пример встраивания eDSL.

Нет, не есть. Используемые в реальности еДСЛ сильно проще паскаля или лупа. Чуть менее чем всегда они даже не тьюринг-полны.

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

Да нет, суть как раз меняется принципиально. Для любой макросистемы есть определенная отсечка, некоторая сложность ДСЛ, после которой для написания этого ДСЛ становится недостаточно средств макросистемы, в результате чего происходит взрывной рост сложности и приходится руками пидорасить кодеволкеры с тысячами бойлерплейта. Фактически, все, что можно написать в рамках данной макросистемы - это то, что можно написать до этой отсечки, т.к. в реальности ебашить кодеволкеры будут только упоротые ебланы вроде тебя. По-этому сложность дсля принципиально - важно окажется она до отсечки (и значит дсл можно реализовать с разумными затратами) либо после (значит дсл с разумными затратами реализовать нельзя). Вот в случае макросистемы общелиспа отсечка находится на уровне макросов однострочников. Все что сложнее - идет нахуй.

Гигиена тебе будет мешать.

Гигиена в принципе не может мешать. Конечно, чтобы это понимать, надо знать, что такое гигиена и как она работает.

LOOP пишется в пять строк, вообще-то. Паскаль - в 25.

Давай, покажи.

Сравни это с возможностями nanopass и опухни от стыда.

Ты понимаешь, что дал ссылку на статью человека, который является одним из известнейших схемо-макротеоретиков, в том числе и теории гигиенических макросов? Что твой нанопасс сугубо гигиеничен, заточен под ненавистный syntax-case и принципиально не может работать без гигиены? И что он как раз и описывает работу на более высоком уровне абстракции вне кодогенерации? Видимо, нет.

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

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

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

Прочитал про нанопасс поподробнее - ну офигеть, это же подмножество ракетовского Redex. Оно и не странно, вобщем-то - Kent Dybvig же что там что там.

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