Este es un analizador estático prototipo de investigación para programas GO. Actualmente, el marco consta de dos herramientas principales, migoinfer y ssaview , pero debería poder construir más backends con diferentes formatos de salida basados en este marco.
Para construir la herramienta, use go get :
go get github.com/nickng/gospal/cmd/...
La herramienta MIGO infer ( cmd/migoinfer ) infiere los tipos MIGO de un código fuente de GO. Las definiciones formales de los tipos MIGO se publican en este documento, y el formato de la salida en forma textual se describe en el paquete MIGO.
Por ejemplo, dado este programa de muestra main.go ,
package main
func main() {
ch := make(chan int)
go Sender(ch)
fmt.Println(<-ch)
}
func Sender(ch chan int) {
ch <- 1
}
Esta es la salida esperada de la inferencia, con def de salida adicionales que no implican comunicación.
$ migoinfer main.go
def main.main():
let t0 = newchan main.main0.t0_chan0, 0;
spawn main.Sender(t0);
recv t0;
def main.Sender(ch):
send ch
Este es un prototipo de investigación y no cubre todas las características de GO. Sin embargo, informe errores con un pequeño fragmento de código de muestra y lo que espera ver, señalando que podría no ser posible inferir los tipos debido a las limitaciones del análisis estático.
SSA Viewer ( cmd/ssaview ) es un envoltorio sobre el paquete ssa desde las herramientas adicionales del proyecto GO para ver la forma SSA de un código fuente dado. Es similar a ssadump pero comparte la configuración de compilación con la herramienta migoinfer en este proyecto.