flat7th

+ Crew指向プログラミング言語

created 2010-12-22 modified 2011-11-22 

crew指向プログラミング言語
2010/12/22
2011/3/10 更新

ZebOSにしろ、libeventにしろ、node.jsにしろ、非プリエンプティブなライブラリは、速いのは分かっているが、マルチコアCPUを活かせない可能性がある。ならば、「なんでもかんでもマルチスレッド」方式との折衷案として、イベントディスパッチャがイベントを刈り取って擬似スレッドを起動する際、擬似スレッド側に結びついたCPUコアで起動すればいいのでは?と妄想中。

4コアなら、非プリエンプティブなイベントディスパッチャを4本走らせているのと一緒。どのコアにどのプログラムを割り当てるかは、「プログラム言語の範疇で」プログラマが指定する。ただし、なにかプログラミングしやすい工夫をしないと、みんな理解できない、使い切れない、普及しない。(Lindaなら...?)

要は「Javaで言うRunnableにCPUコアをbindしたもの」を○○(例えばcrew)などと呼んで擬人化(擬物化)し、イメージしやすくする、ということ。萌えキャラも活用?


基本アイデア:

  • 新しいオブジェクト指向に対するアドバンテージ(理想):マルチコアCPUでの効率的なプログラミング手法を推奨
  • 古いオブジェクト指向に対するアドバンテージ(理想):細かすぎるクラスの作成をやめさせたい
  • オブジェクト指向以前の構造化に対するアドバンテージ(理想):数関係が同じものを同じソースにまとめることを推奨
  • プログラミング言語ができることを制限して、プログラミングスタイルを強制する(例:Python)

いろいろ:
  • crew指向。crewとは、クラスオブジェクトに似てるけど違う何か
  • struct と crew は明確に違う
  • 単純型(int等)の配列は作れない。1:N関係を作れるのはstructかcrewだけ(数関係が違うならcrewを分ける。が、これだと細かいcrewが出来てしまう?→structを推奨)
  • (行列演算したい人のためには組み込みのcrewを用意してあげようか...)
  • structやcrewの定義で、数の関係(1:N等)を定義する。最小と、最大と、初期数
  • struct は動作がない。ゲッターとかセッターとかない (→ゲッター、セッターが、本当の意味でのソフトウェア工学(大規模ソフトを完納する)に寄与した場面を、見たことがない)
  • crew は動作がある。スレッドにちょっと近いんだが、どの仮想CPUコアで走るかをプログラマが指定。なので、同じ仮想CPUコアで走るグループ内はロック/アンロック不要
  • 1つの crew が複数の仮想CPUコアで走ることはできない。禁止
  • 1つの crew インスタンス内の複数メソッドが、複数の仮想CPUコアで走ることはできない。禁止


落書き:
  • ドラムを譜面どおりに演奏するゲームで、手は2本、足は2本だが、ラインが7本とか9本とかある。ラインは、言語上の仮想CPUコアに相当。手足は、OSが認識してるCPUコアに相当
  • 一本の手が、複数のラインの譜面を同時に演奏することはないので、そこにロック/アンロックをプログラムすることは無意味で不要
  • crew...乗組員。以前アルバイトしてたマクドナルドでは従業員のことをクルーというのでそこから
  • employee とか partner とか stuff も考えたけどやめ。creep というのも考えたけど気持ち悪いからヤダ。
  • phenomenon ?


メモ
tips:プロセッサ固定