Похожего очень много: система типов, кавычки, type inference, и т.д. F# кавычки не так активно выделяет, что есть минус.
Синтаксис гораздо приятнее в Nemerle, если знаешь Ruby/C#/Java и не знаешь OCaml.
Поддержка в Visual Studio лучше у F# + есть интерактивный режим: очень большой плюс.
Поскольку F# MicroSoft'овский и по нему уже начали писать 3 книги, вполне может оказаться в результате популярнее Nemerle. С другой стороны, по Lisp есть немало книг, а вот популярности
На данный момент сравнение популярности: f# programming language -- 513.000 хитов, nemerle programming language -- 98.900.
В западной блогосфере вижу упоминания F# намного чаще.
Скорость пока не сравнивал, но F# ей очень гордится.
У кого какие мнения?
Еще один язык, в котором есть type inference и макросы -- Boo, но я думаю с ним подождать до появления поддержки generics. boo programming language -- 1.160.000 хитов. Есть ли по нему какие-нибудь соображения?
30.01.07 18:09: Перенесено модератором из 'Декларативное программирование' — IT
Здравствуйте, Alexey Romanov, Вы писали:
AR>Попробовал слегка эти языки. Первые заключения:
Не понятно какие критерии отбора языков, если языки на платформе NET (или с подержкой) выводом типов и макросами (или с развитым метапрограммированием?) то не хватает например dylan'а
Здравствуйте, FR, Вы писали:
AR>>Попробовал слегка эти языки. Первые заключения: FR>Не понятно какие критерии отбора языков, если языки на платформе NET (или с подержкой) выводом типов и макросами (или с развитым метапрограммированием?) то не хватает например dylan'а
Ну и зачем вводить людей в заблуждение? Во-первых с каких это пор Dylan появился на платформе .NET? Во-вторых так как Dylan динамически-типизированный язык вывод типов там неполноценный и является лишь средством оптимизации. Такой "вывод типов" и в JScript.NET есть.
Здравствуйте, FR, Вы писали:
FR>Здравствуйте, Alexey Romanov, Вы писали:
AR>>Попробовал слегка эти языки. Первые заключения:
FR>Не понятно какие критерии отбора языков, если языки на платформе NET (или с подержкой) выводом типов и макросами (или с развитым метапрограммированием?) то не хватает например dylan'а
Критерии следующие: поддержка макросов или другой формы метапрогаммирования (скажем, различные eval'ы Ruby); работа на CLR или JVM, чтобы не возникло проблем с наличием библиотек; вывод типов или динамический язык (поскольку обе платформы и их библиотеки заточены под статические языки, то скорее первое); возможность комбинировать ФП и ООП. Если можете подсказать другие языки, которые под эти критерии подходят, буду только рад.
У Dylan'а разве есть поддержка .NET? На их сайте об этом ничего найти не могу.
Здравствуйте, Vermicious Knid, Вы писали:
VK>Здравствуйте, FR, Вы писали:
AR>>>Попробовал слегка эти языки. Первые заключения: FR>>Не понятно какие критерии отбора языков, если языки на платформе NET (или с подержкой) выводом типов и макросами (или с развитым метапрограммированием?) то не хватает например dylan'а VK>Ну и зачем вводить людей в заблуждение? Во-первых с каких это пор Dylan появился на платформе .NET?
Точно меня замкнуло, почему то отложилось в памяти что Open Dylan требует NET, сейчас посмотрел оказывается нативный компилятор.
VK>Во-вторых так как Dylan динамически-типизированный язык вывод типов там неполноценный и является лишь средством оптимизации. Такой "вывод типов" и в JScript.NET есть.
Так в списке же Boo есть, он в этом отношении близок к Dylan.
AR>Критерии следующие: поддержка макросов или другой формы метапрогаммирования (скажем, различные eval'ы Ruby); работа на CLR или JVM, чтобы не возникло проблем с наличием библиотек;
Ну библиотеки не только для CLR и JVM пишутся, например для питона их очень много, плюс огромная стандартная библиотека.
AR>вывод типов или динамический язык (поскольку обе платформы и их библиотеки заточены под статические языки, то скорее первое); возможность комбинировать ФП и ООП. Если можете подсказать другие языки, которые под эти критерии подходят, буду только рад.
Питон
AR>У Dylan'а разве есть поддержка .NET? На их сайте об этом ничего найти не могу.
С dylan я ошибся реализации под NET нет, но все остальное нужное есть.
Здравствуйте, Alexey Romanov, Вы писали:
AR>Похожего очень много:
Различей тоже
AR>система типов,
А в чем тут схожесть?
AR>кавычки,
Это что такое? Цитирование?
AR>type inference, и т.д. F# кавычки не так активно выделяет, что есть минус.
AR>Синтаксис гораздо приятнее в Nemerle, если знаешь Ruby/C#/Java и не знаешь OCaml.
+1
AR>Поддержка в Visual Studio лучше у F# + есть интерактивный режим: очень большой плюс.
Ну ничего, наши парни тоже не промах А если серъезно, то и у F# VSIP'а куча недостатков. Так что еще не ясно, у кого появится нормальный VSIP раньше.
AR>Поскольку F# MicroSoft'овский и по нему уже начали писать 3 книги, вполне может оказаться в результате популярнее Nemerle.
Да и бог с ним. Нам ли переживать. А вообще я думаю надо уже засылать Немерлистов да и Влада с Игорем в MS работать, пущай двигают.
AR>С другой стороны, по Lisp есть немало книг, а вот популярности
+1
AR>Скорость пока не сравнивал, но F# ей очень гордится.
JIT работает за вас Хотя код они порой действительно генерят хороший.
AR>У кого какие мнения?
Если мне скажут на работе: на C# больше не пишем, пишем на F# — ни сколько не расстроюсь. Но конечно, Немерл у меня вызывает гораздо больше симпатий.
AR>Еще один язык, в котором есть type inference и макросы -- Boo, но я думаю с ним подождать до появления поддержки generics. boo programming language -- 1.160.000 хитов. Есть ли по нему какие-нибудь соображения?
Здравствуйте, ie, Вы писали:
ie>Здравствуйте, Alexey Romanov, Вы писали:
AR>>Похожего очень много:
ie>Различей тоже
AR>>система типов,
ie>А в чем тут схожесть?
Есть функциональные типы. Есть варианты. Есть кортежи. Есть литералы списков.
AR>>кавычки,
ie>Это что такое? Цитирование?
Да.
AR>>type inference, и т.д. F# кавычки не так активно выделяет, что есть минус.
AR>>Синтаксис гораздо приятнее в Nemerle, если знаешь Ruby/C#/Java и не знаешь OCaml.
ie>+1
AR>>Поддержка в Visual Studio лучше у F# + есть интерактивный режим: очень большой плюс.
ie>Ну ничего, наши парни тоже не промах А если серъезно, то и у F# VSIP'а куча недостатков. Так что еще не ясно, у кого появится нормальный VSIP раньше.
Ну посмотрим. У меня VSIP Nemerle только-только заработал.
AR>>Поскольку F# MicroSoft'овский и по нему уже начали писать 3 книги, вполне может оказаться в результате популярнее Nemerle.
ie>Да и бог с ним. Нам ли переживать. А вообще я думаю надо уже засылать Немерлистов да и Влада с Игорем в MS работать, пущай двигают.
Поскольку хотелось бы зарабатывать на этом деньги, нужно, чтобы работодатели знали, что это такое
AR>>С другой стороны, по Lisp есть немало книг, а вот популярности
ie>+1
AR>>Скорость пока не сравнивал, но F# ей очень гордится.
ie>JIT работает за вас Хотя код они порой действительно генерят хороший.
AR>>У кого какие мнения?
ie>Если мне скажут на работе: на C# больше не пишем, пишем на F# — ни сколько не расстроюсь. Но конечно, Немерл у меня вызывает гораздо больше симпатий.
AR>>Еще один язык, в котором есть type inference и макросы -- Boo, но я думаю с ним подождать до появления поддержки generics. boo programming language -- 1.160.000 хитов. Есть ли по нему какие-нибудь соображения?
ie> не знаком с ним.
Здравствуйте, FR, Вы писали:
VK>>Во-вторых так как Dylan динамически-типизированный язык вывод типов там неполноценный и является лишь средством оптимизации. Такой "вывод типов" и в JScript.NET есть.
FR>Так в списке же Boo есть, он в этом отношении близок к Dylan.
Отнюдь:
"Boo is a statically typed language.
Static typing is about the ability to type check a program for type correctness.
Static typing is about being able to deliver better runtime performance.
Static typing is not about putting the burden of declaring types on the programmer as most mainstream languages do.
The mechanism that frees the programmer from having to babysit the compiler is called type inference.
Type inference means you don't have to worry about declaring types everywhere just to make the compiler happy. Type inference means you can be productive without giving up the safety net of the type system nor sacrificing performance.
Boo's type inference kicks in for newly declared variables and fields, properties, arrays, for statement variables, overriden methods, method return types and generators."
Здравствуйте, FR, Вы писали:
FR>Здравствуйте, Alexey Romanov, Вы писали:
AR>>Критерии следующие: поддержка макросов или другой формы метапрогаммирования (скажем, различные eval'ы Ruby); работа на CLR или JVM, чтобы не возникло проблем с наличием библиотек;
FR>Ну библиотеки не только для CLR и JVM пишутся, например для питона их очень много, плюс огромная стандартная библиотека.
В общем да + есть Jython и IronPython.
AR>>вывод типов или динамический язык (поскольку обе платформы и их библиотеки заточены под статические языки, то скорее первое); возможность комбинировать ФП и ООП. Если можете подсказать другие языки, которые под эти критерии подходят, буду только рад.
FR>Питон
Беда в том, что при сравнении питона и руби у меня все время выигрывает руби Что чище: len(s) или s.length? __gt__ или > ?
VK>>>Во-вторых так как Dylan динамически-типизированный язык вывод типов там неполноценный и является лишь средством оптимизации. Такой "вывод типов" и в JScript.NET есть.
FR>>Так в списке же Boo есть, он в этом отношении близок к Dylan.
AR>Отнюдь:
В Boo вывод типов очень слабый, спотыкается на несложных примерах. И к тому же Boo может работать в режиме динамической типизации.
Здравствуйте, Alexey Romanov, Вы писали:
FR>>Ну библиотеки не только для CLR и JVM пишутся, например для питона их очень много, плюс огромная стандартная библиотека.
AR>В общем да + есть Jython и IronPython.
Есть стандартная библиотека CPython http://docs.python.org/lib/lib.html
AR>>>вывод типов или динамический язык (поскольку обе платформы и их библиотеки заточены под статические языки, то скорее первое); возможность комбинировать ФП и ООП. Если можете подсказать другие языки, которые под эти критерии подходят, буду только рад.
FR>>Питон
AR>Беда в том, что при сравнении питона и руби у меня все время выигрывает руби Что чище: len(s) или s.length? __gt__ или > ?
Фигня, тем более в динамическом языке добавка s.length вполне разрешимый вопрос, реально что у руби лучше это только полноценные блоки кода. Кроме того метопрогаммирование в питоне кажется мощнее, хотя тут могу ошибатся в руби не силен.
Здравствуйте, FR, Вы писали:
FR>В Boo вывод типов очень слабый, спотыкается на несложных примерах. И к тому же Boo может работать в режиме динамической типизации.
Слабость не отсуствие. В Буу он есть. Это главное. А динамическая типизация вот и в Nemerle теперь есть. Это можно рассматривать как дополнительную возможность.
Так что с точки зрения класса языка — я бы все же отнес Буу и Немерле к одному классу статически типизированных компонентных языков.
Однако полностью согласен, что с точки зрения технологичности Буу до Немерла еще расти и расти. Думаю, даже что Буу просто никогда не доростет до нужного уровня. По крайней мере видел я его уже очень адвно, но с тех пор никаких серьезных изменений нет. Его макрсы — это сасвсем не то, что макросы Немерла. Да и вывод типов очень слабый. Единственное приемущество вроде бы он быстрее компилируется.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, Alexey Romanov, Вы писали:
AR>Критерии следующие: поддержка макросов или другой формы метапрогаммирования (скажем, различные eval'ы Ruby); работа на CLR или JVM, чтобы не возникло проблем с наличием библиотек; вывод типов или динамический язык (поскольку обе платформы и их библиотеки заточены под статические языки, то скорее первое); возможность комбинировать ФП и ООП.
По этим критерия Буу тихонько курит в сторонке. ФП у него довольно слабо (по сравнению с Немерлом). А МП просто в зачаточном состоянии (плагины к компилятору оперирующие с АСТ). Буу это попытка сделать статически типизированный Питон. А так как многие положительные черты Питона основываются на его динамической природе, то и результат получается так себе. Плюс в Буу очень немного хайтека. Это скорее добротная работа середнячков. Немерле же точная противоположенность. Это чистеший хайтек. Это же приводит к тому, что в Немерле до сих пор доволно много глюков.
AR>Если можете подсказать другие языки, которые под эти критерии подходят, буду только рад.
Для Явы есть Скала. С точки зрения читоты проектирования она будет даже по круче Немерла, но в ней нет макросов.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, Alexey Romanov, Вы писали:
AR>В общем да + есть Jython и IronPython.
За Jython не скау, а IronPython — это довольно плохая реализация Питона для дотнета. Одни минусы. Динамическая типизация, плохая интеграция с дотнетом, неполноценность...
AR>Беда в том, что при сравнении питона и руби у меня все время выигрывает руби Что чище: len(s) или s.length? __gt__ или > ?
Согласен, мне тоже руби больше нравится при таком сравнении. Но как Немерле здесь смотрится на уровне. Если учесть, что у него есть паттерн-матчинг и полноценная поддержка ФЯ, то вообще Руби с Питоном смотря на его фоне слабовато.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, VladD2, Вы писали:
VD>Здравствуйте, FR, Вы писали:
FR>>В Boo вывод типов очень слабый, спотыкается на несложных примерах. И к тому же Boo может работать в режиме динамической типизации.
VD>Слабость не отсуствие. В Буу он есть. Это главное. А динамическая типизация вот и в Nemerle теперь есть. Это можно рассматривать как дополнительную возможность.
В немерле динамическая типизация такая же как вывод типов в Boo
Возмем тот же Dylan, это динамический типизированный язык с возможностью аннотации типов, то есть статическая типизация в нем тоже есть (притом вполне жесткая), по моему это тоже неплохо, во всяком случае лучше чем плохой вывод типов.
VD>Так что с точки зрения класса языка — я бы все же отнес Буу и Немерле к одному классу статически типизированных компонентных языков.
Угу.
VD>Однако полностью согласен, что с точки зрения технологичности Буу до Немерла еще расти и расти. Думаю, даже что Буу просто никогда не доростет до нужного уровня. По крайней мере видел я его уже очень адвно, но с тех пор никаких серьезных изменений нет. Его макрсы — это сасвсем не то, что макросы Немерла. Да и вывод типов очень слабый. Единственное приемущество вроде бы он быстрее компилируется.
Просто язык очень вяло развивается, иначе он мог бы стать и конкурентом для Nemerle.
Здравствуйте, VladD2, Вы писали:
AR>>Беда в том, что при сравнении питона и руби у меня все время выигрывает руби Что чище: len(s) или s.length? __gt__ или > ?
VD>Согласен, мне тоже руби больше нравится при таком сравнении. Но как Немерле здесь смотрится на уровне. Если учесть, что у него есть паттерн-матчинг и полноценная поддержка ФЯ, то вообще Руби с Питоном смотря на его фоне слабовато.
Да, паттерн-матчинг -- это есть гуд. И list comprehensions. И то, что язык компилируемый до IL уж точно будет быстрее и Руби и Питона. Теперь осталось поднять волну энтузиазма размером с Руби
Здравствуйте, VladD2, Вы писали:
VD>По этим критерия Буу тихонько курит в сторонке. ФП у него довольно слабо (по сравнению с Немерлом). А МП просто в зачаточном состоянии (плагины к компилятору оперирующие с АСТ). Буу это попытка сделать статически типизированный Питон. А так как многие положительные черты Питона основываются на его динамической природе, то и результат получается так себе. Плюс в Буу очень немного хайтека. Это скорее добротная работа середнячков. Немерле же точная противоположенность. Это чистеший хайтек. Это же приводит к тому, что в Немерле до сих пор доволно много глюков.
Спасибо!
AR>>Если можете подсказать другие языки, которые под эти критерии подходят, буду только рад.
VD>Для Явы есть Скала. С точки зрения читоты проектирования она будет даже по круче Немерла, но в ней нет макросов.