Фа Шарп (язык программирования)
![]() | |
Парадигмы | Мультипарадигмальность : функциональная , императивная , объектно-ориентированная , агентно-ориентированная , метапрограммирование , рефлексивная , параллельная. |
---|---|
Семья | 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] Скала и Эрланг .
История [ править ]
Версии [ править ]
Ф# версия |
Спецификация языка | Дата | Платформы | Время выполнения |
---|---|---|---|---|
1.х | май 2005 г. [13] | Окна | .NET 1.0–3.5 | |
2.0 | август 2010 г. | апрель 2010 г. [14] | Linux , MacOS , Windows | .NET 2.0–4.0, моно |
3.0 | ноябрь 2012 г. | август 2012 г. [15] | Linux , MacOS , Windows ; JavaScript , [7] графический процессор [8] |
.NET 2.0–4.5, моно |
3.1 | Ноябрь 2013 | Октябрь 2013 [16] | Linux , MacOS , Windows ; JavaScript , [7] графический процессор [8] |
.NET 2.0–4.5, моно |
4.0 | Январь 2016 г. | июль 2015 г. [17] | ||
4.1 | май 2018 г. | Март 2017 г. [18] | Linux , MacOS , Windows , | .NET 3.5–4.6.2, .NET , моно |
4.5 | август 2018 г. [19] | Linux , MacOS , Windows , | .NET 4.5 – 4.7.2, [20] Пакет SDK для .NET Core 2.1.400 [21] | |
4.6 | март 2019 г. [22] | Linux , MacOS , Windows , | .NET 4.5 – 4.7.2, [23] Пакет SDK для .NET Core 2.2.300 [24] | |
4.7 | сентябрь 2019 г. [25] | Linux , MacOS , Windows , | .NET 4.5–4.8, [26] Пакет SDK для .NET Core 3.0.100 [27] | |
5.0 | ноябрь 2020 г. [28] | Linux , MacOS , Windows , | .NET SDK 5.0.100 [29] | |
6.0 | ноябрь 2021 г. [30] | Linux , MacOS , Windows , | .NET SDK 6.0.100 [31] | |
7.0 | ноябрь 2022 г. [32] | Linux , MacOS , Windows , | .NET SDK 7.0.100 [33] | |
8.0 | ноябрь 2023 г. [34] | Linux , MacOS , Windows , | .NET SDK 8.0.100 [35] |
Эволюция языка [ править ]
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] Например:
пусть х = 3 + 4
связывает значение 7
к имени x
.
Новые типы определяются с помощью type
ключевое слово. Для функционального программирования F# предоставляет типы кортеж , запись , дискриминируемое объединение , список , параметр и результат . [49] Кортеж представляет собой набор из n значений, где n ≥ 0. Значение n называется арностью кортежа. Тройной кортеж будет представлен как (A, B, C)
, где A, B и C — значения, возможно, разных типов. Кортеж можно использовать для хранения значений только в том случае, если количество значений известно во время разработки и остается постоянным во время выполнения.
Запись . — это тип, в котором элементы данных имеют имена Вот пример определения записи:
тип R =
{ Имя : строка
Возраст : int }
Записи могут создаваться как let r = { Name="AB"; Age=42
}. with
Ключевое слово используется для создания копии записи, как в { r with Name="CD"
}, который создает новую запись путем копирования r
и изменение стоимости Name
поле (при условии, что запись, созданная в последнем примере, имела имя r
).
Тип дискриминируемого объединения — это типобезопасная версия C. объединений Например,
тип А =
| UnionCaseX строки
| UnionCaseY 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 , то
получим b * b }
формирует последовательность квадратов чисел от 0 до 14 путем фильтрации чисел из диапазона чисел от 0 до 25. Последовательности являются генераторами – значения генерируются по требованию (т. е. лениво оцениваются ) – в то время как списки и массивы оцениваются с нетерпением .
F# использует сопоставление с образцом для привязки значений к именам. Сопоставление с образцом также используется при доступе к распознаваемым объединениям: объединение — это значение, сопоставленное с правилами шаблона, и правило выбирается в случае успешного сопоставления. F# также поддерживает активные шаблоны как форму расширяемого сопоставления шаблонов. [51] Он используется, например, когда существует несколько способов сопоставления типа. [49]
F# поддерживает общий синтаксис для определения композиционных вычислений, называемый выражения вычислений . Выражения последовательности, асинхронные вычисления и запросы представляют собой особые виды вычислительных выражений. Вычислительные выражения являются реализацией шаблона монады . [50]
Императивное программирование [ править ]
Поддержка 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 посредством объектно-ориентированного программирования. [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# . Например, вот класс с конструктором, принимающим имя и возраст и объявляющим два свойства.
/// Простое определение типа объекта
type Person ( name : string , age : int ) =
member x . Имя = имя
участника x . Возраст = возраст
Асинхронное программирование [ править ]
F# поддерживает асинхронное программирование посредством асинхронных рабочих процессов . [52] Асинхронный рабочий процесс определяется как последовательность команд внутри async{ ... }
, как в
пусть asynctask =
async { let req = WebRequest . Создайте ( url )
пусть! ответ = требование . GetResponseAsync ()
использует поток = ответ . GetResponseStream (
используйтеstreamreader = . new System ) ИО . StreamReader ( stream )
возвращает средство чтения потока . ReadToEnd () }
The let!
указывает, что выражение справа (получение ответа) должно выполняться асинхронно, но поток должен продолжаться только тогда, когда результат доступен. Другими словами, с точки зрения блока кода получение ответа — это как бы блокирующий вызов, тогда как с точки зрения системы поток не будет заблокирован и может использоваться для обработки других потоков. до тех пор, пока не станет доступен необходимый для этого результат.
Асинхронный блок можно вызвать с помощью Async.RunSynchronously
функция. Несколько асинхронных блоков могут выполняться параллельно с помощью Async.Parallel
функция, которая принимает список async
объекты (в примере asynctask
является асинхронным объектом) и создает другой асинхронный объект для параллельного выполнения задач в списках. Результирующий объект вызывается с помощью Async.RunSynchronously
. [52]
Инверсия управления в F# соответствует этому шаблону. [52]
Начиная с версии 6.0, F# поддерживает непосредственное создание, использование и возврат задач .NET. [53]
откройте System.Net.Http
let fetchUrlAsync ( url : string ) = // string -> Task<string>
Task {
use client = new HttpClient ()
let! ответ = клиент . GetAsync ( url )
пусть! контент = ответ . Содержание . ReadAsStringAsync ()
делаю ! Задача . Задержка 500
возврата содержимого
}
// Использование
let fetchPrint () =
let Task = Task {
let! data = fetchUrlAsync "https://example.com"
printfn $ "{data}"
}
Task . Ждать ()
Параллельное программирование [ править ]
Параллельное программирование частично поддерживается через Async.Parallel
, Async.Start
и другие операции, которые параллельно запускают асинхронные блоки.
Параллельное программирование также поддерживается через Array.Parallel
операторы функционального программирования в стандартной библиотеке F#, прямое использование System.Threading.Tasks
модель программирования задач, прямое использование пула потоков .NET и потоков .NET, а также динамическая трансляция кода F # в альтернативные механизмы параллельного выполнения, такие как графический процессор. [8] код.
Единицы измерения [ править ]
Система типов F# поддерживает проверку единиц измерения чисел. [54]
В F# вы можете назначать единицы измерения, такие как метры или килограммы, целым числам без знака с плавающей запятой. [55] и целочисленные значения со знаком. Это позволяет компилятору проверять, что арифметика, включающая эти значения, является размерной согласованностью, помогая предотвратить распространенные ошибки программирования, гарантируя, что, например, длины не будут ошибочно добавлены к временам.
Функция единиц измерения интегрируется с выводом типа F#, что требует минимального количества аннотаций типов в пользовательском коде. [56]
[< Measure >] type m // метр
[< Measure >] type s // секунда
let distance = 100 . 0 < m > // float<m>
let time = 5 . 0 < s > // float<s>
let скорость = расстояние / время // float<m/s>
[< Measure >] тип кг // килограмм
[< Measure >] тип N = ( кг * м )/( с ^ 2 ) // Ньютоны
[< Мера >] тип Pa = N /( m ^ 2 ) // Паскали
[< Мера >] тип дни
let Better_age = 3u < дни > // uint<дни>
Средство проверки статического типа F# предоставляет эту функцию во время компиляции, но модули удаляются из скомпилированного кода. Следовательно, невозможно определить единицу измерения во время выполнения.
Metaprogramming [ edit ]
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] Например:
// Используйте поставщика типов OData для создания типов, которые можно использовать для доступа к базе данных Northwind.
откройте Microsoft.FSharp.Data.TypeProviders
и введите Northwind = ODataService < "http://services.odata.org/Northwind/Northwind.svc" >
let db = Northwind . GetDataContext ()
// Выражение запроса.
пусть query1 = запрос { для клиента в БД . Клиенты выбирают
клиента }
Сочетание поставщиков типов, запросов и строго типизированного функционального программирования известно как информационно насыщенное программирование . [61]
Программирование агента [ править ]
F# поддерживает вариант модели программирования актеров посредством реализации в памяти облегченных асинхронных агентов. Например, следующий код определяет агента и отправляет 2 сообщения:
тип Сообщение =
| Очередь строк
| Удаление из очереди AsyncReplyChannel < Option < string >>
// Обеспечивает одновременный доступ к списку строк,
пусть listManager = MailboxProcessor . Start ( fun inbox ->
let Rec messageLoop list = async {
let! msg = inbox . Receive ()
сопоставить сообщение с
| в очередь Поставить элемент ->
вернуть ! messageLoop ( item :: list )
| Удалить из очереди AnswerChannel ->
совпадений список с
| [] ->
ReplyChannel . Reply None
return ! messageLoop list
| head :: Tail ->
ReplyChannel . Reply ( Some head )
return ! messageLoop Tail
}
// Запускаем цикл с пустым списком
messageLoop []
)
// Использование
async {
// Постановка в очередь некоторые строки
listManager . Опубликовать ( поставить в очередь «Привет» )
listManager . Post ( Enqueue "World" )
// Извлекаем из очереди и обрабатываем строки
let! стр = Менеджер списка . PostAndAsyncReply ( Dequeue )
str |> Option . iter ( printfn «Из очереди: %s» )
}
|> Async . Начинать
Инструменты разработки [ править ]
- 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, грубо говоря, без каких-либо функторов, объектов, полиморфных вариантов или других дополнений.
Примеры [ править ]
Ниже приведены несколько небольших примеров:
// Это комментарий к примеру программы hello world.
printfn «Привет, мир!»
Определение типа записи. Записи по умолчанию неизменяемы и сравниваются по структурному равенству.
type Person = {
FirstName : string
LastName : string
Age : int
}
// Создание экземпляра записи
let person = { FirstName = "John" ; Фамилия = "Доу" ; Возраст = 30 }
Класс Person с конструктором, принимающим имя и возраст, а также двумя неизменяемыми свойствами.
/// Это комментарий документации к определению типа.
введите Person ( имя : строка , возраст : int ) =
член x . Имя = имя
участника x . Age = age
/// создание экземпляра класса
let mrSmith = Person ( "Smith" , 42 )
Простой пример, который часто используется для демонстрации синтаксиса функциональных языков, — это функция факториала для неотрицательных 32-битных целых чисел, показанная здесь на F#:
/// Используя выражение сопоставления с образцом,
пусть Rec Factorial n =
соответствует n с
| 0 -> 1
| _ -> n * Factorial ( n - 1 )
/// Для функций с одним аргументом существует синтаксический сахар (функция сопоставления с образцом):
let Rec factial = function
| 0 -> 1
| n -> n * факториал ( n - 1 )
/// Используя оператор свертки и диапазона,
пусть факториал n = [ 1 .. n ] |> Seq . сложить (*) 1
Примеры итераций:
/// Итерация с использованием цикла
for let printList lst =
for x in lst do
printfn $ "{x}"
/// Итерация с использованием функции высшего порядка
let printList2 lst =
List . iter ( printfn "%d" ) lst
/// Итерация с использованием рекурсивной функции и сопоставления с образцом
let Rec printList3 lst =
match lst with
| [] -> ()
| h :: t ->
printfn "%d" h
printList3 t
Примеры Фибоначчи:
/// Формула числа Фибоначчи
[< TailCall >]
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 ]
|> List . карта фиб
|> Список . filter ( fun n -> ( n % 2 ) = 0 )
|> printList
// То же самое, используя выражение списка
[ for i in 1 .. 10 do
let r = fib i
if r % 2 = 0 then return r ]
|> список печати
Пример программы Windows Forms:
// Открываем библиотеку Windows Forms
open System.Windows.Forms
// Создаём окно и устанавливаем несколько свойств
let form = new Form ( Visible = true , TopMost = true , Text = «Welcome to F#» )
// Создаём метку чтобы отобразить текст в форме,
let label =
let x = 3 + ( 4 * 5 )
new Label ( Text = $ "{x}" )
// Добавляем метку в форму
form . Элементы управления . Добавить ( метка )
// Наконец, запустите форму
[< System . STAThread >]
Приложение . Запустить ( форма )
Пример асинхронного параллельного программирования (параллельные задачи ЦП и ввода-вывода):
Простой детектор простых чисел
isPrime ( n : int ) = letbound
= int ( } sqrt ( float n ) )
seq { 2 ..bound Seq let |> . /// forall ( fun x -> n % x <> 0 )
// Мы используем асинхронные рабочие процессы
let primeAsync n =
async { return ( n , isPrime n ) }
/// Возвращаем простые числа между m и n, используя несколько потоков
let primes m n =
seq { м .. n }
|> Seq . карта primeAsync
|> Async . Параллельный
|> Асинхронный . Запуститьсинхронно
|> Массив . фильтр snd
|> Массив . map fst
// Запуск теста
primes 1000000 1002000
|> Array . итер ( printfn "%d" )
См. также [ править ]
Примечания [ править ]
- ^ «Лицензия F# Software Foundation» . Гитхаб . 14 октября 2021 г.
- ^ «Лицензия Microsoft F#» . Гитхаб . 16 октября 2021 г.
- ^ Перейти обратно: а б Сайм, Гранич и Чистернино (2007 :2)
- ^ Перейти обратно: а б с д Это «Исторические признания F #» . Майкрософт .
- ^ Перейти обратно: а б Сайм, Дон (2006). «Использование компонентов метапрограммирования .NET из F #» .
[F#] основан на дизайне Core ML и, в частности, имеет основной язык, в значительной степени совместимый с языком OCaml.
- ^ для асинхронности
- ^ Перейти обратно: а б с д Это ж г час я дж к л Фонд программного обеспечения F#. «Использование F# для веб-приложений» . Проверено 30 июля 2020 г.
- ^ Перейти обратно: а б с д Это ж г час я дж к л м Фонд программного обеспечения F#. «Использование F# для программирования графического процессора» . Архивировано из оригинала 25 декабря 2019 г. Проверено 25 декабря 2019 г.
- ^ Перейти обратно: а б с Фонд программного обеспечения F#. «Фонд программного обеспечения F#» . Проверено 24 ноября 2012 г.
- ^ Перейти обратно: а б Фонд программного обеспечения 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 г.
- ^ Перейти обратно: а б «Анонсируем 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 г.
- ^ Перейти обратно: а б с д Это ж г час «Обзор языка F#» (PDF) . Проверено 14 декабря 2007 г.
- ^ Перейти обратно: а б «Некоторые подробности о вычислительных выражениях F#» . Проверено 14 декабря 2007 г.
- ^ Перейти обратно: а б «Сопоставление с образцом в F#, часть 2: Активные шаблоны» . Архивировано из оригинала 9 декабря 2012 г. Проверено 24 ноября 2012 г.
- ^ Перейти обратно: а б с «Знакомство с асинхронными рабочими процессами 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
Внешние ссылки [ править ]
![](http://upload.wikimedia.org/wikipedia/commons/thumb/d/df/Wikibooks-logo-en-noslogan.svg/40px-Wikibooks-logo-en-noslogan.svg.png)
- Официальный сайт Фонда программного обеспечения 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
- Статически типизированные языки программирования