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!
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
@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. –
@ 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