Фа Шарп (язык программирования)
Парадигмы | Мультипарадигмальность : функциональная , императивная , объектно-ориентированная , агентно-ориентированная , метапрограммирование , рефлексивная , параллельная. |
---|---|
Семья | ML : Caml : OCaml |
Разработано | Дон Сайм , Microsoft Research |
Разработчик | Microsoft , Фонд программного обеспечения F# |
Впервые появился | 2005 г | , версия 1.0
Стабильная версия | 8.0.0
/ 14 ноября 2023 г |
Дисциплина набора текста | Статический , сильный , предполагаемый |
ТЫ | Кроссплатформенность : .NET Framework, Mono. |
Лицензия | С [ 1 ] [ 2 ] |
Расширения имен файлов | .fs, .fsi, .fsx, .fsscript |
Веб-сайт | fsharp
|
Под влиянием | |
С# , Эрланг , Хаскелл , [ 3 ] ML , OCaml , [ 4 ] [ 5 ] Питон , Скала | |
Под влиянием | |
С# , [ 6 ] Вяз , F* , LiveScript | |
|
F# (произносится как F Sharp ) — это общего назначения , высокоуровневый функциональные строго типизированный , многопарадигмальный язык программирования , который включает в себя , императивные и объектно -ориентированные методы программирования. Чаще всего он используется в качестве кроссплатформенного языка Common Language Infrastructure (CLI) в .NET , но также может генерировать JavaScript. [ 7 ] и код графического процессора (GPU). [ 8 ]
F# разработан F# Software Foundation , [ 9 ] Microsoft и открытые участники. Кроссплатформенный компилятор с открытым исходным кодом для F# доступен на сайте F# Software Foundation. [ 10 ] F# — полностью поддерживаемый язык в Visual Studio. [ 11 ] и JetBrains Rider . [ 12 ] Плагины, поддерживающие F#, существуют для многих широко используемых редакторов, включая Visual Studio Code , Vim и Emacs .
F# является членом семейства языков ML и возник как реализация .NET Framework ядра языка программирования OCaml . [ 4 ] [ 5 ] На него также повлиял C# , Питон , Хаскель , [ 3 ] Скала и Эрланг .
История
[ редактировать ]Версии
[ редактировать ]Эволюция языка
[ редактировать ]F# использует открытый процесс разработки и проектирования. Процессом развития языка руководит Дон Сайм из Microsoft Research как пожизненный доброжелательный диктатор (BDFL) в разработке языка совместно с F# Software Foundation. Более ранние версии языка F# были разработаны Microsoft и Microsoft Research с использованием закрытого процесса разработки.
F# впервые был включен в Visual Studio в версии 2010 года , на том же уровне, что и Visual Basic (.NET) и C# (хотя и в качестве опции), и остается во всех более поздних выпусках, что делает язык широко доступным и хорошо поддерживаемым.
F# создан Microsoft Research, Кембридж, Великобритания. Первоначально язык был разработан и реализован Доном Саймом . [ 4 ] По словам кого-то в команде fsharp, буква F означает «веселье». [ 36 ] Эндрю Кеннеди внес свой вклад в разработку единиц измерения . [ 4 ] Инструменты Visual F# для Visual Studio разработаны Microsoft. [ 4 ] F# Software Foundation разработал компилятор и инструменты F# с открытым исходным кодом, включающие реализацию компилятора с открытым исходным кодом, предоставленную командой Microsoft Visual F# Tools. [ 9 ]
Ф# версия |
Добавлены функции |
---|---|
1.0 |
|
2.0 |
|
3.0 [ 37 ] |
|
3.1 [ 38 ] |
|
4.0 [ 39 ] |
|
4.1 [ 40 ] |
|
4.5 [ 28 ] |
|
4.6 |
|
4.7 [ 41 ] |
|
5.0 [ 42 ] |
|
6.0 [ 43 ] |
|
7.0 [ 44 ] |
|
8.0 [ 45 ] |
|
Обзор языка
[ редактировать ]Функциональное программирование
[ редактировать ]F# — это строго типизированный функциональный язык с большим количеством возможностей, которые обычно встречаются только в функциональных языках программирования, но при этом поддерживающий объектно-ориентированные функции, доступные в C#. В совокупности эти функции позволяют писать программы на F# в полностью функциональном стиле, а также позволяют смешивать функциональные и объектно-ориентированные стили.
Примеры функциональных особенностей:
- Все есть выражение
- Вывод типа (с использованием вывода типа Хиндли-Милнера )
- Выполняет функции первоклассных граждан
- Анонимные функции с захватом семантики (т. е. замыканиями ).
- Неизменяемые переменные и объекты
- ленивых оценок Поддержка
- Функции высшего порядка
- Вложенные функции
- каррирование
- Сопоставление с образцом
- Алгебраические типы данных
- Кортежи
- Понимание списка
- монад Поддержка шаблонов (называемых выражениями вычислений). [ 47 ] )
- Оптимизация хвостового вызова [ 48 ]
F# — это язык, основанный на выражениях, использующий нетерпеливую оценку , а также в некоторых случаях ленивую оценку . Каждый оператор в F#,
включая if
выражения, try
выражения и циклы — это составное выражение статического типа. [ 49 ] Функции и выражения, которые не возвращают никакого значения, имеют тип возвращаемого значения: unit
. F# использует let
ключевое слово для привязки значений к имени. [ 49 ] Например:
let x = 3 + 4
связывает значение 7
к имени x
.
Новые типы определяются с помощью type
ключевое слово. Для функционального программирования F# предоставляет типы кортеж , запись , дискриминируемое объединение , список , параметр и результат . [ 49 ] Кортеж представляет собой набор из n значений, где n ≥ 0. Значение n называется арностью кортежа. Тройной кортеж будет представлен как (A, B, C)
, где A, B и C — значения, возможно, разных типов. Кортеж можно использовать для хранения значений только в том случае, если количество значений известно во время разработки и остается постоянным во время выполнения.
Запись — это тип, в котором элементы данных имеют имена. Вот пример определения записи:
type R =
{ Name : string
Age : int }
Записи могут создаваться как let r = { Name="AB"; Age=42
}. with
Ключевое слово используется для создания копии записи, как в { r with Name="CD"
}, который создает новую запись путем копирования r
и изменение стоимости Name
поле (при условии, что запись, созданная в последнем примере, имела имя r
).
Тип дискриминируемого объединения это типобезопасная версия объединений C. — Например,
type A =
| UnionCaseX of string
| UnionCaseY of int
Значения типа объединения могут соответствовать любому случаю объединения. Типы значений, переносимых каждым случаем объединения, включены в определение каждого случая.
Тип списка — это неизменяемый связанный список , представленный либо с помощью head::tail
обозначение ( ::
является оператором cons ) или сокращением, например [item1; item2; item3]
. Пишется пустой список []
. Тип опции представляет собой дискриминируемый тип объединения с вариантами выбора. Some(x)
или None
. Типы F# могут быть универсальными , реализованными как универсальные типы .NET.
F# поддерживает лямбда-функции и замыкания . [ 49 ] Все функции в F# являются значениями первого класса и неизменяемы. [ 49 ] Функции могут быть каррированы . Будучи значениями первого класса, функции могут передаваться в качестве аргументов другим функциям. Как и другие языки функционального программирования, F# допускает композицию функций с использованием >>
и <<
операторы.
F# обеспечивает выражения последовательности [ 50 ] которые определяют последовательность seq { ... }
, список [ ... ]
или массив [| ... |]
через код, который генерирует значения. Например,
seq { for b in 0 .. 25 do
if b < 15 then
yield b*b }
формирует последовательность квадратов чисел от 0 до 14 путем фильтрации чисел из диапазона чисел от 0 до 25. Последовательности являются генераторами – значения генерируются по требованию (т. е. лениво оцениваются ) – в то время как списки и массивы оцениваются с нетерпением .
F# использует сопоставление с образцом для привязки значений к именам. Сопоставление с образцом также используется при доступе к распознаваемым объединениям: объединение — это значение, сопоставленное с правилами шаблона, и правило выбирается в случае успешного сопоставления. F# также поддерживает активные шаблоны как форму расширяемого сопоставления шаблонов. [ 51 ] Он используется, например, когда существует несколько способов сопоставления типа. [ 49 ]
F# поддерживает общий синтаксис для определения композиционных вычислений, называемый выражения вычислений . Выражения последовательности, асинхронные вычисления и запросы представляют собой особые виды вычислительных выражений. Вычислительные выражения являются реализацией шаблона монады . [ 50 ]
Императивное программирование
[ редактировать ]Поддержка F# для императивного программирования включает в себя
for
петлиwhile
петли- массивы , созданные с помощью
[| ... |]
синтаксис - хеш-таблица , созданная с помощью
dict [ ... ]
синтаксис илиSystem.Collections.Generic.Dictionary<_,_>
тип.
Значения и поля записи также можно пометить как mutable
. Например:
// Define 'x' with initial value '1'
let mutable x = 1
// Change the value of 'x' to '3'
x <- 3
Кроме того, F# поддерживает доступ ко всем типам и объектам CLI, например тем, которые определены в System.Collections.Generic
пространство имен, определяющее императивные структуры данных.
Объектно-ориентированное программирование
[ редактировать ]Как и другие языки Common Language Infrastructure (CLI), F# может использовать типы CLI посредством объектно-ориентированного программирования. [ 49 ] Поддержка 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
- Активные шаблоны, которые можно определить для типов объектов. [ 51 ]
Определения типов объектов F# могут быть определениями классов, структур, интерфейсов, перечислений или делегатов, что соответствует формам определений, найденным в C# . Например, вот класс с конструктором, принимающим имя и возраст и объявляющим два свойства.
/// A simple object type definition
type Person(name : string, age : int) =
member x.Name = name
member x.Age = age
Асинхронное программирование
[ редактировать ]F# поддерживает асинхронное программирование посредством асинхронных рабочих процессов . [ 52 ] Асинхронный рабочий процесс определяется как последовательность команд внутри async{ ... }
, как в
let asynctask =
async { let req = WebRequest.Create(url)
let! response = req.GetResponseAsync()
use stream = response.GetResponseStream()
use streamreader = new System.IO.StreamReader(stream)
return streamreader.ReadToEnd() }
The let!
указывает, что выражение справа (получение ответа) должно выполняться асинхронно, но поток должен продолжаться только тогда, когда результат доступен. Другими словами, с точки зрения блока кода получение ответа — это как бы блокирующий вызов, тогда как с точки зрения системы поток не будет заблокирован и может использоваться для обработки других потоков. до тех пор, пока не станет доступен необходимый для этого результат.
Асинхронный блок можно вызвать с помощью Async.RunSynchronously
функция. Несколько асинхронных блоков могут выполняться параллельно с помощью Async.Parallel
функция, которая принимает список async
объекты (в примере asynctask
является асинхронным объектом) и создает другой асинхронный объект для параллельного выполнения задач в списках. Результирующий объект вызывается с помощью Async.RunSynchronously
. [ 52 ]
Инверсия управления в F# соответствует этому шаблону. [ 52 ]
Начиная с версии 6.0, F# поддерживает непосредственное создание, использование и возврат задач .NET. [ 53 ]
open System.Net.Http
let fetchUrlAsync (url:string) = // string -> Task<string>
task {
use client = new HttpClient()
let! response = client.GetAsync(url)
let! content = response.Content.ReadAsStringAsync()
do! Task.Delay 500
return content
}
// Usage
let fetchPrint() =
let task = task {
let! data = fetchUrlAsync "https://example.com"
printfn $"{data}"
}
task.Wait()
Параллельное программирование
[ редактировать ]Параллельное программирование частично поддерживается через Async.Parallel
, Async.Start
и другие операции, которые параллельно запускают асинхронные блоки.
Параллельное программирование также поддерживается через Array.Parallel
операторы функционального программирования в стандартной библиотеке F#, прямое использование System.Threading.Tasks
модель программирования задач, прямое использование пула потоков .NET и потоков .NET, а также динамическая трансляция кода F # в альтернативные механизмы параллельного выполнения, такие как графический процессор. [ 8 ] код.
Единицы измерения
[ редактировать ]Система типов F# поддерживает проверку единиц измерения чисел. [ 54 ]
В F# вы можете назначать единицы измерения, такие как метры или килограммы, целым числам без знака с плавающей запятой. [ 55 ] и целочисленные значения со знаком. Это позволяет компилятору проверять, что арифметика, включающая эти значения, является размерной согласованностью, помогая предотвратить распространенные ошибки программирования, гарантируя, что, например, длины не будут ошибочно добавлены к временам.
Функция единиц измерения интегрируется с выводом типа F#, что требует минимального количества аннотаций типов в пользовательском коде. [ 56 ]
[<Measure>] type m // meter
[<Measure>] type s // second
let distance = 100.0<m> // float<m>
let time = 5.0<s> // float<s>
let speed = distance/time // float<m/s>
[<Measure>] type kg // kilogram
[<Measure>] type N = (kg * m)/(s^2) // Newtons
[<Measure>] type Pa = N/(m^2) // Pascals
[<Measure>] type days
let better_age = 3u<days> // uint<days>
Средство проверки статического типа F# предоставляет эту функцию во время компиляции, но модули удаляются из скомпилированного кода. Следовательно, невозможно определить единицу измерения во время выполнения.
Metaprogramming
[ редактировать ]F# допускает некоторые формы настройки синтаксиса посредством метапрограммирования для поддержки встраивания пользовательских языков, специфичных для предметной области, в язык F#, в частности, посредством вычислительных выражений. [ 49 ]
F# включает функцию метапрограммирования во время выполнения, называемую кавычками. [ 57 ] Выражение кавычки оценивается как представление абстрактного синтаксического дерева выражений F#. Аналогично, определения, помеченные знаком [<ReflectedDefinition>]
Доступ к атрибуту также можно получить в форме цитаты. Кавычки F# используются для различных целей, в том числе для компиляции кода F# в JavaScript. [ 7 ] и графический процессор [ 8 ] код. Кавычки представляют выражения кода F# в качестве данных для использования другими частями программы, требуя при этом синтаксически правильного кода F#.
Информационное программирование
[ редактировать ]В F# 3.0 появилась форма метапрограммирования во время компиляции посредством статически расширяемой генерации типов, называемая поставщиками типов F#. [ 58 ] Поставщики типов F# позволяют расширять компилятор и инструменты F# с помощью компонентов, которые предоставляют информацию о типе компилятору по требованию во время компиляции. Поставщики типов F# использовались для предоставления строго типизированного доступа к подключенным источникам информации масштабируемым способом, в том числе к графу знаний Freebase . [ 59 ]
В F# 3.0 функции кавычек F# и вычислительных выражений объединены для реализации запросов LINQ . [ 60 ] Например:
// Use the OData type provider to create types that can be used to access the Northwind database.
open Microsoft.FSharp.Data.TypeProviders
type Northwind = ODataService<"http://services.odata.org/Northwind/Northwind.svc">
let db = Northwind.GetDataContext()
// A query expression.
let query1 = query { for customer in db.Customers do
select customer }
Сочетание поставщиков типов, запросов и строго типизированного функционального программирования известно как информационно насыщенное программирование . [ 61 ]
Агентское программирование
[ редактировать ]F# поддерживает вариант модели программирования актеров посредством реализации в памяти облегченных асинхронных агентов. Например, следующий код определяет агента и отправляет 2 сообщения:
type Message =
| Enqueue of string
| Dequeue of AsyncReplyChannel<Option<string>>
// Provides concurrent access to a list of strings
let listManager = MailboxProcessor.Start(fun inbox ->
let rec messageLoop list = async {
let! msg = inbox.Receive()
match msg with
| Enqueue item ->
return! messageLoop (item :: list)
| Dequeue replyChannel ->
match list with
| [] ->
replyChannel.Reply None
return! messageLoop list
| head :: tail ->
replyChannel.Reply (Some head)
return! messageLoop tail
}
// Start the loop with an empty list
messageLoop []
)
// Usage
async {
// Enqueue some strings
listManager.Post(Enqueue "Hello")
listManager.Post(Enqueue "World")
// Dequeue and process the strings
let! str = listManager.PostAndAsyncReply(Dequeue)
str |> Option.iter (printfn "Dequeued: %s")
}
|> Async.Start
Инструменты разработки
[ редактировать ]- Visual Studio с установленными инструментами Visual F# от Microsoft можно использовать для создания, запуска и отладки проектов F#. Инструменты Visual F# включают интерактивную консоль цикла чтения-оценки-печати (REPL), размещенную в Visual Studio, которая может выполнять код F# по мере его написания. Visual Studio для Mac также полностью поддерживает проекты F#.
- Visual Studio Code содержит полную поддержку F# через расширение Ionide .
- F# можно разрабатывать с помощью любого текстового редактора. Особая поддержка существует в таких редакторах, как Emacs .
- JetBrains Rider оптимизирован для разработки кода F#, начиная с версии 2019.1. [ 62 ]
- LINQPad поддерживает F# начиная с версии 2.x. [ чей? ]
Сравнение интегрированных сред разработки
[ редактировать ]ИДЕТ | Лицензия | Окна | Линукс | macOS | Разработчик |
---|---|---|---|---|---|
Майкрософт Визуал Студия | Собственный (стандартный) Бесплатное ПО (версия сообщества) |
Да | Нет | Да | Майкрософт |
Код Visual Studio [ 63 ] | Собственный ( двоичный код ) Лицензия MIT ( исходный код ) |
Да | Да | Да | Майкрософт |
Райдер [ 64 ] | Собственный | Да | Да | Да | JetBrains |
Области применения
[ редактировать ]F# — язык программирования общего назначения .
Веб-программирование
[ редактировать ]SAFE Stack — это комплексный стек F# для разработки веб-приложений. Он использует ASP.NET Core на стороне сервера и Fable на стороне клиента. [ 65 ]
Альтернативным вариантом сквозного F# является платформа WebSharper . [ 66 ]
Разработка кроссплатформенных приложений
[ редактировать ]F# можно использовать вместе с инструментами Visual Studio для Xamarin для разработки приложений для iOS и Android . Библиотека Fabulous предоставляет более удобный функциональный интерфейс.
Аналитическое программирование
[ редактировать ]Помимо прочего, F# используется для количественного финансового программирования, [ 67 ] торговля энергией и оптимизация портфеля, [ 68 ] машинное обучение, [ 69 ] бизнес-аналитика [ 70 ] и социальные игры на Facebook . [ 71 ]
В 2010-х годах F# позиционировался как оптимизированная альтернатива C# . Возможности написания сценариев F# и межъязыковая совместимость со всеми продуктами Microsoft сделали его популярным среди разработчиков. [ 72 ]
Сценарии
[ редактировать ]F# можно использовать в качестве языка сценариев, в основном для сценариев цикла чтения-оценки-печати (REPL) на рабочем столе. [ 73 ]
Сообщество открытого исходного кода
[ редактировать ]F# Сообщество открытого исходного кода включает F# Software Foundation. [ 9 ] и группа открытого исходного кода F# на GitHub . [ 10 ] Популярные проекты F# с открытым исходным кодом включают:
- Fable — транспилятор F# в Javascript, основанный на Babel .
- Paket — альтернативный менеджер пакетов для .NET, который по-прежнему может использовать репозитории NuGet , но имеет централизованное управление версиями.
- FAKE — дружественная к F# система сборки.
- Giraffe — функционально-ориентированное промежуточное ПО для ASP.NET Core .
- Suave — легкий веб-сервер и библиотека веб-разработки.
Совместимость
[ редактировать ]F# имеет устаревший «режим совместимости с ML», который позволяет напрямую компилировать программы, написанные на большом подмножестве OCaml, грубо говоря, без каких-либо функторов, объектов, полиморфных вариантов или других дополнений.
Примеры
[ редактировать ]Ниже приведены несколько небольших примеров:
// This is a comment for a sample hello world program.
printfn "Hello World!"
Определение типа записи. Записи по умолчанию неизменяемы и сравниваются по структурному равенству.
type Person = {
FirstName: string
LastName: string
Age: int
}
// Creating an instance of the record
let person = { FirstName = "John"; LastName = "Doe"; Age = 30 }
Класс Person с конструктором, принимающим имя и возраст, а также двумя неизменяемыми свойствами.
/// This is a documentation comment for a type definition.
type Person(name : string, age : int) =
member x.Name = name
member x.Age = age
/// class instantiation
let mrSmith = Person("Smith", 42)
Простой пример, который часто используется для демонстрации синтаксиса функциональных языков, — это функция факториала для неотрицательных 32-битных целых чисел, показанная здесь на F#:
/// Using pattern matching expression
let rec factorial n =
match n with
| 0 -> 1
| _ -> n * factorial (n - 1)
/// For a single-argument functions there is syntactic sugar (pattern matching function):
let rec factorial = function
| 0 -> 1
| n -> n * factorial (n - 1)
/// Using fold and range operator
let factorial n = [1..n] |> Seq.fold (*) 1
Примеры итераций:
/// Iteration using a 'for' loop
let printList lst =
for x in lst do
printfn $"{x}"
/// Iteration using a higher-order function
let printList2 lst =
List.iter (printfn "%d") lst
/// Iteration using a recursive function and pattern matching
let rec printList3 lst =
match lst with
| [] -> ()
| h :: t ->
printfn "%d" h
printList3 t
Примеры Фибоначчи:
/// Fibonacci Number formula
[<TailCall>]
let fib n =
let rec g n f0 f1 =
match n with
| 0 -> f0
| 1 -> f1
| _ -> g (n - 1) f1 (f0 + f1)
g n 0 1
/// Another approach - a lazy infinite sequence of Fibonacci numbers
let fibSeq = Seq.unfold (fun (a,b) -> Some(a+b, (b, a+b))) (0,1)
// Print even fibs
[1 .. 10]
|> List.map fib
|> List.filter (fun n -> (n % 2) = 0)
|> printList
// Same thing, using a list expression
[ for i in 1..10 do
let r = fib i
if r % 2 = 0 then yield r ]
|> printList
Пример программы Windows Forms:
// Open the Windows Forms library
open System.Windows.Forms
// Create a window and set a few properties
let form = new Form(Visible=true, TopMost=true, Text="Welcome to F#")
// Create a label to show some text in the form
let label =
let x = 3 + (4 * 5)
new Label(Text = $"{x}")
// Add the label to the form
form.Controls.Add(label)
// Finally, run the form
[<System.STAThread>]
Application.Run(form)
Пример асинхронного параллельного программирования (параллельные задачи ЦП и ввода-вывода):
/// A simple prime number detector
let isPrime (n:int) =
let bound = int (sqrt (float n))
seq {2 .. bound} |> Seq.forall (fun x -> n % x <> 0)
// We are using async workflows
let primeAsync n =
async { return (n, isPrime n) }
/// Return primes between m and n using multiple threads
let primes m n =
seq {m .. n}
|> Seq.map primeAsync
|> Async.Parallel
|> Async.RunSynchronously
|> Array.filter snd
|> Array.map fst
// Run a test
primes 1000000 1002000
|> Array.iter (printfn "%d")
См. также
[ редактировать ]Примечания
[ редактировать ]- ^ «Лицензия F# Software Foundation» . Гитхаб . 14 октября 2021 г.
- ^ «Лицензия Microsoft F#» . Гитхаб . 16 октября 2021 г.
- ^ Jump up to: а б Сайм, Гранич и Чистернино (2007 :2)
- ^ Jump up to: а б с д и «Исторические признания F #» . Майкрософт .
- ^ Jump up to: а б Сайм, Дон (2006). «Использование компонентов метапрограммирования .NET из F #» .
[F#] основан на дизайне Core ML и, в частности, имеет основной язык, в значительной степени совместимый с языком OCaml.
- ^ для асинхронности
- ^ Jump up to: а б с д и ж г час я дж к л Фонд программного обеспечения F#. «Использование F# для веб-приложений» . Проверено 30 июля 2020 г.
- ^ Jump up to: а б с д и ж г час я дж к л м Фонд программного обеспечения F#. «Использование F# для программирования графического процессора» . Архивировано из оригинала 25 декабря 2019 г. Проверено 25 декабря 2019 г.
- ^ Jump up to: а б с Фонд программного обеспечения F#. «Фонд программного обеспечения F#» . Проверено 24 ноября 2012 г.
- ^ Jump up to: а б Фонд программного обеспечения F#. «Компилятор F# (версия с открытым исходным кодом) @ github» . Проверено 24 ноября 2012 г.
- ^ «Разработка с помощью Visual F# в Visual Studio» . Проверено 30 июля 2020 г.
- ^ «Ф#» . Проверено 30 июля 2020 г.
- ^ Сайм, Дон. «Выпущен F# 1.0.8» . Майкрософт . Проверено 7 сентября 2014 г.
- ^ Сайм, Дон. «F# 2.0 выпущен как часть Visual Studio 2010» . Майкрософт . Проверено 7 сентября 2014 г.
- ^ Зандер, Джейсон. «Visual Studio 2012 и .NET Framework 4.5 выпущены в Интернете» . Майкрософт . Проверено 7 сентября 2014 г.
- ^ «Visual Studio 2013 выпущена для Интернета» . Майкрософт . Проверено 7 сентября 2014 г.
- ^ «Анонс окончательной первоначальной версии Visual F# 4.0» . Майкрософт . Проверено 15 сентября 2015 г.
- ^ «Анонс F# 4.1 и инструментов Visual F# для Visual Studio 2017» . Проверено 8 марта 2017 г.
- ^ «Анонсируем F# 4.5» . Майкрософт. 14 августа 2018 года . Проверено 14 августа 2018 г.
- ^ «FSharp.Core 4.5.0» .
- ^ «Загрузить .NET Core 2.1 (Linux, macOS и Windows)» . Майкрософт . Проверено 13 мая 2021 г.
- ^ «Анонсируем F# 4.6» . Майкрософт. 29 марта 2019 года . Проверено 29 марта 2019 г.
- ^ «FSharp.Core 4.6.0» .
- ^ «Загрузить .NET Core 2.2 (Linux, macOS и Windows)» . Майкрософт . Проверено 13 мая 2021 г.
- ^ «Анонсируем F# 4.7» . Майкрософт. 23 сентября 2019 г. Проверено 23 сентября 2019 г.
- ^ «FSharp.Core 4.7.0» .
- ^ «Загрузить .NET Core 3.0 (Linux, macOS и Windows)» . Майкрософт . Проверено 13 мая 2021 г.
- ^ Jump up to: а б «Анонсируем F#5» . 10 ноября 2020 г.
- ^ «Загрузить .NET 5.0 (Linux, macOS и Windows)» . Майкрософт . Проверено 13 мая 2021 г.
- ^ «F#6 официально здесь!» . 9 ноября 2021 г.
- ^ «Загрузить .NET 6.0 (Linux, macOS и Windows)» . Майкрософт . Проверено 14 ноября 2021 г.
- ^ «Анонсируем F#7» . 8 ноября 2022 г.
- ^ «Загрузить .NET 7.0 (Linux, macOS и Windows)» . Майкрософт . Проверено 8 ноября 2022 г.
- ^ «Анонсируем F#8» . 14 ноября 2023 г.
- ^ «Загрузить .NET 8.0 (Linux, macOS и Windows)» . Майкрософт . Проверено 14 ноября 2023 г.
- ^ Эдвардс, Кэтрин (23 декабря 2008 г.). «А-Я языков программирования: F#» . Сетевой мир . ИДГ. Архивировано из оригинала 13 ноября 2018 года . Проверено 8 августа 2016 г.
- ^ Макнамара, Брайан. «Подробнее о возможностях языка F# 3.0» . Майкрософт . Проверено 7 сентября 2014 г.
- ^ Макнамара, Брайан. «Анонсируем предварительный выпуск F# 3.1» . Майкрософт . Проверено 7 сентября 2014 г.
- ^ «Анонс окончательной первоначальной версии Visual F# 4.0» . Проверено 8 марта 2017 г.
- ^ «Анонс F# 4.1 и инструментов Visual F# для Visual Studio 2017» . Проверено 8 марта 2017 г.
- ^ «Анонсируем F# 4.7» . 23 сентября 2019 г.
- ^ «Анонсируем F#5» . 10 ноября 2020 г.
- ^ «Что нового в F#6 — Руководство по F#» . 10 марта 2023 г.
- ^ «Анонсируем F#7» . 8 ноября 2022 г.
- ^ «Анонсируем F#8» . 14 ноября 2023 г.
- ^ «Упрощение вычислений F# с помощью нового оператора while!» ключевое слово' " . 20 сентября 2023 г.
- ^ «Программирование/вычислительные выражения F Sharp — Wikibooks, открытые книги для открытого мира» . ru.wikibooks.org . Проверено 21 января 2022 г.
- ^ кексугит (8 июля 2011 г.). «Хвостовые вызовы в F#» . docs.microsoft.com . Проверено 22 апреля 2022 г.
- ^ Jump up to: а б с д и ж г час «Обзор языка F #» (PDF) . Проверено 14 декабря 2007 г.
- ^ Jump up to: а б «Некоторые подробности о вычислительных выражениях F#» . Проверено 14 декабря 2007 г.
- ^ Jump up to: а б «Сопоставление с образцом в F#, часть 2: Активные шаблоны» . Архивировано из оригинала 9 декабря 2012 г. Проверено 24 ноября 2012 г.
- ^ Jump up to: а б с «Знакомство с асинхронными рабочими процессами F#» . Проверено 14 декабря 2007 г.
- ^ «Выражения задач» . 19 апреля 2022 г. Проверено 15 января 2023 г.
- ^ «Единицы измерения (F#)» . Проверено 24 ноября 2012 г.
- ^ «Расширить единицы измерения, включив в них больше числовых типов» . Гитхаб .
- ^ «Единицы измерения в F#: Часть первая, Знакомство с единицами измерения» . Проверено 24 ноября 2012 г.
- ^ «Кодовые котировки (F#)» . Проверено 24 ноября 2012 г.
- ^ «Поставщики типов» . Проверено 24 ноября 2012 г.
- ^ «Новый технический отчет от Microsoft Research: поддержка строго типизированного языка для источников информации в масштабе Интернета» . Проверено 24 ноября 2012 г.
- ^ «Выражения запроса (F#)» . Проверено 24 ноября 2012 г.
- ^ «F # 3.0 — Поставщики типов LINQ + = информационно насыщенное программирование» . Проверено 24 ноября 2012 г.
- ^ Александр Куракин (15 марта 2019 г.). «Rider 2019.1 запускает программу раннего доступа!» .
- ^ «Используйте F# в Windows» . Фонд программного обеспечения F# . Проверено 7 августа 2018 г.
- ^ «Особенности – Райдер» . ДжетБрэйнс . Проверено 7 августа 2018 г.
- ^ «Fable: JavaScript, которым можно гордиться!» . басня.io . Проверено 9 декабря 2017 г.
- ^ Интеллектуальная фабрика. «Домашняя страница WebSharper» . Проверено 24 ноября 2012 г.
- ^ «Примеры использования Microsoft: Microsoft Visual Studio 2012 — фирма, оказывающая финансовые услуги» . Майкрософт . Проверено 25 ноября 2012 г.
- ^ «F# для торговли энергией и оптимизации портфеля» . Проверено 25 ноября 2012 г.
- ^ «Пример Microsoft: страхование Grange» . Майкрософт . Проверено 25 ноября 2012 г.
- ^ Трелфорд, Фил (2007). «Обучение с F#» . Материалы 4-го семинара ACM SIGPLAN по коммерческим пользователям функционального программирования - CUFP '07 . стр. 1–2. дои : 10.1145/1362702.1362709 . ISBN 9781450378444 . S2CID 24018363 . Проверено 25 ноября 2012 г.
- ^ «Работа F# в социальных играх на Facebook» . Проверено 25 ноября 2012 г.
- ^ «Отзывы разработчиков F#» . Проверено 25 мая 2021 г.
- ^ «Написание сценариев на F#» . 12 сентября 2008 года . Проверено 17 января 2020 г.
Ссылки
[ редактировать ]- Сайм, Дон ; Гранич, Адам; Чистернино, Антонио (2007), Expert F # , Apress
- Харроп, Джон (2010), Visual F # 2010 для технических вычислений , консалтинговая компания Flying Frog
- Пикеринг, Роберт (2007), Основы F# , Apress
- Смит, Крис (2009), Программирование F# , О'Рейли
- Петричек, Томас (2009), Функциональное программирование в реальном мире с примерами на F # и C # , Manning Publications
- Хансен, Майкл; Ришель, Ганс (2013), Функциональное программирование с использованием F # , Cambridge University Press
- Астборг, Йохан (2013), F # для количественных финансов , Packt Publishing
- Лундин, Микаэль (2015), Тестирование с помощью F # , Packt Publishing
Внешние ссылки
[ редактировать ]- Официальный сайт Фонда программного обеспечения F#
- Группа открытого исходного кода F# на GitHub
- Центр разработчиков Visual F #. Архивировано 19 ноября 2008 г. на Wayback Machine.
- Попробуйте F# для изучения F# в веб-браузере.
- Сайт фрагментов F#
- Блог группы Visual F#
- Оригинальный веб-сайт Microsoft Research по F #
- Руководство по выживанию на F#, декабрь 2009 г. (интернет-книга)
- Спецификация языка F#
- Введение в программирование на F#. Архивировано 13 июля 2011 г. на Wayback Machine.
- Учебное пособие, показывающее процесс создания функционального дизайна; включает в себя тестирование и параллельное кодирование
- Языки программирования .NET
- Кроссплатформенное бесплатное программное обеспечение
- Языки программирования высокого уровня
- Функциональные языки
- бесплатное программное обеспечение Майкрософт
- Языки программирования Майкрософт
- Microsoft Исследования
- Семейство языков программирования ML
- Семейство языков программирования OCaml
- Языки программирования сопоставления шаблонов
- Языки программирования, созданные в 2005 году.
- Языки программирования, поддерживающие единицы измерения
- Программное обеспечение, использующее лицензию Apache
- Программное обеспечение, использующее лицензию MIT
- Статически типизированные языки программирования