F Sharp | это... Что такое F Sharp? (original) (raw)

У этого термина существуют и другие значения, см. F (значения).

Правильный заголовок этой статьи — F#. Он показан некорректно из-за технических ограничений.

F#

Класс языка: мультипарадигменный: функциональное, объектно-ориентированное, обобщённое, императивное программирование
Появился в: 2002
Автор(ы): Microsoft Research
Релиз: 2.0 (12 апреля 2010)
Типизация данных: строгая
Испытал влияние: Objective Caml, C#, Haskell
Лицензия Apache Software License
Сайт: Microsoft F# Developer Center

F# (произносится эф-шарп) — это функциональный язык программирования из семейства языков .NET Framework, поддерживающий функциональное программирование в дополнение к императивному (процедурному) и объектно-ориентированному программированию. Структура F# во многом схожа со структурой OCaml с той лишь разницей, что F# реализован поверх библиотек и среды исполнения .NET. Язык был разработан Доном Саймом (англ. Don Syme) в Microsoft Research в Кембридже, в настоящее время его разработку ведет Microsoft Developer Division. F# достаточно тесно интегрируется со средой разработки Visual Studio и включён в поставку Visual Studio 2010; разработаны также компиляторы для Mac и Linux[1].

Некоторые задачи решаются значительно проще и яснее с использованием F# (по сравнению с решениями на доминирующих ОО-языках), особенно те, что используют математический стиль программирования[источник не указан 117 дней]. Например, написание компилятора требует работы со структурами данных и преобразований над ними.

Microsoft интегрировала среду разработки F# в Visual Studio 2010. Компания планирует активно внедрять данный язык в разработку программных систем, которые сами с течением времени смогут масштабироваться, например, в зависимости от количества пользователей. Данное достоинство непросто реализовать в императивных языках программирования[источник не указан 117 дней].

4 ноября 2010 года код компилятора F# и основных библиотек к нему опубликован под Apache License 2.0[2].

Особенности

Код на языке F# является безопасным в отношении типов, часто бывает более компактным, чем аналогичный код C#, за счёт вывода типов.

Такие возможности, как обобщенное программирование и функции высших порядков позволяют писать абстрактные обобщенные алгоритмы, которые управляют параметризованными структурами данных (например, массивами, списками, графами, деревьями).

Одна из основных идей F# заключается в том, чтобы удостовериться, что имеющийся код и типы в функциональном языке программирования могут быть легко доступны из других .NET-языков. Программы на F# компилируются в сборки CLR (файлы с расширениями .exe и .dll), однако, для их запуска необходима установка пакета среды исполнения дополнительно к .NET Framework.

Компилятор и интерпретатор

F# — компилируемый язык программирования, при этом в качестве промежуточного языка используется язык Common Intermediate Language (CIL), так же как и в программах, написанных на языках C# или VB.NET.

Наряду с F#-компилятором (fsc) присутствует и F#-интерпретатор (fsi), который исполняет F#-код интерактивно.

Примеры

Синтаксис F# построен на математической нотации, а программирование чем-то похоже на алгебру, что делает F# похожим на Haskell. Например, когда вы определяете новый тип, то можете указать, что переменными этого типа будут «целые или строки». Вот как это выглядит:

type myType = IntVal of int | StringVal of string

Код также представляет собой математическую нотацию. Следующая конструкция эквивалентна f(x) = x + 1 в алгебре:

F# работает следующим образом: тип «f» представляет собой «int -> int», то есть функция получает на вход целое и выдаёт на выход целое.

F# позволяет получить доступ абсолютно ко всему, что есть в FCL. Синтаксис для работы с библиотеками .NET в этом смысле максимально близок к синтаксису C#. Особенности языка заметны при использовании всего спектра возможностей F#. К примеру, следующий код применяет функцию к элементам списка:

let rec map func lst = match lst with | [] -> [] | head :: tail -> func head :: map func tail

let myList = [1;3;5] let newList = map (fun x -> x + 1) myList

В «newList» теперь находится «[2;4;6]».

Разбор списка в этой функции ведётся с помощью ещё одной мощной возможности сопоставления с образцом. Она позволяет задавать образцы при совпадении с которыми вычисляются соответствующие вхождения оператора match. Первый образец «[]» означает пустой список. Второй — список состоящий из первого элемента и хвоста (который может быть произвольным списком, в том числе и пустым). Во втором образце значение головы связывается с переменной head, а хвоста с tail (имена могут быть произвольные). Таким образом кроме основной задачи образец ещё позволяет производить декомпозицию сложных структур данных.

События: — отклик вашей программы на действия пользователей, подключение устройств и тд.

VisualStudio 2010 версии 10.0.30319.1 Framework версии 4.30319

Добавить в ссылки проекта библиотеки: System System.Drawing System.Windows.Forms

В свойствах проекта выбрать тип выходных данных: Windows-приложение

Код программы рабочий, незаконченный (может быть скопирован) (Файлы в проекте *.fs)

// open - подключение ссылок библиотек для использования содержащихся в них: // слов-функций - к примеру '''open''', '''len''' и тд; // списков - к примеру Keys и тд; // значений - к примеру Keys.A=65 Keys.B=66 и тд; и тд. open System // - open System.Drawing // - обработка отрисовки окон, слова-фунции методов рисования и тд. open System.Windows.Forms // - слова-фунции Form (окно), Button (кнопка)и тд. // let - // evArgs - // Beep - звуковой сигнал // окно_изменение_размеров - слово-функция, действие Beep let окно_изменение_размеров evArgs = System.Console.Beep( ) let окно_нажатие_клавиш evArgs = System.Console.Beep( ) let окно_удержание_клавиш evArgs = System.Console.Beep( ) let окно_отжатие_клавиш evArgs = System.Console.Beep( ) // создание окна с програмным именем окно !необходимо вызывать слово-функцию отображения - к примеру Application.Run(окно)! // Visible - видимость (true-false) // TopMost - окно на передний план в программе(true-false) (очерёдность окон с одинаковым значением в обратном порядке вызова) // Text - текст заголовка let окно = new System.Windows.Forms.Form(Visible=true,TopMost=true,Text="") окно.Top<-0 // Верхний край окна=0 окно.Left<-0 // Левый край окна=0 окно.Height<-512 // Высота окна=512 окно.Width<-768 // Ширина окна=768 окно.WindowState<-FormWindowState.Normal // Нормальное (,Свёрнутое ,Развёрнутое) окно окно.ClientSizeChanged.Add(окно_изменение_размеров) окно.KeyDown.Add(окно_нажатие_клавиш) окно.KeyPress.Add(окно_удержание_клавиш) окно.KeyUp.Add(окно_отжатие_клавиш) Application.Run(окно) // отображение окна

Примечания

  1. Ссылки для загрузки F# на сайте Microsoft Research
  2. Announcing the F# Compiler + Library Source Code Drop

См. также

Ссылки

Литература

Есть более полная статья
Просмотр этого шаблона Основные языки программирования (сравнениеIDEисторияхронология)
Используемыев разработке АдаAPLЯзык ассемблераActionScriptABAP/4AutoItAWKБейсикСиКоболC++C#ClarionClojureColdFusionCommon LispDdBaseDelphiEiffelErlangEuphoriaF#ФортФортранGambasGoGroovy • HAL/S • HaskellIconJavaJavaScriptLimboLuaМодула-3Object PascalObjective-COCamlOzParserПаскальКомпонентный ПаскальPerlPHPPowerBASICPythonПЛ/1ПрологRubyScalaSchemeSmalltalkSQLPL/SQLTclValaVisual Basic (.NET)
Академические AgdaCleanCurryЛогоMLРЕФАЛСимулаОберон
IEC 61131-3 Instruction ListSTFBDLadder Diagram (LD) • SFC
Прочие АлголАлгол 68Модула-2МирандаHope
Эзотерические HQ9+/HQ9++ • INTERCALBrainfuck • Brainfork • BefungeMalbolgePietSpoonUnlambdaWhitespaceFALSELOLCODE
Визуальные G (LabVIEW) • Microsoft VPLSikuliVisSimАлисаДРАКОНСкретч
Просмотр этого шаблона .NET Framework
Архитектура Base Class LibraryCommon Language Infrastructure.NET assemblyметаданныеCOM Interop
Инфраструктура Common Language RuntimeCommon Type SystemCommon Intermediate Language • Virtual Execution System • Dynamic Language Runtime
Языки Microsoft C#Visual Basic .NETC++/CLI (Managed) • Visual J#JScript .NETWindows PowerShellIronPythonIronRubyF#Spec#Sing#
Другие языки A#Boo • IronLisp • L# • NemerleP#PascalABC.NETPHPScalaCobra • Delphi Prism
Windows Foundations PresentationCommunicationWorkflow
Компоненты ADO.NET (Entity Framework · Data Services) · ASP.NET (AJAX · MVC · Dynamic Data) · .NET Remoting · Language Integrated Query · Windows CardSpace · Windows Forms · XAML · ClickOnce · Dynamic Language Runtime · Parallel FX Library (PLINQ · TPL)
Реализации DotGNUMono.NET Compact Framework (Xbox 360) • .NET Micro FrameworkPortable.NETXNA FrameworkSilverlight • Shared Source Common Language Infrastructure
Сравнения C# и Java • C# и Visual Basic .NET
Будущие технологии Acropolis • Jasper