D言語

-v1 オプション

求めていたのに気づかなかった。不思議。 -v1 D language version 1これで、構文だけは安心して使えるのかな。

v1.0がリリースされたD言語をいまだに恐れている理由

バグ修正と新機能の追加が同時に行われているから。 便利な機能が増えるのはいいことだと思うけど、新しい予約語出てきてきたり新機能の追加によって既存の機能の考え方が改められることなどありそうで……ないのか。 そういうときは古いコンパイラを使い続け…

phobosの地位的なもの

ひさしぶりにD言語スレを見ていると、Threadクラスがよくないという話やphobosは作り直したほうがいいという意見が出ていて、わたしもそれには同意なんですけど、phobosってD言語の言語部分?でも使われているからはずせないんですよね、たぶん。個人的には…

type aware GC

D1.001がリリースされたこと知ってChangeLogを見に行くと、『New type aware GC』と書かれていました。 個人的には一番欲しかった機能がついにKITAっぽいです。得た情報からの個人的な解釈では、 GCは型情報をチェックするようになった アロケート(new)時に…

type aware GC (2)

void[]でアロケートしたメモリ以外は明示的にdeleteしなくても大丈夫 いや、違いました。 void[]以外は誤った参照をしない(アドレス以外をアドレスとはしない) か。 プログラム内に大きなvoidがあり、アドレスとして解釈される可能性のあるデータが書き込…

D言語やる

また悪い移り気が……

D言語悩む

Ver0.159あたりから以前のコードがコンパイルできないほどの仕様変更が頻繁に起こったD言語も昨日ついに1.00となり、今後はコンパイルできないほどの仕様変更は2.xxbに入ることになる。 そう信じたい。 そうすると、自分のコードを同じ言語に移植するハメに…

べーた

というか、βだから本気で使うべきじゃなかったんだよなと。 これからが本番です。だいぶ前に出ていたD言語の本とかどうなるんでしょうかとか。

DMD 1.00がリリースされていました

俺は実際に出るまで信じないよー、と思っていたら出ていました。 DMD 1.00 - here it is! - D Programming Language Discussion What's New for D 1.00D Runtime Library ←DLミラーがある(本家が重い……) (dmd.1.00.zip, MD5:d237f95ed2c576438e0252b890e83…

Hoven a0.14

Hovenの最新バージョンとソースコードをリリースしました。 http://www.rootshell.be/~kienzan/hoven/ saku.exe(GUIなし)版の起動に対応 (ログウィンドウは無し) リンクがレス番号によってできないバグの修正(テーマ) カスタムタブ廃止 ソースは、GUIのク…

D1.0

1.0 getting close!きました?

また文字コード

// Java String s = "ねこ"; // D char[] s = "ねこ"; で、 s.length は、Javaなら「2」で、Dなら「6」なので、それを意識せずにトランスレートしていると、やはり問題多いです。 たとえば、Converter.substringのあとに、Converter.StrToTCHARsを呼び出すよ…

マルチバイト文字

FontData#setName TextLayout#さまざま にマルチバイト文字関係のバグがあってArrayBoundsErrorなど。 StyledTextのStyleRangeも範囲にマルチバイト文字があると適用範囲が狭かったり、文字数によってUtfExceptionが出たりする。微妙に直そうとしてたんだけど、…

OLEのイベントリスナーが動いた

まだ、完成していないということだったけど、待ちきれないので自分で修正した。とりあえず、OLEのイベントリスナーが正常に動くようになって、ThinBrowserでコメントアウトされていたTitleChangeイベントでShellのタイトルを随時変更する例を実行することが…

dwt-win32-0.36-20060421でOLEのExampleが動かない件

dwt/packages/dwt/examples/ole_com配下のサンプルが、dwt-win32-0.36-20060228.rarだと動くが、dwt-win32-0.36-20060421.rarだとolecontrolsite.d内でのエラーで動かない。 variantの変更?と思ってしまうが、実はコンパイル時に最適化オプションをつけてい…

配列の結合 =~

ちょっと気になったので、はっきりさせておきたいこと。 import std.stdio; int main() { Object[] array; for (int i = 0; i < 10; ++i) { if (i % 2) { array ~= new Object[2]; } else { array ~= null; } } writef("%s\n", array.length); return 0; }こ…

Tableのスクロールが重い件 (3)

結局、グラフィック(GCクラス)を使ってプログレスバーを描画することにした。TableEditorは、セルの位置にコントロールを描画しているだけで、スクロールするたびに移動させなければならならず、この処理がかなり重いので、もうどうせ棒グラフ書きたいだけだ…

Comboクラスで表示できない文字がある

Textクラス、CComboクラスでは問題ないが、Comboクラスでは、「ポエム」と入力すると、最後の「ム」が消える(入力できない)。マルチバイト文字が欠ける感じ?DWTのバグくさいけど、とりあえず、Comoboの代わりにCComboを使うことにする。 ただ、CComboはXPス…

Tableのスクロールが重い件

Tableでレコード件数が1000を超えると、スクロールが重すぎる。なんだこれは・・。 セルにProgressBarを埋め込んでいるので、さらに重い。 これはもうどうしようもない感じ・・、Canvasで自分でグラフを描画すれば少しは軽いかもと考えて、とりあえずCanvasに置…

sqlite3_prepareの引数と動作の相違(?)

ものすっごい、いまさらだけど、ポエニーで使っているDの自作SQLiteクラスのsqlite3_prepareのラッパーがやばい感じにバグってることが発覚した。 たまにでるアクセス違反やSQLのエラーはこいつが原因かも・・。 原因は、sqlite3_prepareが(俺が思っている)仕…

Tableのスクロールが重い件 (2)

解決。ControlEditorとTableEditorをコピペで改造。 内容は、各クラスごとでコントロールにListenerを設定するのをやめて、代表で1つだけ設定するようにして、かつリサイズ、スクロールのイベント発生時にTableのクライアントエリアを取得して、表示中のセ…

Tableクラス 覚え書

チラつかないように更新する方法。 1. setRedraw(false) 2. 更新 3. setRedraw(true)BeginUpdate/EndUpdateと同じ感じでOK。 setRedraw(false); scope(exit) setReadaw(true); ....update proc.... なんてしてもいいかも。 セル上にコントロールを表示する T…

TableクラスsetHeaderVisibleの動作条件

はまったメモ。TableクラスのsetHeaderVisible(bool )は、コンパイル時に「 -L/SUBSYSTEM:windows:5 」オプションを指定しないと、正常に動作しない(trueにしても、テーブルのヘッダが表示されない)。その他(setLinesVisible(bool)など)は、正常に動作する。…

XPスタイルのコントロールを表示する

packages/dwt/examples/controlexample/controlexample.exe.manifest DWTに付属のcontrolexampleでは、このファイルによりXPスタイルを実現している。 見た目だけの話なら、このファイルを「実行ファイル.exe.manifest」と名前を変えて、実行ファイルと同じ…

DWTでMozillaコントロール

どうも、ポエニーで使う予定のIEのブラウザコントロールが気に入らなかったので、Mozilla ActiveX ProjectのコントロールをDWTから試してみた。で、まぁ結果的にはダメです。ダメな理由。 パッケージがでかい(4MB) 英語 プラグインを入れないとフラッシュや…

Poseidon Editor for D v0.21

「パッケージエクスプローラ」や「アウトライン」などIDEっぽいインターフェイスを備えているエディタ。 ビルドも可能だが、デバッガはない。 GUIがDWT(SWTのD言語移植版)で作られているので、eclipseっぽいきれいなインターフェース。 シンプルな設定でわか…

synchronized

synchronizedって、同じスレッドならネストできたのか・・。 nested mutex。ソースコードを見るとWindowsの場合は、EnterCriticalSection/LeaveCriticalSectionによる実装でした。ネストできないと思い込んでいた・・・。

連想配列 orz

orz・・・一番頻発しているWin32Exceptionは、internal/aaA.dの512行目 assert(0)がhltなので飛ぶ。 なぜか壊れる連想配列。keyはulong。値渡し。 orz・・・。poenyの*nix移植版をvinelinuxで動かしたい! 1という話もあるのですが、とりあえずはWindows上でしっか…

例外セーフ

話題のDMD0.149へ移行してみた。 ポエニーをコンパイルすると、コンパイルエラーデター!!と思ったら、毎回のごとく、『sc.ini』を上書きしてしまっていた。 コンパイルできました。注目の機能は、暗黙的なテンプレートのインスタンス化なんだけど、個人的には例外セー…

cannot pause

ポエニーを起動していると、1度だけスレッド例外で"cannot pause"というのが出たので、ちょっとstd.threadを見てみたのですが、 // class std.thread.Thread void pause() { if (state != TS.RUNNING || SuspendThread(hdl) == 0xFFFFFFFF) error("cannot pa…

スタンバイ状態

ダウンロード、ダウンロード完了後のキャッシュ変換で、メモリ使用量が増える問題は、例のごとく大きい配列をdeleteするように修正すると解決しました。 4時間ほどジャッカルをダウンロードし続けても、メモリ使用量は20MBほどです。しかーし、PCからはなれ…

Threadのpauseとresume

以前、スレッドのポーズとレジュームが勝手にGCから操作されるとわめいていましたが、勘違いでした。 ごめんなさい。二度ポーズしたスレッドは、2度レジュームしないと動かないです。

phobosいきなりです

D言語をもうとてもがんばろうと思って、最新のDMD v0.146を取ってきて、phobosをデバッグ用にコンパイルしたらunittestに失敗しました。 場所 phobos/std/path.d // getDrive(r"d:\path\foo.bat") => "d:" int isabs(char path) { char d = getDrive(path); …

ちょっと気になる

デバッグ版のphobosのsocket.dが起動時にunittestしてprintfするのが気になる・・。 追記 デバッグ版は契約が働くのでいい感じ。 おかげで、キーのチェックサム偶然一致によりファイル名が復号されないというバグを発見できました・・。 (toStringzのoutでassert…

CPU使用率とデバッガ

昨日またポエニーでCPU使いすぎ現象がでて、どうしたもんかと今日ずーと考えていたのに、その原因がデバッガで動かしていたということでした。(VisualStudio) デバッガを使った場合は、キーが1万個を越えたあたりからCPU使用率が80〜99%になり、デバッガを使…

ポエニーのGUI

ポエニー用にWindowsのGUIを書いてみた。ねむ。最近は組込系ばかりなので、Windowを作ったのは1年半ぶりくらい。 もともと、これが面倒でウェブベースでやっていたのだけど、どうもウェブベースは嫌われる傾向があるようなので、簡単そうに見えたDFLを使って…

更新時間

Winnyは、自分とこのシステム時計より未来の更新時間を持つキーを削除してしまうみたい。ポエニーで、ファイルの更新時間をキャッシュ生成時刻にしていて、キャッシュ生成時刻=Dのstd.c.time(null)にしていたのですが、Dのstd.c.time(null)はUTCで返すような…

gdcのGCも

dmdのGCがメモリを開放しないことがどーしても気になるので、少し期待を持ってgdcをMinGW環境にインストールして試してみました。 結果的には、だめで、dmdで開放できているパターンでも開放できないメモリがあるようです。

保守的なGC

2ちゃんねるのD言語スレで、GCの話題が出ている。保守的なGCなので、ubyteの配列の中にでも偶然ポインタとしてみるとGCが拡張したメモリアドレスを指すようなデータがあると、GCは参照があると判断して開放しないそうな。 ポエニーでは、IPアドレスや日本語…

synchronized文とセマフォ待ち行列と愚痴と言い訳

@ 問題の発端 ポエニーで、通信だけは速く動かして、あとは限界に達するまでは、内部で受信コマンドをキューに貯めながら処理していこうと思って、コネクション管理タスクをディレイなしでフル稼働させたら、他のタスクがコネクションテーブル(コネクション…

「length」というローカル変数を使う際に注意すべきこと

import std.stdio;int main() { static char str = "123456789"; // TEST 1 int length = search(str, '5'); writef("%s\n", str[0 .. length]); // TEST 2 int len = search(str, '5'); writef("%s\n", str[0 .. len]); return 0; }int search(char str, ch…

メモリ使いすぎ 9

SQLiteを使うとCPU使用率がすごい・・・。

メモリ使いすぎ 10

今度こそ、この話は終了。 今度こそ、もうバグや課題はない。D言語も自称中級者くらいになった。最終的には、キーテーブルをSQLiteのテンポラリーテーブルに入れるようにして、そしたらCPU負荷が高すぎでブラウザなどが動かなくなったので、適当にディレイを…

SQLite

会社で暇を見ながら、SQLite3のページをまんべんなく読んだ。 APIは、よく作ってあって、メモリの管理に関しても、どれを誰が管理するかきっちりしている。 雰囲気は、APRと似ていて、Cなりにオブジェクト指向ライクな感じ。 処理の流れ的には、sqlite3_open…

メモリ使いすぎ 8

GCが動いてないっぽい件は、たぶんOK。 多くても50MB以内で動いている。(と今のところ見える)で、仕事から帰って疲れて冷静になった頭で考えると、そもそもレコード数が2万行を超えるかもしれないテーブルをがんばって全部メモリに入れようとしているのが…

メモリ使いすぎ 2

クエリ応答でmax値を計算するだけして、それを見ずにヒットするだけ全部キー情報を作って送っていた・・・。 前は大丈夫だったんだけど、年末に作り直したときのミス。これは結構影響してそう。

メモリ使いすぎ 2 〜謝罪〜

正直ね、GCがまじめに働いていないと思っていたよ。 だってね、メモリの管理をしなくてもいいってGCが言っているので、本当にしなかったら、どうみてもメモリリークしてます。 なんでね、もうD言語やめて、C++で書き直そうかと本気で考えたよ。 プログラムに…

メモリ使いすぎ 3

http://d.hatena.ne.jp/riesling/20060109/p1 一度拡張された領域は、縮小しないらしい。私が、GCを変だと思っていた原因のひとつに次のような現象ありました。 検索ヒットの数の多いキーワードで検索したときに、大量の検索結果データを作るのでごわーと使…

メモリ使いすぎ 4 〜 GCの単純なテスト 〜

試してみたよ。 import std.stdio; import std.gc; import std.random; import std.md5; import std.thread;int main() { debug(b1) { uint optval = 0; test1(&optval); } debug(b2) { uint optval = 1; test1(&optval); } debug(b3) { uint optval = 1; Th…

メモリ使いすぎ 5

タスクのベースクラスのポーズで自分で自分のポーズを呼び出した場合(ポエニーの場合はイベント待ち行列に並ぶとき)に前回のfullCollectから一定時間以上たっていたらfullCollectを呼ぶようにした。 かなりいい感じ。 キー数5000以上になっても使用メモリ…