Способно ли метапрограммирование заменить отдельные языки?
От: Chrome  
Дата: 01.02.11 09:00
Оценка:
Подключаемая грамматика – наподобие подключаемой библиотеки – выглядит очень привлекательной альтернативой полностью определенному языку.
Позволяет самим реализовать фичи, которые нужны вам сейчас.
Позволяет отказаться от ненужного наследства.
Эти два фактора, как мне кажется, являются двужущей силой для изобретения новых языков программирования и смерти существующих.
Наличие платформы метапрограммирования резко снижает расходы на создание собственного языка или диалекта существующего.
У вас уже есть back end компилятора, который умеет создавать все примитивы runtime платформы — остается придумать грамматику и транслировать ее в эти примитивы.
Это, конечно, само по себе крупная задача, не не такая неподьемная, как целый компилятор.
Кроме того, можно ограничиться расширением существующего языка.

Некоторые товарищи утверждают, что на имплементацию C# на немерле у них ушло 2 месяца.
Можно ли за аналогичное време реализовать эрланг? F#?
Если сроки реально такого порядка — стоит ли ожидать в будущем отдельный диалект языка программирования на каждую программерскую контору или крупный проект?
Re: Способно ли метапрограммирование заменить отдельные язык
От: Sinix  
Дата: 01.02.11 09:20
Оценка: +2
Здравствуйте, Chrome, Вы писали:

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

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

C>Позволяет самим реализовать фичи, которые нужны вам сейчас.

Фич, которые не могут быть реализованы внутри библиотек-хелперов, очень мало.

C>Позволяет отказаться от ненужного наследства.

Как?


C>Наличие платформы метапрограммирования резко снижает расходы на создание собственного языка или диалекта существующего.

Зачем? Для DSL нужна очень большая инфраструктура аля M. Последний, кстати, не взлетел.

Для полноценных языков (если мы не собираемся гнать погонными метрами клоны существующих) толку от метапрограммирования как такового тоже очень мало. Выигрыш от кучи диалектов можно наблюдать на примере SQL.

C>У вас уже есть back end компилятора, который умеет создавать все примитивы runtime платформы — остается придумать грамматику и транслировать ее в эти примитивы.

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

C>Некоторые товарищи утверждают, что на имплементацию C# на немерле у них ушло 2 месяца.

Нет, 2 месяца — это на немерль с синтаксисом шарпа. Полноценный компилятор, со всеми прелестями и нюансами — на порядок больше работы.

C>Можно ли за аналогичное време реализовать эрланг? F#?

Да, только по поведению это будет всё тот же nemerle.

C>Если сроки реально такого порядка — стоит ли ожидать в будущем отдельный диалект языка программирования на каждую программерскую контору или крупный проект?

Конечно. Это самый лучший способ протратить ресурсы.
Re: Способно ли метапрограммирование заменить отдельные язык
От: Fancy  
Дата: 01.02.11 09:25
Оценка:
Здравствуйте, Chrome, Вы писали:

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

C>Позволяет самим реализовать фичи, которые нужны вам сейчас.
C>Позволяет отказаться от ненужного наследства.
C>Эти два фактора, как мне кажется, являются двужущей силой для изобретения новых языков программирования и смерти существующих.
C>Наличие платформы метапрограммирования резко снижает расходы на создание собственного языка или диалекта существующего.
C>У вас уже есть back end компилятора, который умеет создавать все примитивы runtime платформы — остается придумать грамматику и транслировать ее в эти примитивы.
C>Это, конечно, само по себе крупная задача, не не такая неподьемная, как целый компилятор.
C>Кроме того, можно ограничиться расширением существующего языка.

C>Некоторые товарищи утверждают, что на имплементацию C# на немерле у них ушло 2 месяца.

C>Можно ли за аналогичное време реализовать эрланг? F#?
C>Если сроки реально такого порядка — стоит ли ожидать в будущем отдельный диалект языка программирования на каждую программерскую контору или крупный проект?
Re: Способно ли метапрограммирование заменить отдельные язык
От: Fancy  
Дата: 01.02.11 09:29
Оценка:
Думается мне что это привлекательное решение смогут оценить только её сторонники. Чтобы это оценил кто-то ещё, нужно, во-первых, чтобы кто-то с помощью этой технологии реализовал что-то прибыльное, и во-вторых, заявил об этом на весь мир. Даже если энтузиастам удастся решить первую задачу, вторая может не принести никаких плодов, если конечно не брать в расчёт минутную славу и шум вокруг чего-то "принципиально нового".
Re: Способно ли метапрограммирование заменить отдельные язык
От: Eye of Hell Россия eyeofhell.habr.ru
Дата: 01.02.11 09:36
Оценка: +1 -1

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


Частично реализовано в LISP, полностью реализовано в Tcl.

Наличие платформы метапрограммирования резко снижает расходы на создание собственного языка или диалекта существующего


Кроме плюсов возникают минусы. Посмотрите на практику применения DSL: чем более сложный DSL мы применяем, тем поще и быстрее нам код писать, но тем сложнее и дольше его поддерживать другим людям. Соответственно, это не так популярно потому как компании хотят защититься от эффекта падающего кирпича. Если архитектор DSL покинет компанию или даже заболеет — будут большие проблемы. ОЧЕНЬ большие проблемы.

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


Там, ИМХО, намного больше факторов — инфраструктура, простота реализации тех или иных вещей (зачастую диаметрально противоположных), развертывание, поддержка и прочее.
Re[2]: Способно ли метапрограммирование заменить отдельные я
От: 0x7be СССР  
Дата: 01.02.11 09:44
Оценка:
Здравствуйте, Eye of Hell, Вы писали:

EOH>Кроме плюсов возникают минусы. Посмотрите на практику применения DSL: чем более сложный DSL мы применяем, тем поще и быстрее нам код писать, но тем сложнее и дольше его поддерживать другим людям. Соответственно, это не так популярно потому как компании хотят защититься от эффекта падающего кирпича. Если архитектор DSL покинет компанию или даже заболеет — будут большие проблемы. ОЧЕНЬ большие проблемы.

Тут ключевое слово не "DSL", а "сложный".
Когда мы создаем систему абстракций (классов, интерфейсов, функций и т.п.), то мы тоже создаем свой язык, и если эта система будет сложной, то эффект кирпича тут будет такой же, как и у DSL.
Re[2]: Способно ли метапрограммирование заменить отдельные я
От: Chrome  
Дата: 01.02.11 10:18
Оценка:
Здравствуйте, Sinix, Вы писали:

C>>Позволяет самим реализовать фичи, которые нужны вам сейчас.

S>Фич, которые не могут быть реализованы внутри библиотек-хелперов, очень мало.
Как вы обьясняете для себя существование множества языков программирования?
для чего то люди их выдумывают?
На мой взгляд — именно от невозможности реализовать что либо в библиотеке.

C>>Позволяет отказаться от ненужного наследства.

S>Как?
написать грамматику, в которой не будет устаревших конструкций — например указателей, если они вам не нужны.


C>>Некоторые товарищи утверждают, что на имплементацию C# на немерле у них ушло 2 месяца.

S>Нет, 2 месяца — это на немерль с синтаксисом шарпа. Полноценный компилятор, со всеми прелестями и нюансами — на порядок больше работы.

Не понял этого замечания — этот "немерль с синтаксисом шарпа" умеет компилить программы на шарпе?
на мой вкус это и есть компилятор шарпа, и затраты на это — 2 месяца...

C>>Можно ли за аналогичное време реализовать эрланг? F#?

S>Да, только по поведению это будет всё тот же nemerle.
что имеется в виду под поведением? в чем отличие от оригинального F#?
Re[3]: Способно ли метапрограммирование заменить отдельные я
От: alpha21264 СССР  
Дата: 01.02.11 10:21
Оценка: 6 (1) +1
Здравствуйте, Chrome, Вы писали:

C>Здравствуйте, Sinix, Вы писали:


C>>>Позволяет самим реализовать фичи, которые нужны вам сейчас.

S>>Фич, которые не могут быть реализованы внутри библиотек-хелперов, очень мало.
C>Как вы обьясняете для себя существование множества языков программирования?
C>для чего то люди их выдумывают?
C>На мой взгляд — именно от невозможности реализовать что либо в библиотеке.

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

Течёт вода Кубань-реки куда велят большевики.
Re[2]: Способно ли метапрограммирование заменить отдельные я
От: Chrome  
Дата: 01.02.11 10:48
Оценка:
C>>Если сроки реально такого порядка — стоит ли ожидать в будущем отдельный диалект языка программирования на каждую программерскую контору или крупный проект?
S>Конечно. Это самый лучший способ протратить ресурсы.

2 человеко месяца — не выглядит сколь нибудь серьезным ресурсом.
меня собственно и заинтересовало — неужели реально с такой скоростью клепать языки?
Re[3]: Способно ли метапрограммирование заменить отдельные я
От: Mamut Швеция http://dmitriid.com
Дата: 01.02.11 11:08
Оценка: 1 (1) +1
C>>>Можно ли за аналогичное време реализовать эрланг? F#?
S>>Да, только по поведению это будет всё тот же nemerle.
C>что имеется в виду под поведением? в чем отличие от оригинального F#?

На примере Erlang'а. Erlang — это не только синтаксис. Это и легковесные потоки, и асинхронные сообщения, и архитектура shared-nothing и т.д. и т.п. Для того, чтобы реализовать этона Немерле, ндо писать рантайм (грубо говоря) эрланга на Нмерле


dmitriid.comGitHubLinkedIn
Re[3]: Способно ли метапрограммирование заменить отдельные я
От: Eye of Hell Россия eyeofhell.habr.ru
Дата: 01.02.11 11:11
Оценка:

Тут ключевое слово не "DSL", а "сложный".


Вы правы — именно это я и ответил автору . Своя грамматика = сложный DSL.

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


Не-е-е-е, тут, ИМХО, мы не создаем свой язык — мы создаем абстракции на базе известного программистам языка/технологии. Если у меня архитектура actor model на Qt, то знающий C++ и Qt человек ее поймет, потому что все примитивы и приемы кодирования ему известны. А вот если я под эту actor model наваяю собственный синтаксис, который уменьшит количество моего кода в пару-тройку раз, то с этим синтаксисом новому человеку будет разобраться намного сложнее. А уж поменять что-нибудь — большой проблемой.
Re: Способно ли метапрограммирование заменить отдельные язык
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 01.02.11 11:15
Оценка: +2 -2
Здравствуйте, Chrome, Вы писали:

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

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

C>У вас уже есть back end компилятора, который умеет создавать все примитивы runtime платформы — остается придумать грамматику и транслировать ее в эти примитивы.

C>Это, конечно, само по себе крупная задача, не не такая неподьемная, как целый компилятор.
C>Кроме того, можно ограничиться расширением существующего языка.
А теперь вопрос: если одни и те же задачи можно решать библиотекой или расширением\изменением\созданием нового языка, то что ты выберешь?

Может все таки стремиться не столько к изменяемым языкам, сколько к возможности выразить максимум средствами языка?
Re[4]: Способно ли метапрограммирование заменить отдельные я
От: Chrome  
Дата: 01.02.11 11:28
Оценка:
Здравствуйте, Mamut, Вы писали:

C>>>>Можно ли за аналогичное време реализовать эрланг? F#?

S>>>Да, только по поведению это будет всё тот же nemerle.
C>>что имеется в виду под поведением? в чем отличие от оригинального F#?

M>На примере Erlang'а. Erlang — это не только синтаксис. Это и легковесные потоки, и асинхронные сообщения, и архитектура shared-nothing и т.д. и т.п. Для того, чтобы реализовать этона Немерле, ндо писать рантайм (грубо говоря) эрланга на Нмерле


суть моего оригинального вопроса состояла в следующем
— предположим, эрланга в природе еще нет,
и его идеи только что родились в моей гениальной голове.
Что мне выбрать — написать рантайм, и компилятор, и прикрутить это к какой нибудь среде программирования
или взять платформу метапрограммирования вроде немерле, реализовать на ней синтаксис,
допилить таки недостающие части рантайма — те самые легковесные потоки и сообщения.
(заметьте, мне не нужно писать весь рантайм, 90% уже есть).

второй путь кажется более быстрым
и не является чем то громоздким — по сложности — как обычная библиотека.
Re[5]: Способно ли метапрограммирование заменить отдельные я
От: Курилка Россия http://kirya.narod.ru/
Дата: 01.02.11 11:34
Оценка:
Здравствуйте, Chrome, Вы писали:

C>суть моего оригинального вопроса состояла в следующем

C>- предположим, эрланга в природе еще нет,
C>и его идеи только что родились в моей гениальной голове.
C>Что мне выбрать — написать рантайм, и компилятор, и прикрутить это к какой нибудь среде программирования
C>или взять платформу метапрограммирования вроде немерле, реализовать на ней синтаксис,
C>допилить таки недостающие части рантайма — те самые легковесные потоки и сообщения.
C>(заметьте, мне не нужно писать весь рантайм, 90% уже есть).

90% — это ты про дотнет?
Если да, то есть некоторые проблемы, скажем ГЦ сильно другой и др. (подробнее — в архиве
Автор: Lazy Cjow Rhrr
Дата: 12.12.06
)
Re[4]: Способно ли метапрограммирование заменить отдельные я
От: Chrome  
Дата: 01.02.11 11:45
Оценка:
EOH>Не-е-е-е, тут, ИМХО, мы не создаем свой язык — мы создаем абстракции на базе известного программистам языка/технологии. Если у меня архитектура actor model на Qt, то знающий C++ и Qt человек ее поймет, потому что все примитивы и приемы кодирования ему известны. А вот если я под эту actor model наваяю собственный синтаксис, который уменьшит количество моего кода в пару-тройку раз, то с этим синтаксисом новому человеку будет разобраться намного сложнее. А уж поменять что-нибудь — большой проблемой.

Неужели перспектива сократить код в 2-3 раза
не сподвигнет вас на изучение небольшого расширения синтаксиса?
я так полагаю, введение вашей actor model (не знаю, что это такое по сути)
не повлиеяет на такие понятия в вашей программе, как namespace, class, fields, methods, foreach и куча всего другого — они останутся неизменны, добавится небольшое расширение — которое увеличит производительность вашего труда.
перешли же люди на с with classes.
Re[4]: Способно ли метапрограммирование заменить отдельные я
От: hardcase Пират http://nemerle.org
Дата: 01.02.11 11:48
Оценка:
Здравствуйте, Eye of Hell, Вы писали:

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


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

EOH>А уж поменять что-нибудь — большой проблемой.


А от это уже зависит от качества реализации "собственного синтаксиса".


Разве никто не здесь не допускает возможности того, что сложность реализации "синтаксиса" эквивалентна написанию библиотеки, а удобство использования в определенных случаях может быть значительно выше?
/* иЗвиНите зА неРовнЫй поЧерК */
Re[2]: Способно ли метапрограммирование заменить отдельные я
От: Chrome  
Дата: 01.02.11 12:09
Оценка: +1
Здравствуйте, gandjustas, Вы писали:

G>Вот только ты не учел что язык — не только способ передачи информации от программиста компьютеру, но и способ передачи информации между программистами.

G>Вот изменяемая грамматика этому крайне не способствует.
думаю, раз существуют разные языки — есть потребность в разных грамматиках.


G>А теперь вопрос: если одни и те же задачи можно решать библиотекой или расширением\изменением\созданием нового языка, то что ты выберешь?


G>Может все таки стремиться не столько к изменяемым языкам, сколько к возможности выразить максимум средствами языка?


я не против, поэтому говорю в основном про расширение синтаксиса, в тех случаях, когда нельзя лаконично выразить свою мысль существующими средствами языка.
да и само раширение синтаксиса(в свете метапрограммирования) является ничем иным, как библиотекой
так что ваш вопрос можно рассматривать
как выбор между библиотекой и библиотекой.
разница будет в местах вызова элементов этих библиотек.
в стандартном синтаксисе вызовы будут раздуты
в измененном синтаксисе — лаконичны
Re[6]: Способно ли метапрограммирование заменить отдельные я
От: Chrome  
Дата: 01.02.11 12:23
Оценка:
Здравствуйте, Курилка, Вы писали:

C>>(заметьте, мне не нужно писать весь рантайм, 90% уже есть).


К>90% — это ты про дотнет?

К>Если да, то есть некоторые проблемы, скажем ГЦ сильно другой и др. (подробнее — в архиве
Автор: Lazy Cjow Rhrr
Дата: 12.12.06
)


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

замечание про гц никак не влияет на нашу способность реализовать эрланг под дот нет.
он будет работать. но потеряет свойства realtime
но это свойство не присуще именно .net runtime.
и никак не связано с синтаксисом и семантикой эрланга.
нам просто нужен бек энд компилятора для realtime runtime

в общем, языки и рантаймы — это разные вещи.
Re[3]: Способно ли метапрограммирование заменить отдельные я
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 01.02.11 12:26
Оценка:
Здравствуйте, Chrome, Вы писали:

C>Здравствуйте, gandjustas, Вы писали:


G>>Вот только ты не учел что язык — не только способ передачи информации от программиста компьютеру, но и способ передачи информации между программистами.

G>>Вот изменяемая грамматика этому крайне не способствует.
C>думаю, раз существуют разные языки — есть потребность в разных грамматиках.
Сомневаюсь. Ты хоть раз ощущал потребность в новой грамматике?
У меня такое было только с паскалем, когда задалбывало begin\end писать, но это мелочи.

G>>А теперь вопрос: если одни и те же задачи можно решать библиотекой или расширением\изменением\созданием нового языка, то что ты выберешь?


G>>Может все таки стремиться не столько к изменяемым языкам, сколько к возможности выразить максимум средствами языка?

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

C>разница будет в местах вызова элементов этих библиотек.

C>в стандартном синтаксисе вызовы будут раздуты
C>в измененном синтаксисе — лаконичны
А что мешает сделать вызовы лаконичными без изменения синтаксиса?
Re[7]: Способно ли метапрограммирование заменить отдельные я
От: Курилка Россия http://kirya.narod.ru/
Дата: 01.02.11 12:30
Оценка:
Здравствуйте, Chrome, Вы писали:

C>Здравствуйте, Курилка, Вы писали:


C>>>(заметьте, мне не нужно писать весь рантайм, 90% уже есть).


К>>90% — это ты про дотнет?

К>>Если да, то есть некоторые проблемы, скажем ГЦ сильно другой и др. (подробнее — в архиве
Автор: Lazy Cjow Rhrr
Дата: 12.12.06
)


C>про дотнет — это частность.

C>я про простоту реализации нового синтаксиса языков на базе метапрограммирования.

C>в общем, языки и рантаймы — это разные вещи.


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