F Sharp

Правильний заголовок цієї статті - F # . Він показаний некоректно через технічні обмеження.

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

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

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

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


1. Особливості

Код на мові F # є безпечним у відношенні типів, часто буває більш компактним, ніж аналогічний код C #, за рахунок виведення типів.

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

Одна з основних ідей F # полягає в тому, щоб упевнитися, що наявний код і типи у функціональному мові програмування можуть бути легко доступні з інших. NET-мов. Програми на F # компілюються в зборки CLR (файли з розширеннями. Exe і. Dll), однак, для їх запуску необхідна установка пакета середовища виконання додатково до. NET Framework.


2. Компілятор та інтерпретатор

F # - компільований мову програмування, при цьому в якості проміжного мови використовується мову Common Intermediate Language (CIL), так само як і в програмах, написаних на мовах C # або VB.NET.

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

3. Приклади

Синтаксис F # побудований на математичній нотації, а програмування чимось схоже на алгебру, що робить F # схожим на Haskell. Наприклад, коли ви визначаєте новий тип, то можете вказати, що змінними цього типу будуть " цілі або рядки ". Ось як це виглядає:

 type  myType  =  IntVal  of  int  | StringVal  of  string 

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

 let  fx  =  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 - research.microsoft.com / en-us / um / cambridge / projects / fsharp / release.aspx
  2. Announcing the F # Compiler + Library Source Code Drop - blogs.msdn.com/b/dsyme/archive/2010/11/04/announcing-the-f-compiler-library-source-code-drop.aspx