F Sharp (programovací jazyk) - F Sharp (programming language)
![]() F # logomark | |
Paradigma | Multi-paradigma: funkční, rozkazovací způsob, objektově orientovaný, metaprogramování, reflexní, souběžně |
---|---|
Rodina | ML |
Navrhl | Don Syme, Microsoft Research |
Vývojář | Microsoft, Softwarová nadace F # |
Poprvé se objevil | 2005 | , verze 1.0
Stabilní uvolnění | 5.0[1] / 10. listopadu 2020 |
Náhled verze | 5.0 náhled / 2. dubna 2019[2] |
Psací disciplína | Statický, silný, odvozeno |
OS | Cross-platform: .NET Framework, Mono |
Licence | Licence MIT[3][4] |
Přípony názvu souboru | .fs, .fsi, .fsx, .fsscript |
webová stránka | fsharp |
Ovlivněno | |
C#, Erlang, Haskell,[5] ML, OCaml,[6][7] Krajta, Scala | |
Ovlivněno | |
C#,[8] Jilm, F*, LiveScript | |
|
F# (výrazný fis) je nejprve funkční, obecný účel, silně napsaný, multi-paradigma programovací jazyk který zahrnuje funkční, rozkazovací způsob, a objektově orientované programování metody. F # se nejčastěji používá jako platforma Společná jazyková infrastruktura (CLI) jazyk na .NET Core, ale může také generovat JavaScript[9] a grafická jednotka (GPU) kód.[10]
F # je vyvíjen F # softwarová nadace,[11] Microsoft a otevřené přispěvatele. An otevřený zdroj, cross-platform compiler for F # is available from the F # Software Foundation.[12] F # je plně podporovaný jazyk v Vizuální studio[13] a JetBrains Rider.[14] Pluginy podporující F # existují pro mnoho široce používaných editorů, zejména pro Ionid rozšíření pro Kód sady Visual Studio a integrace pro další editory, jako je Vim, a Emacs.
F # je členem ML jazyková rodina a vznikla jako .NET Framework implementace jádra programovacího jazyka OCaml.[6][7] To bylo také ovlivněno C#, Krajta, Haskell,[5] Scala, a Erlang.
Dějiny
Verze
V průběhu svého vývoje prošel jazyk několika verzemi:
Verze | Specifikace jazyka | datum | Platformy | Runtime |
---|---|---|---|---|
F # 1.x | Květen 2005[15] | Okna | .SÍŤ 1.0 - 3.5 | |
F # 2.0 | Srpna 2010 | Duben 2010[16] | Linux, Operační Systém Mac, Okna | .SÍŤ 2.0 - 4.0, Mono |
F # 3.0 | Listopad 2012 | Srpna 2012[17] | Linux, Operační Systém Mac, Okna; JavaScript,[9] GPU[10] | .SÍŤ 2.0 - 4.5, Mono |
F # 3.1 | listopad 2013 | Říjen 2013[18] | Linux, Operační Systém Mac, Okna; JavaScript,[9] GPU[10] | .SÍŤ 2.0 - 4.5, Mono |
F # 4.0 | Leden 2016 | Červenec 2015[19] | ||
F # 4.1 | Březen 2017[20] | Linux, Operační Systém Mac, Okna, | .SÍŤ 3.5 - 4.6.2, .NET Core, Mono | |
F # 4.5 | Srpna 2018[21] | Linux, Operační Systém Mac, Okna, | .SÍŤ 4.5 - 4.7.2,[22] .NET Core SDK 2.1.400 | |
F # 4.7 | Září 2019 | |||
F # 5.0 | Listopad 2020[23] | Linux, Operační Systém Mac, Okna, | .NET Core SDK 5.0.100 |
Vývoj jazyka
F # používá otevřený vývojový a inženýrský proces. Proces vývoje jazyka je řízen Don Syme z Microsoft Research jako benevolentní diktátor na celý život (BDFL) pro jazykový design, společně s F # Software Foundation. Dřívější verze jazyka F # byly navrženy Microsoft a Microsoft Research pomocí uzavřeného procesu vývoje.
F # pochází z Microsoft Research, Cambridge, Velká Británie. Jazyk původně navrhl a implementoval Don Syme,[6] podle koho v týmu fsharp říkají, že F je pro „zábavu“.[24] Andrew Kennedy přispěl k návrhu jednotky měření.[6] Nástroje Visual F # pro Visual Studio jsou vyvíjeny společností Microsoft.[6] F # Software Foundation vyvinula kompilátor a nástroje F # open-source, zahrnující implementaci kompilátoru open-source poskytovanou týmem Microsoft Visual F # Tools.[11]
F # 1.0 | F # 2.0 | F # 3.0[25] | F # 3.1[26] | F # 4.0[27] | F # 4.1[28] | F # 4.5[23] | F # 4.7[29] | F # 5.0[1] | |
---|---|---|---|---|---|---|---|---|---|
Funkce přidané |
|
|
|
|
|
|
|
|
Přehled jazyků
Funkcionální programování
F # je a silně napsaný funkční první jazyk, který používá odvození typu. Programátor nemusí deklarovat typy - kompilátor během kompilace odvodí typy (odvození typu). F # také umožňuje explicitní anotace typu a v některých situacích je vyžaduje.
F # je jazyk založený na výrazu nedočkavé hodnocení a také v některých případech líné hodnocení. Každý výpis v F #, včetně -li
výrazy, Snaž se
expressions and loops, is a composable expression with a static type.[30] Funkce a výrazy, které nevracejí žádnou hodnotu, mají návratový typ jednotka
. F # používá nechat
klíčové slovo pro vazbu hodnot na název.[30] Například:
nechat X = 3 + 4
váže hodnotu 7
na jméno X
.
Nové typy jsou definovány pomocí typ
klíčové slovo. Pro funkční programování poskytuje F # n-tice, záznam, diskriminovaná unie, seznam, volba, a výsledek typy.[30] A n-tice představuje sadu n hodnoty, kde n ≥ 0. Hodnota n se nazývá arity n-tice. Trojice by byla reprezentována jako (A, B, C)
, kde A, B a C jsou hodnoty případně různých typů. Tuple lze použít k ukládání hodnot pouze v případě, že je počet hodnot znám v době návrhu a během provádění zůstává konstantní.
A záznam je typ, kde jsou datové členy pojmenovány. Zde je příklad definice záznamu:
typ R = { název : tětiva Stáří : int }
Záznamy lze vytvářet jako nechat r = { název=„AB“; Stáří=42 }
. The s
klíčové slovo se používá k vytvoření kopie záznamu, jako v { r s název="CD" }
, který kopírováním vytvoří nový záznam r
a změna hodnoty název
pole (za předpokladu, že byl vytvořen záznam vytvořený v posledním příkladu r
).
A diskriminovaná unie typ je a typově bezpečné verze Odbory C.. Například,
typ A = | UnionCaseX z tětiva | UnionCaseY z int
Hodnoty typu spojení mohou odpovídat oběma případům spojení. Typy hodnot přenášených jednotlivými případy sjednocení jsou zahrnuty v definici každého případu.
The seznam typ je neměnný spojový seznam zastoupeny buď pomocí a hlava::ocas
notace (::
je nevýhody operátor) nebo zkratka jako [položka1; položka2; položka3]
. Je napsán prázdný seznam []
. The volba type je diskriminovaný sjednocující typ s možnostmi Některé (x)
nebo Žádný
. F # typy mohou být obecný, implementované jako obecné typy .NET.
F # podporuje funkce lambda a uzávěry.[30] Všechny funkce ve F # jsou hodnoty první třídy a jsou neměnné.[30] Funkce mohou být kari. Jako hodnoty první třídy lze funkce předat jako argumenty dalším funkcím. Stejně jako ostatní funkční programovací jazyky umožňuje F # složení funkce za použití >>
a <<
operátory.
F # poskytuje sekvenční výrazy[31] které definují posloupnost seq {...}
, seznam [ ... ]
nebo pole [| ... |]
prostřednictvím kódu, který generuje hodnoty. Například,
násl { pro b v 0 .. 25 dělat -li b < 15 pak výtěžek b*b }
vytvoří posloupnost čtverců čísel od 0 do 14 odfiltrováním čísel z rozsahu čísel od 0 do 25. Sekvence jsou generátory - hodnoty jsou generovány na vyžádání (tj. Jsou líně hodnoceno ) - zatímco seznamy a pole jsou horlivě vyhodnocovány.
F # používá porovnávání vzorů vázat hodnoty na jména. Přiřazování vzorů se také používá při přístupu k diskriminačním uniím - sjednocení je hodnota porovnána s pravidly vzorů a při úspěšné shodě je vybráno pravidlo. F # také podporuje Aktivní vzory jako forma rozšiřitelného porovnávání vzorů.[32] Používá se například, když existuje více způsobů shody na typu.[30]
F # podporuje obecnou syntaxi pro definování volaných kompozičních výpočtů výpočetní výrazy. Sekvenční výrazy, asynchronní výpočty a dotazy jsou konkrétními druhy výpočetních výrazů. Výpočtové výrazy jsou implementací monad vzor.[31]
Imperativní programování
F # podpora imperativního programování zahrnuje
pro
smyčkyzatímco
smyčky- pole, vytvořeno pomocí
[| ... |]
syntax - hash tabulka, vytvořeno pomocí
diktát [...]
syntaxe neboSystem.Collections.Generic.Dictionary <_, _>
typ.
Hodnoty a záznamová pole lze také označit jako proměnlivý
. Například:
// Definujte 'x' s počáteční hodnotou '1'nechat proměnlivý X = 1// Změňte hodnotu 'x' na '3'X <- 3
F # také podporuje přístup ke všem typům CLI a objektům, jako jsou ty definované v System.Collections.Generic
jmenný prostor definující imperativní datové struktury.
Objektově orientované programování
Jako ostatní Společná jazyková infrastruktura (CLI) jazyky, F # může používat typy CLI prostřednictvím objektově orientovaného programování.[30] Podpora F # pro objektově orientované programování ve výrazech zahrnuje:
- Dot-notace, např.
X.název
- Objektové výrazy, např.
{ Nový obj() s člen X.ToString() = "Ahoj" }
- Konstrukce objektu, např.
Nový Formulář()
- Typové zkoušky, např.
X :? tětiva
- Zadejte nátlak, např.
X :?> tětiva
- Pojmenované argumenty, např.
X.Metoda(someArgument=1)
- Pojmenovaní stavitelé, např.
Nový Formulář(Text="Ahoj")
- Nepovinné argumenty, např.
X.Metoda(Nepovinný argument=1)
Podpora pro objektově orientované programování ve vzorcích zahrnuje
- Typové zkoušky, např.
:? tětiva tak jako s
- Aktivní vzory, které lze definovat přes typy objektů[32]
Definice typů objektů F # mohou být definice třídy, struktury, rozhraní, výčtu nebo delegáta, odpovídající definičním formulářům nalezeným v C#. Například zde je třída s konstruktorem, který přebírá jméno a věk a deklaruje dvě vlastnosti.
/// Jednoduchá definice typu objektutyp Osoba(název : tětiva, stáří : int) = člen X.název = název člen X.Stáří = stáří
Asynchronní programování
F # podporuje asynchronní programování prostřednictvím asynchronní pracovní toky.[33] Asynchronní pracovní postup je definován jako posloupnost příkazů uvnitř asynchronní {...}
, jako v
nechat asynctask = asynchronní { nechat požadavek = WebRequest.Vytvořit(url) nechat! Odezva = požadavek.GetResponseAsync() použití proud = Odezva.GetResponseStream() použití streamreader = Nový Systém.IO.StreamReader(proud) vrátit se streamreader.ReadToEnd() }
The nechat!
označuje, že výraz vpravo (získání odpovědi) by měl být proveden asynchronně, ale tok by měl pokračovat pouze v případě, že je k dispozici výsledek. Jinými slovy, z pohledu bloku kódu je to, jako by získání odpovědi bylo blokačním voláním, zatímco z hlediska systému nebude vlákno blokováno a může být použito ke zpracování dalších toků zatímco výsledek potřebný pro tento nebude k dispozici.
Asynchronní blok lze vyvolat pomocí Async.RunSynchronously
funkce. Více asynchronních bloků lze provést paralelně pomocí Async.Parallel
funkce, která přebírá seznam asynchronní
objekty (v příkladu asynctask
je asynchronní objekt) a vytvoří další asynchronní objekt pro paralelní spuštění úloh v seznamech. Výsledný objekt je vyvolán pomocí Async.RunSynchronously
.[33]Inverze kontroly ve F # následuje tento vzor.[33]
Paralelní programování
Paralelní programování je částečně podporováno prostřednictvím Async.Parallel
, Async.Start
a další operace, které spouští asynchronní bloky paralelně.
Paralelní programování je také podporováno prostřednictvím Pole. Paralelní
operátoři funkčního programování ve standardní knihovně F #, přímé použití System.Threading.Tasks
model programování úloh, přímé použití fondu podprocesů .NET a podprocesů .NET a prostřednictvím dynamického překladu F # kódu na alternativní paralelní spouštěcí stroje, jako GPU[10] kód.
Jednotky měření
Systém typu F # podporuje jednotky měření kontrola čísel.[34] Funkce měrných jednotek se integruje s odvozením typu F #, aby se v uživatelském kódu vyžadovaly minimální anotace typu.[35]
Metaprogramování
F # umožňuje některé formy přizpůsobení syntaxe pomocí metaprogramování k podpoře vkládání vlastní jazyky specifické pro doménu v rámci jazyka F #, zejména prostřednictvím výpočetních výrazů.[30]
F # obsahuje funkci pro metaprogramování za běhu zvanou nabídky.[36] Výraz nabídky se vyhodnotí jako reprezentace abstraktního stromu syntaxe výrazů F #. Podobně definice označené štítkem [
atribut lze také získat v jejich formuláři nabídky. F # nabídky se používají pro různé účely, včetně kompilace F # kódu do JavaScript[9] a GPU[10] kód. (Citace představují jejich výrazy F # kódu jako data pro použití v jiných částech programu a zároveň vyžadují syntakticky správný F # kód).
Programování bohaté na informace
F # 3.0 představil formu meta-programování v době kompilace prostřednictvím staticky rozšiřitelného generování typu s názvem F # poskytovatelé typu.[37] Poskytovatelé typu F # umožňují rozšíření kompilátoru a nástrojů F # o komponenty, které poskytují informace o typu kompilátoru na vyžádání v době kompilace. Poskytovatelé typu F # se používají k poskytování silně typovaného přístupu k připojeným zdrojům informací škálovatelným způsobem, včetně Freebase znalostní graf.[38]
Ve F # 3.0 jsou pro implementaci kombinovány funkce nabídky F # a výpočetního výrazu LINQ dotazy.[39] Například:
// Použijte poskytovatele typů OData k vytvoření typů, které lze použít pro přístup k databázi Northwind.otevřeno Microsoft.FSharp.Data.TypeProviderstyp Severní vítr = ODataService<„http://services.odata.org/Northwind/Northwind.svc“>nechat db = Severní vítr.GetDataContext()// Dotazový výraz.nechat dotaz1 = dotaz { pro zákazník v db.Zákazníci dělat vybrat zákazník }
Kombinace poskytovatelů typů, dotazů a funkčního programování se silným typem je známá jako programování bohaté na informace.[40]
Programování agentů
F # podporuje variaci Herec programovací model prostřednictvím implementace lehkých asynchronních agentů v paměti. Například následující kód definuje agenta a zveřejňuje 2 zprávy:
nechat čelit = MailboxProcessor.Start(zábava doručená pošta -> nechat rec smyčka n = asynchronní { dělat printfn "n =% d, čekám ..." n nechat! zpráva = doručená pošta.Dostávat() vrátit se! smyčka(n+zpráva) } smyčka 0)
Vývojové nástroje
- Vizuální studio, s nástroji Visual F # od Microsoft nainstalován, lze použít k vytvoření, spuštění a ladění projektů F #. Mezi nástroje Visual F # patří hostované Visual Studio read – eval – tisková smyčka (REPL) interaktivní konzole, která může provádět F # kód tak, jak je psán. Visual Studio pro Mac také plně podporuje projekty F #.
- Kód sady Visual Studio obsahuje plnou podporu pro F # prostřednictvím Ionidové rozšíření.
- F # lze vyvinout v libovolném textovém editoru. Specifická podpora existuje v editorech, jako je Emacs.
- JetBrains Rider je optimalizován pro vývoj F # kódu počínaje vydáním 2019.1.[41]
- LINQPad podporuje F # od verze 2.x.
Oblasti použití
F # je a univerzální programovací jazyk.
Webové programování
The BEZPEČNÝ zásobník je end-to-end F # stack pro vývoj webových aplikací. Využívá to ASP.NET Core na straně serveru a Bajka na straně klienta.[42]
Alternativní možností end-to-end F # je WebSharper rámec.[43]
Vývoj aplikací pro různé platformy
F # lze použít společně s Visual Studio Tools for Xamarin vyvíjet aplikace pro iOS a Android. The Báječný knihovna poskytuje pohodlnější funkční rozhraní.
Analytické programování
F # se mimo jiné používá pro kvantitativní finanční programování,[44] obchodování s energií a optimalizace portfolia,[45] strojové učení,[46] obchodní inteligence[47] a sociální hry na Facebook.[48]
V roce 2010 byl F # umístěn jako optimalizovaná alternativa k C #. Díky skriptovacím schopnostem F # a mezijazykové kompatibilitě se všemi produkty společnosti Microsoft je populární mezi vývojáři. Mnoho vývojářů vytváří systémy založené na F # a používají C # WCF Služby.[je zapotřebí objasnění ][Citace je zapotřebí ][SZO? ]
Skriptování
F # lze použít jako skriptovací jazyk, hlavně pro stolní počítače read – eval – tisková smyčka (REPL) skriptování.[49]
Open-source komunita
F # open-source komunita zahrnuje F # Software Foundation[11] a F # Open Source Group na adrese GitHub.[12] Mezi oblíbené open-source F # projekty patří:
- Bajka, překladač F # na Javascript založený na Babel.
- Paket, alternativní správce balíčků pro .NET, který lze stále používat NuGet úložiště, ale má centralizovanou správu verzí.
- FALEŠNÝ, F # přátelský build-systém.
- Žirafa, funkčně orientovaný middleware pro ASP.NET Core.
- Zdvořilý, lehký webový server a knihovna pro vývoj webových aplikací.
Kompatibilita
F # obsahuje starší "režim kompatibility ML", který může přímo kompilovat programy napsané ve velké podmnožině OCaml zhruba, bez funktorů, objektů, polymorfních variant nebo jiných dodatků.
Příklady
Následuje několik malých vzorků:
// Toto je komentář k ukázkovému programu hello world.printfn "Ahoj světe!"
Třída Person s konstruktorem, který přebírá jméno a věk a dvě neměnné vlastnosti.
/// Toto je dokumentační komentář k definici typu.typ Osoba(název : tětiva, stáří : int) = člen X.název = název člen X.Stáří = stáří /// instance třídynechat mrSmith = Osoba("Kovář", 42)
Jednoduchým příkladem, který se často používá k demonstraci syntaxe funkčních jazyků, je faktoriální funkce pro nezáporná 32bitová celá čísla, zde uvedená v F #:
/// Použití výrazu shody vzorůnechat rec faktoriál n = zápas n s | 0 -> 1 | _ -> n * faktoriál (n - 1)/// Pro funkce s jedním argumentem existuje syntaktický cukr (funkce porovnávání vzorů):nechat rec faktoriál = funkce | 0 -> 1 | n -> n * faktoriál (n - 1) /// Použití operátoru skládání a dosahunechat faktoriál n = [1..n] |> Sekv.složit (*) 1
Příklady iterací:
/// Iterace pomocí smyčky 'pro'nechat printList první = pro X v první dělat printfn "% d" X/// Iterace pomocí funkce vyššího řádunechat printList2 první = Seznam.iter (printfn "% d") první/// Iterace pomocí rekurzivní funkce a porovnávání vzorůnechat rec printList3 první = zápas první s | [] -> () | h :: t -> printfn "% d" h printList3 t
Fibonacciho příklady:
/// Fibonacciho vzorec číslanechat fib n = nechat rec G n f0 f1 = zápas n s | 0 -> f0 | 1 -> f1 | _ -> G (n - 1) f1 (f0 + f1) G n 0 1/// Jiný přístup - líná nekonečná posloupnost Fibonacciho číselnechat fibSeq = Sekv.rozvinout (zábava (A,b) -> Nějaký(A+b, (b, A+b))) (0,1)// Tisk rovnoměrných vláken[1 .. 10]|> Seznam.mapa fib|> Seznam.filtr (zábava n -> (n % 2) = 0)|> printList// Totéž, použití výrazu seznamu[ pro i v 1..10 dělat nechat r = fib i -li r % 2 = 0 pak výtěžek r ]|> printList
Ukázkový program Windows Forms:
// Otevřete knihovnu Windows Formsotevřeno System.Windows.Forms// Vytvořte okno a nastavte několik vlastnostínechat formulář = Nový Formulář(Viditelné=skutečný, Nejvyšší=skutečný, Text=„Vítejte na F #“)// Vytvořte štítek, aby se ve formuláři zobrazil nějaký textnechat označení = nechat X = 3 + (4 * 5) Nový Označení(Text = sprintf „x =% d“ X)// Přidejte štítek do formulářeformulář.Řízení.Přidat(označení)// Nakonec spusťte formulář[<Systém.STAThread>]aplikace.Běh(formulář)
Ukázka asynchronního paralelního programování (úlohy paralelního CPU a I / O):
/// Jednoduchý detektor prvočíselnechat isPrime (n:int) = nechat vázaný = int (čtv (plovák n)) násl {2 .. vázaný} |> Sekv.pro všechny (zábava X -> n % X <> 0)// Používáme asynchronní pracovní postupynechat primeAsync n = asynchronní { vrátit se (n, isPrime n) }/// Vraťte prvočísla mezi ma n pomocí více vlákennechat připraví m n = násl {m .. n} |> Sekv.mapa primeAsync |> Async.Paralelní |> Async.RunSynchronously |> Pole.filtr snd |> Pole.mapa první// Spustit testpřipraví 1000000 1002000 |> Pole.iter (printfn "% d")
Viz také
Poznámky
- ^ A b https://devblogs.microsoft.com/dotnet/announcing-f-5/
- ^ https://www.infoq.com/news/2019/04/FSharp-Nulls
- ^ „Licence F # Software Foundation“.
- ^ „Licence F # společnosti Microsoft“.
- ^ A b Syme, Granicz a Cisternino (2007:2)
- ^ A b C d E „F # Historické poděkování“. Citováno 2012-11-24.
- ^ A b Syme, Done (2006). „Využití komponent .NET pro metaprogramování z F #“.
[F #] má kořeny v designu Core ML a zejména má základní jazyk do značné míry kompatibilní s jazykem OCaml
- ^ asynchronní
- ^ A b C d E F G Softwarová nadace F #. „Používání F # pro webové aplikace“. Citováno 2020-07-30.
- ^ A b C d E F G h Softwarová nadace F #. „Používání F # pro programování GPU“. Archivovány od originál dne 25. 12. 2019. Citováno 2019-12-25.
- ^ A b C Softwarová nadace F #. „Softwarová nadace F #“. Citováno 2012-11-24.
- ^ A b Softwarová nadace F #. „F # kompilátor (vydání open source) @ github“. Citováno 2012-11-24.
- ^ „Develop with Visual F # in Visual Studio“. Citováno 2020-07-30.
- ^ "F#". Citováno 2020-07-30.
- ^ Syme, Done. „Vydáno F # 1.0.8“. Microsoft. Citováno 7. září 2014.
- ^ Syme, Done. „F # 2.0 vydané jako součást Visual Studio 2010“. Microsoft. Citováno 7. září 2014.
- ^ Zander, Jasone. „Visual Studio 2012 a .NET Framework 4.5 vydané na webu“. Microsoft. Citováno 7. září 2014.
- ^ „Visual Studio 2013 vydané na web“. Microsoft. Citováno 7. září 2014.
- ^ „Oznámení RTM Visual F # 4.0“. Microsoft. Citováno 15. září 2015.
- ^ „Announcing F # 4.1 and the Visual F # Tools for Visual Studio 2017“. Citováno 2017-03-08.
- ^ https://blogs.msdn.microsoft.com/dotnet/2018/08/14/announcing-f-4-5/
- ^ https://www.nuget.org/packages/FSharp.Core#
- ^ A b https://devblogs.microsoft.com/dotnet/announcing-f-5/
- ^ Edwards, Kathryn (23. prosince 2008). „A-Z programovacích jazyků: F #“. networkworld.com. IDG. Citováno 8. srpna 2016.
- ^ McNamara, Briane. „Více o jazykových funkcích F # 3.0“. Microsoft. Citováno 7. září 2014.
- ^ McNamara, Briane. „Oznámení před vydáním F # 3.1“. Microsoft. Citováno 7. září 2014.
- ^ „Oznámení RTM Visual F # 4.0“. Citováno 2017-03-08.
- ^ „Announcing F # 4.1 and the Visual F # Tools for Visual Studio 2017“. Citováno 2017-03-08.
- ^ https://devblogs.microsoft.com/dotnet/announcing-f-4-7/
- ^ A b C d E F G h "Přehled jazyka F #" (PDF). Citováno 2007-12-14.
- ^ A b „Některé podrobnosti o výpočetních výrazech F #“. Citováno 2007-12-14.
- ^ A b „Porovnávání vzorů v F # Část 2: Aktivní vzory“. Citováno 2012-11-24.
- ^ A b C „Představujeme asynchronní pracovní postupy F #“. Citováno 2007-12-14.
- ^ „Units of Measure (F #)“. Citováno 2012-11-24.
- ^ „Units of Measure Units in F #: Part One, Introducing Units“. Citováno 2012-11-24.
- ^ „Citace kódu (F #)“. Citováno 2012-11-24.
- ^ „Poskytovatelé typů“. Citováno 2012-11-24.
- ^ „New Tech Report from Microsoft Research: Strongly-Typed Language Support for Internet-Scale Information Sources“. Citováno 2012-11-24.
- ^ „Query Expressions (F #)“. Citováno 2012-11-24.
- ^ „F # 3.0 - LINQ + Type Providers = Information Rich Programming“. Citováno 2012-11-24.
- ^ Alexander Kurakin. „Rider 2019.1 odstartuje svůj program předčasného přístupu!“.
- ^ „Fable: JavaScript, na který můžete být hrdí!“. bajka.io. Citováno 2017-12-09.
- ^ Intellifactory. „Domovská stránka WebSharper“. Citováno 2012-11-24.
- ^ „Případové studie Microsoftu: Microsoft Visual Studio 2012 - firma poskytující finanční služby“. Citováno 2012-11-25.
- ^ „F # pro obchodování s energií a optimalizaci portfolia“. Citováno 2012-11-25.
- ^ „Případová studie Microsoftu: Grange Insurance“. Citováno 2012-11-25.
- ^ „Learning with F #“. Citováno 2012-11-25.
- ^ „F # Job in Facebook Social Gaming“. Citováno 2012-11-25.
- ^ "Skriptování v F #". Citováno 2020-01-17.
Reference
- Syme, Done; Granicz, Adam; Cisternino, Antonio (2007), Expert F #, Apress
- Harrop, Jon (2010), Visual F # 2010 pro technické výpočty, Flying Frog Consultancy
- Pickering, Robert (2007), Základy F #, Apress
- Smith, Chris (2009), Programování F #, O'Reilly
- Petříček, Tomáš (2009), Funkční programování v reálném světě s příklady v F # a C #, Manning Publications
- Hansen, Michael; Rischel, Hans (2013), Funkční programování pomocí F #, Cambridge University Press
- Astborg, Johan (2013), F # pro kvantitativní finance, Packt Publishing
- Lundin, Mikael (2015), Testování s F #, Packt Publishing
externí odkazy
- Oficiální webové stránky Softwarová nadace F #
- Skupina F # Open Source na GitHubu
- Centrum pro vývojáře Visual F #
- Tsunami, integrovaný desktop F # IDE
- Cloud Tsunami, zabudovatelný Silverlight F # IDE
- Vyzkoušejte F #, abyste se naučili F # ve webovém prohlížeči
- F # Snippets Site
- Blog týmu Visual F #
- Původní web Microsoft Research pro F #
- Planeta F #
- Průvodce přežití F #, prosinec 2009 (webová kniha)
- Specifikace jazyka F #
- Úvod do programování F #
- Výukový program ukazující proces dosažení funkčního designu; zahrnuje testovací a paralelní kódování