นี่คือเครื่องวิเคราะห์แบบคงที่ต้นแบบการวิจัยสำหรับโปรแกรม GO ปัจจุบันเฟรมเวิร์กประกอบด้วยเครื่องมือหลักสองตัวคือ migoinfer และ ssaview แต่ควรจะสามารถสร้างแบ็กเอนด์มากขึ้นด้วยรูปแบบเอาท์พุทที่แตกต่างกันตามเฟรมเวิร์กนี้
ในการสร้างเครื่องมือให้ใช้ go get :
go get github.com/nickng/gospal/cmd/...
เครื่องมือ MIGO Infer ( cmd/migoinfer ) ชนิด migo infers จากซอร์สโค้ด 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 ในโครงการนี้