vdaka za clanok konecne nieco zaujimave na roote
Názory k článku
Clojure aneb jazyk umožňující tvorbu bezpečných vícevláknových aplikací pro JVM (2.část)
Re: Clojure aneb jazyk umožňující tvorbu bezpečných vícevláknových aplikací pro JVM (2.část)
celé vláknoRe: Clojure aneb jazyk umožňující tvorbu bezpečných vícevláknových aplikací pro JVM (2.část)
celé vláknoPřipojuji se. Výborný článek!
ampersand
celé vláknoNepletete si ampersand s apostrofem?
Re: ampersand
celé vláknoAno, taky jsem si toho všiml, je to tam nejméně třikrát.
Re: ampersand
celé vláknoah omlouvam se, chyba mezi zidli a klavesnici zpusobena neexistenci klimatizace doma :-)
Necham to opravit, v kazdem pripade zdrojaky jsou dobre - je to ostatne copy & paste z konzole s REPLem...
prejmenovat root.cz na bfu.cz
moje rec, root by se mel prejmenovat na BFU, protoze uroven clanku jde rapidne dolu... tohle je svetla vyjimka
Re: Clojure aneb jazyk umožňující tvorbu bezpečných vícevláknových aplikací pro JVM (2.část)
celé vlákno"infixové operátory by nebylo možné předávat jako parametry do jiných funkcí atd"
preco nie? btw su jazyky v ktorych je mozna aj infixova aj prefixova notacia, napriklad v F#
(+) 1 1 //prefixový zápis
1 + 1 //infixový zápis
a tiez sa dajú predávat ako parameter
[1;2;3] |> List.reduce (+) //spocita vsetky polozky zoznamu
pretoze kazdy operator je funkcia (tak ako v Clojure) takze si mozem trebars aj nadefinovat novy operator "+" - ktory bude odcitat :P
let (+) a b = a - b
1 + 1 // 0
F# a clojure su velmi podobne jazyky akurat F# ma omnoho volnejsiu syntax (vacsinu zatvoriek si dokaze doplnit compiler na zaklade odsadzovania) na druhej strane Clojure ma vyhodu ze je dynamicky z coho vyplyva kopec dalsich vyhod.
Re: Clojure aneb jazyk umožňující tvorbu bezpečných vícevláknových aplikací pro JVM (2.část)
celé vláknoA to jsou ty operatory potom jenom binarni nebo n-arni jako v Lispu, pardon v Clojure?
Re: Clojure aneb jazyk umožňující tvorbu bezpečných vícevláknových aplikací pro JVM (2.část)
celé vláknoV F# jsou pouze unární a binární operátory.
Re: Clojure aneb jazyk umožňující tvorbu bezpečných vícevláknových aplikací pro JVM (2.část)
celé vláknoNejlepší by byl n-ární infixový operátor. :-D
Re: Clojure aneb jazyk umožňující tvorbu bezpečných vícevláknových aplikací pro JVM (2.část)
celé vláknoNejlepší by byl n-ární infixový operátor. :-D
Což pro pevné n není neobvyklé:
- podmínka ? platí : neplatí
- kontext ⊢ výraz : typ
Podobně můžeme mít binární postfixový operátor pole[index].
Re: Clojure aneb jazyk umožňující tvorbu bezpečných vícevláknových aplikací pro JVM (2.část)
celé vláknoNojo, ale to je porad operator s pevnou aritou :-)
Takove + v Clojure ma vlastne libovolnou aritu omezenou temi nechvalne znamymi LISPovskymi zavorkami - bez nejakeho omezovaciho znaku to asi nejde ...
Re: Clojure aneb jazyk umožňující tvorbu bezpečných vícevláknových aplikací pro JVM (2.část)
celé vláknoŽe jsou F# a Clojure velmi podobné, to je dost odvážné tvrzení, až na to, že jsou to funkcionální jazyky, mají dost jinou filozofii (alespoň co o F# vím, kdyžtak mě opravte). F# je silně inspirovaný Haskellem.
Re: Clojure aneb jazyk umožňující tvorbu bezpečných vícevláknových aplikací pro JVM (2.část)
celé vláknoF# je spíš inspirovaný OCamlem.
Iracionalni cisla
celé vláknoMam otazku k poslednimu prikladu na zlomky. Vyraz, ktery je tam uvedeny, sestava jen z nasobeni a deleni, tj. jeho vysledek vzdy musi byt racionalni!
Je snad to, ze Clojure nevypise zlomek, zpusobeno pouzitim literalu 0.3 misto 3/10?
Tohle by chtelo v clanku vic ujasnit.
Re: Iracionalni cisla
celé vláknoNo jestli se Clojure chova stejne jako Common Lisp, tak se tim 0.3 "prepne" datovy typ na real. Automaticky prevod 0.3 na 3/10 by asi nebylo to, co chtel uzivatel. Ale nevim, mozna to ma Clojure jinak nez CL.
Re: Iracionalni cisla
celé vláknohej, je to tak :)
Re: Clojure aneb jazyk umožňující tvorbu bezpečných vícevláknových aplikací pro JVM (2.část)
celé vláknoClojure se mi hrozně líbí, ale roky a roky práce investované do Common Lispu, jeho kompilátorů, nástrojů a featur bude dohánět jen stěží...
Rozsáhlý Java ekosystém, vývojáři znalí největších předností (a nedostatků) Common Lispu a toho, jaké klade moderní software požadavky na použité nástroje, to všechno hraje Clojure neskutečně do karet. Ale pokud jde o vyspělost a "ověřenost v bitvách", tak tam má Common Lisp pořád ještě navrch a proto Clojure sleduju sice se zájmem, ale zatím jenom z povzdálí. :-)
Re: Clojure aneb jazyk umožňující tvorbu bezpečných vícevláknových aplikací pro JVM (2.část)
celé vlákno... ty uz to nehul ...
Re: Clojure aneb jazyk umožňující tvorbu bezpečných vícevláknových aplikací pro JVM (2.část)
celé vláknoOn prave ten Java ekosystem do znacne miry nahrazuje praci, kterou museli lidi vlozit do vyvoje CL. Osobne si myslim, ze tudy povede i cesta dalsich jazyku - namisto nad HW (+ nejake vrstvicce ala libc/glibc...) budou postaveny na VM (idealne JVM, treba i Parrot VM jestli se konecne prosadi), takze se nebude muset resit optimalizujici prekladac, GC, knihovny pro GUI a ja nevim co jeste budou VM+RE nabizet.
jinak nic proti CL, to je proste poradny tezkotonazni stroj, pekne se s nim da vyhrat (makra, CLOS..,)
Bezvadný!
celé vláknoOpět bezvadná série. Dobrá práce, Pavle, díky!
Jenom drobný poznámky (většinou překlepy):
"podpora pro datového typu"
Není pro "form" v češtině zaužívaný pojem "formule"? Jako "forma" (ani "formulář" ;) bych to nepřekládal.
Ampersand -> apostrof, to už tady zaznělo
duplikátní -> duplicitní
Není zbytečný psát pořád dokola Closure, Lisp atd. italikou? Při čtení to trochu ruší běh odstavce...
Některý věci se možná zbytečně opakují (už zazněly v předchozím dílu).
> Pomocí běžných funkcí by nebylo možné tuto funkcionalitu splnit, protože by se kód (předaný jako parametr – jinou možnost v Clojure ostatně prakticky nemáme) vykonal ještě před zavoláním „podmínkové“ funkce.
Jde to udělat i pomocí lambdy, ne? Speciální "if-funkce" imho nezbytně nutná není.
Ale to jsou jenom drobný výhrady, jinak fakt super práce a ještě jednou za ni dík.
Re: Bezvadný!
celé vláknoJak by se dala specialni forma (formule?) "if" vytvorit pomoci lambdy? Me to dost zajima, protoze jsem premyslel o tom, jestli by slo udelat lisp-like jazyk bez spec. forem. Neco podobneho ma TCL, ale tam je to jaksi vsechno naopak - cely seznam se automaticky quotuje, takze se musi spustit explicitne. Tam asi spec. formy nepotrebuji, kdyz je to interne vsechno retezec, ale LISP/Clojure?
Re: Bezvadný!
celé vláknoImho by to slo minimalne tak, ze by ten if byla specialni zabudovana funkce (takze minimalne syntakticky by to nic specialniho nebylo):
if (podminka, lambda x,y: neco_pokud_ano(x,y), lambda a,b: neco_jinyho_pokud_ne(a,b))
Kdyby to nemela byt ani zabudovana funkce, tak by se to nejspis dalo zrealizovat za podminky lineho vyhodnocovani: (podminka) and (lambda x,y: neco_pokud_ano(x,y))
Syntakticky je to samozrejme nepohodlny, ale jde to.
Re: Bezvadný!
celé vláknoDiky za pripominky, italiku jsem v dalsi casti omezil (pokud jsem to nekde nezapomel, tak je u kazdeho terminu pouzita jen u jeho prvniho vyskytu). Ampersand uz by se taky nemel vyskytovat - za to se stydim, ale zase psat v podkrovnim byte s 33 C, to uz opravdu mozek vynechava :-)
*if* jako specialni forma (formule?) nutny neni, slo by to resit pomoci makra a specialnich forem *and* a *or* - myslenka v clanku byla takova, ze podporu specialnich forem v LISPovskych jazycich potrebujeme, protoze se automaticky vyhodnocuji parametry, coz ne vzdy chceme (krome if je prikladem i makro while pro smycku, def/defun/define/let atd.)
"Prvky v množině nesmí být duplikátní!"
tak nejak mi unika chovanie sa vstupu:
user=> #{1 '1}
#{1}
Nemalo by to taktiez vyhodit vynimku?, nakolko:
(= 1 '1)
true
Konstruktor seznamu
Děkuji za článek :-)
Jenom poznámka - část 3 - pro konstruktor Seznamu se v Clojure používá (list prvky)
=> (doc list)
- - - - - - - - - - - - - -
clojure.core/list
([& items])
Creates a new list containing the items.

