F Sharp: відмінності між версіями
[перевірена версія] | [перевірена версія] |
Вилучено вміст Додано вміст
Навка (обговорення | внесок) м додана Категорія:.NET з допомогою HotCat |
AS (обговорення | внесок) Немає опису редагування |
||
Рядок 19:
== Історія ==
Історія F# почалася в 2002 році, коли команда розробників з Microsoft Research під керівництвом Don Syme вирішила, що мови сімейства ML цілком підходять для реалізації функціональної парадигми на платформі .NET. Ідея розробки нової мови з'явилася під час роботи над Generic'ами — реалізацією узагальненого програмування для Common Language Runtime. Відомо, що у свій час як прототип нової мови розглядалася Haskell, але через функціональну чистоту і складнішу систему типів потенційний Haskell .NET не міг би надати розробникам простого механізму роботи з бібліотекою класів .NET Framework, а значить, не давав би якихось додаткових переваг. Як би там не було, за основу був узятий OCaml, мова з сімейства ML, яка не є чисто функціональною і надає можливості для імперативного і об'єктно-орієнтованого програмування.
Наступним кроком у розвитку нової мови стала поява в 2005 році її першої версії. З тих пір навколо F# стало формуватися співтовариство. За рахунок підтримки функціональної парадигми мова виявилася потрібною в науковій сфері та фінансових організаціях. Багато в чому завдяки цьому Microsoft вирішила перевести F# зі статусу дослідницьких проектів у статус підтримуваних продуктів і поставити її в один ряд з основними мовами платформи .NET. І це попри те, що останнім часом все більшу активність проявляють динамічні мови, підтримка яких також присутня в .NET Framework. 12 квітня 2010 світ побачила нова версія флагманського продукту для розробників — Microsoft Visual Studio 2010, яка підтримує розробку на F # прямо з коробки.
== Основні можливості мови ==
▲Будь-яка вступна стаття про F# починається з розповіді про те, як вдало ця мова поєднує в собі якості, властиві різним парадигм програмування, не будемо робити винятки і ми. Отже, як було сказано у визначенні — F# є мультипарадигменною мовою, а це значить, що на ньому можна реалізовувати функції вищих порядків, усередині яких виконувати імперативний код і обгортати все це в класи для використання клієнтами, написаними на інших мовах на платформі. NET.
===== F# функціональна =====
F#, будучи спадкоємцем
Усі функціональні можливості F # реалізовані в кінцевому підсумку поверх загальної системи типів. NET Framework. Однак цей факт не забезпечує зручності використання таких конструкцій з інших мов платформи. При розробці власних бібліотек на F # слід передбачити створення об'єктно-орієнтованих обгорток, які буде простіше використовувати з C# або Visual Basic. NET.
===== F# імперативна =====
У випадках, коли багатих функціональних можливостей не вистачає, F # надає розробникові можливість використовувати в коді принади змінюваного стану. Це як безпосередньо змінювані змінні, підтримка полів і властивостей об'єктів стандартної бібліотеки, так і явні цикли, а також змінні колекції і типи даних.
===== F# об'єктно-орієнтована =====
Об'єктно-орієнтовані можливості F #, як і багато чого іншого в цій мові, обумовлені необхідністю надати розробникам можливість використовувати стандартну бібліотеку класів. NET Framework. З поставленим завданням мова цілком справляється: можна як використовувати бібліотеки класів, реалізовані на інших. NET мовах, так і розробляти свої власні. Слід зазначити, однак, що деякі можливості ГО мов реалізовані не самим звичним чином.
Таке змішання парадигм, з одного боку, може привести до плачевних результатів, а з іншого — надає більше гнучкості і дозволяє писати простіший код. Так, наприклад, всередині стандартної бібліотеки F # деякі функції написані в імперативному стилі з метою оптимізації швидкості виконання.
Томаш Петрічек у своєму блозі згадує також про «мовно-орієнтоване» програмування.
== Розширені можливості ==
===== Обчислювальні вирази =====
Серед нововведень F # можна особливо виділити так звані обчислювальні виразу (computation expressions або workflows). Вони є узагальненням генераторів послідовності і, зокрема, дозволяють вбудовувати в F
Обчислювальний вираз має форму блоку, що містить певний код на F # у фігурних дужках. Цьому блоку повинен передувати спеціальний об'єкт, який називається ще построителем (builder). Загальна форма наступна: builder {comp-expr}.
Рядок 58 ⟶ 53:
У залежності від будівника всередині обчислювального коду можна також використовувати особливі конструкції let!, Use!, Return, return!, Yield і yield!. Якщо читач знайомий з мовою програмування Haskell, то можна помітити, що let! відповідає стрілкою з нотації do, а return має той же зміст, що і в Haskell.
За своєю суттю обчислювальне вираз є [[синтаксичний цукор|синтаксичним цукром]] навколо зазначеного будівника. Компілятор F # проходиться за кодом обчислення і замінює мовні конструкції викликами відповідних методів будівника b згідно з наступною таблицею, де лапки позначають оператор перетворення:
Конструкція Форма перетворення
|