WebSurkit // ウェブ・サーキット

開発:Windows 対応ですが、方針を転換したいと思います。

社長:ほお。

開発:Windows依存部分をCGoに隔離する作戦でしたが、これをやるとUnix部分も同様に隔離して対等にする必要があります。そうすると、Unix間での互換性の問題が生じてしまいます。

社長:Goの部分で#ifdef 的な事は出来ないんですね。部分的にコンパイル対象から外すという。

開発:オリジナルGoでは出来ないようです。ビルド時にオプションを付けるとか、ファイルを分けるとかする必要があるような。単一の.goファイルに一切がっさい突っ込みたいといううちの方針に反します。

開発:そうすると考えられるのは、Goプログラムの中にデータとしてWindows依存部分を保持しておいて、実行時にコンパイルしてプラグインとして動的リンクする方法です。プラグインは以前に試して問題ありませんでした。

社長:コンパイル処理自体がGoのパッケージになっていると良いですね。コンパイルするか否かはコードの電子署名を元に判断する。まあ、自分自身と同じ署名がされてたら問題ないでしょう。

開発:動的リンクする時に署名情報を突き合わせれば、セキュリティ上の問題はクリアできると思います。

基盤:HTMLやJavaScriptのようにコメントとして埋め込むというのは?

開発:実行時にコメント部分が見えると良いのですけどね。デバッガでは見えるんだとすると、ソースコードがバイナリに埋め込まれてる形式もあるのではないかと思いますが。

社長:Evalは使えないんでしょうか?

開発:Eval ... 計算くらいにしか使ったことがないですね。CGoをevalとか、凄く無理っぽいですが… ちょっと調べてみます。

開発:あー、前に使ってみたのは types.Eval というやつなんですが、これはまさに定数のexpressionしか評価してくれないですね。パッケージ名typesってあるように、もともと型を評価するためのもののようです。

社長:まあ実行性能を命を掛けてるコンパイル言語ですしね。

開発:インタープリタを作っている人もいるようですけどね。https://golang.org/pkg/go/ のparserで抽象構文木にまでは落とせるようですから、あとは木を追っかけて実行すればイケるのかなとは思います。

社長:私が学生時代に作ったCインタプリタもそれ式でした。インタプリタの処理をその言語自体で書けるので、一番簡単な実現方法だと思っています。例えば、if分の構文木はif文で処理すれば良いといった具合です。

基盤:抽象構文木(AST)からバイナリに落とすところはパッケージになってないんでしょうか?

開発:検索… その答えではないですが、Goの処理系がソースからバイナリまで変換する流れを解説した記事がありますね。

開発:2年前なのでちょっと古いですが、こういう基本的な部分は変わってないと思います。

社長:これ、抽象構文木レベルでいじると、DOMみたいに色々作り変えられますよね。構造エディタを作るためのベースも完備しているように見えます。

開発:ブラウザ上のJavaScriptと通信するGoプログラムでGoの構造エディタを作って、その場でインタープリットしたり、性能重視の部分は作成したコードをbuildに送ってバイナリにして動的リンクして実行する。完璧なツールチェーンですね。

社長:性能が命がベースにあるのは良いのですが、性能はどうでも良い部分というのも有るんですよね。動的な設定とか移植性のほうが重要とか。その部分を別の言語で書かなければならないというのはどうにも歯がゆい。

開発:ブラウザでの処理はDOMと密着したJavaScriptでもう確定だと思うんです。問題は、手元のマシンに密着した処理をどう行うか。

社長:ある種の簡単な仮想マシンを定義してやるとよいのかもですね。仮想ファイルシステムでも良いかもですが。

基盤:ファイルならNFSでっていう手はありますよね。

社長:ローカルマシン内にアクセスするにはプロトコルが無駄に重いと思いますが、抽象ファイルシステムとして、操作可能なメタ情報としてはNFSのを参考にするのが良いように思います。

開発:そのなると、syscallとかいう生操作ではなくて、逆に思い切り抽象的な仮想なんちゃらクラスを作って、そこにパッケージすることになりますね。

社長:Windows対応で引っかかってるのってなんでしたっけ?

開発:ファイルのメタ情報と、CPUとかのリソース使用状況の取得です。あと外部コマンドのfork/execがありますが、これはUnixの間でほぼ差異が無いと思いますから、CGoで書いても良いかなと。goルーチンに何かプラスするか、そもそもプロセスを実行するサーバ的なものは分けたほうが良い気がしなくもありません。

基盤:抽象マシンサーバ的なものは分けて、WebSocketでアクセスすることにすると、JavaScriptからも共通の方法でアクセスできて、一石二鳥ですね。

社長:抽象マシンってくらですから、プロセスであってもGoルーチンであってもただのライブラリであってもなんでも良いですね。

開発:考えてみたらGoにはRPCパッケージがあります。これはまさに仮想マシンのインターフェイスだと思います。実マシンのRPCサーバともシームレスです。

社長:RPCで受けてsyscallで実行すると。

基盤:コネクションはWebSocketでデータはXDRとかで流すっていうのもアリではないかと。

開発:うーん。動的リンクでやるよりスジは良いですね。断然面白いし。セキュアにしやすいし。

社長:イメージとしては、リモートシステムコール、パッケージ rsyscall ですかね。

基盤:abstract で asyscall か、virtual で vsyscall とか。

開発:考えてみたら、4月に試作した ITSTP はそれでした。あれをGoで実装する。

社長:朝から色々考えたので、お腹がすいてしましました。食事してきます。

* * *

社長:ただいまぁ。くったくった。

命名:ウェブサーキット

開発:ふぁぁ… 寝た。

基盤:昨日の筋肉疲労が残ってますかね。

開発:まる1日、間違った方向に走ってしまった感が疲労感を増します。

社長:それもまたひとつの経験。

社長:あーそれで、お昼を食べながら思ったのですが、「サーキット」という言葉を使いたいなと。

基盤:最近、ホンダが F1からまた抜けるって話題をよく見かけます。

開発:まあ今回はガソリンエンジンの終焉という本質的な局面かも知れないですね。

社長:Fの赤木軍馬は上州出身なんですかね?あーこの「人里離れた山奥の粗末な小屋で極貧生活」てイメージから来たのかなw

基盤:筑波サーキットにも来てますね。

社長:ストーリーはほとんど記憶にないんですが、タモツのアイデアで、サメ肌のペイントで空気抵抗を減らすっていうネタだけは覚えています。

開発:GJリンクよりGJサーキットのほうがかっこいいですね。

基盤:集積回路って感じですよね。

社長:そのGJというのもやめてですね、ウェブサーキットにしようかなと。というのは、これは実装がWebSocketになることは確実です。で、ソケットとサーキットは読みがとても似ているなと思ったわけです。たぶん英語読みでは。

基盤:Google翻訳に読ませてみましょう。

基盤:ウェブ酒って聞こえます。サーキットのほうは少しウェブ咲きっぽいですけど。

開発:「サ」の強弱だけみたいな。発音記号の表記は…

circuit : ˈsərkət
socket : ˈsäkət

基盤:発音記号一覧… おっと、この人のはこの10/12に更新されてますね。

基盤:Wikipedia… なるほど、このアタマにあるクオートみたいのは第一ストレスですね。この、aのアタマに点々が乗ってるのは「非円唇中舌広母音」なるものだそうで、日本語だと「朝」のasaがこれになるそうです。

開発:私はこれを突然聞かされて、比較せずにどっちだって言われたら、わからない自信があります。

社長:じゃま、日本語表記はウェブサーキット、読みはウェブソケ?くらいで行きましょう。

基盤:ウェブ宗家みたいですねw

命名:WebSurkit

社長:さて、それで綴りなんですが。やはりドメイン名にしたいので、使えるのはASCIIで英数字とハイフンだけという事になります。

基盤:webcircuit も web-circuit も取られてますね。

開発:そもそもサークがcircって、サークルとかサーカスと同源なんですかね。イマイチぱっとは出てこない綴りです。

社長:わたし的には上の意味のsurが好きかな。シュールな感じ。吹っ切れた感じ。

開発:敬称のサーだとSirですね。

基盤:愛ちゃんのサーっていうのもありますね。綴りは不明ですが。

開発:キットの部分もcuitもちょっとすんなり出てこないですね。フランス語ですかね。

基盤:キットといえばkitですよね。

社長:まあ、我々は子供の頃からキットという言葉が大好きです。

基盤:マッキントッシュのKitCut。あ、KitKat ですか。

開発:そうそう、合格祈願グッズだったりするんですよね。きっと勝つで。

社長:「超キット」って、なんかスゴイものが組み立てられそうですねw

基盤:Google翻訳に読ませてみましょう。

開発:どれも読みはサーキットですね。

社長:では、表記はWebSurkit に決定します。.com が240円で .net が140円、のはず… ですよね?

経理:確認しました。

社長:では、「次へ」。で「申し込む」をぽちっ。

iMac:ぽーん。

基盤:いつものSPAM風確認メールが来たもよう。では、ネームサーバ変更ぷちぷちっ。でWebサーバで確認。

社長:確認。

開発:玄関開けたら2分でごはんですね。

基盤:いつか快進撃すると良いですね。

社長:何らかのサーキットブレーカーを仕込みたいですね。

* * *

社長:タバコ買ってきました。で、この際GShellという名前も見直そうかなと思っています。

開発:そうだShellを作ろうから、だいぶスコープが変わりましたしね。

社長:で、パック、ワンパックを軸に検討したいと思います。

基盤:オールインワンパッケージですね。package one みたいな。

開発:パックといえばJALパック、たくましく育って欲しい、パックインミュージック、パックマン、あたりですね。

社長:それで検索したんですが、パックインミュージックのパックてPuckというんだそうです。いたずら小僧的な。

開発:パックと言えば小島一慶でしたっけね。ギルバート・オー・サリバンとか言ってたのを覚えています。

基盤:今年の4月に亡くなったみたいです。

開発:へー。パックマンてずっとpacman かと思ってたんですが、puckmanという時代もあったみたいですね。

「当初、英文での表記はPUCKMANだったが、Pの文字の一部を削りFにしてしまういたずらを懸念したミッドウェイ社がPAC-MANに改めるようナムコに頼んだという。」
https://ja.wikipedia.org/wiki/%E3%83%91%E3%83%83%E3%82%AF%E3%83%9E%E3%83%B3

社長、基盤:www

開発:筑波山の見えるゲーセンでのめってたら朝日が登ってきたのを思い出します。アルプスショップ?

社長:スペースインベーダーとパックマンは青春ですね。

基盤:まあでも、onepack も onepuck も取られてますけど。

社長:wonepack とかってどうですかね。勝ったどー、ウェブ的な。

基盤:どちらでもワンパクですね。をねぱck。

開発:wwwonepack とかw3onepackとかは?

基盤:onepack-www.net とか。高笑い的なw。

社長:説明的過ぎるのはどうかなと思います。まあ、こっちの件は時間を掛けて考えましょう。

* * *

-- 2020-1020 SatoxITS