NWSC
NWSC
NWSC(コンパイラ) とは、SuperCというプログラミング言語のコンパイラの名称。
コンパイラはC++98でフルスクラッチで書かれており、gccやclangなど他のコンパイラのソースは一切使用されていない。
プログラミング言語SuperCは、別名 C++ Nex。Twitterで C++ というキーワードは検索できないので改名した。NWSCは、native x86出力と LLVM出力の二系統を持っている。このうち LLVM出力は、x86/x64, Android-ARM, WebAssembly の nativeコード/仮想コードに正常に変換できることを確認済みである。
NWSCは他のコンパイラのフロントエンドではなく、それ自体がスタンドアロンなコンパイラである。
ただし、LLVM出力については native化/Wasm化するのにclangを用いる必要がある。
SuperCは、基本的にC++98とStandard Cをベースに機能強化された言語。 マクロ、文字列、リスト繰り返し構文、強い型、値を返す条件分岐、 関数内関数、bsync/bwait/bresume機構で、機能強化/機能追加されている他、 Rustの影響を受けてメモリー参照関連のゼロコスト抽象化を実装中。
NWSA は、MASM 5.0と良く似た書き方をするマクロアセンブラで、MS-COFF出力とOMF出力を持つ。但し、OMF出力は既に非推奨で余りテストされていない。 NWSL は、MS-COFFやOMFのオブジェクトファイルに対応したリンカーで、32BIT/64BITのWindows用のEXEファイルが出力が可能。WinXP/Win7/Win10で動作確認済み。MS-COFFに対応したリンカーはMS純正のLINK.EXE以外では余り種類がないが NWSL はその1つである。 NWSLIBは、オブジェクトファイルをライブラリファイルにまとめたり、取り出したりする機能を持つライブラリアン。
NWSCのnative x86出力は、MASMと良く似た書き方の Intel ニモニックのアセンブリ出力を 常に使っており、それをアセンブル処理するマクロアセンブラNWSAは、常にテストし続けら れる状態になっているため、NWSAを用いて実際に実用的なプログラムを書ける。 名称のNWSCは、NWS+Cと分けられて、NWSは、NOWSMARTの略。Cは、Cコンパイラを意味する。 同様にNWSA=NWS+Aで、Aは、Assemblerを意味する。NWSL=NWS+L で、LはLinker、 NWSLIB=NWS+LIBで、LIBはLIBRARIAN、NWSTK=NWS+TKで、TKは、ToolKitを意味する。
NWSCは、NWSIDE という IDEと統合され、VisualStudioと同様な感覚のソースレベルデバッガーを備えており、 ソースの任意の行にブレークポイントを仕掛けられるほか、ステップイン、ステップオーバー、グローバル変数/スタック(auto)変数の内容表示、逆アセンブル表示、メモリーダンプウィンドウ、レジスタウィンドウ、ブレイクポイント設定ウィンドウなどを備えている。NWSIDEでは、独自の DockingWindowを備えており、Windowは、Docking状態、MDI状態、Floating状態をマウス操作で切り替えられる。
NWSCのnative x86出力は、NWSA用のアセンブリ言語を出力し、NWSAでCOFF形式のオブジェクトファイルに変換し、最後、NWSLでWindowsのEXEファイルにリンクする。 NWSCのLLVM出力は、LLVMの可読式仮想言語の*.LLファイルを出力し、clang-clでCOFF形式のオブジェクトファイルに変換し、最後、NWSLでWindowsのEXEファイルにリンクする。 どちらの系統でも、アセンブル言語をNWSAでアセンブルして出力したオブジェクトファイルもEXEファイルにリンクできる。