F Sharp
F# — это функциональный язык программирования общего назначения. Разработан Доном Саймом (англ. Don Syme) в Microsoft Research в Кембридже. Структура F# во многом схожа со структурой OCaml с той лишь разницей, что F# реализован поверх библиотек и среды исполнения .NET.
Некоторые задачи решаются значительно проще и яснее с использованием F# (по сравнению с решениями на господствующих ОО-языках), особенно те, что используют математический стиль программирования. Например, написание компилятора требует работы со структурами данных и преобразованиями над ними.
Microsoft интегрировала среду разработки F# в Visual Studio 2010. Microsoft планирует активно внедрять данный язык в разработку программных систем, которые сами с течением времени смогут масштабироваться, например в зависимости от количества пользователей, данное достоинство нельзя просто реализовать в императивных языках программирования.
Особенности
Код на языке F# является безопасным в отношении типов, часто бывает более компактным, чем аналогичный код C#, за счёт выведения типов. Такие возможности, как обобщенное программирование и функции позволяют писать абстрактные обобщенные алгоритмы, которые управляют параметризованными структурами данных (например, массивами, списками, графами, деревьями).
Одна из основных идей F# заключается в том, чтобы удостовериться, что имеющийся код и типы в функциональном языке программирования могут быть легко доступны из других .NET-языков.
Примеры
Синтаксис F# построен на математической нотации, а программирование чем-то похоже на алгебру. Например, когда вы определяете новый тип, то можете указать, что переменными этого типа будут «целые или строки». Вот как это выглядит:
type myType = IntVal of int | StringVal of string
Код также представляет собой математическую нотацию.
let f x = x + 1
F# работает следующим образом: тип «f» представляет собой «int -> int», то есть функция получает на вход целое и выдаёт на выход целое. F# позволяет получить доступ абсолютно ко всему, что есть в FCL. Синтаксис для работы с библиотеками .NET в этом смысле максимально близок к синтаксису C#. Особенности языка заметны при использовании всего спектра возможностей F#. К примеру, следующий код применяет функцию к элементам списка:
let rec map func lst = match lst with | [] -> [] | head :: tail -> func head :: map func tail let myList = [1;3;5] let newList = map (fun x -> x + 1) myList
В «newList» теперь находится «[2;4;6]».
Разбор списка в этой функции ведётся с помощью ещё одной мощной возможности сопоставления с образцом. Она позволяет задавать образцы при совпадении с которыми вычисляются соответствующие вхождения оператора match. Первый образец "[]" означает пустой список. Второй - список состоящий из первого элемента и хвоста (который может быть произвольным списком, в том числе и пустым). Во втором образце значение головы связывается с переменной head, а хвоста с tail (имена могут быть произвольные). Таким образом кроме основной задачи образец ещё позволяет производить декомпозицию сложных структур данных.
Примечания
См. также
Ссылки
- F#(англ.) — Microsoft F# Developer Center.
- F Sharp
- Введение в F# — интервью с Доном Саймом.
- Обсуждение книги по F# на русском языке Дона Сайма «The Definitive Guide to F#»
- Три парадигмы F# — Хабрахабр.
Основные языки программирования (список • сравнение • IDE • история • хронология) |
|
---|---|
Используемые в разработке |
Ада • АПЛ • Ассемблер • ActionScript • ABAP/4 • AutoIt • AWK • BASIC • C • Кобол • C++ • C# • ColdFusion • Common Lisp • D • dBase • Delphi • Eiffel • Erlang • F# • Forth • Фортран • Gambas • Groovy • Haskell • Icon • Java • JavaScript • Limbo • Lua • MATLAB • Object Pascal • Objective-C • OCaml • Oz • Оберон • Parser • Паскаль • Perl • PHP • PowerBASIC • PureBasic • Python • ПЛ/1 • Пролог • Ruby • Scala • Scheme • Smalltalk • SQL • PL/SQL • Tcl • Vala • Visual Basic • VB.NET |
Академические | |
IEC61131-3 |
Instruction List • ST • FBD • Ladder Diagram • SFC |
Прочие | |
Эзотерические |
Если вам нравится SbUP.com Сайт, вы можете поддержать его - BTC: bc1qppjcl3c2cyjazy6lepmrv3fh6ke9mxs7zpfky0 , TRC20 и ещё....