skymosh

GStreamer winbuilds

http://www.gstreamer-winbuild.ylatuya.es/ 従来Win32版skymoshでのビデオ/オーディオキャプチャやメディアのデコードにはGStreamer本家のディストリビューションを使ってきたが、ビルドシステムの再構築に伴いGStreamer winbuildsに乗り換えることにした。…

ビルドシステム

2段階ビルド、別バイナリ方式で検討に入る。スレッドが入るリリースくらいでmergeしたいが。。 phase0 : ライブラリの検査とconfiguration 何らかの形でライブラリのリンクテスト等を行う。見つかったライブラリはすべてリンクする。 また、CPU固有の最適化…

明示的なimportの必要性

いつ、どのくらいメッセージが飛び交うかを考える。 1GbpsのEthernetを1500byteのパケットで埋めたとすると、1Gbit / (1500*8)bit = 8万packet/sec。そんなに無いかもしれないけど。 これを単純にTCP/IPからユーザランドにデータを持ってくるために使うと、F…

skymoshのスレッドAPI

http://wiki.monaos.org/index.php?.mjt%2Fmosh%2Fthreads shibuya.lispのLTでやったデモなどはこれくらいのAPIで十分に作れる。唯一不便なのは1スレッド1ファイルが必須になる点。 キューが無いのを不便に思うかも知れないが、I/Oに使う限りは、キューイン…

ARP resolv

解決の開始と終了を継続を使って分離。skymoshではスレッドの生成処理が重い*1ため、1リクエスト1スレッドにして処理をpendingするよりはこのような実装が望ましい。こういうケースでは部分継続を使いたいがR6RSに相当するプリミティブが無いのでcall/ccを使…

ARP reply

prev : http://d.hatena.ne.jp/mjt/20090412/p2 とりあえずIPv4アドレスを192.168.0.42に固定。MACアドレスは前回同様、M(4D) O(4F) S(53) H(48)。 ARPくらいならパケットの構造を覚えてるので、コンパイルが要るdefine-packet-typeよりも、直接bytevector-H…

moshからEthernetパケットを送信する

next : http://d.hatena.ne.jp/mjt/20090413/p1 冷静に考えると既にskymoshはUSBデバイスを扱えるので、USB Ethernet NICを使えば(libpcapが無くても)普通にEthernetパケットが送信できるのであった。 MACアドレスとして、ASCIIで"MOSH"を入れたのでパケット…

ハッシュテーブルの差し替え

現状の問題点は、ハッシュテーブルがスレッドセーフでないので、スレッドを2つ以上同時に初期化すると困ったことになる点。 解決策A。いわゆるnon-blocking-hash-tableにしてハッシュテーブルはVM間で共有する。 http://practical-scheme.net/wiliki/wiliki.…

Visual REPLの設計

メディア処理のためには、emacsとかの上でどうにかするよりも、自前でエディタや他の仕事をするインターフェースを持つ方が好ましい。emacsをはじめとしたエディタや、既存の端末エミュレータはビデオや3Dグラフィックスを表示するようにはできていない。 要…

flowers

ここ最近moshのスレッドサポートにまい進してるのは、CRIの書類審査に先日のデモを出そうとしてるからだったりする。 もっとも、特殊なハードウェアが無いと困るプログラムしか無いというのは非常に不味い(冷静に考えると、ここ数年、ハードウェア工作以外の…

thread

thread問題は半分解決。ObjectがEXTEND_GCでない(何故?)ので、いくらObjectにポインタを持たせたところでダメ。 今回はuncollectableで明示的にルートセットに追加してる*1けど、何かちゃんとした方法論が有るはず。。まぁそのうちFFIとの絡みで解決してく…

Shibuya.lisp TT #2でLTしてきた

発表資料 : http://storage.osdev.info/pub/idmjt/diaryimage/0902/neta080228l1.pdf 申し込みはokuokuでしたけど、今後はもう本名でいいかなと。就職活動中だし、内定は出てないし。 発表は投げやりで申し訳ない*1。普段はもっとちゃんとしゃべるんですが、…

使ってよかったValgrind

VMからVMに渡したHeapObjectのポインタ(obj)が指す内容が知らない間に破壊される現象に一瞬悩む。 しかし、Valgrindにはメモリの特定範囲を"実行中に"触れなくする機能が有る。 /usr/valgrind/valgrind.hをincludeし、例えばVALGRIND_MAKE_MEM_NOACCESS(obj,…

GC_mallocまたはnewしたポインタは加工して保持しない

GCにGC_mallocしたポインタが回収されてしまう原因は、ポインタをBignumにして返していたこと。 Bignumにした段階でタグが付与され、(ポインタとして見たときの)アドレスが変化してしまう。保守的GCの前提はポインタが加工されない事だから、このようにして…

白い箱が出るぞ

コードはこんな感じ。 (import (rnrs) (only (mosh) symbol-value)) (define sdl-surface-screen (symbol-value '%sdl-surface-screen)) (define sdl-surface-fill (symbol-value '%sdl-surface-fill)) (define sdl-rgbsurface (symbol-value '%sdl-rgbsurfa…

実録:moshにシンボルを足す

symbol-valueが(mosh)に入ってることを調べるのに一日掛かった。あとは簡単。 void AddCProcedureToVM(VM* theVM,const ucs4char* name,Object (*cp)(VM* vm, int, const Object*)){ theVM->setValueString(name,Object::makeCProcedure(cp)); } Object test…

とりあえず動く

しかしNTコンソール上のREPLはすぐに廃止予定だったりする。 %ffi-supported?の名前が取れていないのはProfilerが無いとclosurenameが呼べないため。Profilerはコンパイラとの兼ね合いもあるので先延ばし。 言うまでも無くこのバージョンはFFIをサポートして…

シンボルを足す手法

マージを前提にすると、何らかの形でmodularityのある内蔵関数インターフェースが必要になる。 つまり、socketが有るホストと無いホスト、cairoが有るホストと無いホストではインタプリタが内蔵する定義が異なるようにしなければならない。しかし、内蔵定義…

port

とりあえず、平行プリミティブとしてportを使うことにする。 これはpi計算や他のプロセス代数によく似ている。 一般化port いわゆるR6RSのportはbinaryかtextしか扱えないため、一般化したportを考える。 これは要するに遅延評価されるclosureで、原理的には…