延々とだらだらしていてたらいつか死ぬ気がしてきたので、いい加減アウトプットする。 明日続かないとしても今日書けばよいのだ。
Golangさわってみた
Javaを中心にOOPな言語をずっと触ってきて、ちょっと回帰的だがGolangでSQLパーサーを描いている。
Golangは色々いわれているように、
- package指向
- 構文機能は手続き型レベルのしかない
- 定番の書き方がググれば出てきてそのとおり実装するのがベストプラクティス
という、スクラッチコンポーネント作るとかどう考えても向いてねえな?な言語。 まあ異文化を痛感するのにちょうどいいだろうと思って、ちょっとリッチなSQLパーサを書いている。
Golangのintafaceに対するJavaの冗長さ
interface
いいね。
Javaで例えるなら「にゃーん」と鳴くのを識別するのにオブジェクトを「猫」か「動物」か「発生源」かとか文脈によって違う名前でクラスを付けなければならなかった。
でも、実際コードに起こしてクラスを指定する際、どの文脈使うか決まっている。DIするならともかく、クラスのインスタンス化とか煩わしいことせずともサクッと関数呼び出すだけで直感的に使える。
奇跡的にも、オブジェクト指向原理主義が言うような定義の曖昧さによる述語の揺れは杞憂に過ぎず、熱心は学者先生さんは理論先行頭でっかちだとGopher君が目で訴えている。
実装がんばります
とはいえ、書いているコードがどうもJavaっぽい。 多相の表現が、どうもintafaceを構造体で実装しているだけだ。 しかもどのコードもスクラッチ気味。ググりながら、楽な書き方を覚えるしかないかな。
ちなみに、SQLパーサーが目指すものは例えば集計バッチで流れる一連のSELECT文を4つぐらい食わせて、「このSELECT文のこの項目は、このテーブルのこの項目をこの式で評価したものです。で、このテーブルの結果はまたこのSELECTで・・・」と複数再帰的に辿れるようにすること。 SQLパーサーを探していたが、なんか期待できるレベルまで分解するものがなかった。たぶんPostgreSQLとかCソースをチョチョイってやったほうが早い気がするけど、それはそれで沼っぽいしCあんまわかんないので避けた。
引き続き頑張っていこう。