Как стать автором
Обновить

Комментарии 77

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

Если честно, видеть эталонный рекурсивный процесс вычисления чисел фибоначчи не очень интересно.
Эта статья — ни в коем случае не обзор. Это Hello World, который говорит читателю «Есть вот такой язык». Фибоначчи — классический пример алгоритма, который как нельзя легко решается на этом языке и собственно дает понять, что основная цель языка — именно математические расчеты.
За такого Фибоначчи вам бы пару влепили в MIT (судя по SICP).
Конечно влепили — количество вызовов рекурсии зависит экспотенциально от её глубины, надо бы там концевую рекурсию…
Если вы о мемоизации, то я о ней прекрасно знаю. Пример на то и пример, чтоб не перегружать его деталями.
В следующей статье попробую более глубоко рассказать, что такое F# и для чего он нужен.
В книжке по ОКамлу (practical ocaml) (который предок F#) демонстрация рекурсии тоже по числам Фибоначчи, но сразу же идёт абзац (вольно) «Числа Фибоначчи конечно хорошо, но когда у вас в последний раз была необходимость их вычислять?» и тут же приводится пример реально полезной рекурсии сразу с примером на «хвостатость» — разбиение строки на символы и склейка списка символов в строку.

Я целиком и полностью согласен с таким подходом — надо демонстрировать мощь языка именно на тех примерах которые как-то близки к реальной жизни.
Обязательно учту в следующей статье — уже есть задумка с примером из реальной жизни.
Все функциональные языки — по сути дела, DSL-и для вычисления чисел Фибоначчи, всё остальное — примочки, свистелки и синтактик шугар. Если не верите — возьмите совершенно любой туториал, книгу, статью по функциональному языку — всё прочее необязательно, но числа Фибоначчи будут там всегда! :)
Все ЯП, по вашей логике, придуманные человечеством предназначены для вывода сообщения «Hello, world!», а всё остальное синтаксический сахар и свистелки. :)
Поэтому лучшим языком является HQ9+ :-)
Чорт, уели!.. :)
Мне лично интересен был бы обзор отличий F# от Haskell и OCaml (кроме очевидного — .Net), дабы знать, чего можно лишиться, а чего приобрести.
Приобрести — возможность переиспользования любого кода .NET, потерять — красоту языка. Говорю о сравнении с Haskell, на OCaml не писал ничего.
в общем, ЕМНИП, F# это фактически и есть O'Caml… «улучшенный и доработанный»
На самом деле там дофига всего поменялось. Изначально он был очень близок к окемлу, но щас уже далеко ушел в сторону (см. хотя бы active patterns ). Небольшая программа на общем подмножестве Ocaml и F#, которую я писал года два назад, щас уже компилируется на F# с сотней deprecation warning'ов ;)
из всех фич F# меня потрясла работа с единицами измерения… это сильно, имхо.
Ухты, я этого не видел. Суровые парни.
То есть на первоначальную идею «а теперь мы бесплатно перенесем кучу готового кода» в итоге забили?
Спасибо за статью. Приятно видеть F# на старницах Хабра. Будущее за этим языком (ИМХО)
мое субъективное имхо в том что F# будет иметь сложности с внедрением и массовостью хотя бы из-за того что его базовый синтаксис отличается от C-шного. Я давно заметил что большинство языков которые «не похожи» на С остаются привязанными к конкретным задачам
Народ не любит васико-подобность, и я к этому народу присоединяюсь, меньше слов (в коде) — больше дела.
В упор не пойму какой язык вы имели в виду, когда говорили про «васико-подобность»: C, C# или F#?
васик = basic :)
Это понятно. Не понятно какое отношение это имеет к сравнению C/C#/F#.
let, rec, match, with и прочее.
Уверяю, что это внешнее сходство, мне не очень понятное. Может дело в том, что я немного знаком с OCaml, Haskell :). Кроме пары ключевых слов найти что-то общее между F# и Basic сложно. Кстати let, with активно используются и в других языках.
К сожалению о этих языках узнал буквально на днях. Я заметил общество опять начало их обсуждать. Следовательно не могу утверждать плохо ли это. Я просто приверженец С-подобного синтаксиса.
так можно делать проект на двух языках при необходимости. или даже на 10… C# + Boo — для меня отработанная связка :-)
Поддерживаю. .NET в этом отношении безусловно рулит. Но научные работники в большинстве своем предпочитают C-шный синтаксис. Прочие языки выполняют чисто утилитарную функцию — например IDL (interactive data language) c синтаксисом a-для Фортран.

Спору нет, есть огромное количество унаследованного кода со времен царя Гороха написанного на фортране (и еще более дремучих языках), что обеспечивает постоянный интерес к нему. Но в основном критические к производительности расчеты пишутся на C/C++.
надеюсь люди не кинутся переходить на F# не понимая зачем он нужен.
Я тоже надеюсь. Нужно понимать, что F# не замена C#. Это дополнение к нему, которое упрощает написание целого класса алгоритмов для математических расчетов.
Даже скорее не мат.расчетов, а создание парсеров. Например, texc написан на ocaml и используется в википедии.
да, вряд-ли кто-то вообще кинется ибо новый язык может привлечь либо специфическими фичами либо готовым набором высокоуровневых библиотек.
Фичи F# — функциональный стиль, однако C# в третей версии имеет уже очень много из функциональных ЯП.
Всем спасибо, перенес в .Net.
// а как нас зовут? C#: var name = Console.ReadLine();
Это больше на VB похоже чем на C#
В C# 3.0 можно написать точно так же — вывод типов, однако.
это именно C# 3.0
вот вам чуть посложнее: var urid = db.References.First(a => a.sName.StartsWith(«test»));
забыл строку одну var db = new Platform.Kernel.Database.PlatformDataContext();
Неожиданно после повальной объектно-ориентированности со стороны Microsoft выпустить на рынок функциональный язык. Интересно было бы услишать где его можно применять на практика. Пока что это — новая игруша от MS.
Ничего себе «неожиданно». Если я не ошибаюсь, ребята все эти фичи готовили ещё до выхода первой версии. Скажем, LINQ уже можно было потрогать за вымя уже в 2005-м году, а может быть и в 2004-м.

Да и фа-диез с тех же времён.
НЛО прилетело и опубликовало эту надпись здесь
ФП может быть и без ленивости.
НЛО прилетело и опубликовало эту надпись здесь
Scheme, CL, Erlang, OCaml, SML, и т.д.
НЛО прилетело и опубликовало эту надпись здесь
И в SML тоже есть (у SML/NJ есть расширение), и в Scheme есть, поэтому правильнее будет говорить о том, что в этих языках используется аппликативная форма вычисления по-умолчанию.
НЛО прилетело и опубликовало эту надпись здесь
Ленивость вообще не является неотъемлемой чертой ФЯ, по-умолчанию она есть только в хаскеле (и Clean). Связано больше с тем, что с ленивыми вычислениями часто производительность трудно предсказать «на глаз», ну и компилятор сложнее, да. Хотя на этот счет есть разные мнения.

На рсдн недавно большая ветка была на эту тему.
Да, наверное. Это надо публикации читать и имплементаторов спрашивать.
В Эриксоне решили, что в их сфере деятельности важнее сразу «на глаз» видеть из кода, какие именно будут выполнены действия и в какой именно последовательности, а не доверять эти решения компилятору. Ленивость и декларативность хороши в чистых вычислениях, а когда будущая программа заведомо будет вся с упором на побочные эффекты, то себе дороже выходит.
Это хорошо видно по тому, насколько параноидально компилятор Эрланга проверяет паттерны и условные выражения на чистоту.
«функциональный язык глазами ребят из Редмонда»
язык разработан Microsoft Research в Кембридже
Спасибо, исправил.
Все таки не понятно зачем он нужен. Математические расчеты, парсинг… Приведите пример задачи, которую на том же C# сделать намного сложнее.
А вот это интересно. Спасибо.
Поговаривают, что для C++ подобное умеет делать Boost.Units. Быть может, он не так лаконичен, как встроенная поддержка единиц измерения в F#, но разве это именно то, что сложно сделать на C*? :)
Дык это C++ а не C#, там темплейты есть.
В общем-то в C# есть дженерики, на которых такое тоже можно написать. В случае с F# единицы измерений как раз и разворачиваются в дженерики на уровне IIL. Другое дело, что для этого нужно много времени и кода либо же стороннюю библиотеку а-ля Буст. А в F# поддержка на уровне синтаксиса.
Йа не являюсь мегаспециалистом по C#, но дженерики это таки сильно другое, и бОльшую часть трюков на основе C++ темплейтов с дженериками повторить нельзя. И в случае с F#, кстати, похоже, единицы измерений на уровне CLR вообще никак не видны.
Да, вы правы. Специально полез рефлектором в ехе-шку, скомпиленную F#: все еденицы измерения — простые даблы, приведенные к системе SI.
Для уменьшения кол-ва кода, упрощения отладки, упрашенного распараллеливания и остальных прелестей ФП
Не спешите, статья готовится, просто медленно.
ну наконец то хоть появится нормальный язык программирования для .net
Какие компиляторы на данный момент понимают F#?
Собственно компилятор у F# один :) Он так и называется. Скачать последнюю актуальную версию вместе с компонентами для Visual Studio можно по ссылке: www.microsoft.com/downloads/details.aspx?FamilyID=61ad6924-93ad-48dc-8c67-60f7e7803d3c&displaylang=en
Supported Operating Systems: Windows Vista; Windows XP
И это единственный компилятор? :(
Не, там под моно тоже есть (но я лично не пробовал).
.Net языки компилируются в промежуточный код MS IIL, который работает везде, где есть .Net(или Mono, как его родной брат, впрочем немного ущербный). Сомневаюсь, что для моно нужен особый компилятор. Разве что в F# используются специфические фичи .Net 3.5, которые еще не добрались до Моно.
Не, компилятор, понятно, тот же, но там как раз были раньше какие-то проблемы с моно из-за использования специфических новых фич CLR.
Насколько я знаю, .Net 3.5 использует CLR 2.0 — все новые фичи 3.5 на уровне компиляторов и библиотек.
Ну а что вы собственно ожидали от детища Майкрософт да еще на стадии бета-версии?
ну и что?
написано же в первой строчке абзаца он еще через год только выйдет. к тому времени можт и для моно чтонибуть наклепают.
НЛО прилетело и опубликовало эту надпись здесь
НЛО прилетело и опубликовало эту надпись здесь
Зарегистрируйтесь на Хабре , чтобы оставить комментарий

Публикации

Истории