2013-08-27 4 views
5

Czy istnieje jakaś otwarta biblioteka .NET (C#/F #) do abstrakcyjnej analizy statycznej? Obecnie interesuje mnie stały algorytm propagacji.Biblioteka stałej propagacji dla .NET

Powinien być abstrakcyjny (język niezależny) i otwarte źródło, ponieważ chcę go użyć jako podstawy do niestandardowej implementacji algorytmu.

Dzięki.

+0

Upierasz się przy otwartym oprogramowaniu? –

Odpowiedz

2

Biblioteka Mono.Cecil jest prawie tym, czego potrzebujesz. Jest to open-source, wyodrębniony język i jako bonus jest super dopracowany, szybki i stabilny.

Ale nie jest to dokładnie to, czego chcesz, ponieważ Cecil nie analizuje kodu źródłowego C#, VB.NET lub F #, ale analizuje pliki złożeń (dll i exe) i kod IL zawarte w złożeniach. Dla wielu obszarów analizy statycznej byłoby to wystarczające, ale dla stałej propagacji (myślę, że chodzi o dosłowną stałą, taką jak const string STR = "MyString"; lub const int INT = 12345;), utrata informacji w czasie kompilacji, ponieważ stała wartość jest zakodowana na stałe w miejsce stałego użycia. Cecil nie nadaje się również do analizy Abstract Syntax Tree.

Można również spojrzeć na Microsoft Roslyn. W przeciwieństwie do Cecil, Roslyn analizuje kod źródłowy C# i VB.NET, jest bardzo dobrze przystosowany do analizy Abstract Syntax Tree, ale nie jest open source, nie obsługuje F # i na pewno podlega zmianom, dopóki nie stanie się RTM, powiedzmy w przyszłym roku z Visual Studio 2014, (ale to tylko moje przypuszczenie).

+0

Dziękuję za odpowiedź. Wszystkie biblioteki są bardzo interesujące. Ale znajduję więcej abstrakcji na wysokim poziomie. – gsv

+0

Co masz na myśli przez "znajduję więcej abstrakcji wysokiego poziomu"? –

+0

Przepraszamy. Część odpowiedzi została utracona. Mam na myśli to, że próbuję znaleźć coś podobnego do pranlib dla ocaml (https://code.google.com/p/ocaml-pranlib/): zestaw analiz dla abstrakcyjnych, niezależnych od języka struktur danych. – gsv

1

Powinieneś rzucić okiem na Common Compiler Infrastructure: Kod i komponenty AST project. Dostarcza model obiektowy do wykonywania analiz statycznych na zespołach .NET w postaci niezależnej od języka.

Aktualizacja

CCI Projekty są przeznaczone dla bardziej jako kompilatora i bibliotek narzędziowych autorów zamiast out-of-the-box użytkowania.

Być może szukasz czegoś więcej jak Mono.Gendarme, który jest mechanizmem analizy statycznej open source, podobnym do FxCop. Jest utrzymywany w ramach kolekcji projektów Mono-Tools.

+0

Dzięki. To dobry pomysł. Czy wprowadzono lub zaplanowano jakąkolwiek analizę? – gsv

+0

@gsv Nie sądzę, że są, chociaż chciałbym zapytać opiekuna projektu o plany dotyczące projektu. Właściwie nie sądzę, że projekt CCI jest odpowiedni dla ciebie, myślę, że szukasz czegoś takiego jak projekt Mono.Gendarme. Zobacz moją edycję. –