Dies ist ein Forschungsprototyp statischer Analysator für GO -Programme. Derzeit besteht das Framework aus zwei Hauptwerkzeugen, migoinfer und ssaview , sollte jedoch in der Lage sein, mehr Backends mit unterschiedlichen Ausgangsformaten basierend auf diesem Framework zu erstellen.
Verwenden Sie, um das Tool zu erstellen, go get :
go get github.com/nickng/gospal/cmd/...
Das Migo -Infer -Tool ( cmd/migoinfer ) färbt Migo -Typen aus einem Go -Quellcode. Die formalen Definitionen der Migo -Typen werden in diesem Artikel veröffentlicht, und das Format der Ausgabe in Textform wird im Migo -Paket beschrieben.
Zum Beispiel angesichts dieses Beispielprogramms main.go ,
package main
func main() {
ch := make(chan int)
go Sender(ch)
fmt.Println(<-ch)
}
func Sender(ch chan int) {
ch <- 1
}
Dies ist die erwartete Ausgabe der Inferenz, wobei zusätzliche Ausgabe def s keine Kommunikation beinhaltet.
$ 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
Dies ist ein Forschungsprototyp und deckt nicht alle Funktionen von GO ab. Bitte melden Sie Fehler mit einem kleinen Fragment mit Beispielcode und dem, was Sie erwarten, und stellen jedoch fest, dass es möglicherweise nicht möglich ist, die Typen aufgrund der Einschränkungen der statischen Analyse fest zu schließen.
Der SSA Viewer ( cmd/ssaview ) ist ein Wrapper über das ssa Paket aus den zusätzlichen Tools des GO-Projekts zum Anzeigen von SSA-Form eines bestimmten Quellcode. Es ähnelt ssadump , teilt jedoch die Build -Konfiguration mit dem migoinfer -Tool in diesem Projekt.