Phụ thuộc vào ý nghĩa của 'bị xử phạt chính thức'. plugins
(trước đây gọi là hs-plugins
) được thiết kế để trở thành giải pháp toàn diện, với các tính năng tạo mã và tải động. Nó không nhằm mục đích tối thiểu.
Một gói ít phức tạp hơn có sẵn dưới tên direct-plugins
, tập trung vào tải động của plugin. Gói này đọc giao diện Haskell (.hi
) để có được các loại ký hiệu thực tế, để có thể an toàn kiểu, nhưng một biến thể không an toàn cũng được cung cấp. Thật không may direct-plugins
là bitrotten và không hoạt động (a.t.m.) với GHC v7.6.
Ở cuối thấp nhất của quang phổ có gói unix
cung cấp cơ chế dlopen
/dlsym
để giữ các ký hiệu được xuất từ thư viện được chia sẻ. Một lớp tiện lợi cũng được cung cấp để tự động đóng các thư viện mở sau khi xử lý với chúng đã chấm dứt. Tuy nhiên, các ký hiệu thu được là FFI Ptr
s và không được gọi là Haskell.
Bằng cách tìm kiếm trên Internet tôi phát hiện ra một gói bị bỏ rơi mà dường như được hoạt động ở mặt đất giữa:
- tải các biểu tượng với quy ước gọi Haskell được cung cấp
- phụ thuộc và hệ thống phân cấp gói/mô-đun có thể được khai báo
- môi trường phụ thuộc được quản lý theo cách an toàn.
Gói ban đầu do tác giả Hampus Ram biên soạn. Tôi chỉ chuẩn bị nó cho bản phát hành GHC mới nhất và đã thực hiện một số thử nghiệm rất nông. Đây là kho lưu trữ:
https://github.com/ggreif/dynamic-loader
Phần duy nhất còn thiếu là loại an toàn truy cập biểu tượng (bởi một cơ chế có thể cấu hình). Nhận xét và bản vá chào mừng.
có thể trùng lặp của [Chương trình Haskell nhỏ được biên dịch với GHC thành nhị phân lớn] (http://stackoverflow.com/questions/6115459/small-haskell-program-compiled-with-ghc-into-huge-binary) –
@ DanielWagner - việc tạo một ứng dụng '-dynamic' sẽ vẫn tham chiếu tới các thư viện chia sẻ khổng lồ, do đó vấn đề triển khai sẽ không thay đổi. – heisenbug