Programlama dillerinin prototiplenmesi (semantikleri, tip sistemleri, değerlendirme ve bunlarla ilgili özelliklerin kontrol edilmesi dahil) için özel olarak oluşturulmuş çerçeveler olmasına rağmen, en iyi seçim sizin özel durumunuza ve özel ihtiyaçlarınıza bağlıdır.
Bunu söyledikten sonra, (daha önce bahsettiğinizler dahil) alabileceğiniz birden fazla (belki de çok farklı değil) alternatifler vardır:
- yeni diller oluşturmak ve prototip oluşturmak için tasarlanmış belirli bir dil / çerçeve kullanmak: örnek olarak, programlama dillerinin (işletimsel) anlamını belirlemek ve kontrol etmek için Racket'e yerleştirilmiş alana özgü bir dil olan Redex [1]; Dil, dizgi (Lateks içinde), azaltma izlerini, birim testlerini ve rastgele testleri (örn. yazmayı kontrol etmek için) denetleme gibi görevlerin kolay işlenmesini sağlar
- belirli bir dili gerekli ölçüde yakalayabildikleri sürece, belirli analizleri kolayca tanımlamayı ve gerçekleştirmeyi sağlayan genel modelleme dillerini kullanmak; Alaşım [2] böyle bir yaklaşımın bir örneğidir: oldukça genel ve esnek olsa da, diller devletler arasındaki ilişkiler olarak modellenebilirken, model kontrolü desteği (örneğin, bu dilde değerlendirme) anlambilim bir İlişki modeli (örneğin, bir dilin anlambilimini modellemek için bazı fikirler [3] 'te bulunabilir)
- bir teorem kanıtlayıcı kullanarak özelliklerini kontrol etmek için dili yerleştirmek; bir örnek, Coq [4] gibi bir kanıt sistemine yerleştirerek dili ve anlambilimini tanımlayacaktır (bu yaklaşım hakkında daha fazla ayrıntı, ayrıca Coq'da derin ve sığ gömme arasındaki farkın tartışılması ve gösterilmesi [ 5])
- Ott kullanmak (daha önce de belirtildiği gibi, Redex'e benzer bir ruhla, ancak gömülmek yerine yeni bir tanım dili sağlamak); Ott, programlama dilini uygun bir gösterimde tanımlamanıza ve kontrolün çoğunun (yani kanıtın) manuel olarak yapılması gereken bir prova sisteminde (genellikle derin gömme ile) dizgi ve tanımlar üretmenize izin verir.
- dili ve anlambiliminin yanı sıra genel amaçlı bir programlama dilinde "sıfırdan" uygun kontrolleri (örneğin testler gibi) geliştirmek ve gerekirse kontrol amacıyla (Leon [6] gibi bazı dillere çevirmek) belirli özellikleri otomatik olarak kanıtlamaya olanak tanıyan ve bu yaklaşımı bir prova sistemine yerleştirmeye benzer hale getiren yerleşik doğrulayıcıları içerir)
Çerçeveyi / aracı kullanmanın ne kadar kolay olduğu (örneğin, tanımı kağıda veya Lateks'e yerleştirmek kadar kolay) ve dil ile ilgili özellikleri kontrol etme mekanizmalarının ne kadar güçlü olduğu (ör. bir teorem kanıtlayıcısındaki dil çok ayrıntılı özelliklerin kontrol edilmesine izin verebilir).
[1] Casey Klein, John Clements, Christos Dimoulas, Carl Eastlund, Matthias Felleisen, Matthew Flatt, Jay A. McCarthy, Jon Rafkind, Sam Tobin-Hochstadt ve Robert Bruce Findler. Araştırmanızı Yapın: Hafif Mekanizasyonun Etkinliği Üzerine. POPL, 2012.
[2] Daniel Jackson. Alaşım: hafif bir nesne modelleme notasyonu. TOSEM, 2002.
[3] Greg Dennis, Felix Chang, Daniel Jackson. SAT ile Kod Modüler Doğrulaması. ISSTA, 2006
[4] Coq resmi kanıt yönetim sistemi
[5] Programlar Hakkında Resmi Akıl Yürütme. Adam Chlipala, 2016
[6] Leon, fonksiyonel Scala programlarını doğrulama, onarma ve sentezleme sistemi