Previous Page | Next Page

[ADP開発日誌]Ver 0.83のリリース

またまた、2か月ぶりのリリースになりますが、Ver0.83のリリースになります。
おもな改修点は以下のとおりです。
・バグフィックス
・Cスタイル文字列のサーポートの向上とユニコード文字(\uxxxx)のサポート
・html述語の変更(2引数 URL、結果のサポート)
・パフォーマンスの向上
・バイナリをMAC OSX LionからMAC OSX Mountain Lionへ変更

半年ほど前のリリース(Ver0.79)からMAC OSX Lionに対応しましたが、今回のリリースから Mountain Lionに対応させました。それに伴いバイナリ版で使用している、ODBC-APIをMacPortsからシステム標準のものに変更しました。
動作確認のテストには、MySQLの公式サイトにあるバイナリ版のODBCコネクターVer5.1.11 Mac OS 10.6 64ビット版を用いて行いました。
実は最近MAC(というかsafari)が重いなと思って再セットアップをした関係で、環境が変わったついでにコンパイル環境を整理しました。ちなみに遅くなった原因ですが、
Consoleログをみますと、flashのプラグインが頻繁にハングアップするためでした・・・flashのアンインストールが頭をよぎりましたが、英語の学習ソフトがflashで作られているので、しばらくこの不具合にお付き合いするしかなさそうです。

前回のリリースからさらにパフォーマンスの改善を行っており、今回のバージョンも若干ですがパフォーマンスが改善しています。
パフォーマンスの改修に伴い、実行環境の構造を見直している最中でこれが完了すると先に進めます。
実験的に大胆に改修したりもしましたが、バグバグになって没(リバート)したりと足踏み状態が続きますが、ベータ版をリリースする前の大幅な改修ということで、ここいらで試行錯誤を行っています。ので機能追加は今しばらくないかと思います。
2012-09-15 | コメント:0件

[ADP開発日誌]Ver 0.82のリリース

 忙しさにかまけてブログの更新を怠っていましたが、気がつけば今月末でADP公開2周年になります。公開一周年記念の記事も完成していないのに、時の立つのは速いものだと感慨に浸っております。

というわけで、間が空きましたがVer 0.82のリリースです。

今回の変更点は、
・バグフィックス
・sprintfの改修
・パフォーマンスの改善
になります。
また、今回のリリースからホスティングサイトをSourceforge.JpからSourceforge.netに変えました。

sprintfの改修ですが、詳しくはsprintfのマニュアルをご参照頂くとして、たとえばDBからの戻り値をsprintfで成型する場合に、便利に使えるようにしています。
例えば、以下のように記述することができます。


,db.sql@("SELECT * FROM users WHERE hogehoge ",[]).each.
 sprintf("%s:first_name; %s:secondname;様 の誕生日は、%s:birth_dayです。").
 prtn,next;

DBの取得から成型、表示まで一気に書けるところがAnother Data Processorらしくなかなかよろしいかと思います(自画自賛)。


パフォーマンスの改善ですが、Ver 0.60以来の改善になります。
Ver 0.60から0.81になったことでパフォーマンスが下がりましたが、Ver 0.82は0.60以上のパフォーマンスになりました。

前回と環境が変わりましたので改めてベンチマークをとりますと、

◆Windows上でのJavaScript vs ADP
■マシン
・CPU  Core i7-920(2.66GHz HT/Turbo Boost OFF)
・メモリ 12GB(DDR3-1066 2GB × 6)
・OS   Windows 7 Ulitimate (x64) 電源管理:高パフォーマンス
 
■結果
28のフィボナッチ数を求める時間
 IE8(64ビット版)452ミリ秒 
 FireFox 13.0.112ミリ秒 
 ADP 0.60(32ビット)343ミリ秒 
 ADP 0.81(32ビット)452ミリ秒 
 ADP 0.82(32ビット)265ミリ秒 

0.60と比べても20%以上速くなっています。今回はChromeの結果を掲載していません。またFireFoxですが、12ミリ秒とかなり速いです。前回パフォーマンスについて『FireFox3.6未満』と記載しましたが、残念ならがFireFoxと比較するのは厳しくなりました。

という訳で別の比較が必要になりましたので、ADPと、PHP、Javaと比べてみます。

◆CentOS6.2上でのPHP,Java,ADP
■マシン
・CPU   Core i7-980X(3.33GHz HT/Turbo Boost OFF)
・メモリ  24GB(DDR3-1066 4GB × 6)
・ホストOS Windows 2008R2(Hyper-V)
・ゲストOS CentOS 6.2(実行環境)

■テストコード
 テスト1:28のフィボナッチ数を求める PHPソース(Test1.php) Javaソース(Test1.java) ADPソース(Test1.p)
 テスト2:10万までの素数を求める PHPソース(Test2.php) Javaソース(Test2.java) ADPソース(Test2.p)

テスト2のPHPのコードですが、Stackoverflowさんのコードを使わせて頂きました。

■結果(timeコマンドのuser部分を抜き出した)
Linux(CentOS6.2 x64)上でのPHP(5.3.3)、Java(1.6)、ADP(0.82)の比較
 テスト1テスト2
 PHP(5.3.3)207ミリ秒 31,915ミリ秒 
 Java(1.6)38ミリ秒 4,862ミリ秒 
 ADP(0.82)190ミリ秒 3,765ミリ秒 

テスト結果をみますとADPはPHP5.3以上のパフォーマンスが出ています。特にテスト2の結果が1桁近く速くなっており、Javaよりも早くなっています。テスト1ではADPよりJavaが圧倒的に速いのですが、テスト2ではADPの方が速くなっています。テスト2のJavaはコレクションクラス(ArrayList)を使っておりその分遅くなっているようです。実際にこの部分を固定配列にすると実行速度は1/10になります(もっともコレクションクラスを使わないという選択肢はないかとも思いますが)。ADPの配列はC++で実装しています。私自身気づいていませんでしたが、かなり効率良く実装されているようです。

また、テスト2の、リンク先のトピックは元々「PythonがPHPより遅いのだが?」という質問でしたがADPのパフォーマンスはそれ以上なのでいわゆるスクリプト言語より速いことが解ります。
もっとも一部のテストからですので今後も色々ベンチマークテストを行い検証しようかと思います。

ちなみに、もっと大幅にパフォーマンスアップが望める改善策を思いついたのですが、かなりの改修が必要なので、ここまでの成果を0.82としてリリースし、より速くしたものを後のバージョンで出そうかと思っています。打倒JavaScriptですね(まぁJITを入れないとダメなような気がするが・・・)。
2012-07-12 | コメント:0件

[ADP開発日誌]Ver 0.81のリリース

最近オープンしたネコカフェですが、ぼちぼちやていますが、多くの道行く人が猫の呼び込みをみて「あら~かわいい~」と立ち止まるところをみていると、この国は相当病んでいるのか・・・と変な邪推をしてみたり、病んでいるといえば、とあるSNSゲームを知人から誘われはまり、少し課金アイテムを買ってみたりしたり、そういえば前回リリースから誕生日を過ぎたとか、その前回リリースからあまり間が空いていませんが、ADPのVer0.81をリリースします。

変更点は以下のとおりです、
・バグフィックス(DBライブラリ、~演算子、他)
・式のコンパイルの改善
・テンプレート機能の変更(ヒアドキュメント化)
・インクルード機能の変更(インクルードキーワードの変更)
・コマンドラインオプションの追加と変更(ワーニング、構文チェックの追加と引数のコード実行のオプション値の変更)

式のコンパイルの改善ですが、以前のバージョンではハッシュ検索のコンパイルがちょっと不完全でしたので、きちんと木構造をたどるようなコードに変更しました。おかげで、
$hash['key1']['key2']
というようにハッシュ検索の戻り値からさらにハッシュ検索ができるようになりました。

テンプレート機能をヒアドキュメントのように文字列として扱えるように変更しました。このおかげでWEBページモードの実装が単純かつ一貫性を持つようになりました。
テンプレートの開始ですが、
%>
となります。終了は
<%
となります。
JSPやASPのように<%がコードの始まりで、%>がコードの終わりになりますが、ADPも同様になります。ただし、ADPの場合は<%でコードが始まる時は、式の中になっていますので、それを抜ける為に、
<%;
という具合に、;を追加します。
なぜわざわざこのようにしたのかといいますと、テンプレートの機能をヒアドキュメントのようにして、統一的に使えるように言語仕様の中に入れてしまいたかったからですが、そのおかげでADPにはテンプレートライブラリを別に用意することが不要になります。
例えば、メール送信のようにテンプレートを用意してその中に値を張り付けるということがWEBページを作ることと同じようにできます。
ちなみにテンプレート(ヒアドキュメント)の開始、終了について他のテンプレートライブラリからの移行を考慮して将来的には変更可能なように実装しようかと考えております。
この変更に伴い、インクルードキーワードが合わせて変更になりました。
ちなみにインクルードは、トップレベル(ホーン節やゴール節の定義場所)で、
@includeファイル名@
で行います。
ちなみに、このあたりは仕様変更があるかと思いドキュメント化していませんでしたが、しばらく様子をみて特に変更の必要がなければドキュメント化します。

そのほか地味なところでは、コンパイルエラーやワーニング、ランタイムエラーの見直しを行っています。
不親切な言語仕様を改めてよりエラーやワーニングを出すようにしています。ワーニングは今回のバージョンから追加になります。
これで、いよいよ次はリソースの解放機能を追加しようかと思ってますが、実現できるかな?
2012-05-21 | コメント:0件

[ADP開発日誌]Ver 0.80のリリース

「しゃべってコンシェルジュ」に『楽して儲ける方法を教えて!』と聞きたい衝動を抑えていたり、TopCoderは何とかRound2へ進んだが多分このあたりで敗退だろうと弱気になっているとか、その癒しをもとめて何気にネコカフェ始めたり、そのネコが今日は客が来ないとわめいていたり、ネコと言えば、ここ2か月程ブログがネコネタ2件とさびしい限りでしたが、やっとこさ ADP の Ver0.80 をリリースします。

上司からオークションサイトを作成せよと言われ、ADPでぼちぼち作っていたのですが、Ver0.79のリリース以降バグが出るわ出るわで、たくさんのバグを修正しました。
以前にだじゃれクラウドのAPIもADPで作成しその時もデバッグが進んだのですが、この手のソフトは実践が大事というのを実感しました。
ちなみに変更点も以下のとおりそこそこあります。

・バグフィックス
・例外発生時にスタックトレースを出力
・合わせてcatch述語の仕様を変更
・HTMLのファイルのアップロード(マルチパート)に対応
・configureの試験的導入
・erase_global / erase_session述語の追加
・コマンドライン引数の変更
・CentOS6.2のバイナリ版の追加

アプリを開発して実感したのですが、エラー関連の処理が不親切で、それに合わせて従来falseとしていたものをいくつかランタイムエラーにしました。
また、間違い易い文法があり、その部分についてはワーニングを出したいところです。これについては今後の課題です。

続いて別のWEBアプリケーションの開発を行う予定ですので、今後、もう少し品質が上がるかもしれません。
機能的な追加は今回も行えていないので次期バージョンでは何か実装したいところです。
2012-05-07 | コメント:0件

[ADP開発日誌 ]Ver 0.79 リリース

今年、一発目のリリースになります。
ちょっと間が開いたせいでもないですが、結構な修正が入りました。

・Mac OS X 対応
 Mac OS X上で、platfome述語は"MAC OS X"の文字列を返す。
・eval,sandbox述語の追加
 文字列のコンパイル実行(eval)
 コンパイル実行を制限モードで行う(sandbox)
・一括取得の述語、selecta,sqla述語の追加
 結果を全て取得する場合、selectやsqlよりメモリ効率がよい。
・goal節の開始の,(カンマ)が不要になった。
・Linux上でのpipe述語のパフォーマンス改善

大きなところで、Mac OS Xの対応があります。
今年の初売りでMac Book Airを買ったのですが、しばらく放置していましたが、もったいないので少しずつ使うようになりました。

OS Xですが、開発環境構築に結構苦労しました。以下、愚痴がてら簡単な覚書ということで、
私が使ったのは現在の最新の開発環境Xcode4.3とMacPortsの組み合わせなのですが、Xcode4.3をApple Store経由でインストールしたのですが、コマンドラインツールに関しては別途インストールする必要があり、ネットを探し回って、このページにたどり着きました。
要するにXcodeの統合開発環境からPreferencesをたどり、Command Line ToolsをダウンロードすればOKとのことでした。
ネットをみる限りMacの開発環境はよく変わっているらしくそれはそれで良いのでしょうが、コンパイル環境に関して変更するのも如何なものかと思います。ちなみにWindowsの場合、Visual C/C++はコマンドラインツールに関して言えばDOS時代から変わっていませんし、Linuxにしてもgccを使う上では同様かと思います。

また、Xcode4.3の付属のコンパイラはLLVM-GCCと呼ばれるもので、GCCとは別のコンパイラになります。ADPのコンパイル程度でしたら結構互換性は高いようですが、1点苦労したのが、TLS(Thread Local Storage)が未サポートということで自分で、pthread_setspecificを使って実装しました。
『いや・・・オレもTLS使うのはじめてだが、TLSって20世紀から存在したかと思うのだが・・・gccといいながらunsupported target とか言われても・・・。』
と愚痴りながらpthread_setspecificのマニュアルと格闘しました。いやgccなら __thread 一発で終わるのに・・・。

その他、ADPは、unixODBCを使っているのですが、とりあえずバージョン0.79ではMacPortsからunixODBCをインストールしています。
ただ、MAC OS Xの場合、iODBCを使用しているらしくこのあたりはひょっとしたら将来変更があるかもしれません。

MAC OS Xの場合、32ビットOSでも64ビットバイナリが動作可能のようで、実際に試したところ32ビットOS上で64ビットのバイナリが動作したので、64ビットバイナリのみ用意しています。これについては他のプラットフォームにはない長所ですごいと思いました(どうやっているんだろうという疑問があるのですが・・・)。

とまぁこんな感じでまだまだ実験的にサポートした感は否めませんが取り合えず OS Xもサポートするようになりました。
2012-02-28 | コメント:0件
Previous Page | Next Page