Article View: pl.comp.lang.funkcyjne
Article #998Re: Clojure a Common Lisp
From: godek.maciek
Date: Fri, 27 Jan 2017 12:14
Date: Fri, 27 Jan 2017 12:14
46 lines
4448 bytes
4448 bytes
W dniu piątek, 27 stycznia 2017 11:55:09 UTC+1 użytkownik pawel...@gmail.com napisał:
> Maciek Godek w którymś z wątków stwierdził, że nie przepada za Common Lispem (i że już lepszym wyborem pewnie byłoby Clojure dzisiaj), bo pewne rzeczy niewygodnie w CL implementować.
Gwoli ścisłości, stwierdziłem, że nie przepadam za Common Lispem
(jako językiem). Nie twierdzę, że jest niewygodny; może nawet być
bardzo wygodny, ale nie podoba mi się jego stopień komplikacji.
> Trochę się macam z podstawiami Clojure właśnie i mam w związku z tym pytanie.
> Poza oczywiście zaletą, że Clojure działa na JVM, ma dobre mechanizmy wspierające skalowalność, to nie jest też tak że jednak trochę utrudnia programiście?
> CL daje swobodę i jest raczej multiparadygmatowy, a Clojure mimo wszystko wymusza programowanie funkcyjne, wszystkie struktury danych domyślnie są immutable, brakuje jakiegoś modelu obiektowego jak CLOS itd.
Tak, Common Lisp daje programiście nieograniczone możliwości.
Dlatego też Paul Graham nazywa go "programowalnym językiem programowania".
Wadą tej wolności jest to, że każdy programista może wytworzyć swój
"prywatny język", i mimo że programiści Common Lispa w pojedynkę potrafią
być bardzo efektywni, w wielu przypadkach współpraca między nimi
może graniczyć z niemożliwością. Myślę, że to owa kodyfikacja sposobu
pisania programów, tzw "one way to do it", jest głównym źródłem sukcesu
Pythona, i że owa "ograniczoność" Clojure to dobra rzecz. Tym bardziej,
że programy funkcyjne, choć mogą być trudniejsze do napisana, z reguły
okazują się prostsze w analizie (pomijając nawet kwestię skalowalności)
> A druga sprawa, czy w związku z tym, że w Clojure jednak składnia
> lekko odbiega od CL'a (poza listami są wektory i wszelkie [], {})
> to nadal na wyższym poziomie zachowana jest ta homoikoniczność
> i elastyka?
Owa różnorodność składniowa, poza tym, że komplikuje język, a koncepcyjnie
nie wnosi zupełnie nic, raczej nie zaburza homoikoniczności.
Od razu odpowiem na ewentualny zarzut: to, że mamy osobną składnię
do tworzenia tablic haszujących, wektorów i zbiorów, jest pewną optymalizacją,
bo nie umiemy robić niektórych rzeczy lepiej. Koncepcyjnie nie ma różnicy,
czy zapiszę słownik jako {:a 1 :b 2} czy jako '((a 1) (b 2)) -- w obu
przypadkach zawartość informacyjna jest ta sama. Różnica jest taka, że
w pierwszym przypadku podpowiadam kompilatorowi, jakiej struktury danych
powinien użyć. Podobnie, nie ma znaczenia, czy zapiszę zbiór jako #{1 2 3}
czy jako '(1 2 3) -- to, że owo coś jest zbiorem, wynika z operacji,
które będę na tym przeprowadzał. Hickey popełnia błąd koncepcyjny, mieszając
struktury danych z ich reprezentacjami (i z tej perspektywy atakuje Scheme'a,
za to, że "używa archaicznych łączonych list", ale ten atak raczej nie ma
sensu, z tego powodu, że McCarthy zdefiniował tylko interfejs do list, tj.
cons, car i cdr, i chociaż implementacja, którą podał, faktycznie opierała
się na listach łączonych, nie narzucił na nikogo obowiązku stosowania tej
właśnie, a nie innej struktury danych)
Technical Details
Message-ID:
<833193a9-4ad7-41cd-a4f2-3b8107a40465@googlegroups.com>Path:
mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.icm.edu.pl!newsfeed.pionier.net.pl!news.glorb.com!r185no631766ita.0!news-out.google.com!15ni13555itm.0!nntp.google.com!r185no631765ita.0!postnews.google.com!glegroupsg2000goo.googlegroups.com!not-for-mailReferences:
<9faaa65c-5418-4602-91f9-3f73ea12900e@googlegroups.com>Show Full Headers
Complete Article Headers
X-Received: by 10.36.88.16 with SMTP id f16mr795565itb.3.1485519285651; Fri, 27 Jan 2017 04:14:45 -0800 (PST) X-Received: by 10.157.45.102 with SMTP id v93mr540109ota.3.1485519285622; Fri, 27 Jan 2017 04:14:45 -0800 (PST) Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.icm.edu.pl!newsfeed.pionier.net.pl!news.glorb.com!r185no631766ita.0!news-out.google.com!15ni13555itm.0!nntp.google.com!r185no631765ita.0!postnews.google.com!glegroupsg2000goo.googlegroups.com!not-for-mail Newsgroups: pl.comp.lang.funkcyjne Date: Fri, 27 Jan 2017 04:14:45 -0800 (PST) In-Reply-To: <9faaa65c-5418-4602-91f9-3f73ea12900e@googlegroups.com> Complaints-To: groups-abuse@google.com Injection-Info: glegroupsg2000goo.googlegroups.com; posting-host=213.192.95.134; posting-account=f7iIKQoAAAAkDKpUafc-4IXhmRAzdB5r NNTP-Posting-Host: 213.192.95.134 References: <9faaa65c-5418-4602-91f9-3f73ea12900e@googlegroups.com> User-Agent: G2/1.0 MIME-Version: 1.0 Message-ID: <833193a9-4ad7-41cd-a4f2-3b8107a40465@googlegroups.com> Subject: Re: Clojure a Common Lisp From: godek.maciek@gmail.com Injection-Date: Fri, 27 Jan 2017 12:14:45 +0000 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit