2011-01-03 9 views
8

¿Existe una herramienta que analiza los programas de OCaml y sugiere algunas mejoras en el estilo y el código? En el mundo de perl todavía existe Perl::Critic para evitar el mal estilo.¿Existe una herramienta OCaml para admitir el uso de mejores prácticas como el módulo Perl :: Critic de Perl?

Lo que necesito son algunas herramientas que hagan sugerencias no solo sobre estilo sino también para hacer las cosas más limpias y para evitar construcciones que no son recursivas de cola en programas OCaml.

¿Alguna pista?

Respuesta

9

No lo he usado pero message on the Caml Groups la semana pasada menciona Mascot. Parece ser lo que buscas. No estoy seguro acerca de los criterios de recursividad de cola; el autor del proyecto anterior no los menciona, pero menciona las capacidades de los complementos.

Como alternativa, compilar con -dlinear (para) producirá un código lineal que menciona si la función es una llamada de cola. -annot también produce información de llamada final, pero no puedo encontrar una referencia aparte del changelog (se agregó en 3.11.0). De qué manera marca las llamadas de cola, no hace lo contrario, etiqueta las llamadas sin cola (¿o tal vez hay una manera?). A continuación se muestra un ejemplo de la salida de una función llamada sum,

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

produce (entre otras muchas actividades salida),

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

Creo que la experiencia va a ser la mejor opción sin embargo. Consulte algunos proyectos populares (Batteries, por ejemplo) para familiarizarse con el estilo y las convenciones típicas. No creo que un complemento lo ayude a llamar a sus variables de acumulador acc o continuaciones cont.

Cuestiones relacionadas