Это исследовательский прототип статического анализатора для программ GO. В настоящее время структура состоит из двух основных инструментов, migoinfer и ssaview , но она должна быть в состоянии создавать больше бэкэндов с различными форматами вывода на основе этой структуры.
Чтобы создать инструмент, используйте go get :
go get github.com/nickng/gospal/cmd/...
Инструмент Migo Sonfer ( cmd/migoinfer ) выводит типы MIGO из исходного кода GO. Формальные определения типов MIGO опубликованы в этой статье, а формат вывода в текстовой форме описан в пакете MIGO.
Например, учитывая этот пример программы main.go ,
package main
func main() {
ch := make(chan int)
go Sender(ch)
fmt.Println(<-ch)
}
func Sender(ch chan int) {
ch <- 1
}
Это ожидаемый выход вывода, с дополнительными def , которые не связаны с общением.
$ 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
Это прототип исследования и не охватывает все особенности GO. Пожалуйста, сообщите об ошибках с небольшим фрагментом образца кода и о том, что вы ожидаете увидеть, однако, отмечая, что может быть невозможно сделать вывод о типах, которые хорошо обоснованы из -за ограничений статического анализа.
SSA Viewer ( cmd/ssaview )-это обертка над пакетом ssa из дополнительных инструментов проекта GO для просмотра SSA-формы данного исходного кода. Он похож на ssadump , но делится конфигурацией сборки с инструментом migoinfer в этом проекте.