Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Религиозные войны > Создание новых языковых конструкций


Автор: qweqwe 21.4.2010, 08:04
Некоторые языки программирования, с помощью различных механизмов(макросов, шаблонов, правил) позволяют существенно расширять язык программирования, к примеру, вводя новые языковые конструкции.
В качестве примера можно привести Nemerle, который позволяет определять макросы(в том числе и макросы, расширяющие синтаксис языка), которые обрабатываются в compile time и генерируют код. 
Я лично считаю, что это плохая практика, во первых, это не соответствует принципу наименьшего удивления(можно нагородить из макросов такое...), во вторых, если для решения конкретной задачи требуется расширить язык  программирования, то это плохой язык программирования, либо вы что-то делаете не так smile 

Автор: skyboy 21.4.2010, 11:31
если макрос позволяет реализовать метапрограммирование, чего не позволяет язык сам по себе - почему бы и нет?
вот можно при помощи макросов в С написать подобие шаблонов С++?

Добавлено через 2 минуты и 46 секунд
или я неверно понял вопрос?

Автор: djamshud 21.4.2010, 11:53
Считаю, что хорошо. Но программист должен понимать силу, данную ему, и не злоупотреблять ею.

Автор: Void 21.4.2010, 17:40
Цитата(qweqwe @  21.4.2010,  10:04 Найти цитируемый пост)
Некоторые языки программирования, с помощью различных механизмов(макросов, шаблонов, правил) позволяют существенно расширять язык программирования, к примеру, вводя новые языковые конструкции.

Так макросы, шаблоны или что? И каким ещё образом можно расширять язык программирования?
Метапрограммирование в Nemerle — понятный пример, но первое предложение построено с претензией на что-то более общее.

Автор: qweqwe 21.4.2010, 19:24
Цитата(Void @  21.4.2010,  17:40 Найти цитируемый пост)
Так макросы, шаблоны или что? И каким ещё образом можно расширять язык программирования?
Метапрограммирование в Nemerle — понятный пример, но первое предложение построено с претензией на что-то более общее. 

я когда этот пост писал, именно о Nemerle и думал, ну может еще о perl 6 smile 
хорошим примером плохого метапрограммирования может послужить C++ с библиотеками boost, например boost spirit, в общем - любые средства метапрограммирования, способные изменить язык до неузнаваемости smile 

Автор: A5uKa 22.4.2010, 11:13
NEMERLE  smile 

п.с. 
По поводу возможности...
Конечно это плохо ! Чем меньше возможностей - тем лучше !
Выкинуть и ложки и вилки и есть руками ! >_<

По поводу использования...
Цитата

можно нагородить из макросов такое...

Именно.
Цитата

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

А если, что бы выйти на улицу требуется одевать ботинки, то ноги что-ли плохие ?

Автор: kemiisto 22.4.2010, 11:41
Цитата(qweqwe @  21.4.2010,  09:04 Найти цитируемый пост)
Некоторые языки программирования, с помощью различных механизмов(макросов, шаблонов, правил) позволяют существенно расширять язык программирования, к примеру, вводя новые языковые конструкции.

Ага. Вспомнился Forth:
Цитата
ЙОДЫ МАГИСТРА РЕЧИ ТАЙНА ОТКРЫТА:
НА ФОРТЕ ПРОГРАММЕР СТАРЫЙ ОН ПРОСТО ЕСТЬ.

 smile 

Цитата(qweqwe @  21.4.2010,  09:04 Найти цитируемый пост)
В качестве примера можно привести Nemerle, который позволяет определять макросы(в том числе и макросы, расширяющие синтаксис языка), которые обрабатываются в compile time и генерируют код.

Примерчик бы.

Цитата(qweqwe @  21.4.2010,  09:04 Найти цитируемый пост)
Я лично считаю, что это плохая практика

Я, пожалуй, согласен.

Цитата(A5uKa @  22.4.2010,  12:13 Найти цитируемый пост)
Выкинуть и ложки и вилки и есть руками ! >_<

Некорректное сравнение. "Вилки и ложки" есть во всех языках. А вот нужен ли гибрид вилки, ложки, варибаси и ещё_чего_что_придёт в голову - вот в чём вопрос. Хотя, нет тут никакого вопроса...

Цитата(A5uKa @  22.4.2010,  12:13 Найти цитируемый пост)
А если, что бы выйти на улицу требуется одевать ботинки, то ноги что-ли плохие ?

Ботинки - это библиотека в таком контексте. Ты же предлагаешь изменять сами ноги! smile 

Автор: A5uKa 22.4.2010, 11:53
Цитата(kemiisto @ 22.4.2010,  11:41)
Цитата(A5uKa @  22.4.2010,  12:13 Найти цитируемый пост)
Выкинуть и ложки и вилки и есть руками ! >_<

Некорректное сравнение. "Вилки и ложки" есть во всех языках. А вот нужен ли гибрид вилки, ложки, варибаси и ещё_чего_что_придёт в голову - вот в чём вопрос. Хотя, нет тут никакого вопроса...

Цитата(A5uKa @  22.4.2010,  12:13 Найти цитируемый пост)
А если, что бы выйти на улицу требуется одевать ботинки, то ноги что-ли плохие ?

Ботинки - это библиотека в таком контексте. Ты же предлагаешь изменять сами ноги! smile

1. Я не говорю, что ты должен есть гибридной вилкой обычную еду. те "Вилки и ложки", которые есть везде не исключаются для обычной еды. Но вот например у тебя нету ТОСТЕРА ! 
user posted image
И у тебя никогда не будет ТОСТЕРА  smile 
Нужен он тебе или нет - другой вопрос , а хлеб варить будешь в микроволновке.

2. Не совсем. Когда ты одеваешь ботинки на ноги ты можешь посмотреть на них в целом как на одну вещь.
Может это слишком абстрактный пример и нужно что-то другое ... ?

Плохому танцору ...

Автор: kemiisto 22.4.2010, 12:05
Цитата(A5uKa @  22.4.2010,  12:53 Найти цитируемый пост)
Когда ты одеваешь ботинки на ноги ты можешь посмотреть на них в целом как на одну вещь.

Вот то-то и оно, что могу. Могу рассматривать ноги + ботинки как ноги. Ноги мне менять не надо, надо надеть ботинки. Мне не надо расширять синтаксис языка. Я могу дописать библиотеку.

Цитата(A5uKa @  22.4.2010,  12:53 Найти цитируемый пост)
Плохому танцору ...

Может быть тогда хороший танцор соизволит показать, как он расширил синтаксис Nemerle хотя бы в одном из своих многочисленных рабочих проектов? Какие преимущества он получил? Чтоб плохим танцорам оценить. smile 

Автор: A5uKa 22.4.2010, 12:21
Цитата(kemiisto @ 22.4.2010,  12:05)
Цитата(A5uKa @  22.4.2010,  12:53 Найти цитируемый пост)
Когда ты одеваешь ботинки на ноги ты можешь посмотреть на них в целом как на одну вещь.

Вот то-то и оно, что могу. Могу рассматривать ноги + ботинки как ноги. Ноги мне менять не надо, надо надеть ботинки. Мне не надо расширять синтаксис языка. Я могу дописать библиотеку.

Цитата(A5uKa @  22.4.2010,  12:53 Найти цитируемый пост)
Плохому танцору ...

Может быть тогда хороший танцор соизволит показать, как он расширил синтаксис Nemerle хотя бы в одном из своих многочисленных рабочих проектов? Какие преимущества он получил? Чтоб плохим танцорам оценить. smile

1. Ты сам понимаешь разницу и то, что Тостера от этого у тебя всё равно не будет. Метапрограммирование будет одевать твои ботинки за тебя, как тостер будет готовить ...
2. я не использую макросы - у меня не было надобности в подобных тостерах.
но вот : http://www.rsdn.ru/article/nemerle/NemerleStingFormating.xml пример.

Добавлено через 2 минуты и 6 секунд
А вообще спорить с тобой дело неблагородное 
Ты всё равно скажешь в конце "Иди пиши свой ###код"  smile 

Автор: kemiisto 22.4.2010, 12:30
Цитата(A5uKa @  22.4.2010,  13:21 Найти цитируемый пост)
я не использую макросы - у меня не было надобности в подобных тостерах

Понятно. Дальше особого смысла разговаривать ТЕБЕ в этом треде я не вижу.

Цитата(A5uKa @  22.4.2010,  13:21 Найти цитируемый пост)
но вот : http://www.rsdn.ru/article/nemerle/NemerleStingFormating.xml пример

Итак, ещё раз повторю для хороших танцоров в танке. Я хочу, чтобы хороший танцор соизволил показать, как ОН расширил синтаксис Nemerle хотя бы в одном из своих многочисленных РАБОЧИХ проектов? Какие ПРЕИМУЩЕСТВА ОН получил?
Статей от авторов языка мне не надо. Иероглифический самопиар меня мало интересует. 

Автор: A5uKa 22.4.2010, 12:33
Цитата(kemiisto @ 22.4.2010,  12:30)
Я хочу...

Хотеть не вредно.

Цитата

Иероглифический самопиар меня мало интересует.


Цитата

Понятно. Дальше особого смысла разговаривать ТЕБЕ в этом треде я не вижу.

Автор: k0rvin 22.4.2010, 12:47
Цитата(kemiisto @ 22.4.2010,  12:05)
Мне не надо расширять синтаксис языка. Я могу дописать библиотеку.

хотелось бы посмотреть как Вы реализуете cond таким образом.

Код

cond {
  bool-expr-1:
    operator-1-1;
  bool-expr-2: {
    operator-2-1;
    operator-2-2;
    ...
  }
  ...
  else: else-op;
}

что равносильно
Код

if bool-expr-1
  operator-1-1;
else if bool-expr-2 {
  operator-2-1;
  operator-2-2;
  ...
} else if ...
... else else-op;

только вышлядит проще и понятней

Автор: kemiisto 22.4.2010, 12:50
k0rvin, что это было? Какой это язык? Где пример использования cond?

Автор: LSD 22.4.2010, 13:01
Ноги обутые в ботинки это не единое целое, это ситема состоящая из 2-х слабосвязанных компонентов. Мы можем разделить ее на компоненты и они сохранят свои функциональные свойства. Мы можем скомбинировать эти ноги с другими ботинками, равно как и эти ботинки с другими ногами.
А то что предлагается в первом посте, это "аллея звезд". Когда делается отпечатки конкретных ног/рук и хорошо подходят только для этих самых рук/ног.


По поводу сабжа: скорее зло чем добро. Если нам нужны небольшие изменения, то и не стоит огород городить с новыми языковыми конструкциями. А если мы хотим замутить большие изменения, то тут уже будет куча последствий: 
- код становится трудно поддерживаемым, т.е. новый человек прежде чем начать разбираться непосредственно с системой, должен будет выучить наши надстройки над языком
- грамотно разработать язык (ну или хотя бы его часть), чтобы он был логичен, "красив" и непротиворечив, задача сама по себе нетривиальная
Это не значит, что задач где это нужно нет. Они есть, но их очень немного. А вот соблазн использовать микроскоп не по назначению, слишком велик.

Автор: A5uKa 22.4.2010, 13:03
Цитата(kemiisto @ 22.4.2010,  12:50)
k0rvin, что это было? Какой это язык? Где пример использования cond?

Похоже на что-то вроде match ... Ну или switch.

Если не ошибаюсь Lisp

Добавлено через 1 минуту и 33 секунды
зы - это и был пример )

Автор: GoldFinch 22.4.2010, 13:05
в fasm'е все что можно реализовано через макросы. и ничего, люди юзают и радуются.

Автор: A5uKa 22.4.2010, 13:26
Цитата

А вот соблазн использовать микроскоп не по назначению, слишком велик. 

Да вот совсем не тянет  smile 

Автор: LSD 22.4.2010, 14:13
Цитата(A5uKa @  22.4.2010,  14:26 Найти цитируемый пост)
Да вот совсем не тянет

Ты у нас вроде не единственный программист на свете smile 

Автор: A5uKa 22.4.2010, 14:21
Цитата(LSD @ 22.4.2010,  14:13)
Цитата(A5uKa @  22.4.2010,  14:26 Найти цитируемый пост)
Да вот совсем не тянет

Ты у нас вроде не единственный программист на свете smile

Не факт  smile 

Автор: k0rvin 22.4.2010, 17:05
да, cond я взял из CL/Scheme, лишь более С-подобный синтаксис прикрутил =)

но к match и switch оно никакого отношения не имеет, разве что чисто синтаксически похожа =)

Автор: qweqwe 22.4.2010, 17:26
Цитата(kemiisto @  22.4.2010,  11:41 Найти цитируемый пост)
Примерчик бы.


Цитата(kemiisto @  22.4.2010,  12:30 Найти цитируемый пост)
Итак, ещё раз повторю для хороших танцоров в танке. Я хочу, чтобы хороший танцор соизволил показать, как ОН расширил синтаксис Nemerle хотя бы в одном из своих многочисленных РАБОЧИХ проектов? Какие ПРЕИМУЩЕСТВА ОН получил?
Статей от авторов языка мне не надо. Иероглифический самопиар меня мало интересует. 

вот тебе статья на хабре - http://habrahabr.ru/blogs/nemerle/58801/
весьма спорное применение макросов Nemerle
помимо всего прочего, макрос у них, это плагин к компилятору, а это вообще - LOL

Цитата(k0rvin @  22.4.2010,  12:47 Найти цитируемый пост)
хотелось бы посмотреть как Вы реализуете cond таким образом.

а зачем это делать, если язык прекрасно умеет pattern matching или просто поддерживает конструкцию if .. elif .. else?

Добавлено через 49 секунд
Цитата(k0rvin @  22.4.2010,  17:05 Найти цитируемый пост)
но к match и switch оно никакого отношения не имеет, разве что чисто синтаксически похожа =)

я думаю здесь не много знатоков CL или Scheme, так что рассказывай, как это работает и чем полезно smile 

Автор: k0rvin 22.4.2010, 18:38
Цитата(qweqwe @ 22.4.2010,  17:26)
Цитата(k0rvin @  22.4.2010,  12:47 Найти цитируемый пост)
хотелось бы посмотреть как Вы реализуете cond таким образом.

а зачем это делать, если язык прекрасно умеет pattern matching или просто поддерживает конструкцию if .. elif .. else?

Добавлено @ 17:26
Цитата(k0rvin @  22.4.2010,  17:05 Найти цитируемый пост)
но к match и switch оно никакого отношения не имеет, разве что чисто синтаксически похожа =)

я думаю здесь не много знатоков CL или Scheme, так что рассказывай, как это работает и чем полезно smile

затем что паттерн-матчинг к этому никакого отношения не имеет. как Вы в паттерн засунете _произвольное_ выражение?

вот if ... elif ... else ...; -- это оно, только без лишних уродских elif =) я же приводил пример выше

Автор: qweqwe 22.4.2010, 18:48
Цитата(k0rvin @  22.4.2010,  18:38 Найти цитируемый пост)
затем что паттерн-матчинг к этому никакого отношения не имеет. как Вы в паттерн засунете _произвольное_ выражение?

вот if ... elif ... else ...; -- это оно, только без лишних уродских elif =) я же приводил пример выше 


да вы батенька - эстет, множить сущности ради этого smile

кстати, сопоставление с образцом в большинстве языков позволяет делать подобное

Код

match value with
| _ when some_expression -> result
| _ when some_other_expression -> other_result


если уж на то пошло

Автор: k0rvin 22.4.2010, 19:52
Цитата(qweqwe @ 22.4.2010,  18:48)
Цитата(k0rvin @  22.4.2010,  18:38 Найти цитируемый пост)
затем что паттерн-матчинг к этому никакого отношения не имеет. как Вы в паттерн засунете _произвольное_ выражение?

вот if ... elif ... else ...; -- это оно, только без лишних уродских elif =) я же приводил пример выше 


да вы батенька - эстет, множить сущности ради этого smile

угу, одни эстеты функции плодят, другие -- классы, третьи -- шаблоны... кругом сплошь эстеты, знаете ли =)

Цитата(qweqwe @ 22.4.2010,  18:48)

кстати, сопоставление с образцом в большинстве языков позволяет делать подобное

Код

match value with
| _ when some_expression -> result
| _ when some_other_expression -> other_result


если уж на то пошло

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

Автор: A5uKa 23.4.2010, 12:58
Цитата

эстеты

Код

            def _IamSuperVoidAndImSexyCuteAndFuckingAwesome = 
            (_=_=_=_=_=_=_=_=_=_=_=_=_=_=_=_=_=_=_=_=_=_=_=_=_=_=_=_=
            _=_=_=_=_=_=_=_=_=_=_=_=_=_=_=_=_=_=_=_=_=_=_=_=_=_=_=_=
            _=_=_=_=_=_=_=_=_=_=_=_=_=_=_=_=_=_=_=_=_=_=_=_=_=_=_=_=
            _=_=_=_=_=_=_=_=_=_=_=_=_=_=_=_=_=_=_=_=_=_=_=_=_=_=_=_=
            _=_=_=_=_=_=_=_=_=_=_=_=_=_=_=_=_=_=_=_=_=_=_=_=_=_=_=_=
            _=_=_=_=_=_=_=_=_=_=_=_=_=_=_=_=_=_=_=_=_=_=_=_=_=_=_=_=());


Добавлено через 26 секунд
=_=

Добавлено через 43 секунды
Nemerle - кавайный язык XD

Автор: k0rvin 23.4.2010, 18:15
Цитата(A5uKa @ 23.4.2010,  12:58)
Цитата

эстеты

Код

            def _IamSuperVoidAndImSexyCuteAndFuckingAwesome = 
            (_=_=_=_=_=_=_=_=_=_=_=_=_=_=_=_=_=_=_=_=_=_=_=_=_=_=_=_=
            _=_=_=_=_=_=_=_=_=_=_=_=_=_=_=_=_=_=_=_=_=_=_=_=_=_=_=_=
            _=_=_=_=_=_=_=_=_=_=_=_=_=_=_=_=_=_=_=_=_=_=_=_=_=_=_=_=
            _=_=_=_=_=_=_=_=_=_=_=_=_=_=_=_=_=_=_=_=_=_=_=_=_=_=_=_=
            _=_=_=_=_=_=_=_=_=_=_=_=_=_=_=_=_=_=_=_=_=_=_=_=_=_=_=_=
            _=_=_=_=_=_=_=_=_=_=_=_=_=_=_=_=_=_=_=_=_=_=_=_=_=_=_=_=());


Добавлено @ 12:58
=_=

Добавлено @ 12:58
Nemerle - кавайный язык XD

CamelCase ужасен =)

Код

(defvar |I am super void and I'm sexy cute and fucking awesome| 
  '(_=_=_=_=_=_=_=_=_=_=_=_=_=_=_=_=_=_=_=_=_=_=_=_=_=_=_=_=
    _=_=_=_=_=_=_=_=_=_=_=_=_=_=_=_=_=_=_=_=_=_=_=_=_=_=_=_=
    _=_=_=_=_=_=_=_=_=_=_=_=_=_=_=_=_=_=_=_=_=_=_=_=_=_=_=_=
    _=_=_=_=_=_=_=_=_=_=_=_=_=_=_=_=_=_=_=_=_=_=_=_=_=_=_=_=
    _=_=_=_=_=_=_=_=_=_=_=_=_=_=_=_=_=_=_=_=_=_=_=_=_=_=_=_=
    _=_=_=_=_=_=_=_=_=_=_=_=_=_=_=_=_=_=_=_=_=_=_=_=_=_=_=_=
    ()))

Автор: Logo 24.4.2010, 16:08
Цитата(qweqwe @ 21.4.2010,  19:24)
Цитата(Void @  21.4.2010,  17:40 Найти цитируемый пост)
Так макросы, шаблоны или что? И каким ещё образом можно расширять язык программирования?
Метапрограммирование в Nemerle — понятный пример, но первое предложение построено с претензией на что-то более общее. 

я когда этот пост писал, именно о Nemerle и думал, ну может еще о perl 6 smile 
хорошим примером плохого метапрограммирования может послужить C++ с библиотеками boost, например boost spirit, в общем - любые средства метапрограммирования, способные изменить язык до неузнаваемости smile

Perl 5 тоже позволяет, с помощью Devel:smile например. И в С/С++ вроде есть что-то.


Скорее хорошо. Конечно, этим можно злоупотреблять - но чем вообще нельзя злоупотреблять? Например можно злоупотреблять ООП, но это не значит, что если в языке нет ООП, это хорошо.

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

Цитата

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


Это неизбежно при использовании любого крупного фреймворка/библиотеки.

Автор: Shaggie 26.4.2010, 07:58
Макросы всего лишь очередной исключительно мощный инструмент для 1) элегантного и эффективного решения задач, 2) жестокого простреливания ног себе и всем коллегам в радиусе 30 метров.

По личному опыту, макросы хороши для двух задач.
  • Создание максимально обобщённых конструкций, решающих общую языковую задачу. Всякий синтаксический сахар. Реализация новых парадигм программирования (последнее позволяет языку устаревать гораздо медленнее конкурентов).
  • Создание точно описывающего предметную область DSL. Решение максимально конкретных задач проекта с помощью специального языка предметной области.

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

Глобальные выводы: этой теме столько же лет, сколько макросам Лиспа )) не надоело переливать?

Автор: LSD 26.4.2010, 17:31
Цитата(Logo @  24.4.2010,  17:08 Найти цитируемый пост)
Это неизбежно при использовании любого крупного фреймворка/библиотеки.

Правильно фраза звучит так:
Цитата
Это неизбежно при использовании любого крупного самописного фреймворка/библиотеки.

smile

Автор: JackYF 26.4.2010, 17:58
Cогласен с Shaggie.

Проголосовал "за".

Автор: Logo 26.4.2010, 21:59
Цитата(LSD @ 26.4.2010,  17:31)
Цитата(Logo @  24.4.2010,  17:08 Найти цитируемый пост)
Это неизбежно при использовании любого крупного фреймворка/библиотеки.

Правильно фраза звучит так:
Цитата
Это неизбежно при использовании любого крупного самописного фреймворка/библиотеки.

smile

Не вижу разницы, кем написан фреймворк. Главное как написан smile 

Автор: LSD 27.4.2010, 18:24
Цитата(Logo @  26.4.2010,  22:59 Найти цитируемый пост)
Не вижу разницы, кем написан фреймворк.

И плохо, что не видишь.
1. Самописный фреймворк не известен за пределами фирмы и за пределами фирмы нет людей которые бы с ним работали. А "публичный" фреймворк известен и найти человека который бы с ним работал, вполне возможно.
2. У общедоступных фреймворков больше документации, всяких гайдов, how-to, тьюториалов, книг и т.п. У них есть сообщество пользователей где можно задать вопрос.
3. Из-за большего числа пользователей общедоступные фреймворки лучше оттестированы.
4. Для популярных фреймворков есть коммерческая поддержка и всевозможные курсы.
5. Баги фиксить и добавлять новые фичи в самописный фреймворк надо самостоятельно. А общедоступный надо просто обновлять.

Поэтому любой нормальный разработчик достаточно быстро сможет разобраться в системе которая использует Spring MVC. А вот если фирма использует свой MVC, то при отсутствии людей которые этот MVC написали, может статься что разобраться в нем не получится вообще (мне известны такие случаи).

Автор: Logo 28.4.2010, 21:50
Тогда правильнее сказать закрытый фреймфорк, или фреймворк для внутреннего пользования.

Автор: neutrino 28.4.2010, 23:50
Я как-то дебажил эти макросы. Не дай бох никому.

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

Я думаю, что способность адаптировать язык не нужно. Что надо - способность легко написать новый язык для какого-то конкретного домэйна задач. Причем сделать потом этот язык общедоступным. Хорошо бы еще продумать взаимоинтеграцию всех этих языков. Например -  как в ВПФ: дезайнер рисует и не имеет понятия о программировании. Программер не имеет понятия в гуе. Каждый спец в своей области и пишет на своем языке. В итоге - шыдевр. smile 

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

Добавлено через 9 минут и 51 секунду
BTW, Linq - еще один пример домэйн-ориентации языка. ИМХО тенденция верная.

Автор: k0rvin 29.4.2010, 07:09
Цитата(neutrino @ 28.4.2010,  23:50)
Я как-то дебажил эти макросы. Не дай бох никому.

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

o_O' Вы видимо про препроцессор Си?

потому что дебажить правильные макры CL, а не "всякое препроцессорное ###", никаких проблем не доставляет =)

Автор: qweqwe 29.4.2010, 07:54
Цитата(k0rvin @  29.4.2010,  07:09 Найти цитируемый пост)
потому что дебажить правильные макры CL, а не "всякое препроцессорное ###", никаких проблем не доставляет =) 

ну вообще, макросы CL, это скорее фича языка, чем изменение самого языка

Автор: A5uKa 30.4.2010, 08:08
и то и другое 

Автор: neutrino 30.4.2010, 08:55
Цитата(k0rvin @  29.4.2010,  06:09 Найти цитируемый пост)
правильные макры CL

А хто это такое?  smile 

Автор: k0rvin 30.4.2010, 12:24
Цитата(neutrino @ 30.4.2010,  08:55)
Цитата(k0rvin @  29.4.2010,  06:09 Найти цитируемый пост)
правильные макры CL

А хто это такое?  smile

http://ru.wikipedia.org/wiki/Common_Lisp

Автор: neutrino 30.4.2010, 14:10
k0rvin, Очень похож на PL Scheme

Добавлено через 6 минут и 40 секунд
Ой. Оказывается это я на лиспе писал алгоритм Дийкстра smile

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

Хотя я на нем не писал ничего большого. Интересно есть ли тут кто с таким опытом? 

Автор: k0rvin 30.4.2010, 16:48
Цитата(neutrino @ 30.4.2010,  14:10)
Хотя я на нем не писал ничего большого. Интересно есть ли тут кто с таким опытом?

вряд ли.

скорее на http://lisper.ru и [email protected]

Автор: neutrino 1.5.2010, 22:28
k0rvin, А аватарка у тебя тоже какая-то лисповая smile

Автор: k0rvin 1.5.2010, 23:02
Цитата(neutrino @ 1.5.2010,  22:28)
k0rvin, А аватарка у тебя тоже какая-то лисповая smile

http://ru.wikipedia.org/wiki/Haskell

впрочем хаскелл я плохо знаю, просто изображение понравилось

Автор: gcc 2.5.2010, 12:08
вот например сделали http://search.cpan.org/search?query=Moose+Meta&mode=all много всего

атрибуты понравились
Код

    package MyClass;

    use Moose;
    use MooseX::MethodAttributes;

    sub foo : Bar Baz('corge') { ... }

    my $attrs = MyClass->meta->get_method('foo')->attributes; # ["Bar", "Baz('corge')"]


можно увидеть какой метод с каким атрибутом в прогармме чтобы его вызвать, т.е. тут метод foo, атрибут Bar и Baz с corge

еще там есть Роли как в Smalltalk (или как интерфейсы Java)


Автор: k0rvin 2.5.2010, 22:15
Цитата(gcc @ 2.5.2010,  12:08)
вот например сделали http://search.cpan.org/search?query=Moose+Meta&mode=all много всего

атрибуты понравились
Код

    package MyClass;

    use Moose;
    use MooseX::MethodAttributes;

    sub foo : Bar Baz('corge') { ... }

    my $attrs = MyClass->meta->get_method('foo')->attributes; # ["Bar", "Baz('corge')"]


можно увидеть какой метод с каким атрибутом в прогармме чтобы его вызвать, т.е. тут метод foo, атрибут Bar и Baz с corge

зачем? покажите практическую пользу

вот, допустим, есть у меня метод
Код

sub foo : Bar Baz('corge') { ... }

узнал я его аттрибуты:
Код

my $attrs = MyClass->meta->get_method('foo')->attributes; # ["Bar", "Baz('corge')"]

дальше-то что? что мне с ними делать, с этими аттрибутами?

Автор: Logo 2.5.2010, 23:41
k0rvin
Атрибуты к функциям - это такая фитча, есть в perl, насчет остальных языков не знаю.
Бывает полезно, например веб-фреймворк cataslyst использует атрибуты для методов контроллера, чтобы определить, к какому урлу привязан метод. Напоминает конфиги веб сервера.
Код

  package MyApp::Controller::Foo;
  sub bar : Local   {} # site.ru/foo/bar/*
  sub baz : Global {} # site.ru/baz/*
  sub some : Path('one/two') {} # site.ru/foo/one/two/*
  sub some2 : LocalRegex('^widget(\d+)$') {} # site.ru/foo/widget123 
  sub bar2 : Local :Args(0)  {} #  site.ru/foo/bar2


Алсо, есть несколько встроенных атрибутов.

Автор: k0rvin 3.5.2010, 12:55
эта "фича" делается запросто в любом языке, предоставляющем возможность объявлять типы данных, содержащие функции. другое дело что удобный синтаксис искаропки =)

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)