Konohaの中の人によるKonohaに関するつぶやき

Konohaに興味があるもののドキュメントが少なく困っていたら,中の人がドキュメント的につぶやいてくれました. Konoha Project http://konoha.sourceforge.jp/ 続きを読む
4
Masahrio Ide @imasahiro

#konoha_lang でkonohaの中身を紹介してみる.

2011-01-02 23:39:11
Masahrio Ide @imasahiro

Konoha言語とは静的に型付けされたスクリプティング言語です. 公式サイトはhttp://bit.ly/f8fMqB です

2011-01-02 23:42:23
Masahrio Ide @imasahiro

他のスクリプティング言語とは静的に型付けされている点で異なります。 また、Javaライクの文法を採用してます。 Java互換ではなく、Javaライクなので、一部の表記で異なっています。 #konoha_lang

2011-01-02 23:45:39
Masahrio Ide @imasahiro

内部実装としては、ほぼC言語で記述され、ごく一部でアセンブリ言語が使われています。wcで数えたところ、1月2日現在、C言語が47207行, アセンブリが5行程度です。#konoha_lang

2011-01-02 23:52:30
Masahrio Ide @imasahiro

VMやクラス構造などRuntimeで使用するデータ構造はgentoolsディレクトリ以下のジェネレータで生成されます。 コードジェネレータにはpythonが使用されており、Konoha言語のスクリプトはMakefile.amを生成する程度に使用されます。#konoha_lang

2011-01-02 23:57:27
Masahrio Ide @imasahiro

Wikiに載っているKonohaの特徴を解説。 (1) C/Java と高い文法互換性. 主にJava言語にほぼ互換の文法を採用しています。 (2) 静的な型付けと型推論. 静的型付けを採用してる.タイポなどはコンパイルエラーとして出力される。#konoha_lang

2011-01-03 00:03:07
Masahrio Ide @imasahiro

続き. (3) "Run anytime" コンパイラ技術. コンパイルエラーに陥った際に、そこでコンパイルを止めるのではなく、極力動作する形でコンパイル・実行を行う方針でコード生成を行う。確か、これはppl2008で発表してた気がする。#konoha_lang

2011-01-03 00:06:19
Masahrio Ide @imasahiro

(4) ユビキタス時代のどこでもスクリプティング. 移植性高い.T-Kernel, LinuxKernel内でも動作する (5) 高性能バイトコードVM (世界最速?). 結構速い実行処理系.レジスタ型VMでdirect threaded codeを採用 #konoha_lang

2011-01-03 00:13:00
Masahrio Ide @imasahiro

(6) クラスルーム生まれの教育プログラムとの統合 これは、大学の授業で使ってますってことか. 去年のB3の授業課題はGUIアプリを作ってくるっていう課題だった. #konoha_lang

2011-01-03 00:15:18
Masahrio Ide @imasahiro

Konohaのソースコードはsrcディレクトリ以下に配置されてる。 main関数が書いてある"konoha.c, 外部から持ってきたコードはext/,コンパイラ,VMは lang/,コアのコードとランタイムは main/以下に入ってる. #konoha_lang

2011-01-03 00:20:07
Masahrio Ide @imasahiro

ヘッダファイルはinclude以下に入ってる。自動生成されるヘッダファイルは*_.hってアンダーバーが付いている。src以下にも自動生成されるファイルはあるけど、こちらは名前がまちまち。 #konoha_lang

2011-01-03 00:23:52
Masahrio Ide @imasahiro

あまり計画をたてずに書いてたから、次に何を書けばいいのか迷う。とりあえず、以下を順々に書いていく。 メモリレイアウト、GC、VM、言語的特徴

2011-01-03 00:26:43
Masahrio Ide @imasahiro

メモリレイアウトというか、Objectやメモリ管理のデータ構造の話.KonohaではアーキテクチャによってObjectの大きさが異なる. 64bit OSなら64byte, 32bit OSなら32byteになるように配置してる. #konoha_lang

2011-01-03 00:55:08
Masahrio Ide @imasahiro

Object(knh_Object_tで定義されている)はヘッダ(knh_hObject_t)とボディで構成されてる。ヘッダはオブジェクト状態をしめすflag、クラス情報,あとリファレンスカウントが入ってる。 #konoha_lang

2011-01-03 01:00:00
Masahrio Ide @imasahiro

またmagicフィールドとmetaフィールドが存在している。magicはlive/deadの判定用,metaは現在未使用。 void *meta; /*reserved for traits*/と書いてあるからtraitsをやるために残っている。#konoha_lang

2011-01-03 01:02:35
Masahrio Ide @imasahiro

String, InputStreamなど各オブジェクトはヘッダは共通で、ボディだけ構造が異なるが、それぞれのオブジェクトの大きさは必ずsizeof(Object)となるように注意している。64byteからあふれる場合はポインタでつないで管理している。 #konoha_lang

2011-01-03 01:13:44
Masahrio Ide @imasahiro

各クラスのオブジェクトはkonoha_class.h, メモリ管理データ構造はkonoha_t.hに載っている.メモリ管理データ構造はPythonを参考にしてる。 #konoha_lang

2011-01-03 01:15:46
Masahrio Ide @imasahiro

sizeof(knh_hObject_t)=32なので、オブジェクトのボディサイズが32を越えるオブジェクトは64byteになるように、2つのデータに分割されます。(溢れた分は64byteである必要はない)

2011-01-03 01:27:55
Masahrio Ide @imasahiro

というか、いつの間にかヘッダが8byte大きくなってる。いつからだろうか?思い出せない。

2011-01-03 01:29:07
Masahrio Ide @imasahiro

ソースコード中ではオブジェクトはknh_Hoge_t、溢れた分はknh_HogeEX_tという名前で定義される。Method, InputStreamなど結構多い。

2011-01-03 01:33:06
Masahrio Ide @imasahiro

ObjectArena(256KB)をObjectPage(4KB)ごとに分割し、それをさらにObject(64Bytes)として使用している。各Pageの先頭はObjectではなく、bitmap(GC用)として使用している。 #konoha_lang

2011-01-03 01:36:24
Masahrio Ide @imasahiro

各オブジェクトが64byteの大きさで固定なのは断片化とかを考えたくないからだった気がする。 使われていないObjectはfreelistとして各実行コンテキスト(ctx)ごとにunusedObjectという名前で保持される。#konoha_lang

2011-01-03 01:38:19
Masahrio Ide @imasahiro

オブジェクト以外の用途でメモリを使用するために同様の構造を使ってる。しかしメモリ領域は分けられている。64byte以下のメモリはここから割り当てる。(メモリの利用効率は落ちる) 64byteを越える大きさのメモリはmallocで直に確保する。 #konoha_lang

2011-01-03 01:45:34
Masahrio Ide @imasahiro

つぎはGCの話。現在、KonohaではRCGCがデフォルトで採用されている。 MSGCも実装済みで、次のバージョンから移行するかもしれない。 #konoha_lang

2011-01-03 01:49:28
Masahrio Ide @imasahiro

各クラスはObjectSPIと呼ばれるドライバ関数群を持っています。Object なんとかinterfaceという略だったと思います。オブジェクトのinit, copy, traverse, compareToなど各種APIを保持しています. #konoha_lang

2011-01-03 02:11:34
1 ・・ 4 次へ