Comments 77
Не вижу особого смысла в данной статье, ибо из нее совершенно непонятно, зачем язык создавался и какие у него будут ключевые особенности.
Если честно, видеть эталонный рекурсивный процесс вычисления чисел фибоначчи не очень интересно.
Если честно, видеть эталонный рекурсивный процесс вычисления чисел фибоначчи не очень интересно.
Эта статья — ни в коем случае не обзор. Это Hello World, который говорит читателю «Есть вот такой язык». Фибоначчи — классический пример алгоритма, который как нельзя легко решается на этом языке и собственно дает понять, что основная цель языка — именно математические расчеты.
В следующей статье попробую более глубоко рассказать, что такое F# и для чего он нужен.
В книжке по ОКамлу (practical ocaml) (который предок F#) демонстрация рекурсии тоже по числам Фибоначчи, но сразу же идёт абзац (вольно) «Числа Фибоначчи конечно хорошо, но когда у вас в последний раз была необходимость их вычислять?» и тут же приводится пример реально полезной рекурсии сразу с примером на «хвостатость» — разбиение строки на символы и склейка списка символов в строку.
Я целиком и полностью согласен с таким подходом — надо демонстрировать мощь языка именно на тех примерах которые как-то близки к реальной жизни.
Я целиком и полностью согласен с таким подходом — надо демонстрировать мощь языка именно на тех примерах которые как-то близки к реальной жизни.
Все функциональные языки — по сути дела, DSL-и для вычисления чисел Фибоначчи, всё остальное — примочки, свистелки и синтактик шугар. Если не верите — возьмите совершенно любой туториал, книгу, статью по функциональному языку — всё прочее необязательно, но числа Фибоначчи будут там всегда! :)
Мне лично интересен был бы обзор отличий F# от Haskell и OCaml (кроме очевидного — .Net), дабы знать, чего можно лишиться, а чего приобрести.
Приобрести — возможность переиспользования любого кода .NET, потерять — красоту языка. Говорю о сравнении с Haskell, на OCaml не писал ничего.
в общем, ЕМНИП, F# это фактически и есть O'Caml… «улучшенный и доработанный»
На самом деле там дофига всего поменялось. Изначально он был очень близок к окемлу, но щас уже далеко ушел в сторону (см. хотя бы active patterns ). Небольшая программа на общем подмножестве Ocaml и F#, которую я писал года два назад, щас уже компилируется на F# с сотней deprecation warning'ов ;)
Спасибо за статью. Приятно видеть 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++.
Спору нет, есть огромное количество унаследованного кода со времен царя Гороха написанного на фортране (и еще более дремучих языках), что обеспечивает постоянный интерес к нему. Но в основном критические к производительности расчеты пишутся на C/C++.
надеюсь люди не кинутся переходить на F# не понимая зачем он нужен.
Я тоже надеюсь. Нужно понимать, что F# не замена C#. Это дополнение к нему, которое упрощает написание целого класса алгоритмов для математических расчетов.
да, вряд-ли кто-то вообще кинется ибо новый язык может привлечь либо специфическими фичами либо готовым набором высокоуровневых библиотек.
Фичи F# — функциональный стиль, однако C# в третей версии имеет уже очень много из функциональных ЯП.
Фичи F# — функциональный стиль, однако C# в третей версии имеет уже очень много из функциональных ЯП.
Всем спасибо, перенес в .Net.
// а как нас зовут? C#: var name = Console.ReadLine();
Это больше на VB похоже чем на C#
Это больше на VB похоже чем на C#
Вот доклад с Платформы на эту тему — platforma2009.ru/materials/showitem.aspx?MID=77110d82-f458-4231-a6ba-441b0dac6478
Неожиданно после повальной объектно-ориентированности со стороны Microsoft выпустить на рынок функциональный язык. Интересно было бы услишать где его можно применять на практика. Пока что это — новая игруша от MS.
ФП может быть и без ленивости.
Scheme, CL, Erlang, OCaml, SML, и т.д.
И в SML тоже есть (у SML/NJ есть расширение), и в Scheme есть, поэтому правильнее будет говорить о том, что в этих языках используется аппликативная форма вычисления по-умолчанию.
Ленивость вообще не является неотъемлемой чертой ФЯ, по-умолчанию она есть только в хаскеле (и Clean). Связано больше с тем, что с ленивыми вычислениями часто производительность трудно предсказать «на глаз», ну и компилятор сложнее, да. Хотя на этот счет есть разные мнения.
На рсдн недавно большая ветка была на эту тему.
На рсдн недавно большая ветка была на эту тему.
Да, наверное. Это надо публикации читать и имплементаторов спрашивать.
В Эриксоне решили, что в их сфере деятельности важнее сразу «на глаз» видеть из кода, какие именно будут выполнены действия и в какой именно последовательности, а не доверять эти решения компилятору. Ленивость и декларативность хороши в чистых вычислениях, а когда будущая программа заведомо будет вся с упором на побочные эффекты, то себе дороже выходит.
Это хорошо видно по тому, насколько параноидально компилятор Эрланга проверяет паттерны и условные выражения на чистоту.
Это хорошо видно по тому, насколько параноидально компилятор Эрланга проверяет паттерны и условные выражения на чистоту.
«функциональный язык глазами ребят из Редмонда»
язык разработан Microsoft Research в Кембридже
язык разработан Microsoft Research в Кембридже
Все таки не понятно зачем он нужен. Математические расчеты, парсинг… Приведите пример задачи, которую на том же C# сделать намного сложнее.
Да хоть бы не очень сложные физические расчеты blogs.msdn.com/andrewkennedy/archive/2008/08/20/units-of-measure-in-f-part-one-introducing-units.aspx
А вот это интересно. Спасибо.
Поговаривают, что для C++ подобное умеет делать Boost.Units. Быть может, он не так лаконичен, как встроенная поддержка единиц измерения в F#, но разве это именно то, что сложно сделать на C*? :)
Дык это C++ а не C#, там темплейты есть.
В общем-то в C# есть дженерики, на которых такое тоже можно написать. В случае с F# единицы измерений как раз и разворачиваются в дженерики на уровне IIL. Другое дело, что для этого нужно много времени и кода либо же стороннюю библиотеку а-ля Буст. А в F# поддержка на уровне синтаксиса.
Йа не являюсь мегаспециалистом по C#, но дженерики это таки сильно другое, и бОльшую часть трюков на основе C++ темплейтов с дженериками повторить нельзя. И в случае с F#, кстати, похоже, единицы измерений на уровне CLR вообще никак не видны.
Для уменьшения кол-ва кода, упрощения отладки, упрашенного распараллеливания и остальных прелестей ФП
Не спешите, статья готовится, просто медленно.
ну наконец то хоть появится нормальный язык программирования для .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
И это единственный компилятор? :(
И это единственный компилятор? :(
Не, там под моно тоже есть (но я лично не пробовал).
Ну а что вы собственно ожидали от детища Майкрософт да еще на стадии бета-версии?
ну и что?
написано же в первой строчке абзаца он еще через год только выйдет. к тому времени можт и для моно чтонибуть наклепают.
написано же в первой строчке абзаца он еще через год только выйдет. к тому времени можт и для моно чтонибуть наклепают.
Sign up to leave a comment.
F#: Hello, World