Tôi khá hấp dẫn bởi Gambit Scheme, đặc biệt bởi nhiều nền tảng được hỗ trợ và khả năng đặt mã C ngay trong nguồn Đề án của bạn khi cần. Điều đó nói rằng, nó là một Đề án, trong đó có ít "pin bao gồm" so với Common Lisp. Một số người thích viết mã nhiều thứ từ đầu, (a.k.a. yak-cạo mạnh mẽ) nhưng không phải tôi!So sánh Common Lisp với Gambit w.r.t truy cập thư viện và hệ thống đối tượng của họ
này mang lại cho tôi hai câu hỏi của tôi, hướng tới những người đã sử dụng cả hai Gambit và một số hương vị của Common Lisp:
1) Những hiệu quả có tiếp cận tốt hơn với các thư viện? Lược đồ có ít thư viện hơn Common Lisp. Tuy nhiên, Gambit Scheme có quyền truy cập mượt mà hơn vào thư viện mã C/C++ &, vượt xa các thư viện của Common Lisp. Theo ý kiến của bạn, sự mượt mà của FFI của Gambit có vượt trội so với việc thiếu các thư viện gốc không?
2) Hệ thống đối tượng của Đề án (ví dụ: TinyCLOS, Meroon) so với CLOS của Common Lisp như thế nào? Nếu bạn thấy họ thiếu, bạn đã bỏ lỡ những tính năng nào nhất? Cuối cùng, làm thế nào quan trọng là một hệ thống đối tượng trong Lisp/Scheme ở nơi đầu tiên? Tôi đã nghe nói về toàn bộ các công ty dựa trên lisp (ví dụ: Phần mềm ITA) cho phép hoàn toàn CLOS. Các đối tượng có thực sự là tùy chọn trong Lisp/Scheme không? Tôi lo sợ rằng nếu Gambit không có hệ thống đối tượng tốt, tôi có thể bỏ lỡ chúng (nền tảng lập trình của tôi hoàn toàn là hướng đối tượng).
Cảm ơn vì đã giúp một tham vọng chuyển đổi từ C++/Python,
- Matt
PS: Có người với hơn 1500 đại diện, bạn có thể xin vui lòng tạo ra một "nước cờ" tag? :)
Cảm ơn Jonas!
Vấn đề với chỉ đơn thuần là có một FFI là nó buộc bạn phải quấn mọi chức năng mà bạn chạm từ Lisp. Ngay cả với sự giúp đỡ của SWIG, điều này có thể nhanh chóng trở thành một việc vặt. Gambit có lợi thế là cho phép bạn chèn một khối mã C (và C++!) Ngay vào nguồn lược đồ của bạn. Nói cách khác, bạn chỉ phải viết mã giao diện cho bất kỳ dữ liệu nào bạn cần truyền vào và ra khỏi khối đó, không phải cho mọi chức năng trong khối đó. Điều này là rất tốt vì bạn thường cần sử dụng một loạt các hàm C/C++ cùng nhau để tạo ra kết quả mà bạn quan tâm và chỉ quan tâm đến việc gói kết quả. – SuperElectric
@SuperElectric: Nhưng bạn luôn có thể đặt khối C (hoặc C++) đó vào một hàm C, và sau đó truy cập chức năng này thông qua FFI. –
@ MiklósHomolya Đúng, nhưng đó là một câu hỏi tiện lợi. Từ kinh nghiệm của tôi với Lush, tôi có thể nói rằng có thể chỉ cần đặt một số mã C ở giữa một cơ thể fucntion lisp và có nó có thể truy cập bất kỳ biến lisp trong phạm vi là một chiến thắng năng suất lớn. – SuperElectric