Pull to refresh

Comments 93

Собственно говоря задам вопрос который на Хабре задавался уже не один раз: «А зачем?»

Всё это умеет Perl, например, зачем изобретать новый язык программирования для функционала который уже есть в других языках программирования?
только для вентиляторов ппц))
главное чтобы не just for lulz ;)
Внезапно, это диссер. Ответ на вопрос «зачем?» очевиден: науку двигать. Построить формальную систему, а не коллекцию хаков.
Чтобы двигать науку должно быть что-то новое неповторимое, в данном случае этого просто нет, посмотрите как работают модули Inline:: для Perl, также!!! И Никаких хаков!!!
Мало того это было заложено в идею языка много лет назад под понятие source filter, причём не несколько лет, а больше!

Опять же есть проект — Parrot который вышел раньше чем katahdin, т.е. человек потратил 2 года на разработку того, что уже было на этот момент, т.е. он даже не удосужился погуглить. Я не вижу в этом никакого важного поступка и тем более смысла.
> посмотрите как работают модули Inline:: для Perl, также!!! И Никаких хаков!!!
Посмотрел. Убедился, что вы поняли ещё меньше, чем я подумал поначалу.
> Чтобы двигать науку должно быть что-то новое неповторимое, в данном случае этого просто нет
Перловые модули используют packrat parsing? Нет? Вот вам и научная новизна.
> Мало того это было заложено в идею языка много лет назад под понятие source filter, причём не несколько лет, а больше!
А reader macros в Common LISP все равно старше, такие дела.

> посмотрите как работают модули Inline:: для Perl, также!!! И Никаких хаков!!!
Посмотрел. Убедился, что вы поняли ещё меньше, чем я подумал поначалу.

Это про вторую версию поста, такой же синтаксис достигается 1-2 строчками дополнительно что есть в Inline:: модулях, в любом случае это проще чем новый язык городить

> Чтобы двигать науку должно быть что-то новое неповторимое, в данном случае этого просто нет
Перловые модули используют packrat parsing? Нет? Вот вам и научная новизна.


Забавным образом была проигнорирована часть моего сообщения про проект parrot, там это ЕСТЬ, мало того там УЖЕ есть НАМНОГО БОЛЬШЕ и планы более наполеоновские чем у этого языка, автор которого потратил много времени впустую

> Мало того это было заложено в идею языка много лет назад под понятие source filter, причём не несколько лет, а больше!
А reader macros в Common LISP все равно старше, такие дела.


Не спорю, тем более Perl очень много от LISP перенял.
Потому и возмущаюсь что можно бы было использовать и улучшать то что есть, тем более серьёзных ограничений по функциональности нет, НО Ответ на вопрос «зачем?» очевиден: науку двигать. Для науки полезны «велосипеды», думаю НЕТ.
Это про вторую версию поста
опять поторопился, в замыслах было — «это про вторую часть поста»
> Это про вторую часть поста, такой же синтаксис достигается 1-2 строчками дополнительно что есть в Inline:: модулях, в любом случае это проще чем новый язык городить
Если вы отвечаете на мой комменатрий, а не на корневой пост, будьте добры явно указывать контекст.
И ещё раз повторюсь, если вы не видите или не хотите видеть разницу между запуском внешней программы для разбора специальным образом выделенных литералов и изменением грамматики «на лету», то разговор бессмыслен.
> Для науки полезны «велосипеды», думаю НЕТ.
Вы всерьёз считаете, что возможность написать нечто похожее прямо сейчас на Перле на целесообразность реализации конкретной идеи с помощью конкретного алгоритма? Кстати, если вы не обратили внимание, диссер 2007 года и цитируемый.
Я не говорю что надо на Perl 5 писать такой функционал с нуля, я сказал что есть возможность использовать нечто подобное.

Нечто похожее разрабатывают с 2003 года, целую платформу под названием Parrot идеей которой является процитирую: Parrot is a virtual machine designed to efficiently compile and execute bytecode for dynamic languages. Parrot currently hosts a variety of language implementations in various stages of completion, including Tcl, Javascript, Ruby, Lua, Scheme, PHP, Python, Perl 6, APL, and a .NET bytecode translator.
Эту платформу в основном разрабатывают под язык Perl 6, но также там будут исполняться и другие языки, т.е. если хочется написать какой-то кусок программы на определённом языке — никаких проблем. И независимо от Parrot, Perl 6 по спецификации имеет весь необходимый функционал для описания других языков: соотв. ссылка. Например С++ разновидности c99 описанный подобным синтаксисом: тут. И там НЕ ЗАПУСКАЕТСЯ отдельный интерпретатор, мало того всё преобразуется в байт-код, кешируется и оптимизируется. Проект в активной разработке.

Если у создателя этого языка были такие благие и хорошие намерения, ему надо было всего лишь присоединиться к группе разработчиков и с 2007 по 2009 год сделать что-нибудь более полезное чем ещё один язык со смутным будующим и небогатым прошлым.
Да ё моё! Паррот — это виртуальная машина. Она обеспечивает общий рантайм (кстати, разработчики .NET DLR тоже должны были примкнуть к Parrot вместо «изобретения велосипеда»?), но не решает вопрос создания парсера с динамически изменяемой грамматикой. Вы уцепились за идею комбинирования существующих языков в одном исходнике, когда рассматриваемый подход много шире.
По ссылкам полистайте как минимум которые я выложил, чтобы диалог был более конструктивен
Parrot предоставляет механизм для разбора PEG, но использование их для создания языка с динамической грамматикой — это задача фронтенда. В Perl 6 что-то такое сделали, да. Но Pugs или Rakudo — это не Parrot, давайте мух от котлет отделять. Учитывая статус Perl 6, я бы не стал однозначно называть реализацию на Parrot более перспективной, чем на .NET.
<flamebait> Да, вам Перл близок, но с другой точки зрения труд, вложенный в Parrot, — пустая трата времени для кучки маргиналов, а .NET — это глобально, надёжно, ынтырпрайзно. </flamebait> Аргументация о том, чем следовало бы заниматься автору, предвзята.
1. Вообще-то PGE (Perl grammar engine), он уже используется. И Rakudo и Pugs это конечно же не Parrot =)
Сейчас активно разрабатываемая реализация Perl 6 под Parrot — Rakudo, там такой функционал реализован.
2. О какой маргинальности идёт речь, если язык развивается, общество также развивается и идеи этого общества более чем соответствуют действительности?
Или просто кто-то где-то умное слово услышал? Думаю последнее.
2. ынтырпрайз — всё же больше Java, чем .NET насчёт глобальности и надёжности последнего тоже вполне спорный вопрос, но штука монументальная не спорю.
(кстати, разработчики .NET DLR тоже должны были примкнуть к Parrot вместо «изобретения велосипеда»?),

Parrot + Perl 6 — это не попытка изобрести велосипед как таковой, а эволюция очень гибкого языка программирования, опять же подтверждающая его гибкость и правильное направление повторного использования кода, и система предполагается более объёмная чем .NET
С меня хватит. Я не могу отобрать у вас золотой молоток. Но постарайтесь понять, что достижения computer science не ограничиваются Parrot и Perl 6.
На самом деле я понял в чём я был не прав в комментариях в этой статье.

Тут говорят о прорыве именно для .NET в этом направлении, пусть так и будет.

А я с самого начала пытался говорить в более глобальном смысле и в пылу спора сразу не разобрался.

В общем, приятно было пообщаться с умным человеком. Я верю что в споре «рождается истина», для меня истиной оказалось что я изначально не понял тему для спора.
Поясните пожалуйста, вот в этой фразе
Например С++ разновидности c99
вы имели в виду именно C++ или речь шла о C? Всё-таки C99 — это спецификация C. Я думаю, не надо пояснять, что разница между C и C++ огромна.
Я поторопился, вы правы, это действительно спецификация C.
люди, не показывайте ему бреинфак.
я видел, даже пробовал, этот язык ОРИГИНАЛЕН, ибо никакого другого на его роль не найдёшь, этот таковым не является
Задача разработчика придумать что-то новое, а чего с этим делать пусть думают пользователи(В данном случее программисты)
Опять же в посте это представляется как достижение, но это не так… Человек потратил много времени на то что уже изобретено… и ищет последователей… это глупо… «топтание на месте», вот как я могу это охарактеризовать
отлично, еще один язык на Mono/.NET, хороших инструментов должно быть много
Единственная реализация языка использует платформу .NET (реализацию Mono). [wiki]
Это я понял и без wiki: ) Смысл фразы скрывается на более глубоких уровнях.
Тамбовский волк вики-участник эту самую «неплохую статью в русскоязычной википедии» уже успел порезать :(
Статью вернули. И заодно переименовали.
это ж какое просторы для говнокода открываются :) Наш девиз: «Чем непонятнее код — тем лучше, дольше делаем заказ с температурой 38 градусов — начальник думает, что мы хорошо работаем!»
в чем-то вы конечно правы: чем больше возможностей в языке, тем больше возможностей налажать. но это ж не значит что нельзя использовать язык с умом, и использовать все его плюсы, а не все минусы. правда ведь? :)
Отличные программисты из Jetbrains сделали что-то подобное, MPS — Metaprogramming system.

А для смешения языков (в MPS) есть отличное применение — в одном файле может быть Java/JS/HTML/CSS код, например.

Причём, поскольку, например, классы в CSS это не просто «текст», а именно полноценный язык, то если из html сослаться на несуществующий класс, редактор покажет ошибку.
При компиляции полуючаются три 4 разных файла, например.

Но это всё как частный случай, конечно.
О, неплохая статья, да.

Идеи не поменялись, а внешний вид сейчас _значительно_ лучше, конечно.
О, я раньше тоже писал в одном файле Java/JS/HTML/CSS код. Ещё и с вкраплениями SQL :)
Программа на Java выдаёт HTML, в котором есть Javascript и CSS :)
Ну, скорее всего всё что не Java шло как строки, без каких-либо проверок компилятором или IDE, что уже не так удобно.

Ну, в лучшем случае, GWT как-то решает проблему. Но не так выразительно.
Да, конечно как строки, я же поставил смайлик.
Но факта не отменяет — пять разных языков в одном файле :)
И это может оказаться вредным. Пример из головы — прилеплю совершенно левый класс, чисто чтобы отделить часть элементов для jquery.
Мне кажется, такие штуки мало работают на практике.
Посмотрите, например, что случилось с проектом Intentional programming, с помпой продвигавшимся в самом Майкрософте вроде бы самим Чарлзом Симоньи. Теперь мало где о нём вообще упоминают, а было дело, в книге Чарнецки о порождающем программировании куча хвалебного материала о нём…
Таким «штуками» люди сейчас занимаются в научных целях. До практического применения им и правда далеко.
Честно говоря, я не совсем понимаю, что в данном случае подразумевается под «научными целями».
Ну, к примеру, поиски новой методологии программирования :)))

Вся сфера IT так или иначе появилась благодаря научным исследованиям.
Ну это верно ;) Я отлично понимаю смысл исследований, просто мне кажется, что данное направление было куда больше развито в рамках intentional programming, и авторы просто наступают на те же грабли.

В конце концов, исследование — это изучение нового, а не новое прохождение по тупиковому пути.
А может это поиск «скрытого» для невооруженного глаза выхода из тупика? )
в том то и дело что это поход по уже пройденному пути… т.е. кольцевой маршрут как минимум, не новый путь точно
Лампочки существовали до Эдисона, mp3 плееры до iPod, поисковики до гугла. Всё это были явно не новые пути, просто ещё одно исследование на тему.
Ну они хотя бы были лучше чем то что было до этого… идея этого языка не оригинальна.
Причём тут идея этого языка? Вам же говорят (и Вы соглашаетесь), что идея Эдисона (гугла, и т.д.) была не оригинальна, но именно реализация сыграла роль. А теперь проведите параллель с данным случаем.
Параллель?

Проект заглох:
(Current Status

After graduating I commissioned into the Royal Army Medical Corps and so I have no opportunity to continue development.
)
и 2 года труда коту под хвост, а ведь могли бы присоединиться к тому же описанному мной выше Parrot и сделать много хорошего и полезного, тем более цели и идеи очень схожие.

Таким НЕ должен быть результат труда «современного Эдисона», вот и вся параллель…
Даже если этот язык никто не будет применять на практике, внимание на него всё равно стоит обратить. Ведь изучив новый язык программирования мы не только получаем новый инструмент для работы, но и развиваем своё мышление, учимся смотреть на решаемые задачи под новым углом.
Да бросьте, в мире и без того сотни вполне разумных языков из разных парадигм, мне бы хотя бы ещё три изучить серьёзно :)

Например, те же Пролог, Хаскелл и Форт — вот за что хочу взяться на досуге.
В то время как Вы учите что-то существующее, другие уже пытаются придумать нечто новое. Тому же «молодому» Haskell почти 20 лет ;)
Я не думаю, что это новое. Я думаю, что это более слабая вариация не оправдавшего себя intentional programming. А новое — это замечательно, если внушает надежду.
UFO just landed and posted this here
>Язык это на то и язык потому, что есть границы. Вот представте вы говорите на русском, а потом начинаете мычать и крячкать… как думаете кто-то вас поймет?

Если тот, кому я это говорю, понимает мычание и крякание — то поймёт, разумеется :)

К примеру, я уже не раз себя ловил на том, что вставляю в русскую речь английские фразы (многие эмигранты этим «страдают») — и ничего, представьте, понимают :)
Причина в том, что есть некоторые вещи, которые на русский язык банально не переводятся. Или переводятся — но требуют 4-5 слов вместо 1-2, и всё равно происходит некая потеря смысла и подтекста, а на английском их можно выразить проще, точнее и лаконичнее.

Так и в этом случае: если определённую часть кода можно проще и лаконичнее выразить на другом языке — то почему бы и нет?
UFO just landed and posted this here
>Я вот встречал код на Си++ где народ менял работу операторов под свои специфические нужды…

Я тоже. И не только встречал, но и писал, и в С++ это стандартная фича.
И это не проблема языка, а проблема пейсателей. Ибо разгадка кроется в Вашей следующей фразе:

>и нигде это не описывал

Вот тут и кроется корень всех зол.

>Если комуто хочется простоты то есть Ассемблер или вообще байт-код

Не пропускайте слова при чтении. Я говорил не о простоте, а о простоте и лаконичности, поэтому асм был упомянут ни к селу, ни к городу.
UFO just landed and posted this here
>И если такая тема пойдет в общий обиход, то головная боль будет у нас с вами.

«Тема» ещё не пошла — но головной боли уже предостаточно. Следовательно, проблема не в «теме» ;)

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

Судя по Вашему комментарию Выше, «в программных буднях лучше не использовать» ни пхп, ни плюсы, ни какой-либо другой язык (т.к. нечитаемый код можно написать на любом из них) %)
UFO just landed and posted this here
>Написать нечитаемый код можно и на Си и на ПХП, но куда труднее чем на этом новом.

С чего бы?

>Простота кода и его понятность имеют куда более высокий приоритет чем его навороченность и скорость выполнения

Именно. Но это идёт как аргумент «за», а не «против» обсуждаемой фишки ;)
Что-то одно будет гораздо более просто и понятно на одном языке, что-то другое — на другом. Я никак в толк не возьму: Вы против использования нескольких языков в пределах одного проекта?
UFO just landed and posted this here
Да не поддавайтесь вы на такую простую провокацию. Очевидно же, что creotiv ерунду сказал только чтобы позлить окружающих.
Видимо вы по дороге за бугор потеряли знание родного языка, вот и все. Я могу выразить на русском все, и вложит много смысла в свою речь.
>Я могу выразить на русском все, и вложит много смысла в свою речь.

А читать и понимать прочитанное можете?
Я не говорил, что не могу что-то выразить, я сказал, что некоторые вещи по-английски получаются короче и точнее.
Вот я как раз насчет «точнее» и прошелся.
А вас понять в данном случае было сложно, вы же не использовали английские вставки: )
>Вот я как раз насчет «точнее» и прошелся.

Если бы Вы знали английский достаточно хорошо — у Вас бы не возникло такого желания.
То есть вы утверждаете, что на русском точно и емко выразить мысль невозможно? О бедные поколения предков: ( Видимо с этим связано качество дорожного покрытия и процент интеллектуалов а России.
>То есть вы утверждаете, что на русском точно и емко выразить мысль невозможно?

Нет, не утверждаю. Выучите русский язык, пожалуйста. С пониманием написанного у Вас большие проблемы.
Или с логикой (раз из слов "некоторые вещи по-английски получаются короче и точнее" у Вас следует «на русском точно и ёмко выразить мысль невозможно»). Или Вы просто троллите.
В любом случае — всего доброго.
Примеры пожалуйста приведите, знаток.
ИМХО очень интересная разработка, разработку многих вещей можно вывести просто на новый уровень, сделав поддержку на уровне языка сущностей и понятий которые фигурируют в данном контексте.
Да, именно это — цель всех систем метапрограммирования.
Например, математикам будет удобно видеть такой код:

i ∈ [5, +∞);

Честное слово, это копипаста из моего проекта. Чуть подробнее тут, в комментах:
community.livejournal.com/ru_scala/7100.html
:) математика первый пример который приходит в голову, уж очень неудобно писать всякие pow и т.д…

Большинство современных языков добавляют возможности для связей и описаний сущностей новыми способами, например аннотации в Java например @Id, @Column, @Entity и т.д. позовляют описать сохранение сущности в БД,

Во Flex есть магическое свойство позволяющее связывать поля сущносте напрямую напрямую например
<mx:Panel title={textbox.text}>
<mx:TextInput id=«textbox» />
</mx:Panel>

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

На древнем APL так и программировали)
Судя по комментариям в ЖЖ и тут, вы считаете, что таким языкам не место в «промышленном» программировании. С другой стороны, в MPS нет отладки. Начисто. Что убивает любую более-менее серьезную применимость на корню.

Не кажется ли вам, что это странно для инструмента, которому именно «место» в «промышленном» программировании с вашей точки зрения?
Приятно, что вы провели мини-расследование =) спасибо

Нет, я не считаю это серьёзной проблемой: единственное место, где отладка отсутствует — процесс генерации java-кода на основе моей предметной области.
Ну и код самого редактора, но там и отлаживать почти нечего.

Полученный java-код (автоматически) отправляется в Idea, где дэбаг на высшем уровне.

Да, немножечко жаль что не посмотреть текущее состояние кода (под отладкой) в терминах предметной области в MPS, но сгенерённый код, как правило, очень на него похож — соотнести атрибут «name» с методом get(«name»), например — не так и сложно.
Не хочу показаться грубым, но на «мини-расследование» меня сподвигло упоминание MPS в каждом втором вашем комментарии. Sad but true )

Я по-прежнему считаю, что отсутствие дебага в терминах DSL — очень большая антифича MPS. Думаю, JetBrains тоже это понимают и предпринимают все меры, чтобы удовлетворить потребителей :)
Конечно, они будут это делать. Но как — не очень пока ясно.
Может на основе Идеи, что неплохо само по себе.

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

Вообще я разрабатываю модули биржи РТС и приложения для Android как хобби =)
DSL существуют солько же времени, сколько макросы в lisp. Скорее всего дольше, чем вы на свете живёте :)
Я в курсе :) но вот простого и быстрого способа создать свой метаязык, или коллекции готовых, для определённых задач мне встречать не приходилось, конечно многое можно решить препроцессором кода, но т.к. препроцессор (ИМХО насколько я знаю) не умеет оперировать сущностями языка (Java классы методы переменные и т.д.), то много сделать им просто нельзя.
Препроцессору и не надо работать с сущностями — это задача рантайма :) По сути, блок pattern {… } относится к препроцессору и будет преобразовываться на этапе парсинга, все остальные методы будут вызываться в рантайме.

Вообще да, в lisp препроцессор рассчитан в первую очередь на расширение синтаксиса, построенного на S-выражениях, а не написания языка с нуля. Но… «Вы можете написать макросы, которые будут создавать макросы», правда вам потребуется время на это :) Результат будет сравним с Katahdin.
Как я писал в habrahabr.ru/blogs/crazydev/70714/#comment_2021100 хотелось бы чтобы инструмент позволял расширять и рантайм тоже :) создавая возможность связывать и описывать сущности новыми нужными в конкретном контексте способам, а если бы язык был ещё и не интерпритируемым и имел скорость Java (без рефлекшена) или C++ :) future is now и всё такое :)
Если в сабже появится возможность универсальной трансляции язык-язык — то тогда можно будет во первых делать трансляцию (кодогенерацию) на С/С++/Pascal/…, а во вторых — прямую трансляцию в машинный код.
[оффтоп] Если автор это все сделает, то все что я хотел по этой теме, будет реализовано. Автор языка, кстати, молодчина — в отличии от меня взялся в одиночку реализовывать свою разработку, вероятность получения гарантированной материальной выгоды от которой не очень велика. С другой стороны диссертация это сильный стимул. У меня такого нету. :) [/оффтоп]
Эх, всем хороши новые способы и языки, вот только нарабатывать опыт на них приходится с нуля да и мозг переключать на такие вещи сложновато.
недавно вот на Жуйке поднимался вопрос о выборе текстового редактора для кодера. одним из важных критериев было «чтобы расширялся на таком-то языке».
ну вот наверное неплохая область для применения: встраиваемый язык для написания плагинов (возможно не требующих высокой производительности).
если бы расширения к TextMate'у например писались по заводу не на Ruby, а на Katahdin, то всяким прочим питонистам и пхп-шникам жилось бы проще: доставляешь модуль своего любимого языка и пишешь расширение удобное именно тебе, на хорошо известном тебе скриптовом языке.
Если бы этот язык позволил писать код на PHP и использовать напрямую библиотеку GWT (Google Web Toolkit, написанный на JAVA), или какой либо другой инструментарий, написанный не на PHP, тогда бы я видел в нем пользу.
Ведь синтаксис — это не главное отличие языков.
Тут относительно недавно рассказывал про «Io» Language. Так вот, там тоже dsl-ы в языке:
community.livejournal.com/ru_iolanguage/4437.html

Правда, дескриптивная часть синтаксиса выглядит по-другому, ибо Io
Черд, хабрапарсер лох:

«Тут относительно недавно хабраюзер Semka рассказывал...»
Ide для этого сделать на гране фантастики…
Вернее будет сказать, нужно сначала (не)много пофантазировать, чтобы создать :) Но я уверен, что это реально.
Sign up to leave a comment.

Articles