Gibt es ein OCAML -Tool zur Unterstützung der Verwendung von Best Practices wie Perls Perl :: Critic Modul?

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

  •  14-10-2019
  •  | 
  •  

Frage

Gibt es ein Tool, das OCAML -Programme analysiert und einige Verbesserungen in Stil und Code vorschlägt? In der Welt der Perl gibt es noch Perl :: Kritiker um einen schlechten Stil zu vermeiden.

Was ich brauche, sind einige Werkzeuge, die Hinweise nicht nur auf Stil machen, sondern auch, um die Dinge sauberer zu machen und Konstrukte zu vermeiden, die in OCAML -Programmen nicht rekursiv sind.

Irgendwelche Hinweise?

War es hilfreich?

Lösung

Ich habe es außer A nicht benutzt Nachricht in den CAML -Gruppen Letzte Woche erwähnt Maskottchen. Es sieht so aus, was Sie suchen. Ich bin mir nicht sicher, ob die Kriterien für die Schwanzrezisionen; Der Autor des obigen Projekts erwähnt sie nicht, erwähnt jedoch Plugin -Funktionen.

Alternativ zusammenstellen mit -dlinear (zum ocamlopt[.opt]) produziert linearisierten Code, in dem erwähnt wird, ob die Funktion ein Schwanzaufruf ist. -annot Erzeugt auch Informationen zur Schwanzberechnung, aber ich kann eine Referenz neben dem nicht finden Änderungsprotokoll (Es wurde in 3.11.0 hinzugefügt). Wie können Schwanzanrufe getagelt, es wird nicht die Gegenteils, markiert Nicht-Schwanz-Anrufe (oder vielleicht gibt es einen Weg?). Unten finden Sie ein Beispiel für die Ausgabe für eine Funktion namens namens sum,

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

produziert (unter viel mehr Ausgang),

*** 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]

Ich denke, die Erfahrung wird allerdings Ihre beste Wahl sein. Schauen Sie sich einige beliebte Projekte durch (Batterien, zum Beispiel), um ein Gefühl für Stil und typische Konventionen zu bekommen. Ich glaube nicht acc oder Kontinuationen cont.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top