2016-04-20 17 views
11

So approssimativamente come F # e OCaml differiscono in termini di "caratteristiche" (ad esempio, funtori, camlp4, unità di misura ...).confronto F # e OCaml

Mi chiedo quanto segue: Riguardo al codice che non contiene le suddette funzionalità, c'è una differenza nello stile di codifica (oltre alle convenzioni di denominazione) tra F # e OCaml? Per dirla in altro modo, se un codice F # (idiomatico) può essere tradotto in modo diretto (forse banalmente) in OCaml, questa trasformazione porterà necessariamente a Ocaml idiomatico?

Modifica: Dai collegamenti forniti da Guy Coder immagino che qualche codice OCAML "idiomatico" non possa tradurre direttamente in codice F # "idiomatico" a causa del fatto che le eccezioni sono molto più lente in F # (e più ampiamente usate in OCaml). E l'altra direzione? Il codice OCaml di F # produrrà mai una reazione in termini di "Do not do XX in questo modo, il modo OCaml di fare XX è con eccezioni invece di XY .."

In generale, quali sono le differenze nell'utilizzo eccezioni in OCaml se confrontate con l'utilizzo tipico in F #. Esistono altri costrutti che vengono utilizzati in modo diverso nelle due lingue (ad esempio a causa di penalizzazioni delle prestazioni in una lingua)?

+0

Grazie per aver dedicato del tempo a esplorare questa domanda più di una semplice occhiata e guardando i collegamenti che ho fornito.Non utilizzo attivamente OCaml quindi ci sono dei buchi in ciò che posso fornire, tuttavia non credo che l'utilizzo di tipi di opzioni invece di eccezioni non sarebbe idiomatico, vedo l'uso delle eccezioni come una presa di forza da ML. –

+0

Per capire veramente questa domanda in modo più approfondito, se la guardi con le conoscenze che ho, allora non devi guardare solo F # e OCaml ma l'intera famiglia ML, ML, CAML, OCaml e F #. Credo che la CAML non sia più attiva o addirittura utilizzata nel flusso principale, ma l'ho inclusa per ragioni storiche. –

+0

Se vuoi davvero maggiori dettagli, prova a contattare i membri di [ICFP] (http://www.icfpconference.org/) o [CUFP] (http://cufp.org/2016/) perché non lo sono un membro di entrambi. –

risposta

11

Sì, la traduzione sarà considerata idiomatica da molti utenti OCaml per la maggior parte. Dal momento che l'idiomatico non è uno standard esatto, non c'è modo di misurare quanto idiomatico.

L'avvertenza è che sarà necessario modificare parte del codice per utilizzare le funzionalità in una lingua che non è nell'altra. In particolare se un functor è il modo idiomatico di farlo in OCaml, allora dovresti convertire il codice F # in un Functor. O se F # ha fatto ampio uso del codice della libreria .Net, allora dovresti ricreare quelle funzioni in OCaml o trovare un equivalente.

Ho tradotto la mia parte di ML e OCaml in F # e come si nota, e ciò a cui mi riferisco come l'ambiente e l'ethos sono le grandi differenze, ad es. functors, camlp4, unità di misura, Visual Studio, viaggi nel tempo, NUnit, WPF, ecc.

Ricorda che F # è iniziato come OCaml quando è stato trasferito, quindi per la maggior parte c'è ancora molto in comune.

Se volete vedere una certa quantità significativa di codice fatto in OCaml e F # tradotti quasi riga per riga dare un'occhiata al codice per il "Manuale di logica pratica e ragionamento automatico" di John Harrison

F#

OCaml

Allora puoi giudicare da solo.

Devo notare che il codice per "Manuale di logica pratica e ragionamento automatico" non fa uso di classi, record, eventi e simili. È quasi puramente funzioni.

Un altro modo per confrontare due lingue in generale per l'idomaticità (OK così ho coniato quella parola) è utilizzare Rosetta Code. Il codice Rosetta contiene soluzioni a programming task scritte in molte lingue. Quindi trova un compito di programmazione, ad es. create a class e poi guarda le versioni OCaml e F#.

Non tutte le attività sono eseguite in tutte le lingue, ma ognuna può contribuire o addirittura suggerire una nuova attività.

+0

La parola * idiomaticness * non è quella accettata, ma sembra essere più o meno due volte più popolare su Google rispetto alla parola * idiomacity * , che sono venuto a usare. Le due parole sembrano essere usate principalmente da linguisti e informatici, quindi non avrei disapprovato il suo uso all'interno di questi cerchi, sebbene * l'idiomomia * suona come se mancasse di * * *. :-P –

+0

grazie per la tua risposta. Si prega di consultare la mia modifica. –

+0

Di interesse: [Tipo di dati algebrici generalizzati] (https://en.wikipedia.org/wiki/Generalized_algebraic_data_type) e [Estensioni di lingua OCaml: Dati algebrici generalizzati] (http://caml.inria.fr/pub/docs/ manuale ocaml-400/manual021.html # toc85) –