tag:blogger.com,1999:blog-20941681.post3028632774659296458..comments2024-02-13T18:09:44.121+01:00Comments on Jacek Laskowski scala jawnie: Programowania funkcyjnego z Clojure początki niełatwe (szczególnie mentalnie)Anonymoushttp://www.blogger.com/profile/09734540973692423017noreply@blogger.comBlogger11125tag:blogger.com,1999:blog-20941681.post-13599095118976109602010-08-30T09:38:27.962+02:002010-08-30T09:38:27.962+02:00@aptu, w ciekawą stronę wędrują komentarze odnośni...@aptu, w ciekawą stronę wędrują komentarze odnośnie Clojure do tego wpisu. Można było domniemywać, że w końcu kiedyś pojawi się choćby próba porównywania go ze Scalą. Niestety na chwilę obecną muszę posiłkować się innych zdaniem, czy i gdzie Scala miałaby zastosowanie. Nie znam jej w ogóle, ale kiedy czytałem Twoje przykłady składnia była lekko zagmatwana i trochę przeraziła mnie swoją złożonością.<br /><br />Mówisz, że nawiasy w Clojure są be? Hmmm, tam są tylko takie nawiasy i zawsze w parze, więc choćby z tego powodu wydaje się być składniowo łatwiejsza w poznaniu składni (aby być uczciwym dodam, że są jeszcze nawiasy kwadratowe do wyrażania tablic). Kiedy dodać do tego, że i Clojure, i Scala produkują bajtkod, to na chwilę obecną pozostanę przy poznawaniu Clojure. Może mnie kiedyś przyciągnie do Scali, ale na chwilę obecną niekoniecznie - nie widzę po prostu wartości dodanej. Clojure zacząłem się uczyć, bo brakowało mi wiedzy z programowania funkcyjnego (PF) i jak rozumiem Scala nie dodaje do Javy nic ponad to (w duuuużym uproszczeniu).<br /><br />Marzy mi się rozmowa z osobą, która dotknęła obu języków z jednym wcześniejszym doświadczeniem w Javie, tj. nie były Lisper czy podobnie. Ciekawym, jak wyszłoby porównanie. W końcu to jedynie składnia. A może niekoniecznie i czegoś nie dostrzegam?! Wybacz moją ignorancję.Anonymoushttps://www.blogger.com/profile/09734540973692423017noreply@blogger.comtag:blogger.com,1999:blog-20941681.post-76034728016435871202010-08-29T01:36:39.929+02:002010-08-29T01:36:39.929+02:00http://pastebin.com/rVhjNdMK dwie przykładowe impl...http://pastebin.com/rVhjNdMK dwie przykładowe implementacje w Scali twojego problemu. <br /><br />Clojure jest ciekawym językiem do tzw. otwarcia oczu, ale tak samo jak Lisp raczej nie zdobędzie większej popularności przez składnię, która jest zbyt prosta przez co kod przypomina potok nawiasów bez wyraźnej struktury. Scala natomiast ma starą i lubianą składnię C/Javy/Pythona/itd. Owszem Scala może się wydawać bardziej skomplikowana od Javy, ale to złudzenie, bo tak naprawdę to nie Scala jest skomplikowana ale Java prymitywna (odpowiedź twórcy Scali na zarzuty o skomplikowaniu języka http://lamp.epfl.ch/~odersky/blogs/isscalacomplex.html). <br /><br />Wiem, że jakiś czas zajmowałeś się Groovym więc powinieneś wiedzieć, że Groovy prawdopodobnie nie powstał by gdyby jego twórca wcześniej poznał Scale :) (http://www.infoq.com/news/2009/07/scala-replace-java).<br /><br />No i Scala ma Lifta, rewelacyjny web framework używany m.in przez Foursquare i Novell Pulse.Unknownhttps://www.blogger.com/profile/12408036030464454286noreply@blogger.comtag:blogger.com,1999:blog-20941681.post-41327882928106339362010-08-27T12:08:49.955+02:002010-08-27T12:08:49.955+02:00Sam przymierzam się od dłuższego czasu do jakiegoś...Sam przymierzam się od dłuższego czasu do jakiegoś języka poza javą, myślałem o czymś funkcyjnym właśnie. Z studiów miło wspominam pythona, ale inwazja języków na jvm zmusiła mnie do zastanowienia się nad tym wyborem. Scala jest ciekawa, ale nie jestem pewien czy chciałbym w niej programować, to samo z clojure. Grovvy ma dużo zwolenników i sporą popularność (moje subiektywne odczucie), ale nie pasuje mi że jest dynamicznie typowany. Lubię mieć Stringa tam gdzie się go spodziewam a dwa dodane stringi dają dłuższego stringa a nie wynik matematyczny (jak to w perlu mogło by się zdarzyć ;) ) Osobiście jeszcze poczekam z decyzją jaki język wybrać, ale jako że clojure było moim pierwszym typem, to będę obserwować Twoje boje i podpytywać czasem o różne rzeczy :)Michał Grucahttps://www.blogger.com/profile/00672953404604806278noreply@blogger.comtag:blogger.com,1999:blog-20941681.post-59168583796953511562010-08-27T10:03:23.293+02:002010-08-27T10:03:23.293+02:00@mgruca, podając przykład kodu w Clojure nie miałe...@mgruca, podając przykład kodu w Clojure nie miałem zamiaru stawiać na wyższość Clojure przez pryzmat liczby linii potrzebnych do złożenia aplikacji. Mając IDE można o tym zapomnieć. Dyski są tanie :)<br /><br />Co mnie jednak przyciąga do Clojure to równie naturalny sposób wyrażania problemów w postaci aplikacji, co i w programowaniu obiektowym, czy imperatywnym. W końcu oba modele - funkcyjny i imperatywny - są identyczne. Wciąż trudno mi w to uwierzyć, ale empirycznie mogę zapewnić, że tak jest. Skoro oba są tożsame, to pozwólmy sobie na chwilę z PF, aby mieć wybór. W samej Javie mamy wybór, ale poza Javą niewiele pozostaje. To właśnie zmieniam.Anonymoushttps://www.blogger.com/profile/09734540973692423017noreply@blogger.comtag:blogger.com,1999:blog-20941681.post-54823102253793936282010-08-27T08:41:40.099+02:002010-08-27T08:41:40.099+02:00Nie wiem ile w Javie by to kodu zabrało, na pewno ...Nie wiem ile w Javie by to kodu zabrało, na pewno więcej. To co mi się w cloujure nie podoba, to że wersja 'lepsza' jest dla mnie równie czytelna co pierwsza. Dużo kodu ma swoje wady i zalety, ja tam się z Javą lubię, mimo iż brakuje mi wielu rzeczy z innych języków.Michał Grucahttps://www.blogger.com/profile/00672953404604806278noreply@blogger.comtag:blogger.com,1999:blog-20941681.post-51694598747536180192010-08-26T15:43:01.090+02:002010-08-26T15:43:01.090+02:00@me Wygląda na to, że właśnie takie jest stosowane...@me Wygląda na to, że właśnie takie jest stosowane podejście - Clojure w bebechach aplikacji, gdzieś w tle (w znaczeniu umiejscowienia, nie znaczenia), a na przodzie cokolwiek - może to być JSF, ale również Grails, czy jak obserwuję coś ala RoR. Bez względu na zastosowaną technologię webową do prezentacji, Clojure siedzi z tyłu, wspiera. Brakuje mi jeszcze zrozumienia, jak wykorzystać moc uproszczeń w zrównoleglaniu zadań w Clojure, o których czytam - atomy, refy (nie mylić z reify), itp. Mam wrażenie, że to nie ta klasa zastosowań dla Clojure. A jak trudno mi zrozumieć, jak można programować bez skutków ubocznych, w języku czystym funkcyjnie - Haskellu. Tam to bym się pewnie w ogóle nie odnalazł.<br /><br />@kosqx, przeczytałem z zainteresowaniem. Python powiadasz? Kiedyś miałem z nim spotkanie i wydawał mi się zbyt dynamiczny :) Nie przypadł mi do gustu, mimo że spełnił założenia i zrealizowałem zadanie. A jak wrażenia w pisaniu w Clojure? Widzisz jego zastosowanie z Pythonem, czy są bliźniacze w zastosowaniu i nie ma sensu?Anonymoushttps://www.blogger.com/profile/09734540973692423017noreply@blogger.comtag:blogger.com,1999:blog-20941681.post-55278675362912881142010-08-26T13:11:03.503+02:002010-08-26T13:11:03.503+02:00Nie wiem ile pracy wymagałoby stworzenie podobnego...Nie wiem ile pracy wymagałoby stworzenie podobnego rozwiązania w Javie. Wiem za to, że w Pythonie jest co całkiem łatwe. Dowód: http://coffeefreecode.wordpress.com/2010/08/26/programowania-funkcyjnego-z-pythonem-spotkania/Anonymousnoreply@blogger.comtag:blogger.com,1999:blog-20941681.post-45828043661986925602010-08-26T10:33:59.919+02:002010-08-26T10:33:59.919+02:00Jacku, ale dlaczego do tak raczej konstrukcyjnie n...Jacku, ale dlaczego do tak raczej konstrukcyjnie najprostszej czesci systemow, jaka jest interfejs webowy, chcesz dodawac zlozonosc? Czyste JSF + komponenty RichFaces jest odpowiednie w 90% przypadkow, przy wiekszych komplikacjach dorzucasz jeszcze biblioteki Springowe i jest dobrze! :)<br /><br />Absolutnie nie sadze, zeby naklad zwiazany z doklejaniem czesci kodu w zupelnie innym jezyku mial sens w aplikacjach webowych, ktore z zalozenia powinny byc prostymi kawalkami kodu.<br /><br />Co myslisz?mehttps://www.blogger.com/profile/12098181846867554284noreply@blogger.comtag:blogger.com,1999:blog-20941681.post-89521323998458350802010-08-25T22:12:23.392+02:002010-08-25T22:12:23.392+02:00@me, to wciąż jednak ta sfera aplikacyjna, gdzie m...@me, to wciąż jednak ta sfera aplikacyjna, gdzie mnie jeszcze nie ma i pewnie długo nie będzie. Na razie zwykłe aplikacje webowe i tutaj chciałbym znaleźć miejsce dla Clojure. Czyżby to po prostu nie dla niego? W końcu nie chodzi o to, aby uzasadniać zastosowanie, gdzie nie powinno go być :)<br /><br />@Rafał, dla mnie najbardziej porywającą sprawą w całym tym poznawaniu PF z Clojure jest właśnie próba znalezienia dla tego zastosowania. Poznaję wiele nowych konstrukcji, ale bez ich wdrożenia, nici z faktycznego zrozumienia. Często pojawia się porównanie ze Scalą i faktycznie jej składnie opisuje się jako trudniejszą do opanowania. W końcu, jeśli oba produkują bajtkod, to dlaczego chciałbym używać trudniejszego/bardziej złożonego języka?!Anonymoushttps://www.blogger.com/profile/09734540973692423017noreply@blogger.comtag:blogger.com,1999:blog-20941681.post-76559607797159008502010-08-25T21:08:25.143+02:002010-08-25T21:08:25.143+02:00Zaciekawiłeś mnie Jacku tymi postami o Clojure. Og...Zaciekawiłeś mnie Jacku tymi postami o Clojure. Ogólnie LISP jest bardzo ciekawym językiem chyba przyjdzie czas i na mnie aby się zagłębić :) Szczególnym argumentem przemawiającym za tym językiem jest dużo mniejsza złożoność od JVM'owych alternatyw jak ScalaRafałhttps://www.blogger.com/profile/13471600514286661753noreply@blogger.comtag:blogger.com,1999:blog-20941681.post-76623111647058452712010-08-25T14:33:13.772+02:002010-08-25T14:33:13.772+02:00Jesli szukasz dobrych use cases dla programowania ...Jesli szukasz dobrych use cases dla programowania funkcyjnego to pomysl o wszystkim, co po pierwsze moze byc zrealizowane bezstanowo, a po drugie moze wprost wymagac zrownoleglenia.<br /><br />Zastanow sie, jak moglbys wykorzystac przewage jezyka funkcyjnego nad proceduralnym przy implementacji:<br />- czesc wykonawcza enginu ETL, przede wszystkim transformacje<br />- czesc wykonawcza systemow BPMS, czyli "wykonywanie" diagramow (kazdy wezel w grafie takiego diagramu to przeciez niezalezny "transformator/reaktor")<br />- rozproszony klaster cache/obliczeniowy, idealny przyklad to Coherence, ktory pozwala uploadowac klasy Java przeksztalcajace obiekty cache w inne na danym nodzie,<br />- filtry roznego rodzaju: w kolejkach JMS, w servletach, formatery danych na XML, CSV, XLS, itp.<br />- ...<br /><br />Serdeczne pozdrowienia,<br />Michalmehttps://www.blogger.com/profile/12098181846867554284noreply@blogger.com