堕落したAdaプログラマのレベル10

レベル1: pragma Restrictionをこまめに書いている。長いサブプログラムはseparateする。コンパイラのチェックだけでは飽き足らず各種ツールを併用している。AARMは暗唱できる。Adaは甘過ぎると思っているが他の言語では話にならないので仕方なく使っている。
レベル2: いろいろ面倒だなあと思いつつも真面目にコーディングしている。use typeは使うがuseは封印している。RMは一応読んだ。コンパイル時に-gnatwと-gnatyを付けている。
レベル3: with Ada.Strings.Unbounded;した瞬間にfunction "+" (X : Ada.Strings.Unbounded.Unbounded_String) return String renames Ada.Strings.Unbounded.To_String;とその逆をどこからかコピーしてくる。それに限らず長すぎる名前は短くrenamesする。Ada.Streams.Stream_IO.Stream関数はギャグだと思っている。useはそこそこ使う。-gnatyは付けないようになってきた。
レベル4: withを書いたら即座にuseを続けるのが当たり前になった。PureやPreelaborateが何のためのpragmaか知らない。内部表現節を使ったほうが早いところでもmod型とビット演算子で済ませてしまう。-gnatwなんか見たくも無い。
レベル5: 適切な型を適切な位置で宣言することに疲れている。整数はIntegerしか使わない。必要に迫られて型変換を多用。重複した宣言がいっぱいある。AdaのライブラリをwithするよりC言語のライブラリをimportする方が早い。endの後に名前なんか書かない。
レベル6: 実行ファイルのサイズなんか気にせずにAda.Containers以下を使いまくれるようになった。なんてったって標準ライブラリだからね。Ada.Unchecked_Conversionは使って当たり前じゃないか。なんてったって標準ライブラリだからね。pragma Suppress(All_Checks);もデフォだね。なんてったって標準が定めているpragmaだからね。
レベル7: access型の細かいルールは全く知らないがスコープを抜けるときにnewしたメモリが確実に終了処理付きで開放されることだけは把握している。Ada.Unchecked_Deallocationを使わない。access型をローカルスコープに閉じ込める意味がわからない。
レベル8: 事あるごとに他の言語なら……と思っている。Adaを使うメリットがまるで見えてこない。Interfacesやpragma Conversionを使わずに他言語のライブラリをimportしているが、たまたま動いているのでまあOK。
レベル9: 記述量を減らすためにプリプロセッサを作る。そのプリプロセッサはCやJavaと同様の構文を持つ。ある日、プリプロセッサに向けて書いたコードをCコンパイラに通してみたらエラーも無く通って正常に動作したのでそのまま使っている。
レベル10: Adaを使わない。

堕落したC〜は、C言語をLLと主張している諸氏にお願いしたいと思います。