mboost-dp1

Microsoft

Microsoft frigiver F# under Apache-licensen

- Via MSDN Blogs - , indsendt af OnkelDunkel

Programmeringssproget F# (F Sharp), der er udviklet af Microsoft og henvender sig til .NET-udviklere, har netop set frigivelsen af en ny udgave af F# Powerpack, der denne gang indeholder en markant ændring. Nu er F#-compileren og kernebibliotekerne frigivet som open source.

Kildekoden er frigivet under Apache 2.0-licensen og kan hentes sammen med F# Powerpack, der er et Codeplex-projekt. Er man ikke interesseret i kildekoden, så er det naturligvis stadigt muligt at hente den binære udgave.

Den største ændring i den nye Powerpack er selve open source-beslutningen; softwaren er der ikke ændret meget på siden F# 2.0 blev udgivet i april.

Udviklerne satser på, at fremtidige frigivelser af kildekode vil ske samtidigt med, der kommer opdateringer til Visual Studio 2010, men vil dog ikke garantere, det sker præcis samme dag.

Du kan læse meget mere om F# på dets hjemmeside og hente den nye Powerpack hos Codeplex.





Gå til bund
Gravatar #1 - Lundt
8. nov. 2010 07:04
Hvad fanden er F# ? det må jeg sku lige google.

Kender kun et enkelt sprog som hedder noget med sharp , det c#.
Gravatar #2 - M.daugaard
8. nov. 2010 07:05
Lundt (1) skrev:
Hvad fanden er F# ? det må jeg sku lige google.


Hvad finder du frem til, og hvordan adskiller det sig fra C#?
Gravatar #3 - BurningShadow
8. nov. 2010 07:06
Kom så alle sammen, fortæl os hvor store nogle svin Microsoft er, når nu de onde sataner frigiver det under Apache licensen.
Gravatar #4 - M.daugaard
8. nov. 2010 07:14
BurningShadow (3) skrev:
Kom så alle sammen, fortæl os hvor store nogle svin Microsoft er, når nu de onde sataner frigiver det under Apache licensen.


Challenge accepted.

Microsoft er nogen onde sataner, da de vil os til at programmere i flere ML-lignende sprog ved at gøre kildekoden frit tilgængelig.

ML er ondt, ergo er Microsoft onde. Q.E.D.

Wiki om F#
Gravatar #5 - Windcape
8. nov. 2010 07:26
#4

Det kunne have været værre. F.eks. Haskell# :p
Gravatar #6 - chris
8. nov. 2010 07:43
nyhed skrev:

Programmeringssproget F# (F Sharp), der er udviklet af Microsoft... og kernebibliotekerne frigivet som open source.


Det bliver træls med de der 6 dages arbejdsuger, nu hvor der er kommet 2 torsdage :P
Gravatar #7 - bjarne2411
8. nov. 2010 08:01
Gravatar #8 - fennec
8. nov. 2010 08:33
Det kan godt være F# er smart, men det er sku ikke letlæselig...

Nu har jeg lige skimmet de links, der er blevet smidt herind, og selvom jeg arbejder som programmør, så har jeg svært ved at se og forstå, hvad der sker i de F# koder.

Giv en helt almindelig person (uden programmerings egenskaber) en C#, PHP, Java kode og jeg vil gætte på at de vil kunne forstå hvad der sker. Det vil de ikke kunne med F# kode.

Kommer til at tænke på Regular Expression. Det er også et mega kraftfuld værktøj, men det er absolut ikke letforstålig.

Det eneste der lige popper frem som en rigtig fed feature er F# Interactive (FSI). Det at kunne afprøve en kode stump, bare ved at markere den og trykke Alt+Enter er mega nice, så man ikke skal til at compile hele projektet inde man kan debugge.
Gravatar #9 - Windcape
8. nov. 2010 08:36
#8

Funktionel programmering, og ML/OCalm er intet nyt. Du burde udvide din horison, hvis du umiddelbart ikke synes det er letlæseligt.

fennec (8) skrev:
og selvom jeg arbejder som programmør, så har jeg svært ved at se og forstå, hvad der sker i de F# koder.
Lad være med at fortælle din chef det. Og se så at få efterspurt noget mere efteruddannelse.

Enhver programmør burde kunne læse og forstå F# på et grundlæggende niveau.
Gravatar #10 - Lundt
8. nov. 2010 08:40
M.daugaard (2) skrev:
Hvad finder du frem til, og hvordan adskiller det sig fra C#?



(* print a list of numbers recursively *)
let rec printList lst =
match lst with
| [] -> ()
| h :: t ->
printf "%d\n" h
printList t

(* Same thing, using matching against list elements *)
let rec printList2 l =
match l with
| [] -> ()
| h :: t -> printfn "%A" h
printList2 t

(* Using shorthand for match *)
let rec printList3 = function
| [] -> ()
| h :: t -> printfn "%A" h
printList3 t

(* Or, using a higher-order function *)
let printlist4 lst = List.iter (printfn "%A") lst

Syntes godt nok det er inviklet i forhold til c#. Men det højst sandsynligt kun fordi jeg ikke kan programmere i F#.
Gravatar #11 - Windcape
8. nov. 2010 08:40
Et eksempel de fleste nok kan forholde sig til, nemlig QuickSort

Bedre formatteret kode: https://gist.github.com/667484


let rec QuickSort(input : List<int>) =
match input with
| [] -> []
| head :: tail ->
let smaller = qsort (tail |> List.filter(fun e -> e <= x))
let larger = qsort (tail |> List.filter(fun e -> e >= x))
smaller @ [head] @ larger


head = nuværende element.
tail = resterende elementer.

[] -> [] = håndtering af tom liste. (returner et tomt set.)

(List.filter benytter sig af en lambda expression, noget enhver programmør med respekt for sig selv kan finde ud af)
Gravatar #12 - Windcape
8. nov. 2010 08:48
Lundt (10) skrev:
Syntes godt nok det er inviklet i forhold til c#. Men det højst sandsynligt kun fordi jeg ikke kan programmere i F#.
Prøv at sammenligne QuickSort eksemplet med en C# implementering.

Du vil hurtigt finde at alt der er det mindste rekursivt (eller async) er meget lettere i F#.
Gravatar #13 - Montago.NET
8. nov. 2010 08:59
Windcape (9) skrev:
Enhver programmør burde kunne læse og forstå F# på et grundlæggende niveau.


F# kræver altså lige at man sætter sig ind i grundelementerne... ellers er det næsten ren volapyk.

bl.a. skal man forstår hvordan koden fortolkes og syntaxen.

Hvis man koder C# dagen, er det ikke ensbetydende med at forstå F#.

F# minder om LEX eller FLEX parsere som jeg havde på DTU - men det er sku ikke ensbetydende med at F# giver mening...

ku godt tænke mig at lege med F# men har ikke lige haft tid eller energi til at sætte mig ind i det.
Gravatar #14 - Windcape
8. nov. 2010 09:05
Montago (13) skrev:
F# kræver altså lige at man sætter sig ind i grundelementerne... ellers er det næsten ren volapyk.
Overhovedet ikke. Størstedelen er som i enhvert andet programmeringssprog.

Montago (13) skrev:
Hvis man koder C# dagen, er det ikke ensbetydende med at forstå F#.
Det er endsbetydende med at man forstår lambda, hvis man bare har den mindste selvrespekt, og fra der er vejen til det funktionelle paradigm, og dermed funktionel programmering, meget kort.

Montago (13) skrev:
F# minder om LEX eller FLEX parsere som jeg havde på DTU - men det er sku ikke ensbetydende med at F# giver mening...
Det eneste som minder om det er vel at man bruger | til at beskrive statement-trees i.

Og at man koder C# til hverdag, betynder forhåbelig også at man kender til andre sprog end C# ! Så derfor mener jeg at enhver programmør burde kunne forstå det quicksort eksempel jeg har postet.
Gravatar #15 - bjarne2411
8. nov. 2010 09:08
Apropo letforstålig programeringskode, så mener jeg nu at vb.net slår alle i let forståelighed og er det nemmeste at lære
Gravatar #16 - fennec
8. nov. 2010 09:08
#9
Har skam også tænkt mig at tjekke F# ud :)

Jeg har lært mig selv mange sprog (og glemt dem igen fordi jeg ikke bruger dem). Af de sprog jeg har brugt i længere tid startede jeg i Turbo Pascal, så Java, så VB (ASP) og nu i C#. Der imellem har jeg afprøvet flere sprog end jeg snart har tal på (php, c, ruby og mange andre).

I modsætning til F#, så er det utrolig nemt at gå til et nyt sprog, da syntaxen (som ofte) liger hinanden. Det eneste man egentlig bruger tid på er at finde ud af hvad funktionen, til hvad man nu vil, hedder. F.eks hvis vil man udskrive tallene 1 til 10, så er det næsten kun "write" funktionen, som er forskellige fra sprog til sprog (da den kan hedde echo, write, print osv.).

Som #13 nævner, så er grund elementerne i F# meget anderledes end de "normale" sprog. Og derfor vil indlæringstiden være meget længere, end hvad jeg skulle bruge på at lære de andre sprog.

Men som sagt, så skal jeg da helt klart afprøve det. Og da det er et .NET sprog, burde man jo kunne lave funktioner, som man kan kalde fra C#. Og derfor bruge F# og C# der hvor de hver har deres styrke.

[Edit]
Så lige din #14 post. Skal ikke kunne udtale mig om "Størstedelen er som i enhvert andet programmeringssprog". Af hvad jeg har set indtil videre, så ligner det ikke andre sprog. Men jeg ændre måske mening, når jeg dykker ned i det.

Hvis du tilfældigvis kender til en god tutorial, må du da gerne smide et link :)
Gravatar #17 - Ildhesten
8. nov. 2010 09:09
Her er lidt om lambdakalkylen som danner grundlaget for funktionel programmering.

Og er man virkelig interesseret kan man anskaffe sig:
The Lambda Calculus: Its Syntax and Semantics
Gravatar #18 - Windcape
8. nov. 2010 09:27
fennec (16) skrev:
I modsætning til F#, så er det utrolig nemt at gå til et nyt sprog, da syntaxen (som ofte) liger hinanden
Diverse C sprog ligner hinanden. Hvis du har arbejdet mere med OCalm, ML, Haskell, Lisp, Python, Ruby så ville det slet ikke være så underligt, som hvis du kommer fra en ren C-sprog baggrund.

fennec (16) skrev:
Som #13 nævner, så er grund elementerne i F# meget anderledes end de "normale" sprog. Og derfor vil indlæringstiden være meget længere, end hvad jeg skulle bruge på at lære de andre sprog.
Det passer så ikke.

Du skal kun lære ét nyt koncept: statement piping. Resten fungere ligesom i det imperative sprog. At bare benytter expression tree's i langt højere grad i F# end i andre sprog, betyder ikke at det ikke findes i C#.

Det handler i høj grad mere om hvilke paradigmer/koncepter man kender til. C#, JavaScript, Python og Ruby er nok de imperative (hybrid) sprog som har flest af de funktionelle koncepter.
Gravatar #19 - Windcape
8. nov. 2010 09:28
Ildhesten (17) skrev:
Her er lidt om lambdakalkylen som danner grundlaget for funktionel programmering.

Og er man virkelig interesseret kan man anskaffe sig:
The Lambda Calculus: Its Syntax and Semantics
Det er så overhovedet ikke nødvendigt at forstå overstående for at kunne benytte sig af funktionel programmering eller F#.

Det er mest til teoretikerne som synes matematik er sjovere end praktisk programmering :p

(Og hele grunden til at FP har været hovedsageligt forbeholdt det akademiske niveau de sidste 70 år.)
Gravatar #20 - Ildhesten
8. nov. 2010 10:09
#19
Okay, Ill bite...
Windcape (19) skrev:

Det er mest til teoretikerne som synes matematik er sjovere end praktisk programmering :p

Nu behøver man jo ikke holde de 2 ting adskilt som du er så glad for. Jeg vil også vove at påstå at kan du først udtrykke ting i lambda calculus, kan du også skrive fx Scheme, eller LISP.

Er det nødvendigt at forstå lambda calculus for at man kan skrive et funktionelt program i F#? Nej bestemt ikke, men det skader aldrig at udvide sin horisont, som du selv nævner i tidligere indlæg.
Gravatar #21 - Windcape
8. nov. 2010 10:26
#20

Forskellen er bare at F# og lambda-expressions (i kode, ikke matematisk), er brugbare, hvor lambda-calculus er meningsløst matematik for matematikerne.

Og Lisp handler nu mere om at kunne overskue parenteserne i sine sexps, end alt andet :p

P.S. Scheme er en dialekt af LISP. (Så "eller" giver ikke mening)
Gravatar #22 - Ildhesten
8. nov. 2010 10:56
Windcape (21) skrev:
#20
Og Lisp handler nu mere om at kunne overskue parenteserne i sine sexps, end alt andet :p

emacs gør den slags til et trivielt problem.

Windcape (21) skrev:
#20
Forskellen er bare at F# og lambda-expressions (i kode, ikke matematisk), er brugbare, hvor lambda-calculus er meningsløst matematik for matematikerne.

Det fint at du ikke forstår meningen. Men der er et stort hop fra det, og så at konkludere det er meningsløst.
En god slat de teknikker som funktionelle compilere benytter sig af idag, er blevet udledt af at teoretikere har siddet og fedtet med deres lambda calculus. Hvilket du skylder dem at være dybt taknemmelig for, og derfor ikke kalde deres arbejde med lambda calculus meningsløst.
Gravatar #23 - ismetteren
8. nov. 2010 12:13
#16: De sprog du nævner er også imperative(ruby har vidst også nolge funktionelle elementer), hvor imod F# er funktionelt. Det er et helt andet paradigme og er derfor også anderledes.
Gravatar #24 - squad2nd
8. nov. 2010 13:53
Jeg synes det er fornuftigt at man lærer et nyt programmeringssprog engang imellem... men det burde også inkludere en ny platform.

Det virker lidt åndssvagt at hvis man både programmerer i C# eller VB.Net på .NET platformen, at man så lærer endnu et sprog som kører på .NET, bare fordi det er nyt og fancy.

Letlæselig kode, ja tak! Komprimeret og smartass-syntax, nej tak!
Gå til top

Opret dig som bruger i dag

Det er gratis, og du binder dig ikke til noget.

Når du er oprettet som bruger, får du adgang til en lang række af sidens andre muligheder, såsom at udforme siden efter eget ønske og deltage i diskussionerne.

Opret Bruger Login