mboost-dp1

Rick Hickey

Clojure klar i version 1.0

- Via Version2 - , indsendt af arne_v

Programmeringssproget Lisp stammer helt tilbage fra 1950’erne og er dermed et af de ældste, der findes. Udvikleren Rich Hickey besluttede for et par år siden at begynde på udviklingen af en moderne udgave, og det er nu blevet til Clojure.

Clojure, der udtales “Closure” og er open source, er en variant af Lisp og fungerer over Javas afviklingsmiljø. Formålet med programmeringssproget er at tilbyde et miljø, der nemt kan udnytte de stadig flere kerner, som findes i moderne processorer.

Modsat flere af de andre kendte programmeringssprog, som f.eks. C#, F# og Scala, så egner Lisp, og dermed Clojure, sig bedre til parallel-programmering.

Du kan læse meget mere om Clojure på dets hjemmeside, hvor du også kan downloade det.





Gå til bund
Gravatar #1 - p1x3l
13. maj 2009 06:48
synes det ser ufatteligt neder udfra syntax
ved meste kode ka man se mindre mening eller bare det man skriver/de functioner man bruger giver en anelse mening
functionel programming skrev:

(defn argcount
([] 0)
([x] 1)
([x y] 2)
([x y & more] (+ (argcount x y) (count more))))
=
-> #'user/argcount
(argcount)
-> 0
(argcount 1)
-> 1
(argcount 1 2)
-> 2
(argcount 1 2 3 4 5)
-> 5


bare måde de skriver / prøver demonstrere hvordan koden virker giver hovedpine [x y & more] = 1 2 3 4 5 ?? hvaaaa

mmm køre det på java ? ka man ik ligeså godt bruge java så da -.- giver en smugle mere mening
Gravatar #2 - LordMike
13. maj 2009 06:58
Ugh.. No more... Java...
Gravatar #3 - mathiass
13. maj 2009 06:59
#1: Sproget er grundlæggende fuldstændig anderledes konstrueret end Java, C, C# og lignende. Selvom du måske ikke lige forstår det ved første øjekast, så er der ganske mange gode ideer i det. Jeg tror ikke at du kunne skrive en funktion i Java, C eller C# som kunne tælle antallet af elementer i en liste på mindre plads end den kode du har skrevet.
Gravatar #4 - SirClickAlot
13. maj 2009 07:18
Jeg tror at de fleste der (som jeg selv) har beskæftiget sig med funktionelle sprog vil synes det er en spændende nyhed. Jeg håber det en dag kommer som .Net sprog. Så ville man også her kunne skrive elegante moduler til de dele af ens kode man gerne vil have parallelliseret.

Og ja.. Syntaksen er til at få kvalme af når man først præsenteres for den :)

Det går over.
Gravatar #5 - imageicon
13. maj 2009 07:20
#3
det er jeg 100% sikker på at jeg godt kan...

well for det første kunne jeg tælle det med list.Count eller list.Length alt efter hvad sprog og hvad de lige implementere så det er 1 linje
hvis du syntes det er snyd kunne man wel tælle det med
public int countFunction(List list){
int counter=0;
foreach(item i in list){
counter++;
}
return counter;
}

for mig at se væsentligt mindre linjer

Edit:
også alligevel er de nederste linjer vel eksempler på brug eller hvordan? forstår mig ikke helt på deres kode :P
Gravatar #6 - locky
13. maj 2009 07:25
#3 & #5

list.length - Hvis vi nu bruger deres API :o)
Gravatar #7 - kg
13. maj 2009 07:32
Hey Clojure... Gordon Freeman har ringet og han var vist ikke helt tilfreds.
Gravatar #8 - Onde Pik
13. maj 2009 07:41
#5

Koden der er et ekempel på hvordan kode typisk ser ud i funktionsorienterede sprog. Sytaxen varierer men logikken er ofte ret meget den samme.

Gennemløb af lister sker gennem rekursive funktionskald og pattern matching.

Du kan sagtens skrive en funktion med samme logik i Java det giver bare ikke så meget mening.
Gravatar #9 - illishar
13. maj 2009 07:43
LISP *kan* vistnok bruges som et funktionelt sprog som #4 nævner (hvilket er ide'en i den her sammenhæng) og det kan derfor ikke sammenlignes med C# og Java. Dog er det nu lidt svært at se, hvorfor det skulle være bedre til parallel-programmering og skalering, end eks. F# som der også er et funktionelt sprog.

Det er derudover dog lidt komisk at man vil prøve at genoplive sproget der er kendt for at have historiens værste syntax :P
Gravatar #10 - jlouis
13. maj 2009 08:16
Hvorfor hulen skulle en lisp-variant, være bedre til parallelprogrammering end ethvert andet sprog? Mit bullshitmeter røg lige out-of-scale der :)

#1:

Du skal læse lidt om rekursion og pattern-matching.
Gravatar #11 - p1x3l
13. maj 2009 09:44
ye ka godt se pointen efter jeg har kigget lidt for længe på det -.-

<?phpsrc
function argcount($arg) return count(explode(" ", $arg));

echo argcount("1 2 3 4 5");

// edit: for at værre korrekt sku det nok mere være
function argcount($arg) {
foreach(explode(" ", $arg) as $ar)
$i++;
return $i;
}
=?> 5

... vil sige er samme function på en linie .. at den så er en anelse ubruglig det så

som jeg siger i mit første indlæg så vil jeg sige ^^ giver mere mening :) da man ka tyde hva koden betyder uden sku decryptere med en manual

men det så nok bare en vanesag :p
Gravatar #12 - Leonhard
13. maj 2009 10:16
#9 Lisp er ikke kendt for at have verdens værste syntax, nærmest tvært imod. Blandt matematikere er det kendt som det eneste sprog hvori man kan fører matematisk bevisførelse for at koden opfører sig som den skal i alle tilfælde. Det kan nævnes at Mathematica bygger på et lisp inspireret sprog, dog hvor input syntaxen er lidt mere brugervenlig.
Gravatar #13 - jAST
13. maj 2009 10:32
Jeg synes folk der er interesseret i Parallel programming skal kigge lidt på Haskell :)
Gravatar #14 - illishar
13. maj 2009 10:59
#12 Du hentyder til at LISP hører under "funktionelle sprog". Den slags har ikke noget at gøre med syntaxen. Og LISP er heller ikke det mest oplagte valg, til denne slags opgaver (Matematisk bevis-førelse o.l.), da det ikke er "strict" mht. det "funktionelle".
Gravatar #15 - illishar
13. maj 2009 11:12
#10 Funktionelle sprog er bedre til parallel-programmering, da en given funktion ikke kan påvirkes af andet end den selv. Man kan derfor afvikle alle funktioner og deres rekursioner i seperate tråde. Ansvaret for parallelisering, kan derfor lægges over på compileren/afvikleren. (Porgammøren skal ikke tage stilling til hvad der skal opdeles og hvornår.)

Men så vidt jeg husker, så kan klassisk LISP godt definere globale variable mm. (Hvilket ødelægger konceptet lidt.)
Gravatar #16 - Taxwars
13. maj 2009 12:19
Clojure udtales "klo-djure" - hvis de ikke en gang kan udtale deres eget navn ordentlig, kan de så programmere?
Gravatar #17 - Cuco2
13. maj 2009 13:23
#16
De kan jo lave deres egne udtaleregler. Enhver bestemmer selv hvordan deres eget navn skal udtales, tænk bare på alle numerolog tilfældene...
Gravatar #18 - arne_v
13. maj 2009 13:44
SirClickAlot (4) skrev:
Jeg håber det en dag kommer som .Net sprog. Så ville man også her kunne skrive elegante moduler til de dele af ens kode man gerne vil have parallelliseret.


http://www.lsharp.org/ ?
Gravatar #19 - SirClickAlot
13. maj 2009 20:40
Taxwars (16) skrev:
Clojure udtales "klo-djure" - hvis de ikke en gang kan udtale deres eget navn ordentlig, kan de så programmere?


Jeg gætter på du ikke har haft fransk i skolen. Der er ikke så meget tvivl om udtalen. Det engelske begreb closure er centralt i traditionel funktionel programmering.

#7:

Lambda tegnet er ikke hugget fra halflife :) det er en reference til lambda-calculus, der er det matematiske fundament for funktionel programmering.
Gravatar #20 - SirClickAlot
13. maj 2009 21:02
arne_v (18) skrev:
http://www.lsharp.org/ ?


Nice. Ved ikke om man skal forvente at det performer, men geek cred til ham :)
Gravatar #21 - arne_v
14. maj 2009 18:34
Modsat flere af de andre kendte programmeringssprog, som f.eks. C#, F# og Scala, så egner Lisp, og dermed Clojure, sig bedre til parallel-programmering.


Det står der så ikke i kilden.

F# og Scala er også funktionelle sprog.
Gravatar #22 - arne_v
14. maj 2009 18:36
p1x3l (1) skrev:
mmm køre det på java ? ka man ik ligeså godt bruge java så da -.- giver en smugle mere mening


Ikke hvis du vil have funktionel programmering.

Men mange vil nok finde Scala lidt nemmere at komme igang med end Clojure.
Gravatar #23 - arne_v
14. maj 2009 18:39
SirClickAlot (20) skrev:
Nice. Ved ikke om man skal forvente at det performer, men geek cred til ham :)


L# er absolut ikke et udbredt sprog.

Men jeg kunne huske at jeg havde set det. Og så var det til at opgoogle.

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