Rich Hickey pranešimas Java programuotojams

34 views
Skip to first unread message

Osvaldas Grigas

unread,
Jul 4, 2015, 8:35:30 AM7/4/15
to cloju...@googlegroups.com
Niekas geriau už patį Rich Hickey nepapasakos, kodėl verta išbandyti Clojure:

Galite pashare'inti kolegoms Java programuotojams.

Osvaldas

Karolis Butkus

unread,
Jul 5, 2015, 3:22:40 PM7/5/15
to Osvaldas Grigas, cloju...@googlegroups.com
Nice prezentacija ir siaip ivairiu graziu minciu kyla, bet kai parodo screenshota su kodo gabalu, tai truputi turetu gasdinti kitas kalbas praktikuojancius:) (attached)


On Saturday, July 4, 2015, Osvaldas Grigas <o.gr...@gmail.com> wrote:
Niekas geriau už patį Rich Hickey nepapasakos, kodėl verta išbandyti Clojure:

Galite pashare'inti kolegoms Java programuotojams.

Osvaldas

--
Gavote šį pranešimą, nes prenumeruojate „Google“ grupę „(Clojure/LT)“.
Jei norite atšaukti šios grupės prenumeratą ir iš jos nebegauti el. laiškų, praneškite apie tai adresu clojure-lt+...@googlegroups.com.
Jei norite peržiūrėti šią diskusiją žiniatinklyje, apsilankykite https://groups.google.com/d/msgid/clojure-lt/a23dbc3b-2ae7-4166-9c8a-54f66f4e216b%40googlegroups.com.
Daugiau parinkčių rasite apsilankę adresu https://groups.google.com/d/optout.
IMG_1577.jpg

Osvaldas Grigas

unread,
Jul 5, 2015, 5:34:42 PM7/5/15
to Karolis Butkus, cloju...@googlegroups.com
Taip tikrai nutiks. Tokia reakcija visada kyla iš žmonių, kurie matė per mažai Lisp kodo :)
Laimei, sintaksės misticizmą galima nesunkiai išsklaidyti. Tiesiog parodyti štai ką:

vietoj  Math.max(5, 3)  rašom  (Math/max 5 3) 

ir tai padengia 90% Clojure sintaksės, nes ta pati skliaustelių sintaksė naudojama beveik VISKAM: definitions, function calls, arithmetic operations, ir t.t. Dar gali paminėti, kad prie naujos sintaksės priprantama labai greitai.

Osvaldas

Message has been deleted

Vadim

unread,
Jul 6, 2015, 7:27:25 AM7/6/15
to Maksim Pečorin, cloju...@googlegroups.com
Atsakysiu is savo patirties:

1) paprastais atvejais (kai yra nedidelis funkciju kiekis) wrappinam Java i Clojure ns ir naudojam ta ns. Sunkiais atvejais, kai reikia labai plataus API - bandom sugalvoti data-driven API kur is Clojure puses ateina duomenys ir jie magiskai paverciami i Java objektus ir metodu iskvietimus. Pvz, paversti XML dokumenta parasyta Hiccup notacija i java.xml.Document (gal ne pats geriausias pavyzdys, nes cia galima Hiccup -> string -> java.xml.Document, bet isivaizduojam kad galima tik java.xml API naudot).

ir daugiau apie teisingas abstrakcijas: https://www.youtube.com/watch?v=3oQTSP4FngY

2) Buvo, pacius sunkiausius skaiciavimus anotavom tipais kad kompiliuotusi be reflection warningu. Dazniausiai uztenka pergalvot pagrindini algoritma.
Aisku, kai yra daug "tight loops", geriau kazka naudot kas tiesiogiai kompiliuojasi i cmp + goto vietoj map/filter/reduce.
Kiek maciau high-performance libu su Clojure niekas neraso jei yra Java analogas :)

Vel Zach Tellman'o prezentacija: https://www.youtube.com/watch?v=iQwQXVM6oiY

Vadim

2015-07-06 9:56 GMT+02:00 Maksim Pečorin <mpec...@gmail.com>:
Osvaldai, aciu uz nuoroda,
Siuo metu kartais zaidziu su Clojure (#1 kalba mano reitinge del minimalizmo ir siaip estitiskai labai grazi kalba, #2-3-4 scala, elixir ir kai kurios kitos...), aciu kad propaguojat kalba ir turit grupe.

turiu 2 klausymus.

1)
Zaidziant su Clojure, teko parasyti siek tiek integracinio Java-Clojure kodo (baisus Swing ir kit.) - ir jis atrode gana bjauriai.

Klausymas is tavo Clojure praktikos - ar yra kokiu nors patarymu kaip kompaktiskiau, graziau rasyti, organizuoti koda, kur vyksta saveika Java API - Clojure API?
ka jus darot? rasot koki nors layer'i kuris wrap'ina bjaurybes? ar sios problemos isvis neturit?

Mane domina butent "negrazi" integracijos tikrove ir kaip su ja kovojat (jei kovojat :D )?

2)
ar teko praktikoje optimizuot Clojure (zinau kad kalba turi daug galimybiu optimizuoti, jie matomi clojure.core kode...)?
kokie tai buvo usecase'ai, ir - ar buvo atveju kada jus del optimizacijos rashet ne Clojure, o pure-Java, arba tikslingai naudojat pure-Java lib'us turedami lib'o analogus parasytus Clojure kalba?

Maks

On Monday, 6 July 2015 00:34:42 UTC+3, Osvaldas Grigas wrote:
Taip tikrai nutiks. Tokia reakcija visada kyla iš žmonių, kurie matė per mažai Lisp kodo :)
Laimei, sintaksės misticizmą galima nesunkiai išsklaidyti. Tiesiog parodyti štai ką:

vietoj  Math.max(5, 3)  rašom  (Math/max 5 3) 

ir tai padengia 90% Clojure sintaksės, nes ta pati skliaustelių sintaksė naudojama beveik VISKAM: definitions, function calls, arithmetic operations, ir t.t. Dar gali paminėti, kad prie naujos sintaksės priprantama labai greitai.

Osvaldas

--
Gavote šį pranešimą, nes prenumeruojate „Google“ grupę „(Clojure/LT)“.
Jei norite atšaukti šios grupės prenumeratą ir iš jos nebegauti el. laiškų, praneškite apie tai adresu clojure-lt+...@googlegroups.com.
Jei norite peržiūrėti šią diskusiją žiniatinklyje, apsilankykite https://groups.google.com/d/msgid/clojure-lt/da213709-0f3e-42e8-9d1e-e764bf121f16%40googlegroups.com.

Osvaldas Grigas

unread,
Jul 6, 2015, 9:47:05 AM7/6/15
to Vadim, Maksim Pečorin, cloju...@googlegroups.com
Dar galiu pridėti iš savo daržo.

1. Java interopas yra toks natūralus, kad, mano akimis, jis gražiau apsirašo su Clojure nei su pačia Java. Ypač gelbsti tokie makrosai kaip (doto), (some->) ir kt.

2. Dėl performance, visada galima optimizuoti kokį nors kritinį ciklą, kad greitai suktųsi. Didesnė problema gali būti GC, nes Clojure nemutuoja duomenų, todėl prisigeneruoja daugiau garbage. Įprastose aplikacijose tai neturi reikšmės, tačiau ten, kur reikia predictable low latency, tai gali būti problema. Pvz. mes kaip tik dėl to paskutiniam projekte naudojom Java 8. Vėlgi, noriu pabrėžti, kad atvejai, kada tai tampa reikšminga, yra gan reti. Visada svarbu turėti geras metrikas, kad suprastum, kur, ir ar reikia optimizuoti - neturint to, labai lengva nuklysti į mikro-optimizacijas.

Osvaldas


Reply all
Reply to author
Forward
0 new messages