В связи с медленным развитием стандартов main stream языков возникла мысль о расширении синтаксиса языка с помощью некоторых дополнительных модулей, которые бы расширяли сиснтаксис языка, т.е. появлялись бы новые ключевые слова, операторы, выражения и т.д. Все holy wars потеряли бы всякий смысл! Если не хватает выразительности языка, ставь плагин(например плагин к C# который расширял бы синтаксис C# синтаксисом Немерле или наоборот!) и миксуй!
Здравствуйте, gmGreen, Вы писали:
G>В связи с медленным развитием стандартов main stream языков возникла мысль о расширении синтаксиса языка с помощью некоторых дополнительных модулей, которые бы расширяли сиснтаксис языка, т.е. появлялись бы новые ключевые слова, операторы, выражения и т.д. Все holy wars потеряли бы всякий смысл! Если не хватает выразительности языка, ставь плагин(например плагин к C# который расширял бы синтаксис C# синтаксисом Немерле или наоборот!) и миксуй!
G>Это реализуемо технически?
Ага, уже реализовано и называется Nemerle
Здравствуйте, gmGreen, Вы писали:
G>Это реализуемо технически?
Не только реализуемо, но и давным-давно применяется на практике. Например, библиотека Qt использует своё расширение C++, обрабатываемое перед компилятором своим препроцессором.
G>В связи с медленным развитием стандартов main stream языков возникла мысль о расширении синтаксиса языка с помощью некоторых дополнительных модулей, которые бы расширяли сиснтаксис языка, т.е. появлялись бы новые ключевые слова, операторы, выражения и т.д. Все holy wars потеряли бы всякий смысл! Если не хватает выразительности языка, ставь плагин(например плагин к C# который расширял бы синтаксис C# синтаксисом Немерле или наоборот!) и миксуй!
Вот насчет "Все holy wars потеряли бы всякий смысл" — это вряд ли. Наоборот, раскрылось бы поле непаханое для новых holy wars. Например:
— Плагин X — отстой, вот плагин Y — это наше все!
— Какой урод написал свой код с использованием плагина Y ? Он же платный, и кряка к нему найти никак не могу!
— Какой урод прислал нам код, написанный на плагине Z1 ? Z1 поддерживает извращенский диалект языка Z, вот Z2 — правильный плагин для языка Z!
— Какой урод использовал в своем C#-коде плагин M ? Он же существует только под Windows + VS, как мне теперь мой проект собрать под Linux + Mono?
— А это что еще за исходники нам прислали? Говорят, сами придумали свой язык и сами сварганили плагин для него? А спецификацию языка нам дать не удосужились? Ну, они козлы!
— А это что за абракадабра в коде C#-проекта? А, так это у тебя, гада, плагин для Brainfuck используется? А где я тебе Brainfuck-программиста найду твой код поддерживать?
Здравствуйте, klopodav, Вы писали:
G>>В связи с медленным развитием стандартов main stream языков возникла мысль о расширении синтаксиса языка с помощью некоторых дополнительных модулей, которые бы расширяли сиснтаксис языка, т.е. появлялись бы новые ключевые слова, операторы, выражения и т.д. Все holy wars потеряли бы всякий смысл! Если не хватает выразительности языка, ставь плагин(например плагин к C# который расширял бы синтаксис C# синтаксисом Немерле или наоборот!) и миксуй!
K>Вот насчет "Все holy wars потеряли бы всякий смысл" — это вряд ли. Наоборот, раскрылось бы поле непаханое для новых holy wars. Например:
K> — Плагин X — отстой, вот плагин Y — это наше все! K> — Какой урод написал свой код с использованием плагина Y ? Он же платный, и кряка к нему найти никак не могу! K> — Какой урод прислал нам код, написанный на плагине Z1 ? Z1 поддерживает извращенский диалект языка Z, вот Z2 — правильный плагин для языка Z! K> — Какой урод использовал в своем C#-коде плагин M ? Он же существует только под Windows + VS, как мне теперь мой проект собрать под Linux + Mono? K> — А это что еще за исходники нам прислали? Говорят, сами придумали свой язык и сами сварганили плагин для него? А спецификацию языка нам дать не удосужились? Ну, они козлы! K> — А это что за абракадабра в коде C#-проекта? А, так это у тебя, гада, плагин для Brainfuck используется? А где я тебе Brainfuck-программиста найду твой код поддерживать?
K> и т.д. и т.п.
Высосано ихз пальца. Замени плагины на библиотеки и получи тоже самое.
В некоторых языках разница между языковыми плагинами и либами минимальна.
Здравствуйте, gmGreen, Вы писали:
G>Это реализуемо технически?
А зачем?
Для С++ есть несколько реализаций garbage collector. Разве от это что-то сильно меняется?
Ядро языка это наибольший общий знаменатель для всех разработчиков. То где они пересекаются.
Все равно все библиотеки будут писаться на стандартном подмножестве C#.
Разве что DSEL могут стать более выразительными, и только.
-- Главное про деструктор копирования не забыть --
Здравствуйте, gmGreen, Вы писали:
G>Это реализуемо технически?
Где-то я читал, что раньше собирались механизм, подобный ASP.NET build providers, добавить вообще в сам компилятор C#, но потом типа не шмогли, не успели и так далее. Так бы можно было писать свой код в файлах *.myDSL и определить собственный билд-провайдер, который бы умел их собирать. Красиво и удобно.
С другой стороны, если полагаться на возможности студии, то уже давно для таких целей можно использовать custom build tool — собственно, он и используется во многих подобных случаях. Разница с вышеописанным вариантом только в том, что поддержка со стороны среды, а не компилятора.
А вот если речь идет не о поддержке всякого рода DSL-ей, а о расширении синтаксиса самого языка — то тут красивого способа нет. Только препроцессор + даже непонятно, как его подключать при работе в той же студии. Вариант — нужен особый синтаксис, пиши в отдельном файлика кажется куда более прямым и простым технически.
Здравствуйте, kmmbvnr, Вы писали:
K>Здравствуйте, gmGreen, Вы писали:
G>>Это реализуемо технически?
K>А зачем?
K>Для С++ есть несколько реализаций garbage collector. Разве от это что-то сильно меняется? K>Ядро языка это наибольший общий знаменатель для всех разработчиков. То где они пересекаются. K>Все равно все библиотеки будут писаться на стандартном подмножестве C#.
K>Разве что DSEL могут стать более выразительными, и только.
К примеру что бы все обещаные MS улучшения в C# появлялись не через 5-7 лет, а значительно быстрее в виде некоего тестового плагина, которое бы просто не объявлялось официальным. Разработчики C# получили бы очень хороший feed back, и ИМХО это бы ускорило и улучшило развитие C#. Во вторых появилась бы возможность написания кода одновременно на нескольких языках. Немало разработчиков знают и используют несколько языков для конкретных задач и это ИМХО было бы благом для них.
Здравствуйте, gmGreen, Вы писали:
G>В связи с медленным развитием стандартов main stream языков возникла мысль о расширении синтаксиса языка с помощью некоторых дополнительных модулей, которые бы расширяли сиснтаксис языка, т.е. появлялись бы новые ключевые слова, операторы, выражения и т.д. Все holy wars потеряли бы всякий смысл! Если не хватает выразительности языка, ставь плагин(например плагин к C# который расширял бы синтаксис C# синтаксисом Немерле или наоборот!) и миксуй!
G>Это реализуемо технически?
Макры немерла и есть такие плагины. Но чтобы такое стало возможным нужно очень многое.
1. Нужно проектировать язык под расширяемость.
2. Нужно иметь очень удобные средства композиции (построения нового кода) и декомпозиции (распознавания старого).
3. Нужна инфраструктура, т.е. управляемый компилятор (а не написанный на С++), поддержка IDE, библиотеки стандартных макросов, обучающая литература и т.п.
Всего этого не и никогда не будет для шарпа.
Проект R# как раз и задумывался как создание эдакого синтаксического препроцессора, но потом я бросил его потому, что понял, что одного препроцессора мало. Один только пункт 2 из приведенного выше списка — это очень сложная задача.
Меж тем все что ты тут перечислил и даже намного больше уже есть в том самом Nemerle. Холи-варов, правда, от этого меньше не становится. Но если тебе нужно ехать, а не шашечки, то можно просто брать Nemerle и использовать уже сейчас. Он отлично интегрируется в любой дотнетный проект и отлично сочитается с другими языками.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, gmGreen, Вы писали:
G>В связи с медленным развитием стандартов main stream языков возникла мысль о расширении синтаксиса языка с помощью некоторых дополнительных модулей, которые бы расширяли сиснтаксис языка, т.е. появлялись бы новые ключевые слова, операторы, выражения и т.д. Все holy wars потеряли бы всякий смысл! Если не хватает выразительности языка, ставь плагин(например плагин к C# который расширял бы синтаксис C# синтаксисом Немерле или наоборот!) и миксуй!
G>Это реализуемо технически?
Уже реализовывалось в истории. Был такой язык — латынь. Потом на его базе одни "программисты" соорудили итальянский, другие — французский, третьи — испанский со всеми диалектами и т.д. Не скоро теперь без переводчиков они обойдутся.