動的でもあり静的でもある言語

たとえばJavaのクラスを

@Attachable
class Hoge{
  void foo(){ xxx };
}

とかやると

Hoge.addFunction({print "きた〜";});

みたいなことが書けるようになったり

@Dynamic
class Hoge{...

とやっておけばJavaスクリプト(!=JavaScript)として実行したり、あとメソッド単位でこんな感じで通常通りのメソッドとスクリプトを切り替えれるようにしたり。

class Hoge{
  @Stable
  public void bar(){
    print("くる〜");
  }
  @Dynamic
  public void foo(){
    print("きた〜");
  }
}

実際には

class Hoge{
  public void bar(){
   print("くる〜");
  }
  private String fooScript = "print(\"きた〜\");";
  public void foo(){
    scriptEnzine.eval(fooScript);
  }
}

みたいな感じでスクリプトとして実行されるの。
fooScriptの部分は、最新のソースコードを読み込んだり外部から設定したりするようにして。


つまり、動的言語と静的言語とか、スクリプト言語コンパイル言語とか別々のものがあるんじゃなくて、動的にしたい部分を動的にして、静的にしたい部分を静的に。コンパイルしたい部分はコンパイルして、ソースコードをダイレクトに動かしたい部分はそうする。
フレームワークとかライブラリとか、最初はスクリプトでやって、安定してきたらコンパイルでやって、最適化したいときに静的にする。そのときに言語を変えたり実行環境を変えたりしなくていいように。