Write once, compile everywhere? (C/C++) (SystemC) (VC++) (IC Design)
Abstract
這兩天寫SystemC的第一個作業,其實花最多時間是在Compiler身上。由於SystemC本身並不是一個程式語言,而是架構在C++上,利用C++的Generics特性擴充其Library,使C++搖身一變成為HDL,且SystemC也沒有自己的IDE和Compiler,理論上只要是C++的Compiler就可以compile所有SystemC的code。
Introduction
由於我Host OS裝的是Visual Studio 2005,所以當然希望SystemC能在Visual Studio 2005上跑,首先compile SystemC的library,雖然能compile成功,但warning不少,接下來寫一個簡單的SystemC code,竟然無法compile成功,令人訝異的是,SystemC library的source code,竟然有分Visual C++ 6.0和Visual C++ 7.1(也就是Visual Studio .NET 2003),我就已經有心理準備了,這Library大概會認Compiler。
沒辦法只好啟動裝有Visual Studio .NET 2003的VMWare Guset OS,SystemC的library果然可以順利compile成功,連warning也沒有,馬上拿助教附的測試程式測看看,可以compile成功,但只要一執行就runtime error,因為助教的測試程式是用Visual C++ 6.0寫的,拿到Visual Studio .NET 2003開啟後,會自動將project升級成2003的格式,測試了好久,發現只要將project的compile command line加上/vmg就可順利compile和simulate了。
Conclusion
C++的標榜的就是『Write once, compile everywhere』,但在同一家公司不同版本的compiler身上,就遇到無法compile的問題,實在很難想像若用C++其它眾多Compiler會發生什麼無法預期的事情,這也使我對C++『Compile everywhere』的理想持保留的看法,或許如Java那樣單一Compiler更能保證compile沒問題,跨平臺問題就由Sun去解決,而不用讓Compiler去傷腦筋,不過Java的執行速度卻又是另外一個問題。
很多人說Microsoft這幾年已將重心放在.NET身上,連C++的重心也是放在C++/CLI身上,不過由這次compile發現,Microsoft還是持續對C++ compiler做改進,讓Visual C++更符合ANSI C++標準。