Bir ara biçimi varsa, o zaman Dil X bir program çevirir şey uygulamak olabilir için bu biçimdeki ve ayrıca gelen Dili Y. bu formatta ilgilendiğiniz tüm diller için bu dönüşümleri uygulamak ve doğru, bitti mi?
Ne biliyor musun peki? Böyle bir format zaten var: montaj. Derleyici, zaten "X Diline Montaj" dönüşümünü gerçekleştiriyor ve "Dil-Y'ye Montaj" dönüşümünü söküyor.
Şimdi, derleme ters dönüşüm yapmak için harika bir dil değil, ancak MSIL aslında o kadar da kötü değil. İndir yansıtıcı ve farklı dillerde bir demet haline montaj bir .NET sökmeye seçenekleri var göreceksiniz (ve eklentileri daha da sağlamaktadır). Bu nedenle, C # 'da bir program almak, onu bir DLL (MSIL) olarak derlemek, sonra onu VB, C ++ / CLI, F # ve diğer gruplara ayırmak için reflektör kullanın. Tabii ki, diğer tüm dönüşüm işleri de. Bir F # dosyası alın, bir DLL dosyasını derleyin, C # 'ya dönüştürmek için Reflektör kullanın.
Elbette, bulacağınız iki büyük sorun:
- Kod temelde okunamıyor. MSIL (hata ayıklama bilgisiyle bile) orijinal kaynaktan çok fazla bilgi kaldırır, bu nedenle çevrilen sürüm% 100 aslına sahip değildir (teorik olarak bir C # -> MSIL-> C # dönüşümü orijinal kodu size geri vermelidir, ancak alışkanlık).
- Birçok .NET dili kendi özel kütüphanelerine sahiptir (örneğin VB çalışma zamanı kütüphanesi, F # kütüphanesi vb.). Bunları da dönüşümünüzü yaptığınızda dahil etmeniz (veya dönüştürmeniz) gerekir.
Gerçekten # 2'yi çevreleyen bir şey yok, ancak MSIL'deki bazı ek açıklamalarla muhtemelen # 1'e geçebilirsiniz (belki de nitelikleriyle). Bu elbette ek iş olurdu.