~~~~~~~~~~~~~~~~~~~~ Arc.Ask3.Ru ~~~~~~~~~~~~~~~~~~~~~ 
Номер скриншота №:
✰ DBF86FED774BF0E3E007CD11B3C290BE__1717851360 ✰
Заголовок документа оригинал.:
✰ F Sharp (programming language) - Wikipedia ✰
Заголовок документа перевод.:
✰ F Sharp (язык программирования) — Википедия ✰
Снимок документа находящегося по адресу (URL):
✰ https://en.wikipedia.org/wiki/F_Sharp_(programming_language) ✰
Адрес хранения снимка оригинал (URL):
✰ https://arc.ask3.ru/arc/aa/db/be/dbf86fed774bf0e3e007cd11b3c290be.html ✰
Адрес хранения снимка перевод (URL):
✰ https://arc.ask3.ru/arc/aa/db/be/dbf86fed774bf0e3e007cd11b3c290be__translat.html ✰
Дата и время сохранения документа:
✰ 11.06.2024 06:00:46 (GMT+3, MSK) ✰
Дата и время изменения документа (по данным источника):
✰ 8 June 2024, at 15:56 (UTC). ✰ 

~~~~~~~~~~~~~~~~~~~~~~ Ask3.Ru ~~~~~~~~~~~~~~~~~~~~~~ 
Сервисы Ask3.ru: 
 Архив документов (Снимки документов, в формате HTML, PDF, PNG - подписанные ЭЦП, доказывающие существование документа в момент подписи. Перевод сохраненных документов на русский язык.)https://arc.ask3.ruОтветы на вопросы (Сервис ответов на вопросы, в основном, научной направленности)https://ask3.ru/answer2questionТоварный сопоставитель (Сервис сравнения и выбора товаров) ✰✰
✰ https://ask3.ru/product2collationПартнерыhttps://comrades.ask3.ru


Совет. Чтобы искать на странице, нажмите Ctrl+F или ⌘-F (для MacOS) и введите запрос в поле поиска.
Arc.Ask3.ru: далее начало оригинального документа

F Sharp (язык программирования) — Википедия Jump to content

Фа Шарп (язык программирования)

Из Википедии, бесплатной энциклопедии
Ф#
Парадигмы Мультипарадигмальность : функциональная , императивная , объектно-ориентированная , агентно-ориентированная , метапрограммирование , рефлексивная , параллельная.
Семья ML : Caml : OCaml
Разработано Дон Сайм , Microsoft Research
Разработчик Microsoft , Фонд программного обеспечения F#
Впервые появился 2005 г .; 19 лет назад ( 2005 ) , версия 1.0
Стабильная версия
8.0.0 / 14 ноября 2023 г .; 6 месяцев назад ( 14.11.2023 )
Дисциплина набора текста Статический , сильный , предполагаемый
ТЫ Кроссплатформенность : .NET Framework, Mono.
Лицензия С [1] [2]
Расширения имен файлов .fs, .fsi, .fsx, .fsscript
Веб-сайт fsharp .org


учиться .microsoft /en-нас /дотнет /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 ,

JavaScript , [7] графический процессор [8]

.NET 3.5–4.6.2, .NET , моно
4.5 август 2018 г. [19] Linux , MacOS , Windows ,

JavaScript , [7] графический процессор [8]

.NET 4.5 – 4.7.2, [20] Пакет SDK для .NET Core 2.1.400 [21]
4.6 март 2019 г. [22] Linux , MacOS , Windows ,

JavaScript , [7] графический процессор [8]

.NET 4.5 – 4.7.2, [23] Пакет SDK для .NET Core 2.2.300 [24]
4.7 сентябрь 2019 г. [25] Linux , MacOS , Windows ,

JavaScript , [7] графический процессор [8]

.NET 4.5–4.8, [26] Пакет SDK для .NET Core 3.0.100 [27]
5.0 ноябрь 2020 г. [28] Linux , MacOS , Windows ,

JavaScript , [7] графический процессор [8]

.NET SDK 5.0.100 [29]
6.0 ноябрь 2021 г. [30] Linux , MacOS , Windows ,

JavaScript , [7] графический процессор [8]

.NET SDK 6.0.100 [31]
7.0 ноябрь 2022 г. [32] Linux , MacOS , Windows ,

JavaScript , [7] графический процессор [8]

.NET SDK 7.0.100 [33]
8.0 ноябрь 2023 г. [34] Linux , MacOS , Windows ,

JavaScript , [7] графический процессор [8]

.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
  • Функциональное программирование
  • Дискриминированные профсоюзы
  • Рекорды
  • Кортежи
  • Сопоставление с образцом
  • Введите сокращения
  • Объектно-ориентированного программирования
  • Структуры
  • Файлы подписи
  • Файлы сценариев
  • Императивное программирование
  • Модули (без функций)
  • Вложенные модули
  • Совместимость .NET
2.0
  • Активные шаблоны
  • Единицы измерения
  • Выражения последовательности
  • Асинхронное программирование
  • Агентское программирование
  • Члены расширения
  • Именованные аргументы
  • Необязательные аргументы
  • Нарезка массива
  • Котировки
  • Встроенная совместимость
  • Выражения вычислений
3.0 [37]
  • Тип поставщиков
  • Выражения запроса LINQ
  • Атрибут CLImutable
  • Строки в тройных кавычках
  • Авто-свойства
  • Предоставленные единицы измерения
3.1 [38]
  • Поля именованных типов объединения
  • Расширения для нарезки массива
  • Улучшения вывода типов
4.0 [39]
  • Printf для унифицированных значений
  • Инициализаторы свойств расширения
  • Ненулевые предоставленные типы
  • Первичные конструкторы как функции
  • Статические параметры для предоставленных методов
  • Интерполяция печати
  • Расширенная грамматика #if
  • Атрибут хвостового вызова
  • Несколько экземпляров интерфейса
  • Необязательный тип аргументов
  • Словари параметров
4.1 [40]
  • Структурные кортежи, которые взаимодействуют с кортежами C#.
  • Структурные аннотации для записей
  • Структурные аннотации для однорегистровых дискриминируемых объединений
  • Подчеркивания в числовых литералах
  • Атрибуты аргумента информации о вызывающем абоненте
  • Тип результата и некоторые основные функции результата
  • Взаимно ссылочные типы и модули в одном файле
  • Неявный синтаксис «Модуль» для модулей с общим именем в качестве типа.
  • Возврат Byref, поддерживающий использование методов возврата ссылок C#.
  • Улучшения сообщений об ошибках
  • Поддержка «фиксированных»
4.5 [28]
  • Выравнивание версий двоичного файла, пакета и языка
  • Поддержка Span<T> и связанных типов.
  • Возможность получения возвратов по ссылке
  • Тип «voidptr»
  • Типы «inref<'T>» и «outref<'T>» для представления «byref» только для чтения и только для записи.
  • Структуры IsByRefLike
  • Структуры IsReadOnly
  • Поддержка методов расширения для 'byref<'T>'/'inref<'T>'/'outref<'T>'
  • 'соответствовать!' ключевое слово в выражениях вычислений
  • Расслабленное преобразование с «выходом» в выражениях F# seq/list/array.
  • Удобные отступы с помощью выражений списков и массивов.
  • Переписные дела объявлены общедоступными
4.6
  • Анонимные типы записей
4.7 [41]
  • Неявная доходность
  • Больше не требуется двойное подчеркивание
  • Уменьшение отступов для параметров, передаваемых конструкторам и статическим методам.
  • функция 'nameof'
  • Открытые статические классы
5.0 [42]
  • FSharp.Core теперь нацелен только на netstandard2.0.
  • Ссылки на пакеты в сценариях F#
  • Поддержка ноутбуков Jupyter, nteract и VSCode.
  • Строковая интерполяция
  • Поддержка имени
  • Объявления открытого типа
  • Улучшенная нарезка
  • Улучшения котировок F#
  • Прикладные вычислительные выражения
  • Улучшены трассировки стека в асинхронных выражениях F# и других вычислительных выражениях.
  • Улучшенное взаимодействие с .NET.
  • Улучшена производительность карт и наборов в FSharp.Core.
  • Улучшена производительность компилятора.
  • Улучшенный анализ компилятора для авторов библиотек.
6.0 [43]
  • Задания
  • Упрощенная индексация
  • Дополнения к «активным шаблонам»
  • Перегруженные пользовательские операции в выражениях вычислений.
  • шаблоны «как»
  • Изменения синтаксиса отступов
  • Больше неявных преобразований
  • Больше неявных преобразований с повышением уровня
  • Неявные целочисленные преобразования
  • Первоклассная поддержка неявных преобразований в стиле .NET.
  • Дополнительные предупреждения о неявных преобразованиях
  • Форматирование двоичных чисел
  • Сбрасывает привязки при использовании
  • Директива оптимизатора InlineIfLambda
  • Возобновляемый код
  • Больше функций сбора
  • Карта имеет ключи и значения
  • Дополнительные возможности для NativePtr
  • Больше числовых типов с аннотациями единиц измерения
  • Информационные предупреждения для редко используемых символьных операторов
7.0 [44]
  • Поддержка статических абстрактных членов в интерфейсах
  • Упрощение работы с SRTP (статически разрешенными параметрами типа).
  • Обязательная проверка свойств
  • Область инициализации и свойства только для инициализации
  • Поддержка эталонных сборок
  • Автономные развертывания F# и собственный AOT
  • Добавлена ​​поддержка массивов Nd до 32 ранга.
  • Модуль результатов работает наравне с Option.
  • Исправления в коде возобновляемых конечных автоматов для сборки задач.
  • Улучшенный генератор кода для получения свойств, генерируемых компилятором, без побочных эффектов.
  • Компилятор для конкретной платформы ARM64 и целевая поддержка ARM64 в компиляторе F#. Менеджер зависимостей #r, поддержка кэширования
  • Поддержка параллельной проверки типов и проверки проектов (экспериментальная, может быть включена через настройку VS или авторами инструментов)
  • Различные исправления и улучшения.
8.0 [45]
  • _.Property сокращение для (fun x -> x.Property)
  • Копирование и обновление поля вложенной записи
  • пока! (во время взрыва) функция [46]
  • Расширенный синтаксис интерполяции строк
  • Используйте и составляйте строковые литералы для printf и связанных с ним функций.
  • Арифметические операторы в литералах
  • Синтаксис пересечения ограничений типов
  • Расширенная фиксированная привязка
  • Упрощенное определение метода [<Extension>]
  • Статические члены в интерфейсах
  • Статический let в распознаваемых объединениях, записях, структурах и типах без первичных конструкторов.
  • try-with с выражениями коллекции seq{}, [] и [||]
  • Рекурсивные вызовы и выход! в обработчике исключений
  • Атрибут хвостового вызова
  • Объединения [<Struct>] теперь могут иметь > 49 регистров.
  • Строгие правила отступов
  • Новая диагностика от компилятора
  • Переключатели для распараллеливания компилятора

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

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

F# — это строго типизированный функциональный язык с большим количеством возможностей, которые обычно встречаются только в функциональных языках программирования , но при этом поддерживающий объектно-ориентированные функции, доступные в C#. В совокупности эти функции позволяют писать программы на F# в полностью функциональном стиле, а также позволяют смешивать функциональные и объектно-ориентированные стили.

Примеры функциональных особенностей:

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# для императивного программирования включает в себя

Значения и поля записи также можно пометить как 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. [ чей? ]

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

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

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"  ) 

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

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

  1. ^ «Лицензия F# Software Foundation» . Гитхаб . 14 октября 2021 г.
  2. ^ «Лицензия Microsoft F#» . Гитхаб . 16 октября 2021 г.
  3. ^ Перейти обратно: а б Сайм, Гранич и Чистернино (2007 :2)
  4. ^ Перейти обратно: а б с д Это «Исторические признания F #» . Майкрософт .
  5. ^ Перейти обратно: а б Сайм, Дон (2006). «Использование компонентов метапрограммирования .NET из F #» . [F#] основан на дизайне Core ML и, в частности, имеет основной язык, в значительной степени совместимый с языком OCaml.
  6. ^ для асинхронности
  7. ^ Перейти обратно: а б с д Это ж г час я дж к л Фонд программного обеспечения F#. «Использование F# для веб-приложений» . Проверено 30 июля 2020 г.
  8. ^ Перейти обратно: а б с д Это ж г час я дж к л м Фонд программного обеспечения F#. «Использование F# для программирования графического процессора» . Архивировано из оригинала 25 декабря 2019 г. Проверено 25 декабря 2019 г.
  9. ^ Перейти обратно: а б с Фонд программного обеспечения F#. «Фонд программного обеспечения F#» . Проверено 24 ноября 2012 г.
  10. ^ Перейти обратно: а б Фонд программного обеспечения F#. «Компилятор F# (версия с открытым исходным кодом) @ github» . Проверено 24 ноября 2012 г.
  11. ^ «Разработка с помощью Visual F# в Visual Studio» . Проверено 30 июля 2020 г.
  12. ^ «Ф#» . Проверено 30 июля 2020 г.
  13. ^ Сайм, Дон. «Выпущен F# 1.0.8» . Майкрософт . Проверено 7 сентября 2014 г.
  14. ^ Сайм, Дон. «F# 2.0 выпущен как часть Visual Studio 2010» . Майкрософт . Проверено 7 сентября 2014 г.
  15. ^ Зандер, Джейсон. «Visual Studio 2012 и .NET Framework 4.5 выпущены в Интернете» . Майкрософт . Проверено 7 сентября 2014 г.
  16. ^ «Visual Studio 2013 выпущена для Интернета» . Майкрософт . Проверено 7 сентября 2014 г.
  17. ^ «Анонс окончательной первоначальной версии Visual F# 4.0» . Майкрософт . Проверено 15 сентября 2015 г.
  18. ^ «Анонс F# 4.1 и инструментов Visual F# для Visual Studio 2017» . Проверено 8 марта 2017 г.
  19. ^ «Анонсируем F# 4.5» . Майкрософт. 14 августа 2018 года . Проверено 14 августа 2018 г.
  20. ^ «FSharp.Core 4.5.0» .
  21. ^ «Загрузить .NET Core 2.1 (Linux, macOS и Windows)» . Майкрософт . Проверено 13 мая 2021 г.
  22. ^ «Анонсируем F# 4.6» . Майкрософт. 29 марта 2019 года . Проверено 29 марта 2019 г.
  23. ^ «FSharp.Core 4.6.0» .
  24. ^ «Загрузить .NET Core 2.2 (Linux, macOS и Windows)» . Майкрософт . Проверено 13 мая 2021 г.
  25. ^ «Анонсируем F# 4.7» . Майкрософт. 23 сентября 2019 г. Проверено 23 сентября 2019 г.
  26. ^ «FSharp.Core 4.7.0» .
  27. ^ «Загрузить .NET Core 3.0 (Linux, macOS и Windows)» . Майкрософт . Проверено 13 мая 2021 г.
  28. ^ Перейти обратно: а б «Анонсируем F#5» . 10 ноября 2020 г.
  29. ^ «Загрузить .NET 5.0 (Linux, macOS и Windows)» . Майкрософт . Проверено 13 мая 2021 г.
  30. ^ «F#6 официально здесь!» . 9 ноября 2021 г.
  31. ^ «Загрузить .NET 6.0 (Linux, macOS и Windows)» . Майкрософт . Проверено 14 ноября 2021 г.
  32. ^ «Анонсируем F#7» . 8 ноября 2022 г.
  33. ^ «Загрузить .NET 7.0 (Linux, macOS и Windows)» . Майкрософт . Проверено 8 ноября 2022 г.
  34. ^ «Анонсируем F#8» . 14 ноября 2023 г.
  35. ^ «Загрузить .NET 8.0 (Linux, macOS и Windows)» . Майкрософт . Проверено 14 ноября 2023 г.
  36. ^ Эдвардс, Кэтрин (23 декабря 2008 г.). «А-Я языков программирования: F#» . Сетевой мир . ИДГ. Архивировано из оригинала 13 ноября 2018 года . Проверено 8 августа 2016 г.
  37. ^ Макнамара, Брайан. «Подробнее о возможностях языка F# 3.0» . Майкрософт . Проверено 7 сентября 2014 г.
  38. ^ Макнамара, Брайан. «Анонсируем предварительный выпуск F# 3.1» . Майкрософт . Проверено 7 сентября 2014 г.
  39. ^ «Анонс окончательной первоначальной версии Visual F# 4.0» . Проверено 8 марта 2017 г.
  40. ^ «Анонс F# 4.1 и инструментов Visual F# для Visual Studio 2017» . Проверено 8 марта 2017 г.
  41. ^ «Анонсируем F# 4.7» . 23 сентября 2019 г.
  42. ^ «Анонсируем F#5» . 10 ноября 2020 г.
  43. ^ «Что нового в F#6 — Руководство по F#» . 10 марта 2023 г.
  44. ^ «Анонсируем F#7» . 8 ноября 2022 г.
  45. ^ «Анонсируем F#8» . 14 ноября 2023 г.
  46. ^ «Упрощение вычислений F# с помощью нового оператора while!» ключевое слово' " . 20 сентября 2023 г.
  47. ^ «Программирование/вычислительные выражения F Sharp — Wikibooks, открытые книги для открытого мира» . ru.wikibooks.org . Проверено 21 января 2022 г.
  48. ^ кексугит (8 июля 2011 г.). «Хвостовые вызовы в F#» . docs.microsoft.com . Проверено 22 апреля 2022 г.
  49. ^ Перейти обратно: а б с д Это ж г час «Обзор языка F#» (PDF) . Проверено 14 декабря 2007 г.
  50. ^ Перейти обратно: а б «Некоторые подробности о вычислительных выражениях F#» . Проверено 14 декабря 2007 г.
  51. ^ Перейти обратно: а б «Сопоставление с образцом в F#, часть 2: Активные шаблоны» . Архивировано из оригинала 9 декабря 2012 г. Проверено 24 ноября 2012 г.
  52. ^ Перейти обратно: а б с «Знакомство с асинхронными рабочими процессами F#» . Проверено 14 декабря 2007 г.
  53. ^ «Выражения задач» . 19 апреля 2022 г. Проверено 15 января 2023 г.
  54. ^ «Единицы измерения (F#)» . Проверено 24 ноября 2012 г.
  55. ^ «Расширить единицы измерения, включив в них больше числовых типов» . Гитхаб .
  56. ^ «Единицы измерения в F#: Часть первая, Знакомство с единицами измерения» . Проверено 24 ноября 2012 г.
  57. ^ «Кодовые котировки (F#)» . Проверено 24 ноября 2012 г.
  58. ^ «Поставщики типов» . Проверено 24 ноября 2012 г.
  59. ^ «Новый технический отчет от Microsoft Research: поддержка строго типизированного языка для источников информации в масштабе Интернета» . Проверено 24 ноября 2012 г.
  60. ^ «Выражения запроса (F#)» . Проверено 24 ноября 2012 г.
  61. ^ «F# 3.0 — Поставщики типов LINQ + = информационно насыщенное программирование» . Проверено 24 ноября 2012 г.
  62. ^ Александр Куракин (15 марта 2019 г.). «Rider 2019.1 запускает программу раннего доступа!» .
  63. ^ «Используйте F# в Windows» . Фонд программного обеспечения F# . Проверено 7 августа 2018 г.
  64. ^ «Особенности – Райдер» . ДжетБрэйнс . Проверено 7 августа 2018 г.
  65. ^ «Fable: JavaScript, которым можно гордиться!» . басня.io . Проверено 9 декабря 2017 г.
  66. ^ Интеллектуальная фабрика. «Домашняя страница WebSharper» . Проверено 24 ноября 2012 г.
  67. ^ «Примеры использования Microsoft: Microsoft Visual Studio 2012 — фирма, оказывающая финансовые услуги» . Майкрософт . Проверено 25 ноября 2012 г.
  68. ^ «F# для торговли энергией и оптимизации портфеля» . Проверено 25 ноября 2012 г.
  69. ^ «Пример Microsoft: страхование Grange» . Майкрософт . Проверено 25 ноября 2012 г.
  70. ^ Трелфорд, Фил (2007). «Обучение с F#» . Материалы 4-го семинара ACM SIGPLAN по коммерческим пользователям функционального программирования - CUFP '07 . стр. 1–2. дои : 10.1145/1362702.1362709 . ISBN  9781450378444 . S2CID   24018363 . Проверено 25 ноября 2012 г.
  71. ^ «Работа F# в социальных играх на Facebook» . Проверено 25 ноября 2012 г.
  72. ^ «Отзывы разработчиков F#» . Проверено 25 мая 2021 г.
  73. ^ «Написание сценариев на F#» . 12 сентября 2008 года . Проверено 17 января 2020 г.

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

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

Arc.Ask3.Ru: конец оригинального документа.
Arc.Ask3.Ru
Номер скриншота №: DBF86FED774BF0E3E007CD11B3C290BE__1717851360
URL1:https://en.wikipedia.org/wiki/F_Sharp_(programming_language)
Заголовок, (Title) документа по адресу, URL1:
F Sharp (programming language) - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть, любые претензии не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, денежную единицу можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)