Il s'agit d'un prototype de recherche Analyseur statique pour les programmes GO. Actuellement, le cadre se compose de deux outils principaux, migoinfer et ssaview , mais il devrait être en mesure de créer plus de backends avec différents formats de sortie en fonction de ce cadre.
Pour construire l'outil, utilisez go get :
go get github.com/nickng/gospal/cmd/...
L'outil Migo Inférieur ( cmd/migoinfer ) déduit des types de Migo à partir d'un code source GO. Les définitions formelles des types Migo sont publiées dans cet article, et le format de la sortie sous forme textuelle est décrit dans le package Migo.
Par exemple, étant donné cet exemple de programme main.go ,
package main
func main() {
ch := make(chan int)
go Sender(ch)
fmt.Println(<-ch)
}
func Sender(ch chan int) {
ch <- 1
}
Il s'agit de la sortie attendue de l'inférence, avec def de sortie supplémentaires qui n'impliquent pas la communication.
$ 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
Il s'agit d'un prototype de recherche et ne couvre pas toutes les caractéristiques de GO. Veuillez signaler les erreurs avec un petit fragment d'exemple de code et ce que vous vous attendez à voir, cependant, notant qu'il pourrait ne pas être possible de déduire les types de manière solide en raison des limites de l'analyse statique.
La visionneuse SSA ( cmd/ssaview ) est un wrapper sur le package ssa à partir des outils supplémentaires du projet GO pour consulter la forme SSA d'un code source donné. Il est similaire à ssadump mais partage la configuration de build avec l'outil migoinfer dans ce projet.