В чем преимущество Nemerle перед F#?
От: febus Германия  
Дата: 30.12.09 00:12
Оценка:
Сразу скажу, ни того ни другого не знаю. Прочитал первую часть статьи "Язык Nemerle".
Сейчас читаю "Functional Programming for the real world" — F#.
Оба языка разрабатывались для .Net. Oба поддерживают и функциональное и объектное программирование.
Немерле позволяет определять собственные макросы, я это видел в статье на примере макроса &&.
В F# можно определять собственные операторы.
В чем же преимущество Nemerle перед F#?
Re: В чем преимущество Nemerle перед F#?
От: Lloyd Россия  
Дата: 30.12.09 00:29
Оценка: +1
Здравствуйте, febus, Вы писали:

F>Оба языка разрабатывались для .Net.


Это не совсем верно по отношению к F#-у — он не разрабатывался для .Net, за основу был взят OCaml.
Re[2]: В чем преимущество Nemerle перед F#?
От: febus Германия  
Дата: 30.12.09 00:36
Оценка:
Здравствуйте, Lloyd, Вы писали:
F>>Оба языка разрабатывались для .Net.
L>Это не совсем верно по отношению к F#-у — он не разрабатывался для .Net, за основу был взят OCaml.
Но ведь и Nemerle "лишь" комбинирует идеи, ранее уже существовавшие в других языках, которые появились задолго до .Net?
Да и какая разница изначально разрабатывался или потом доработали? F# позволяет создавать библиотеки, которые без проблем могут быть использованы в проекте на C#.
Re[3]: В чем преимущество Nemerle перед F#?
От: Lloyd Россия  
Дата: 30.12.09 00:40
Оценка: :))) :))) :)
Здравствуйте, febus, Вы писали:

F>>>Оба языка разрабатывались для .Net.

L>>Это не совсем верно по отношению к F#-у — он не разрабатывался для .Net, за основу был взят OCaml.
F>Но ведь и Nemerle "лишь" комбинирует идеи, ранее уже существовавшие в других языках, которые появились задолго до .Net?
F>Да и какая разница изначально разрабатывался или потом доработали?

Да никакой, я просто к словам докопался.
Re[3]: В чем преимущество Nemerle перед F#?
От: Мишень-сан  
Дата: 30.12.09 07:40
Оценка: +1
Здравствуйте, febus, Вы писали:

F>Да и какая разница изначально разрабатывался или потом доработали? F# позволяет создавать библиотеки, которые без проблем могут быть использованы в проекте на C#.


Прозрачное взаимодействие — свойство платформы, не языка. После компиляции и Nemerle, и F# превращаются в MSIL.
Далее, ЕМНИП, операторы, созданные в F#, только в нём и получится использовать, т.к. это уже свойство языка, а не платформы. Кстати, это по сути не операторы, а обыкновенные функции с именами из специальных символов и двумя аргументами, которые разрешается применять инфиксно. Например, в Haskell (просто не знаю, как в других языках, может, тоже есть) функция двух аргументов с обычным именем тоже может быть использована инфиксно, если её имя заключить в обратные кавычки: 2 `foo` 3
Как я считаю, Nemerle мощнее F# именно в плане своей подсистемы макросов. Nemerle позволяет создавать не только новые операторы, но и новые синтаксические конструкции.
Re: В чем преимущество Nemerle перед F#?
От: hi_octane Беларусь  
Дата: 30.12.09 08:28
Оценка:
У нас в процессе работы над первым же проектом Nemerle превратился из языка общего назначения в DSL, сам собой. Просто по ходу создавались макросы для всех удачных решений и внедрялись. Этакий мета-рефакторинг. Начинаешь писать вроде-бы на C#, а заканчиваешь на чём-то своём, удобном и полностью заточенном под задачу. После такого опыта — взгляд на другие языки стал у меня очень предвзятым, так что писать про тот же F# ничего не буду — всё равно сплошные лозунги и агитки за Nemerle будут получаться
Re[2]: В чем преимущество Nemerle перед F#?
От: febus Германия  
Дата: 30.12.09 10:05
Оценка:
Здравствуйте, hi_octane, Вы писали:

_>У нас в процессе работы над первым же проектом Nemerle

Ух ты! Вы используете Nemerle в реальных коммерческих проектах вашей фирмы?

_>Nemerle превратился из языка общего назначения в DSL, сам собой

Насчет DSL, я так понимаю, это фишка не столько самого языка, как функциональной парадигмы в целом. F# позволяет создавать свой специализированный язык под конкретную задачу.
Как именно это делается — не знаю. Но в оглавлении книги вижу, что можно.

_>взгляд на другие языки стал у меня очень предвзятым, так что писать про тот же F# ничего не буду — всё равно сплошные лозунги и агитки за Nemerle будут получаться

Зря, — даже субъективные вещи вполне себе аргумент. Меня пока хитровывернутый синтаксис и отступы в F# напрягают. Впрочем это абсолютно естественно, т.к. я никогда раньше функционального стиля не видел. Linq не считается
Re: В чем преимущество Nemerle перед F#?
От: Flem1234  
Дата: 30.12.09 10:32
Оценка: +1
Здравствуйте, febus, Вы писали:

Мне F# синтаксис мозг выносит: вроде смотришь в книгу, но видишь фигу. А к Немерлу я довольно быстро привык.
В теории главным преимуществом должны быть макросы.
Re[2]: В чем преимущество Nemerle перед F#?
От: Flem1234  
Дата: 30.12.09 10:34
Оценка:
Здравствуйте, hi_octane, Вы писали:

_>У нас в процессе работы над первым же проектом Nemerle превратился из языка общего назначения в DSL, сам собой. Просто по ходу создавались макросы для всех удачных решений и внедрялись. Этакий мета-рефакторинг. Начинаешь писать вроде-бы на C#, а заканчиваешь на чём-то своём, удобном и полностью заточенном под задачу. После такого опыта — взгляд на другие языки стал у меня очень предвзятым, так что писать про тот же F# ничего не буду — всё равно сплошные лозунги и агитки за Nemerle будут получаться


Здорово! А можете пример привести? Ну например: была такая проблема, думали как решить, остановились на макросах по таким-то причинам, решили, переделали, переделали, используем.
Re[3]: В чем преимущество Nemerle перед F#?
От: hi_octane Беларусь  
Дата: 30.12.09 11:03
Оценка:
_>>У нас в процессе работы над первым же проектом Nemerle
F>Ух ты! Вы используете Nemerle в реальных коммерческих проектах вашей фирмы?

Да уж пару лет как. Вот ссылка на мою старую тему
Автор: hi_octane
Дата: 14.02.08


F>Насчет DSL, я так понимаю, это фишка не столько самого языка, как функциональной парадигмы в целом. F# позволяет создавать свой специализированный язык под конкретную задачу.


Когда в F# можно будет каким-то образом читать и менять AST компилирующейся в данный момент программы — буду смотреть. А так — в C/C++ тоже можно DSL сделать — #define и погнали
Re[3]: В чем преимущество Nemerle перед F#?
От: hi_octane Беларусь  
Дата: 30.12.09 12:08
Оценка: 8 (2)
F>Здорово! А можете пример привести? Ну например: была такая проблема, думали как решить, остановились на макросах по таким-то причинам, решили, переделали, переделали, используем.

вот пример кода (здесь и далее пишу по памяти — я ща отдыхаю от трудовых подвигов).

fork(100)//поднимает потоки по числу процессоров, выполняет ими в общей сложности 100 итераций
{
   def element = items[forkIndex];//получили какой-то элемент, работаем с ним
}
//здесь мы снова в главном потоке, многопоточная обработка завершена


На C# короче чем Threads.Fork((forkIndex) => { лямбда }); — не получалось. А главное — в C# за иммутабельностью расшаренного состояния следить надо было, а Nemerle это сам делает.

Или вот такой пример — к нам много данных приходило в текстовом формате. Парсить решили регекспами (данные от legacy системы, далеки от XML/HTML). Но сами регекспы сравнительно медленные, что-бы были быстрые — нужна прекомпиляция. Но прекомпилируемый регексп — уже не так удобен в использовании — его по месту использования не объявишь, он загружается из отдельной DLL, которую надо отдельно компилировать и т.п. На макросах мы получили фактически объявление по месту использования и с компилированными регекспами. И автоматом получили кэш компилированных регекспов — т.е. если по ходу работы в разных модулях проекта использовались одинаковые регекспы — два раза их код не компилировался.

Ещё макросами была сделана собственная сериализация, мемоизация, логгирование. Ну и самое наверное странное применение — это то что один из макросов был враппером для javascript'а приходящего из внешней системы. Получалась запись вида def (x, y, z) = javascript("\\server\share\file.js");
Re: В чем преимущество Nemerle перед F#?
От: Don Reba Канада https://stackoverflow.com/users/49329/don-reba
Дата: 30.12.09 14:47
Оценка:
Здравствуйте, febus, Вы писали:

F>В чем же преимущество Nemerle перед F#?


Для меня, основных преимуществ два: синтакс и макросы. Синтаксическое сходство языка с C# позволяет свободно обсуждать фрагменты кода с незнакомыми с Немерле программистами. Стандартные макросы содержат много полезного функционала, вроде мемоизации функций, безопасных printf и scanf, автоматического создания аксессоров и конструкторов. Свои макросы я пишу редко, но написанные сэкономили тонны времени. Без своих макросов локализации я бы просто не стал переводить одну программу с десятками тысяч пользователей. Своя библиотека макросов профилирования очень помогает писать алгоритмы. Макросы генерируют таблицу имён в одном моём DSL'е.
Ce n'est que pour vous dire ce que je vous dis.
Re[3]: В чем преимущество Nemerle перед F#?
От: Аноним  
Дата: 30.12.09 19:12
Оценка:
Здравствуйте, febus, Вы писали:

_>>У нас в процессе работы над первым же проектом Nemerle

F>Ух ты! Вы используете Nemerle в реальных коммерческих проектах вашей фирмы?

Хотел было по ёрничать по поводу столь по детски наивного удивления, но боюсь обидеть.

_>>Nemerle превратился из языка общего назначения в DSL, сам собой

F>Насчет DSL, я так понимаю, это фишка не столько самого языка, как функциональной парадигмы в целом.

Можно не скромный вопрос?
Ты лично сам много DSL-лей сделал на F#-е?

F>F# позволяет создавать свой специализированный язык под конкретную задачу.


С удовольствием послушаю о замечательных свойствах F# которые позволят создавать встроенные ДСЛ-и.
Это не lex yacc ли имеются в виду? Или может CAML4P? Но он откровенно и рядом не стоял с макросами, да и не поддерживается вроде бы он в F#. Хотя я тут не уверен.

F>Как именно это делается — не знаю. Но в оглавлении книги вижу, что можно.


Сравнивать языки программирования по информации полученной из оглавления книги — это круто! Так держать!

_>>взгляд на другие языки стал у меня очень предвзятым, так что писать про тот же F# ничего не буду — всё равно сплошные лозунги и агитки за Nemerle будут получаться

F>Зря, — даже субъективные вещи вполне себе аргумент. Меня пока хитровывернутый синтаксис и отступы в F# напрягают. Впрочем это абсолютно естественно, т.к. я никогда раньше функционального стиля не видел. Linq не считается

В технологиях нужно разбираться. То кто разобрался в том, что такое мета программирование не будет даже задаваться вопросом есть ли в F# его полноценная поддержка. Он и так понимает, что нет.
Re[4]: В чем преимущество Nemerle перед F#?
От: VladD2 Российская Империя www.nemerle.org
Дата: 30.12.09 19:16
Оценка:
Здравствуйте, hi_octane, Вы писали:

_>Когда в F# можно будет каким-то образом читать и менять AST компилирующейся в данный момент программы — буду смотреть. А так — в C/C++ тоже можно DSL сделать — #define и погнали


Как раз в C++ возможностей по больше. Все же метапрограммирование на шаблонах хотя и кривое решение, но рабочее.

Справедливости ради нужно заметить, что по наследству от Окамла F# получил в свое распоряжение квази-цитировние. Но парадокс заключается в том, что с его помощью нельзя создавать код во время компиляции.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re: В чем преимущество Nemerle перед F#?
От: VladD2 Российская Империя www.nemerle.org
Дата: 30.12.09 19:47
Оценка: 6 (1) +1
Здравствуйте, febus, Вы писали:

F>Сразу скажу, ни того ни другого не знаю. Прочитал первую часть статьи "Язык Nemerle".

F>Сейчас читаю "Functional Programming for the real world" — F#.
F>Оба языка разрабатывались для .Net.

Это не так. Nemerle — это новый язык который действительно исходно разрабатывался для дотнета. По этому он бесшовно интегрируется с дотнетом (не хуже C#-а).

F# же — это адаптация функционального языка Ocaml. Идиомы Ocaml-а частенько конфликтуют с идиомами дотнета.
Можно сказать так. F# предоставляет адаптированный Ocaml поверх дотнета, а Nemerle — это язык разработанный для дотнета.

F>Oба поддерживают и функциональное и объектное программирование.


Более того, они имеют общего предка — язык ML.
Вот только реализовано все несколько по разному. F# поддерживает и ФП, и ООП почти так же как это делает Ocaml. Очень характерен, например, взгляд F# на ООП. ООП в F# и Ocaml как бы вытекает из ФП (замыканий и т.п.). Все это делает F# трудным для восприятия и изучения для тех кто до этого не был связан с миром ФП, но был знаком, скажем, с C#.

Nemerle, в отличии от F#, имеет не одного предка (OCaml), а сразу несколько предков (C#, ML, Lisp). Причем от C# Nemerle позаимствовал весьма не мало. Это позволяет C#-программистам намного проще изучать новый язык и использовать подходы хорошо изученные при работе на C#.

F>Немерле позволяет определять собственные макросы, я это видел в статье на примере макроса &&.

F>В F# можно определять собственные операторы.

Немерле так же позволяет определять собственные операторы. Только это сделано способом принятым в C#.
Дело в том, что возможность определять операторы — это не основная возможность макросов (т.е. метапрограммирования). Метапрограммирование (МП) — это намного больше нежели возможность определить оператор или функцию.
МП — это возможность менять код во время компиляции. Причем не только генерировать код, но и анализировать имеющийся код. Просто надо понимать, что во водных главах приводятся очень простые реализации макросов, чтобы не перегружать неподготовленного читателя.

F>В чем же преимущество Nemerle перед F#?


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

Тут скорее будет более уместным обратный вопрос.
А в чем же преимущество F# перед Nemerle?
Если вы не являетесь знатоком Ocaml-а, то найти ответ на этот вопрос будет не просто.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[2]: В чем преимущество Nemerle перед F#?
От: Lloyd Россия  
Дата: 30.12.09 19:57
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Тут скорее будет более уместным обратный вопрос.

VD>А в чем же преимущество F# перед Nemerle?

На этот вопрос как раз очень легко ответить: преимущество F#-а — поддержка со стороны микрософта. Больше преимуществ вроде нет.
Re[3]: В чем преимущество Nemerle перед F#?
От: VladD2 Российская Империя www.nemerle.org
Дата: 30.12.09 19:58
Оценка:
Здравствуйте, febus, Вы писали:

F>Да и какая разница изначально разрабатывался или потом доработали?


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

F>F# позволяет создавать библиотеки, которые без проблем могут быть использованы в проекте на C#.


F# обложен кучей собственных библиотек оборачивающих API дотнета, чтобы его использование выглядело более менее естественно в F#. Можно скзать, что в F# создается виртуальный ФП-мир посреди враждебного мира дотнета. Кое что из мира дотнета в F# вообще отсутствует. Как, например, в F# объявить protected-свойство или protected internl-метод?

ЗЫ

В общем, что тут разводить бодягу. Изучи оба языка и сам сможешь ответить на все вопросы. Причем теоретического знакомства мало. Нужны практические упражнения.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[4]: В чем преимущество Nemerle перед F#?
От: VladD2 Российская Империя www.nemerle.org
Дата: 30.12.09 20:03
Оценка:
Здравствуйте, Мишень-сан, Вы писали:

МС>Как я считаю, Nemerle мощнее F# именно в плане своей подсистемы макросов. Nemerle позволяет создавать не только новые операторы, но и новые синтаксические конструкции.


Уточню. Не только синтаксические, но и семантические! Это, на мой взгляд, намного важнее. Переписывание синтаксиса конечно дает некоторые бенефиты, но не так можно как задание умного поведения. Макры немерла позволяют анализировать код, информацию о типах и на основании этого анализа генерировать специализированный код. Это позволяет реализовывать разную семантику для разных случаев использования. Например, макрос foreach ни чем не уступает аналогичному оператору C# и даже превосходит его. А ведь это всего лишь макрос!
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[4]: В чем преимущество Nemerle перед F#?
От: febus Германия  
Дата: 30.12.09 20:03
Оценка: 1 (1)
Здравствуйте, Аноним, Вы писали:

F>>Ух ты! Вы используете Nemerle в реальных коммерческих проектах вашей фирмы?

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

А удивление то как раз и не детское. Убедить собственное руководство в том, чтобы разработка велась на языке, даже о существовании которого на сегодня знают лишь немногие программисты — вот это действительно круто. Если контора ты сам, да те два парня, то это другое дело: как средство борьбы с аутсорсингом, вполне себе вариант, конечно. Как средство защиты тоже, т.к. рефлектор не поможет.

_>>>Nemerle превратился из языка общего назначения в DSL, сам собой

F>>Насчет DSL, я так понимаю, это фишка не столько самого языка, как функциональной парадигмы в целом.
А>Можно не скромный вопрос?
А>Ты лично сам много DSL-лей сделал на F#-е?
Ни одного, я вчера его впервые открыл Впрочем, я об этом писал в вопросе. Прочитай оглавление темы

F>>F# позволяет создавать свой специализированный язык под конкретную задачу.

F>>Как именно это делается — не знаю. Но в оглавлении книги вижу, что можно.
А>Сравнивать языки программирования по информации полученной из оглавления книги — это круто! Так держать!
Оглавление — это уже много, см. выше

_>>>взгляд на другие языки стал у меня очень предвзятым, так что писать про тот же F# ничего не буду — всё равно сплошные лозунги и агитки за Nemerle будут получаться

F>>Зря, — даже субъективные вещи вполне себе аргумент. Меня пока хитровывернутый синтаксис и отступы в F# напрягают. Впрочем это абсолютно естественно, т.к. я никогда раньше функционального стиля не видел. Linq не считается

А>В технологиях нужно разбираться. То кто разобрался в том, что такое мета программирование не будет даже задаваться вопросом есть ли в F# его полноценная поддержка. Он и так понимает, что нет.

Пойду убьюсь об стену.
Re[5]: В чем преимущество Nemerle перед F#?
От: VladD2 Российская Империя www.nemerle.org
Дата: 30.12.09 20:10
Оценка:
Здравствуйте, febus, Вы писали:

F>А удивление то как раз и не детское. Убедить собственное руководство в том, чтобы разработка велась на языке, даже о существовании которого на сегодня знают лишь немногие программисты — вот это действительно круто. Если контора ты сам, да те два парня, то это другое дело: как средство борьбы с аутсорсингом, вполне себе вариант, конечно. Как средство защиты тоже, т.к. рефлектор не поможет.


Если человек принимающий решение уже знаком с языком, то это не проблема. Проблемы обычно возникают в больших забюракротизированных конторах. Но они и F# использовать вряд ли станут. Ява для них — самое то. Ну, на крайняк C#.

F>Ни одного, я вчера его впервые открыл Впрочем, я об этом писал в вопросе. Прочитай оглавление темы


Тогда попробуй. Тебя ждут сплошные разочарования. Для немерла — макры, а значит и метапрограммирование — это неотъемлемая часть языка. В F# же есть даже меньше чем в его родителе — Ocaml-е.

F>>>F# позволяет создавать свой специализированный язык под конкретную задачу.

F>>>Как именно это делается — не знаю. Но в оглавлении книги вижу, что можно.
А>>Сравнивать языки программирования по информации полученной из оглавления книги — это круто! Так держать!
F>Оглавление — это уже много, см. выше

Ну, так сделай следующий шаг — прочти соответствующую главу.


А>>В технологиях нужно разбираться. То кто разобрался в том, что такое мета программирование не будет даже задаваться вопросом есть ли в F# его полноценная поддержка. Он и так понимает, что нет.

F>Пойду убьюсь об стену.

От этого никому толку не будет. А вот разобраться следовало бы.
Кстати, к метапрограммированию нужно прийти. Оно должно потребоваться тебе лично без оглядки на каком языке ты пишешь. Иначе толку от этого не будет.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.