Из Википедии, бесплатной энциклопедии
Перейти к навигации Перейти к поиску

F # (произносится как F Sharp ) - это функционально -ориентированный , универсальный, строго типизированный , многопарадигмальный язык программирования , охватывающий функциональные , императивные и объектно-ориентированные методы программирования . F # чаще всего используется в качестве кроссплатформенного языка Common Language Infrastructure (CLI) в .NET Core , но он также может генерировать код JavaScript [9] и графического процессора (GPU). [10]

F # разработан F # Software Foundation , [11] Microsoft и открытых вкладчиков. С открытым исходным кодом , кросс-платформенный компилятор для F # можно получить в F # Software Foundation. [12] F # - это полностью поддерживаемый язык в Visual Studio [13] и JetBrains Rider . [14] Подключаемые модули, поддерживающие F #, существуют для многих широко используемых редакторов, в первую очередь для расширения Ionide для Visual Studio Code и интеграции с другими редакторами, такими как Vim и Emacs .

F # является членом семейства языков ML и возник как реализация .NET Framework ядра языка программирования OCaml . [6] [7] На него также повлияли C # , Python , Haskell , [5] Scala и Erlang .

История [ править ]

Версии [ править ]

В процессе развития язык пережил несколько версий:

Эволюция языка [ править ]

F # использует открытый процесс разработки и проектирования. Процессом развития языка руководит Дон Сайм из Microsoft Research в качестве доброжелательного диктатора на всю жизнь (BDFL) в области языкового дизайна вместе с F # Software Foundation. Более ранние версии языка F # были разработаны Microsoft и Microsoft Research с использованием закрытого процесса разработки.

F # происходит от Microsoft Research , Кембридж, Великобритания. Изначально язык был разработан и реализован Доном Саймом , [6] по словам которого в команде fsharp говорят, что F означает «Развлечение». [24] Эндрю Кеннеди внес свой вклад в разработку единиц измерения . [6] Инструменты Visual F # для Visual Studio разработаны Microsoft. [6] F # Software Foundation разработала компилятор и инструменты F # с открытым исходным кодом, включая реализацию компилятора с открытым исходным кодом, предоставленную командой Microsoft Visual F # Tools. [11]

Обзор языка [ править ]

Функциональное программирование [ править ]

F # - это строго типизированный функционально-ориентированный язык, в котором используется вывод типов . Программисту не нужно объявлять типы - компилятор выводит типы во время компиляции (вывод типа). F # также допускает явные аннотации типов и требует их в некоторых ситуациях.

F # - это язык, основанный на выражениях, использующий активное вычисление, а также в некоторых случаях ленивое вычисление . Каждый оператор в F #, включая ifвыражения, tryвыражения и циклы, является составным выражением статического типа. [31] Функции и выражения, которые не возвращают никакого значения, имеют тип возвращаемого значения unit. F # использует letключевое слово для привязки значений к имени. [31] Например:

пусть  x  =  3  +  4

связывает значение 7с именем x.

Новые типы определяются с помощью typeключевого слова. Для функционального программирования F # предоставляет типы кортежей , записей , размеченных объединений , списков , опций и результатов . [31] кортеж представляет собой набор п значений, где п ≥ 0. Величина п называется арностью кортежа. Кортеж из трех элементов будет представлен как (A, B, C), где A, B и C - значения, возможно, разных типов. Кортеж можно использовать для хранения значений только в том случае, если количество значений известно во время разработки и остается постоянным во время выполнения.

Запись представляет собой тип , где элементы данных называются. Вот пример определения записи:

 тип  R  =  {  Имя  :  строка  Возраст  :  int  }

Записи могут быть созданы как . Ключевое слово используется для создания копии записи, как , что создает новую запись, копирование и изменение значения поля (предполагается , что запись , созданную в предыдущем примере был назван ).let r = { Name="AB"; Age=42 }with{ r with Name="CD" }rNamer

Дискриминированное объединение типа является типобезопасной версией C союзов . Например,

 тип  A  =  |  UnionCaseX  из  строки  |  UnionCaseY  из  int

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

Тип списка - это неизменяемый связанный список, представленный либо с использованием нотации ( это оператор cons ), либо сокращением as . Пишется пустой список . Тип опции - это размеченный тип объединения с вариантами или . Типы F # могут быть универсальными , реализованными как универсальные типы .NET.head::tail::[item1; item2; item3][]Some(x)None

F # поддерживает лямбда-функции и замыкания . [31] Все функции в F # являются значениями первого класса и неизменяемы. [31] Функции могут быть каррированы . Будучи первоклассными значениями, функции могут передаваться в качестве аргументов другим функциям. Как и в других функциональных языках программирования, F # позволяет композицию функции с использованием >>и <<операторов.

F # предоставляет выражения последовательности [32], которые определяют последовательность seq { ... }, список [ ... ]или массив [| ... |]посредством кода, который генерирует значения. Например,

 seq  {  for  b  in  0  ..  25  do  if  b  <  15  then  yield  b * b  }

формирует последовательность квадратов чисел от 0 до 14, отфильтровывая числа из диапазона чисел от 0 до 25. Последовательности являются генераторами - значения генерируются по запросу (т. е. лениво оцениваются ) - в то время как списки и массивы оцениваются быстро .

F # использует сопоставление с образцом для привязки значений к именам. Сопоставление с образцом также используется при доступе к размеченным объединениям - значение объединения сопоставляется с правилами шаблона, и правило выбирается при успешном сопоставлении. F # также поддерживает активные шаблоны как форму расширяемого сопоставления с образцом. [33] Он используется, например, когда существует несколько способов сопоставления типа. [31]

F # поддерживает общий синтаксис для определения композиционных вычислений, называемых выражениями вычислений . Выражения последовательности, асинхронные вычисления и запросы - это особые виды вычислительных выражений. Выражения вычисления являются реализацией шаблона монады . [32]

Императивное программирование [ править ]

Поддержка F # для императивного программирования включает

  • for петли
  • while петли
  • массивы , созданные с помощью [| ... |]синтаксиса
  • хэш-таблица , созданная с использованием dict [ ... ]синтаксиса или System.Collections.Generic.Dictionary<_,_>типа.

Значения и поля записи также могут быть помечены как mutable. Например:

// Определите 'x' с начальным значением '1' let  mutable  x  =  1 // Измените значение 'x' на '3' x  <-  3

Кроме того, F # поддерживает доступ ко всем типам и объектам CLI, таким как те, которые определены в System.Collections.Genericпространстве имен, определяющем императивные структуры данных.

Объектно-ориентированное программирование [ править ]

Как и другие языки Common Language Infrastructure (CLI), F # может использовать типы CLI посредством объектно-ориентированного программирования. [31] Поддержка F # для объектно-ориентированного программирования в выражениях включает:

  • Точечная запись, например, x.Name
  • Выражения объекта, например, { new obj() with member x.ToString() = "hello" }
  • Конструкция объекта, например, new Form()
  • Типовые испытания, например, x :? string
  • Приведение типов, например, x :?> string
  • Именованные аргументы, например, x.Method(someArgument=1)
  • Именованные сеттеры, например, new Form(Text="Hello")
  • Необязательные аргументы, например, x.Method(OptionalArgument=1)

Поддержка объектно-ориентированного программирования в шаблонах включает

  • Типовые испытания, например, :? string as s
  • Активные шаблоны, которые можно определять над типами объектов [33]

Определения типа объекта F # могут быть определениями типа класса, структуры, интерфейса, перечисления или делегата, соответствующими формам определения, найденным в C # . Например, вот класс с конструктором, который принимает имя и возраст и объявляет два свойства.

/// Простое определение типа  объекта type Person ( name  :  string ,  age  :  int )  =  member  x . Имя  =  имя  члена  x . Возраст  =  возраст

Асинхронное программирование [ править ]

F # поддерживает асинхронное программирование через асинхронные рабочие процессы . [34] Асинхронный рабочий процесс определяется как последовательность команд внутри async{ ... }, как в

пусть  asynctask  =  async  {  let  req  =  WebRequest . Создать ( url )  пусть!  response  =  req . GetResponseAsync ()  используйте  stream  =  response . GetResponseStream ()  используйте  streamreader  =  new  System . IO . StreamReader ( поток )  возвращает  средство чтения потока . ReadToEnd ()  }

let!Указывает , что выражение справа (получение ответа) должно быть сделано асинхронно , но поток должен продолжать только тогда , когда результат налицо. Другими словами, с точки зрения блока кода, это как если бы получение ответа было блокирующим вызовом, тогда как с точки зрения системы поток не будет заблокирован и может использоваться для обработки других потоков. а результат, необходимый для этого, недоступен.

Блок async может быть вызван с помощью Async.RunSynchronouslyфункции. Несколько асинхронных блоков могут выполняться параллельно с использованием Async.Parallelфункции, которая принимает список asyncобъектов (в примере asynctaskэто асинхронный объект) и создает другой асинхронный объект для параллельного выполнения задач в списках. Результирующий объект вызывается с использованием Async.RunSynchronously. [34] Инверсия управления в F # следует этому шаблону. [34]

Параллельное программирование [ править ]

Параллельное программирование поддерживается частично через Async.Parallel, Async.Startи другие операции , которые выполняются асинхронные блоки параллельно.

Параллельное программирование также поддерживается с помощью Array.Parallelоператоров функционального программирования в стандартной библиотеке F #, прямого использования System.Threading.Tasksмодели программирования задач, прямого использования пула потоков .NET и потоков .NET, а также посредством динамического преобразования кода F # в альтернативные механизмы параллельного выполнения, такие как Код GPU [10] .

Единицы измерения [ править ]

Система типов F # поддерживает проверку единиц измерения чисел. [35] Функция единиц измерения интегрируется с выводом типа F #, чтобы требовать минимальных аннотаций типов в пользовательском коде. [36]

Метапрограммирование [ править ]

F # позволяет настраивать некоторые формы синтаксиса с помощью метапрограммирования для поддержки встраивания настраиваемых предметно-ориентированных языков в язык F #, в частности, с помощью выражений вычислений. [31]

F # включает функцию метапрограммирования во время выполнения, называемую цитатами. [37] Выражение цитаты оценивается как представление абстрактного синтаксического дерева выражений F #. Точно так же определения, помеченные [<ReflectedDefinition>]атрибутом, также доступны в их форме цитаты. Цитаты F # используются для различных целей, в том числе для компиляции кода F # в код JavaScript [9] и GPU [10] . (Кавычки представляют их выражения кода F # как данные для использования другими частями программы, требуя, чтобы это был синтаксически правильный код F #).

Информационно-насыщенное программирование [ править ]

F # 3.0 представил форму метапрограммирования времени компиляции посредством создания статически расширяемых типов, называемых поставщиками типов F #. [38] Поставщики типов F # позволяют расширять компилятор и инструменты F # компонентами, которые предоставляют информацию о типе компилятору по запросу во время компиляции. Поставщики типов F # использовались для предоставления строго типизированного доступа к подключенным источникам информации масштабируемым образом, включая граф знаний Freebase . [39]

В F # 3.0 функции цитирования и вычислений в F # объединены для реализации запросов LINQ . [40] Например:

// Используйте поставщик типов OData для создания типов, которые можно использовать для доступа к базе данных Northwind. откройте  Microsoft.FSharp.Data.TypeProvidersвведите  Northwind  =  ODataService < "http://services.odata.org/Northwind/Northwind.svc" > let  db  =  Northwind . GetDataContext ()// Выражение запроса. let  query1  =  query  {  для  клиента  в  БД . Клиенты  сделать  выбор  клиента  }

Комбинация поставщиков типов, запросов и строго типизированного функционального программирования известна как информационное программирование . [41]

Программирование агента [ править ]

F # поддерживает разновидность модели программирования Actor посредством реализации облегченных асинхронных агентов в памяти. Например, следующий код определяет агента и отправляет 2 сообщения:

let  counter  =  MailboxProcessor . Начать ( забавный  почтовый ящик  ->  let  rec  loop  n  =  async  {  do  printfn  "n =% d, wait ..."  n  let!  Msg  =  inbox . Receive ()  return !  Loop ( n + msg )  }  loop  0 )

Инструменты разработки [ править ]

  • Visual Studio с установленными инструментами Visual F # от Microsoft может использоваться для создания, запуска и отладки проектов F #. Инструменты Visual F # включают интерактивную консоль цикла чтения-оценки-печати (REPL), размещенную в Visual Studio, которая может выполнять код F # по мере его написания. Visual Studio для Mac также полностью поддерживает проекты F #.
  • Код Visual Studio содержит полную поддержку F # через расширение Ionide .
  • F # можно разрабатывать с помощью любого текстового редактора. Специальная поддержка существует в таких редакторах, как Emacs .
  • JetBrains Rider оптимизирован для разработки кода F # начиная с версии 2019.1. [42]
  • LINQPad поддерживает F # начиная с версии 2.x.

Области применения [ править ]

F # - это язык программирования общего назначения .

Веб-программирование [ править ]

SAFE Stack является концом к концу F # стек для разработки веб - приложений. Он использует ASP.NET Core на стороне сервера и Fable на стороне клиента. [43]

Альтернативным сквозным вариантом F # является инфраструктура WebSharper . [44]

Кросс-платформенная разработка приложений [ править ]

F # можно использовать вместе с инструментами Visual Studio для Xamarin для разработки приложений для iOS и Android . Библиотека Fabulous обеспечивает более удобный функциональный интерфейс.

Аналитическое программирование [ править ]

Среди прочего, F # используется для количественного финансового программирования, [45] торговли энергией и оптимизации портфеля [46], машинного обучения [47], бизнес-аналитики [48] и социальных игр на Facebook . [49]

В 2010-х годах F # позиционировался как оптимизированная альтернатива C #. Возможность написания сценариев и межъязыковая совместимость F # со всеми продуктами Microsoft сделали его популярным среди разработчиков. Многие разработчики создают системы на основе F # и используют C # WCF Services. [ требуется разъяснение ] [ необходима цитата ] [ кто? ]

Сценарии [ править ]

F # можно использовать как язык сценариев, в основном для сценариев цикла чтения – оценки – печати (REPL) на рабочем столе . [50]

Сообщество с открытым исходным кодом [ править ]

Сообщество F # с открытым исходным кодом включает F # Software Foundation [11] и F # Open Source Group на GitHub . [12] Популярные проекты F # с открытым исходным кодом включают:

  • Fable , транспилятор F # в Javascript на основе Babel .
  • Paket , альтернативный менеджер пакетов для .NET, который все еще может использовать репозитории NuGet , но имеет централизованное управление версиями.
  • FAKE , дружественная к F # система сборки.
  • Giraffe , функционально ориентированное промежуточное ПО для ASP.NET Core .
  • Suave , легкий веб-сервер и библиотека веб-разработки.

Совместимость [ править ]

F # имеет унаследованный «режим совместимости с ML», который может напрямую компилировать программы, написанные на большом подмножестве OCaml, без функторов, объектов, полиморфных вариантов или других дополнений.

Примеры [ править ]

Ниже приведены несколько небольших примеров:

// Это комментарий к образцу программы hello world. printfn  "Привет, мир!"

Класс Person с конструктором, принимающим имя, возраст и два неизменяемых свойства.

/// Это комментарий документации для определения типа. тип  Person ( name  :  string ,  age  :  int )  =  member  x . Имя  =  имя  члена  x . Возраст  =  возраст /// создание экземпляра класса let  mrSmith  =  Person ( "Smith" ,  42 )

Простой пример, который часто используется для демонстрации синтаксиса функциональных языков, - это факториальная функция для неотрицательных 32-битных целых чисел, показанная здесь на F #:

/// Использование выражения сопоставления с образцом let  rec  factorial  n  =  match  n  with  |  0  ->  1  |  _  ->  n  *  факториал  ( n  -  1 )/// Для функций с одним аргументом есть синтаксический сахар (функция сопоставления с образцом): let  rec  factorial  =  function  |  0  ->  1  |  n  ->  n  *  факториал  ( n  -  1 ) /// Используя оператор свертки и диапазона, позвольте  факториалу  n  =  [ 1 .. n ]  |>  Seq . сложить  (*)  1

Примеры итераций:

/// Итерация с использованием цикла for let  printList  lst  =  for  x  in  lst  do  printfn  "% d"  x/// Итерация с использованием функции высшего порядка let  printList2  lst  =  List . iter  ( printfn  "% d" )  lst/// Итерация с использованием рекурсивной функции и сопоставления с образцом let  rec  printList3  lst  =  match  lst  with  |  []  ->  ()  |  h  ::  t  ->  printfn  "% d"  h  printList3  t

Примеры Фибоначчи:

/// Формула числа Фибоначчи let  fib  n  =  let  rec  g  n  f0  f1  =  соответствует  n  с  |  0  ->  f0  |  1  ->  f1  |  _  ->  g  ( n  -  1 )  f1  ( f0  +  f1 )  g  n  0  1/// Другой подход - ленивая бесконечная последовательность чисел Фибоначчи, пусть  fibSeq  =  Seq . развернуть  ( fun  ( a , b )  ->  Some ( a + b ,  ( b ,  a + b )))  ( 0 , 1 )// Вывести четные фибры [ 1  ..  10 ] |>  Список . карта  fib |>  Список . filter  ( fun  n  ->  ( n  %  2 )  =  0 ) |>  printList// То же самое, используя выражение списка [  for  i  in  1 .. 10  действительно  let  r  =  fib  i  if  r  %  2  =  0  then  yield  r  ] |>  printList

Пример программы Windows Forms:

// Открываем библиотеку Windows Forms open  System.Windows.Forms// Создаем окно и устанавливаем несколько свойств let  form  =  new  Form ( Visible = true ,  TopMost = true ,  Text = "Добро пожаловать в F #" )// Создаем метку для отображения некоторого текста в форме let  label  =  let  x  =  3  +  ( 4  *  5 )  new  Label ( Text  =  sprintf  "x =% d"  x )// Добавляем метку в форму формы . Элементы управления . Добавить ( метка )// Наконец, запускаем форму [< System . STAThread >] Приложение . Выполнить ( форма )

Пример асинхронного параллельного программирования (параллельный ЦП и задачи ввода-вывода):

/// Простой детектор простых чисел let  isPrime  ( n : int )  =  let  bound  =  int  ( sqrt  ( float  n ))  seq  { 2  ..  bound }  |>  Seq . forall  ( удовольствие  x  ->  n  %  x  <>  0 )// Мы используем асинхронные рабочие процессы let  primeAsync  n  =  async  {  return  ( n ,  isPrime  n )  }/// Возвращает простые числа между m и n, используя несколько потоков, пусть  простые числа  m  n  =  seq  { m  ..  n }  |>  Seq . карта  primeAsync  |>  Async . Параллельный  |>  Асинхронный . Выполнить синхронно  |>  Массив . фильтр  snd  |>  Массив . карта  fst// Запускаем тест простых чисел  1000000  1002000  |>  Массив . iter  ( printfn  "% d" )

См. Также [ править ]

  • OCaml
  • C #
  • .NET Framework

Примечания [ править ]

  1. ^ https://devblogs.microsoft.com/dotnet/announcing-f-5/ .
  2. ^ https://www.infoq.com/news/2019/04/FSharp-Nulls
  3. ^ «Лицензия F # Software Foundation» .
  4. ^ "Лицензия Microsoft F #" .
  5. ^ a b Сайм, Гранич и Чистернино (2007 : 2)
  6. ^ a b c d e "Исторические признания F #" . Проверено 24 ноября 2012 .
  7. ^ a b Сайм, Дон (2006). «Использование компонентов метапрограммирования .NET из F #» . [F #] основан на дизайне Core ML и, в частности, имеет базовый язык, в значительной степени совместимый с языком OCaml.
  8. ^ для async
  9. ^ a b c d e f g Фонд программного обеспечения F #. «Использование F # для веб-приложений» . Проверено 30 июля 2020 .
  10. ^ Б с д е е г ч The F # Software Foundation. «Использование F # для программирования на GPU» . Архивировано из оригинала на 2019-12-25 . Проверено 25 декабря 2019 .
  11. ^ a b c Фонд программного обеспечения F #. «Фонд программного обеспечения F #» . Проверено 24 ноября 2012 .
  12. ^ a b Фонд программного обеспечения F #. "Компилятор F # (выпуск с открытым исходным кодом) @ github" . Проверено 24 ноября 2012 .
  13. ^ «Разработка с Visual F # в Visual Studio» . Проверено 30 июля 2020 .
  14. ^ "F #" . Проверено 30 июля 2020 .
  15. ^ Сайм, Дон. «Выпущен F # 1.0.8» . Microsoft . Проверено 7 сентября 2014 года .
  16. ^ Сайм, Дон. «F # 2.0 выпущен как часть Visual Studio 2010» . Microsoft . Проверено 7 сентября 2014 года .
  17. ^ Зандер, Джейсон. «Visual Studio 2012 и .NET Framework 4.5 выпущены в Интернет» . Microsoft . Проверено 7 сентября 2014 года .
  18. ^ «Visual Studio 2013 выпущен в Интернет» . Microsoft . Проверено 7 сентября 2014 года .
  19. ^ «Объявление о выпуске RTM Visual F # 4.0» . Microsoft . Проверено 15 сентября 2015 года .
  20. ^ «Представляем F # 4.1 и Visual F # Tools для Visual Studio 2017» . Проверено 8 марта 2017 .
  21. ^ https://blogs.msdn.microsoft.com/dotnet/2018/08/14/announcing-f-4-5/
  22. ^ https://www.nuget.org/packages/FSharp.Core#
  23. ^ a b https://devblogs.microsoft.com/dotnet/announcing-f-5/
  24. Эдвардс, Кэтрин (23 декабря 2008 г.). «Азия языков программирования: F #» . networkworld.com . IDG . Дата обращения 8 августа 2016 .
  25. ^ Макнамара, Брайан. «Подробнее о возможностях языка F # 3.0» . Microsoft . Проверено 7 сентября 2014 года .
  26. ^ Макнамара, Брайан. «Объявление о предварительном выпуске F # 3.1» . Microsoft . Проверено 7 сентября 2014 года .
  27. ^ «Объявление о выпуске RTM Visual F # 4.0» . Проверено 8 марта 2017 .
  28. ^ «Представляем F # 4.1 и Visual F # Tools для Visual Studio 2017» . Проверено 8 марта 2017 .
  29. ^ https://devblogs.microsoft.com/dotnet/announcing-f-4-7/
  30. ^ https://devblogs.microsoft.com/dotnet/announcing-f-5/
  31. ^ a b c d e f g h "Обзор языка F #" (PDF) . Проверено 14 декабря 2007 .
  32. ^ a b «Некоторые подробности о вычислительных выражениях F #» . Проверено 14 декабря 2007 .
  33. ^ a b «Сопоставление с образцом в F #, часть 2: активные образцы» . Проверено 24 ноября 2012 .
  34. ^ a b c «Введение в асинхронные рабочие процессы F #» . Проверено 14 декабря 2007 .
  35. ^ «Единицы измерения (F #)» . Проверено 24 ноября 2012 .
  36. ^ «Единицы измерения в F #: Часть первая, Введение в единицы» . Проверено 24 ноября 2012 .
  37. ^ «Цитаты кода (F #)» . Проверено 24 ноября 2012 .
  38. ^ "Поставщики типов" . Проверено 24 ноября 2012 .
  39. ^ «Новый технический отчет от Microsoft Research: строго типизированная языковая поддержка для источников информации в масштабе Интернета» . Проверено 24 ноября 2012 .
  40. ^ «Выражения запроса (F #)» . Проверено 24 ноября 2012 .
  41. ^ «F # 3.0 - LINQ + Type Providers = Информационно насыщенное программирование» . Проверено 24 ноября 2012 .
  42. Александр Куракин. «Rider 2019.1 начинает программу раннего доступа!» .
  43. ^ "Fable: JavaScript, которым можно гордиться!" . fable.io . Проверено 9 декабря 2017 .
  44. ^ Intellifactory. «Дом WebSharper» . Проверено 24 ноября 2012 .
  45. ^ «Примеры из практики Microsoft: Microsoft Visual Studio 2012 - Компания финансовых услуг» . Проверено 25 ноября 2012 .
  46. ^ «F # для торговли энергией и оптимизации портфеля» . Проверено 25 ноября 2012 .
  47. ^ «Microsoft Case Study: Grange Insurance» . Проверено 25 ноября 2012 .
  48. ^ «Обучение с F #» . Проверено 25 ноября 2012 .
  49. ^ «Работа F # в социальных играх Facebook» . Проверено 25 ноября 2012 .
  50. ^ «Создание сценариев на F #» . Проверено 17 января 2020 .

Ссылки [ править ]

  • Сайм, Дон ; Гранич, Адам; Чистернино, Антонио (2007), Эксперт F # , Apress
  • Харроп, Джон (2010), Visual F # 2010 для технических вычислений , Flying Frog Consultancy
  • Пикеринг, Роберт (2007), Основы F # , Apress
  • Смит, Крис (2009), Программирование F # , О'Рейли
  • Петричек, Томас (2009), Функциональное программирование в реальном мире с примерами на F # и C # , Manning Publications
  • Хансен, Майкл; Ришель, Ханс (2013), Функциональное программирование с использованием F # , Cambridge University Press
  • Астборг, Йохан (2013), F # для количественных финансов , Packt Publishing
  • Лундин, Микаэль (2015), Тестирование с F # , Packt Publishing

Внешние ссылки [ править ]

  • Официальный сайт The F # Software Foundation
  • Группа открытого исходного кода F # на GitHub
  • Центр разработчиков Visual F #
  • Tsunami, встраиваемая среда разработки F # для рабочего стола
  • Cloud Tsunami, встраиваемая среда Silverlight F #
  • Попробуйте F # для изучения F # в веб-браузере
  • Сайт F # Snippets
  • Блог команды разработчиков Visual F #
  • Исходный веб-сайт Microsoft Research для F #
  • Планета F #
  • The F # Survival Guide, декабрь 2009 г. (Интернет-книга)
  • Спецификация языка F #
  • Введение в программирование на F #
  • Учебное пособие, показывающее процесс создания функционального дизайна; включает тестовое и параллельное кодирование