🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Thread View: pl.comp.lang.funkcyjne
2 messages
2 total messages Started by pawellt2015@gmai Fri, 27 Jan 2017 02:55
Clojure a Common Lisp
#652
Author: pawellt2015@gmai
Date: Fri, 27 Jan 2017 02:55
23 lines
1162 bytes
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ć.

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.

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? Co właściwie jest niewygodne w CL, skoro daje więcej swobody niż Clojure?

Pozdrawiam
Paweł
Re: Clojure a Common Lisp
#653
Author: godek.maciek@gma
Date: Fri, 27 Jan 2017 04:14
84 lines
3925 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)
Thread Navigation

This is a paginated view of messages in the thread with full content displayed inline.

Messages are displayed in chronological order, with the original post highlighted in green.

Use pagination controls to navigate through all messages in large threads.

Back to All Threads