F Sharp: відмінності між версіями

[перевірена версія][перевірена версія]
Вилучено вміст Додано вміст
Uawikibot1 (обговорення | внесок)
м Ієрархія заголовків. WikiProject Check Wikipedia ID #25
Рядок 132:
== Приклади використання ==
 
Існує цікавий приклад використання quotations в F # як засобу мета-програмування. Завдання пов'язана з масивної паралельною обробкою даних за допомогою спеціальної бібліотеки або на багатоядерноїбагатоядерній процесорноїпроцесорній системі x64, або на графічному процесорі GPU. Визначається невеликеневелика підмножина F #, код з якогоякої може бути відтранслювативідтранслюваним і запущенийзапущеним на цільовій платформі. Це дозволяє писати «звичайні» функції на F #, налагоджувати їх стандартним чином, а потім за допомогою механізму quotations обробляти ці функції і запускати на GPU. Більш того, програма на F # може створювати «на льоту» такі функції, які вже потім будутьможуть відтранслювативідтранслюватися і запущенізапуститися на іншій платформі. Примітно, що при реалізації такої трансляції широко використовується спеціальна можливість F # у вигляді активного зіставлення зі зразком (active pattern matching), яка помітно спрощує написання транслятора.
 
Мова F # може бути зручнийзручна для створення DSL, які стають частиною самого F #, причому такі мови можуть бути досить короткими і виразними. Наприклад, у книзі Real-World Functional Programming наводиться бібліотека для опису анімації. Первісна ідея була реалізована в проекті Fran [Elliot, Hudak, 1997] на мові Haskell. Опис ідеї ще можна знайти в книзі The Haskell School of Expression [6]. Анімація моделюється як залежна від часу величина. На основі примітивів будуються вже складові лексикон предметної області функції, за допомогою яких можна описувати досить складні анімації і робити це декларативно. Що стосується реалізації, то там багато спільного з монадами.
 
Ось приклад того, як виглядає на мові F # визначення анімованої частини сонячної системи, яку потім можна візуалізувати на екрані комп'ютера:
{{текст|1=let solarSystem = sun - (rotate 80.00f 4.1f mercury) - (rotate 150.0f 1.6f venus) - (rotate 215.0f 1.0f (earth - (rotate 20.0f 12.0f moon)))}}
 
Наступним прикладом використання F # є комерційний продукт WebSharper фірми IntelliFactory [2]. Це платформа для створення клієнтських web-додатків. Вона дозволяє писати клієнтський код на F #, який потім буде відтранслювати на JavaScript. Така трансляція поширюється на достатню велику підмножину F #, включаючи функціональне ядро мови, алгебраїчні типи даних, класи, об'єкти, винятки й делегати. Також підтримується значна частина стандартної бібліотеки F #, включаючи роботу з послідовностями (sequences), подіями і асинхронними обчислювальними виразами (async workflows). Все може бути автоматично відтранслювати на цільову мову JavaScript. Крім того, підтримується деяка частина стандартних класів самого. NET, і обсяг підтримки буде зростати.
 
Цей продукт примітний тим, що тут використовується цілий ряд прийомів, характерних для функціонального програмування. Так, в WebSharper вбудований DSL для завдання HTML-коду, в якому широко застосовуються комбінатори.