2010-11-21 39 views
16

Ngày tốt tất cả,khả năng tương thích mã giữa OCaml và F #

Tôi đang phát triển một dự án sở thích nhỏ trong OCaml. Tôi đã tự hỏi làm thế nào nó sẽ dễ dàng để di chuyển nó đến F #. Tôi biết rằng F # có một số tính năng mà OCaml không, nhưng tôi đã hy vọng rằng mã OCaml của tôi sẽ đòi hỏi ít nỗ lực để cổng. Tôi không nhất thiết muốn di chuyển, tôi muốn giữ lại/phát triển trên cả hai nền tảng.

Cảm ơn trước, Michael

+2

Bạn sẽ thấy http://stackoverflow.com/questions/179492/f-and-ocaml –

Trả lời

0

tôi đã không thực hiện bất kỳ OCaml đến F # -porting, nhưng tôi biết F # đã được thiết kế với khả năng tương thích OCaml trong tâm trí. Như tôi đã biết, F # chủ yếu là một siêu của OCaml cơ bản.

Cần hỗ trợ (và không có #light giới hạn) hầu hết từ khóa OCaml và có tương đương với hầu hết các chức năng chuẩn trong thư viện lõi (hoặc trong khung .Net). Vì vậy, tôi đoán rằng - ít nhất là cho các dự án sở thích - việc chuyển đổi nên thực sự dễ dàng.

F # không có hệ thống mô-đun nâng cao của OCaml, do đó bạn sẽ gặp khó khăn khi triển khai ví dụ: functors.

+0

Điều này đúng trong vài năm trước nhưng tôi không nghĩ nó chính xác hơn nữa. Rất nhiều thứ cơ bản trong F # từ lâu đã tách ra khỏi OCaml. Ví dụ, chỉ mục một mảng là 'a. (I)' trong OCaml nhưng 'a. [I]' với chú giải kiểu trong F #. Các toán tử số học cơ bản của OCaml trên các số dấu phẩy động ('+ .',' * .' vv) không còn hoạt động chính xác trong F # nữa. –

+1

F # không phải chủ yếu là một siêu của OCaml, nhưng một tập hợp con với một vài phần mở rộng (các mẫu hoạt động, v.v.). Câu trả lời của Jon liệt kê một số tính năng của OCaml không được F # hỗ trợ. –

13

Viết mã biên dịch chéo trông giống như một thế giới đau đớn đối với tôi. John Whitington của Coherent PDF là người duy nhất tôi biết về những người đã cố gắng làm điều này với bất kỳ mức độ thực tế nào.

Tôi đã dịch nhiều mã OCaml sang F # (có thể nhiều hơn bất kỳ ai khác trên thế giới) và các vấn đề chính là cú pháp #light, việc sử dụng bất kỳ tính năng OCaml không tầm thường nào (đối tượng, biến thể đa hình, thứ tự cao hơn) , các thư viện (ví dụ lablgl, lablgtk, ocamlgraph, laziness), macro (phân tích cú pháp, luồng, mở rộng khớp mẫu) và các thay đổi về cú pháp cơ bản như là lập chỉ mục mảng. Ví dụ, tôi chỉ cố gắng chuyển cổng Almabench benchmark từ OCaml sang F # và mất vài giờ vì tôi đã phải viết lại mỗi a.[i] thành a.(i) bằng tay do vô số lỗi trong trình biên dịch F #: chế độ tương thích OCaml của nó là khá mong manh.

Vì vậy, tôi khuyên bạn nên chọn giữa các ngôn ngữ thay vì cố gắng biên dịch chéo.

+0

Cảm ơn rất nhiều. Điều tôi muốn tránh là học thêm ngôn ngữ. Kể từ khi tôi có một kiến ​​thức làm việc của NET (C#) và kiến ​​thức cơ bản của OCaml (từ khóa học lập trình func của tôi) Tôi mặc dù rằng F # là (gần như) một nhất định. Rõ ràng là không. :) – user515232

+1

Không sao cả. Có thể bạn sẽ tìm thấy nó nhiều hơn một sự giúp đỡ hơn là một trở ngại để tìm hiểu cả hai OCaml và F # cùng một lúc bởi vì chúng rất giống nhau nhưng bạn có thể sẽ tìm thấy sự khác biệt rất khai sáng là tốt. –

Các vấn đề liên quan