Esiste uno strumento di OCaml di utilizzare il supporto delle migliori pratiche come il modulo Critico di Perl Perl ::?

StackOverflow https://stackoverflow.com/questions/4583436

  •  14-10-2019
  •  | 
  •  

Domanda

non esistono uno strumento che analizza i programmi OCaml e suggerisce alcuni miglioramenti nello stile e il codice? Nel mondo del Perl esiste ancora Perl :: Critic per evitare cattivo stile.

Quello che mi serve sono alcuni strumenti che rendono i suggerimenti non solo sullo stile, ma anche per rendere le cose più pulito e per evitare costrutti che non sono ricorsiva di coda nei programmi OCaml.

Eventuali suggerimenti?

È stato utile?

Soluzione

Non ho usato, ma un messaggio sui gruppi Caml la scorsa settimana menziona Mascot . Sembra di essere quello che sono dopo. Non sono sicuro circa i criteri di coda ricorsione; l'autore del progetto di cui sopra non li menziona, ma non fa menzione plugin di funzionalità.

In alternativa, compilando con -dlinear (per ocamlopt[.opt]) produrrà codice linearizzato che menziona se la funzione è una coda di guardia. -annot produce anche informazioni tail-call, ma non riesco a trovare un riferimento a parte il changelog (è stato aggiunto in 3.11.0). Che modo in cui funziona tag coda le chiamate, non fa il contrario, le chiamate tag non coda (o forse c'è un modo?). Qui di seguito è un esempio di uscita per una funzione chiamata sum,

let rec sum a = function
    | x when x = 0 -> a
    | x -> sum (a+1) (x-1)

produce (tra molto output più),

*** Linearized code
camlTail__sum_58:
  if x/30[%rbx] !=s 1 goto L100
  return R/0[%rax]
  L100:
  I/31[%rbx] := I/31[%rbx] + -2
  I/32[%rax] := I/32[%rax] + 2
  tailcall "camlTail__sum_58" R/0[%rax] R/1[%rbx]

Credo che l'esperienza sta per essere la soluzione migliore però. Guardare attraverso alcuni progetti popolari ( Batterie , per esempio) per ottenere un tatto per lo stile e le convenzioni tipiche. Non credo che un plugin sta per aiuto si chiama le variabili accumulatori acc o continuazioni cont.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top