2011-01-03 9 views
6

Jestem bardzo zaintrygowany Gambit Scheme, w szczególności dzięki jego szerokiej gamie obsługiwanych platform, i jego zdolności do umieszczenia kodu C bezpośrednio w twoim źródle Scheme kiedy jest to potrzebne. To powiedziawszy, jest to Schemat, który zawiera mniej "baterii w zestawie" w porównaniu do Common Lisp. Niektórzy ludzie lubią kodować wiele rzeczy od zera, (a.k.a. energiczne yak-shaving), ale nie ja!Porównywanie Common Lisp z Gambit w.r.t ich dostępu do bibliotek i systemów obiektowych

To prowadzi mnie do dwóch pytań, skierowane do ludzi, którzy korzystali zarówno Gambit i trochę smak Common Lisp:

1) co skutecznie ma lepszy dostęp do biblioteki? Schemat ma mniej bibliotek niż Common Lisp. Jednak Gambit Scheme ma bardziej płynny dostęp do bibliotek kodu C/C++ &, które znacznie przewyższają biblioteki Common Lisp. Czy według ciebie płynność FFI Gambita przeważa nad brakiem bibliotek natywnych?

2) W jaki sposób systemy obiektowe Scheme (np. TinyCLOS, Meroon) są porównywane do CLOS Common Lisp? Jeśli zauważyłeś, że ich brakuje, jakiej funkcji najbardziej Ci brakowało? Na koniec, jak ważny jest system obiektowy w Lisp/Scheme w pierwszej kolejności? Słyszałem o całych firmach opartych na seplenieniach (np. ITA Software) całkowicie rezygnujących z CLOS. Czy obiekty naprawdę są opcjonalne w Lisp/Scheme? Obawiam się, że jeśli Gambit nie ma dobrego systemu obiektowego, mogę go nie zauważyć (moje tło programistyczne jest zorientowane wyłącznie na obiekt).

Dzięki za pomoc początkujący przekonwertować z C++/Python,

- Matt

PS: Ktoś z ponad 1500 rep, mógłbyś stworzyć "Gambit" tag? :) Dzięki Jonas!

Odpowiedz

2

1) Nie korzystałem z Gambit Scheme, więc nie mogę powiedzieć, jak gładka jest integracja C/C++. Ale wszystkie używane przeze mnie Lispki mają w pełni funkcjonalny C FFI: s. Zatem dostępność bibliotek C jest taka sama. Integracja wymaga trochę pracy, ale zakładam, że tak jest w przypadku Gambit Scheme. W końcu Lisp i C są różnymi językami ..? Ale może masz inne doświadczenie, chciałbym dowiedzieć się więcej w tej sprawie.

Być może zainteresuje Cię Quicklisp, naprawdę dobry nowy projekt Common Lisp - dzięki temu bardzo łatwo będzie zainstalować wiele bibliotek wysokiej jakości.

2) C++ i Python są zaprojektowane do używania OOP i klas jako typowego sposobu enkapsulacji i strukturyzacji danych. CLOS w ogóle nie ma takich ambicji. Zamiast tego zapewnia ogólne funkcje, które mogą być wyspecjalizowane dla pewnych typów argumentów - niekoniecznie klas. Zasadniczo to umożliwia OOP, ale w Common Lisp, OOP jest wygodną funkcją, a nie czymś podstawowym do załatwiania spraw.

Myślę, że CLOS jest dużo lepiej zaprojektowany i elastyczny niż model obiektowy C++ - TinyCLOS nie powinno się w tym aspekcie różnić.

+0

Problem z jedynie posiadaniem FFI polega na tym, że zmusza Cię do owinięcia każdej funkcji, którą dotyka Lisp. Nawet przy pomocy SWIG może to szybko stać się obowiązkiem. Gambit ma tę zaletę, że pozwala wstawić blok kodu C (i C++!) Bezpośrednio do źródła Schematu. Innymi słowy, musisz tylko napisać kod interfejsu dla dowolnych danych, które musisz przekazać i wyjąć z tego bloku, a nie dla każdej funkcji w tym bloku. Jest to świetne, ponieważ często trzeba używać wielu funkcji C/C++, aby uzyskać wynik, który cię interesuje, i dbać tylko o zawijanie wyniku. – SuperElectric

+0

@SuperElectric: Ale zawsze możesz umieścić ten blok kodu C (lub C++) w funkcji C, a następnie uzyskać dostęp do tej funkcji poprzez FFI. –

+0

@ MiklósHomolya Prawda, ale jest to kwestia wygody. Z mojego doświadczenia z Lush mogę powiedzieć, że możliwość umieszczenia kodu C w środku ciała fikcyjnego i umożliwienia mu dostępu do dowolnej zmiennej sepleniejącej w zakresie jest dużą produktywnością. – SuperElectric

5

Sure Scheme jako całość ma mniej bibliotek w zdefiniowanym standardzie, ale każda dana implementacja Schematu zazwyczaj opiera się na tym standardzie, aby uwzględnić więcej funkcji typu "baterie włączone".

Gambit, na przykład, korzysta z systemu paczek Snow, który da ci dostęp do kilku bibliotek wsparcia.

Inne programy są jeszcze lepsze, mając dostęp do większej liczby (lub lepszych) bibliotek wsparcia. Zarówno rakieta (z PlaneT) i kurczaka (z eggs) natychmiast przychodzą na myśl.

To znaczy, że Common Lisp jest dość bogaty, a wiele interesujących i użytecznych bibliotek to prosty asdf-install z dala.

Jeśli chodzi o systemy obiektowe Schematu, ja osobiście staram się faworyzować program kurczaka i postanowiłem faworyzować coops. Powiedział, że nie ma absolutnie nic złego w TinyCLOS. Albo służyłby dobrze i tak naprawdę nie znalazł niczego, czego by brakowało. Chociaż to ostatnie stwierdzenie może mieć więcej wspólnego z faktem, że nie staram się polegać na wielu obiektowo zorientowanych słownikach podczas pisania Schematu. Oba systemy w moim doświadczeniu mają tendencję do wynurzania się, kiedy chcę napisać "protokoły", a następnie mam sposób na wyspecjalizowanie się w protokole, jeśli ma to sens.

+0

"Oba systemy w moim doświadczeniu mają tendencję do wynurzania się, kiedy chcę pisać" protokoły ", a następnie mam sposób na wyspecjalizowanie się w protokole, jeśli ma to sens." ... ermmm nie bardzo. Do jakich systemów się odwołujesz i czy mógłbyś zdefiniować "protokół"? – SuperElectric

+0

systemy będące systemami obiektowymi, o których wspomniałem. Protokół jest metodą ogólną, a obiekty TinyCLOS (lub coops) następnie zapewniają specjalizację parametru typu dla metody, aby podobny interfejs mógł być wykorzystywany dla wielu typów. Najlepszą analogią, jaką mogę wymyślić, jest metoda szablonowa C++, w której można specjalizować się (dostarczać niestandardowe zachowanie) w oparciu o typ danych wejściowych. – Shaun

+0

W książce Practical Common Lisp znajduje się rozdział, który lepiej niż ja wyjaśniam. Możesz przeczytać to tutaj: http://www.gigamonkeys.com/book/object-reorientation-generic-functions.html – Shaun