2010-11-21 5 views
16

Bonjour à tous,compatibilité de code entre OCaml et F #

Je développe un petit projet de passe-temps dans OCaml. Je me demandais comment il serait facile de migrer vers F #. Je sais que F # a certaines fonctionnalités qu'OCaml ne possède pas, mais j'espérais que mon code OCaml nécessiterait peu d'efforts pour le portage. Je ne veux pas nécessairement migrer, je veux conserver/développer sur les deux plates-formes.

Merci à l'avance, Michael

+2

Vous devriez voir http://stackoverflow.com/questions/179492/f-and-ocaml –

Répondre

0

Je n'ai pas fait OCaml à F # -porting, mais je sais que F # a été conçu avec la compatibilité OCaml à l'esprit. Comme je sais, F # est principalement un sur-ensemble de base OCaml.

Il devrait prendre en charge (et sans #light) la plupart des mots-clés OCaml et avoir des équivalents de la plupart des fonctions standard dans les bibliothèques centrales (ou dans le framework .Net). Donc, je suppose que - au moins pour les projets de passe-temps - le portage devrait être vraiment facile.

F # ne possède pas le système de module avancé d'OCaml, donc vous aurez du mal à implémenter, par ex. foncteurs.

+0

C'était vrai il y a plusieurs années mais je ne pense pas que ce soit plus précis. Beaucoup de choses basiques dans F # ont depuis longtemps divergé d'OCaml. Par exemple, l'indexation d'un tableau est 'a. (I)' dans OCaml mais 'a. [I]' avec une annotation de type dans F #. Les opérateurs arithmétiques de base d'OCaml sur les nombres à virgule flottante ('+ .',' * .' etc.) ne fonctionnent plus correctement dans F #. –

+1

F # n'est pas principalement un sur-ensemble de OCaml, mais un sous-ensemble avec quelques extensions (patterns actifs, etc.). La réponse de Jon énumère certaines des fonctionnalités d'OCaml qui ne sont pas supportées par F #. –

13

Écrire du code de compilation croisée me semble être un monde de douleur. John Whitington de PDF Coherent est la seule personne que je connaisse qui a essayé de le faire à un degré réel.

J'ai traduit beaucoup de code OCaml en F # (probablement plus que quiconque dans le monde) et les principaux problèmes sont la syntaxe #light, l'utilisation de toutes les fonctionnalités OCaml non triviales (objets, variantes polymorphes, ordre supérieur modules, arguments étiquetés et optionnels, etc.), les bibliothèques (par exemple, lablgl, lablgtk, ocamlgraph, paresse), les macros (analyse, flux, extensions de correspondance de modèles) et les changements de syntaxe de base tels que l'indexation de tableaux. Par exemple, j'ai juste essayé de porter le Almabench benchmark d'OCaml à F # et cela a pris plusieurs heures parce que j'ai fini par devoir réécrire chaque a.[i] à a.(i) à la main en raison d'une multitude de bogues dans le compilateur F #: son mode de compatibilité OCaml est assez fragile.

Donc je vous conseille de choisir entre les langues plutôt que d'essayer de compiler.

+0

Merci beaucoup. Ce que je voulais éviter était d'apprendre une langue supplémentaire. Comme j'ai une connaissance pratique de .NET (C#) et des connaissances de base de OCaml (de mon cours de programmation), je pense que F # était (presque) un acquis. Apparemment ce n'est pas. :) – user515232

+1

Pas de problème. Vous trouverez probablement plus d'aide que d'obstacle à apprendre OCaml et F # en même temps parce qu'ils sont si semblables, mais vous trouverez probablement les différences très instructives. –

Questions connexes