2012-07-10 13 views
14

Tôi đã triển khai trình tải đơn giản cho các plugin haskell cho mô-đun Main.hs của mình. Chức năng duy nhất tôi sử dụng ngay bây giờ là load từ this siteLàm thế nào để giảm dấu chân kép khi sử dụng gói 'gói' Haskell?

Kích thước ứng dụng đã biên dịch của tôi cho tôi thấy hơn 53 MB thực thi trên kiến ​​trúc x86. Tôi hiểu rằng các phần lớn của GHC được liên kết trong (do tính năng plugin haskell-source-to-binary-plugin) nhưng điều này là quá mức cần thiết cho mục đích của tôi.

Có cách xử phạt chính thức để loại bỏ các tính năng bổ sung và chỉ giữ (dyn-)load không?

+2

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) –

+0

@ 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

Trả lời

1

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.

+0

Tính đến hôm nay tất cả các thường trình tải trả về các kết quả đa hình phải được đưa ra một đối số được sử dụng để thực hiện 'kiểm tra kỳ vọng' trên biểu tượng được tải bởi một số tiêu chí (kết thúc mở). – heisenbug