F Sharp
- Ïðàâèëüíûé çàãîëîâîê ýòîé ñòàòüè â F#. Îí ïîêàçàí íåêîððåêòíî èç-çà òåõíè÷åñêèõ îãðàíè÷åíèé.
| Êëàññ ÿçûêà: |
ìóëüòèïàðàäèãìåííûé: ôóíêöèîíàëüíîå, îáúåêòíî-îðèåíòèðîâàííîå, îáîáù¸ííîå, èìïåðàòèâíîå ïðîãðàììèðîâàíèå |
|---|---|
| Ïîÿâèëñÿ â: |
2002 |
| Àâòîð(û): | |
| Ðåëèç: | |
| Òèïèçàöèÿ äàííûõ: |
ñòðîãàÿ |
| Èñïûòàë âëèÿíèå: | |
| Ëèöåíçèÿ | |
| Ñàéò: |
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. Êîìïàíèÿ ïëàíèðóåò àêòèâíî âíåäðÿòü äàííûé ÿçûê â ðàçðàáîòêó ïðîãðàììíûõ ñèñòåì, êîòîðûå ñàìè ñ òå÷åíèåì âðåìåíè ñìîãóò ìàñøòàáèðîâàòüñÿ, íàïðèìåð, â çàâèñèìîñòè îò êîëè÷åñòâà ïîëüçîâàòåëåé. Äàííîå äîñòîèíñòâî íåïðîñòî ðåàëèçîâàòü â èìïåðàòèâíûõ ÿçûêàõ ïðîãðàììèðîâàíèÿ.
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 â àëãåáðå:
let 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(îêíî) // îòîáðàæåíèå îêíà
[ïðàâèòü] Ïðèìå÷àíèÿ
[ïðàâèòü] Ñì. òàêæå
[ïðàâèòü] Ññûëêè
- F# (àíãë.) â Microsoft F# Developer Center.
- Ââåäåíèå â F#. Åâãåíèé Ëàçèí, Ìàêñèì Ìîèñååâ, Äàâèä Ñîðîêèí, «Ïðàêòèêà ôóíêöèîíàëüíîãî ïðîãðàììèðîâàíèÿ», 2010, â„– 5
- Ââåäåíèå â F# â èíòåðâüþ ñ Äîíîì Ñàéìîì.
- Îáñóæäåíèå êíèãè ïî F# íà ðóññêîì ÿçûêå Äîíà Ñàéìà «The Definitive Guide to F#»
- Òðè ïàðàäèãìû F# â Õàáðàõàáð.
- Try F# Tutorials â Îçíàêîìëåíèå ñ ÿçûêîì F#. ïðîãðàììèðîâàíèÿ
[ïðàâèòü] Ëèòåðàòóðà
- Êðèñ Ñìèò (Smith, Chris) Ïðîãðàììèðîâàíèå íà F# = Programming F#. â O'Reilly, 2009.
- Äìèòðèé Ñîøíèêîâ Ôóíêöèîíàëüíîå ïðîãðàììèðîâàíèå íà F#. â Ìîñêâà: ÄÌÊ Ïðåññ, 2011. â Ñ. 192. â ISBN 978-5-94074-689-8
- Syme, Don; Granicz, Adam; Cisternino, Antonio Expert F#. â Apress, 2007. (àíãë.)
| Ýòà ñòàòüÿ èëè ðàçäåë íóæäàåòñÿ â ïåðåðàáîòêå.
Ïîæàëóéñòà, óëó÷øèòå ñòàòüþ â ñîîòâåòñòâèè ñ ïðàâèëàìè íàïèñàíèÿ ñòàòåé.
|
| Â äðóãîì ÿçûêîâîì ðàçäåëå åñòü áîëåå ïîëíàÿ ñòàòüÿ F Sharp (programming language) (àíãë.)
Âû ìîæåòå ïîìî÷ü ïðîåêòó, ðàñøèðèâ òåêóùóþ ñòàòüþ ñ ïîìîùüþ ïåðåâîäà.
|
| Îñíîâíûå ÿçûêè ïðîãðàììèðîâàíèÿ (ñðàâíåíèå IDE èñòîðèÿ õðîíîëîãèÿ) | |
|---|---|
| Èñïîëüçóåìûå â ðàçðàáîòêå |
Àäà APL ßçûê àññåìáëåðà ActionScript ABAP/4 AutoIt AWK Áåéñèê Ñè Êîáîë C++ C# Cω Clarion Clojure ColdFusion Common Lisp D dBase Delphi Eiffel Erlang Euphoria F# Ôîðò Ôîðòðàí Gambas Go Groovy HAL/S Haskell Icon Java JavaScript Limbo Lua Object Pascal Objective-C OCaml Oz Parser Ïàñêàëü Perl PHP PowerBASIC PureBasic Python ÏË/1 Ïðîëîã Ruby Scala Scheme Smalltalk SQL PL/SQL Tcl Vala Visual Basic (.NET) |
| Àêàäåìè÷åñêèå | |
| IEC 61131-3 | |
| Ïðî÷èå | |
| Ýçîòåðè÷åñêèå | |
| Âèçóàëüíûå | |

