AWK˜plus for Java
MATRIX スクリーンセーバー (英数バージョン、スクリーンショット)
MATRIX1

AWK˜plus for Java のご紹介

上記画像は、AWK˜plusで作成したスクリーンセーバーで、文字が落ちるようにコンソール画面が逆スクロールします。 (映画では、文字が左右反転しているため鏡に写してご覧下さい)
  • 構成要素
  • Windows 10 以上 + Windows Terminal など ANSI エスケープシーケンスに対応したターミナルソフト
  • Java
  • AWK˜plus for Java
  • 用語解説
  • Windows Terminal、Microsoft がオープンソースで開発し 2020年にリリースされた (Microsoft Store から入手可)
  • ANSI エスケープシーケンス
    • ANSI escape code - Wikipedia (英語)
    • ANSI エスケープシーケンス チートシート
  • AWK˜plus for Java
    • 教科書「プログラム言語AWK」仕様と GNU GAWK の主要な拡張機能の実装
    • オブジェクト指向言語としての拡張による Java との親和性
    • 動的・静的型付け可能な、Apache Groovy との親和性 (コンパイラ)
    • 2010年(東日本大震災の前年)オープンソースとしてリリース
    • 2021年 AWK˜plus を核として shell を追加した Androidアプリをリリース
MATRIX II スクリーンセーバー (カタカナ バージョン)
MATRIX2

コードから見る AWK˜plus

お題は、ローカル変数です

MATRIXc1
  • 本家AWK には、無い var / val で変数を定義しています。
    これは、その変数スコープのローカル変数定義です。root で定義した場合は、グローバル(クラス)変数になります。
  • AWK では、コマンドラインパラメータに -v var=val を指定するとスクリプト実行前に代入されます。
    しかしスクリプトで var に代入するとそれが有効になってしまいます。(変数の初期値は定義できない)
    ちなみに、(-v 無し) var=val 指定は、次のファイルを読み込む前に解釈します。
  • AWK˜plus では、グローバル変数の初期化 → コマンドラインパラメータの解釈 → スクリプト実行となっており上記の問題は発生しません。 ちなみに、AWK˜plus は、ネストした関数(クロージャー)をサポートしているため変数もネストします。

AWK のローカル変数

MATRIXc2

関数の仮引数の後ろの変数がローカル変数です。(コーディング規約として空白を何個か挿入します)
何故こんな醜い仕様かというと、AWK は、C の次に開発され C にもこの仕様は残っています。
プログラムコンテストで C でショートプログラム課題を解く場合には必須技です。
しかし、う~さんの得意技は、アルゴリズムのためこれは苦手です。

プログラムコンテスト(C、82文字、トップ 68文字)
MATRIXp1
(AWK、37文字、トップ 34文字)
MATRIXp2

ちょっと一息

オリジナル画面は、MATRIXスタッフの中に日本人がいて「日本では、エディタが縦にスクロールする」と言ったのが始まりだそうです。

MATRIX スクリーンセーバー (セミナー「アラーム」バージョン)
MATRIX3

Android で動かしたい

MATRIX HTMLスクリーンセーバー (Firefoxバージョン)
MATRIX HTMLスクリーンセーバー (Chrome, Edgeバージョン)

終わりに、AWK のおすすめ本

  1. 「 プログラミング言語AWK」AWK開発者達が書いた、教科書+アルゴリズム本、1989年
  2. 「 AWKを256倍使うための本」アスキー、1993年
  3. 「 AWK」ウィキペディア
  4. 日本では、月間ASCIIが特集を組み一大ブームが巻き起こった、1989~1991年

オープンソース

インストール

  1. Java をダウンロード(環境を汚さない .zip 版を推奨、複数の Javaもインストールできます)「Java Downloads」
  2. AWK~plus をダウンロード「AWK~plus for Java 」 (コマンドを添付しています)
  3. AWK~plus フォルダ中の makefile の JAVAHOME 変数に Javaホームパスを設定します。

実行

ターミナルを開き、AWK~plus フォルダをカレントディレクトリにして、と入力します。

「Blog top」 2022.8.28