= AScript の紹介
[[PageOutline(start=2, depth=9, type=unordered)]]
== ダウンロード
ソースパッケージ [http://sourceforge.jp/projects/ascript/downloads/50872/ascript-0.01.tar.gz/ ascript-0.01.tar.gz]
Win32 バイナリ [http://sourceforge.jp/projects/ascript/downloads/50872/ascript-0.01-win32.zip/ ascript-0.01-win32.zip]
[[LinkAttach(ascript-lang-j.pdf, caption=AScript 言語マニュアル (日本語版) 2011 年 3 月 1 日更新)]]
[[LinkAttach(ascript-lib-j.pdf, caption=AScript ライブラリリファレンス (日本語版) 2011 年 2 月 25 日更新)]]
[[LinkAttach(ascript-dev-j.pdf, caption=AScript 開発者向けマニュアル (日本語版) 2011 年 2 月 24 日更新)]]
== AScript とは
=== 言語としての AScript
AScript は、リストやイテレータで表される複数データを一度に処理できる
「暗黙的マッピング処理」と「メンバマッピング処理」を特徴としたスクリプト言語です。
煩雑なリスト要素操作や制御構文を記述せずに、データを処理できます。
他に以下の特徴を持っています。
* オブジェクト指向プログラミングに必要な、クラスとインスタンスの機構を持っています
* ブロック形式で記述した手続きを関数に渡すことができます
* モジュール管理機能を持っています。C++ でユーザ定義のモジュールを書くことができます
* 評価前の式を引数にした関数を定義できます。この機能を使い、{{{if}}} や {{{while}}} などの制御構文もすべて関数で実装されます
* クロージャに対応しています
* 関数の引数にオプション引数・デフォルト値・可変長引数を指定できます。
呼び出しの際は、キーワード引数指定ができます。
言語としての主な特徴については [Overview こちら] をご覧ください。
=== グルーとしての AScript
AScript に組み込まれたイメージデータ型、データストリームおよび
仮想パス名機能により、さまざまな処理を行うモジュールが、お互いに協調して動作できます。
以下のようなユースケースが、自然な形で実現できます。
* イメージファイルを読み込んで他のフォーマットに変換
* イメージファイルを読み、グラフィック描画を重ねあわせてファイルに書き出し
* データベースの数値に基づいてグラフを描画し、PNG 形式にした後 HTTP プロトコルに出力
* zip ファイルの中のイメージファイルを取り出して、HTTP プロトコルに出力
* 複数のイメージファイルを結合してアニメーション GIF ファイルを出力
* HTTP 経由で CSV ファイルを読み込んでデータ処理
上の例でイメージ操作に関するものが多いのは、協調動作の好例だからです。
イメージにまつわる、ファイル入出力・加工・画面出力は、
各処理を行うライブラリやモジュールが独自のイメージデータ構造を提供しています。
今までのプログラム言語では、そららの間でデータをやりとりするには煩雑な手続きが必要でした。
AScript は、モジュール間でよくやりとりされるデータを言語の標準データ型として提供することで、
そのような問題を解決します。
上の例が、実際にどのようなプログラムで実現できるのか、それは [UseCase こちら] をご覧ください。
=== AScript が提供する機能
AScript はイメージデータを扱うクラスを標準で提供しています。
このクラスを中心に、イメージファイルの読み書き・イメージ描画・画面表示などを
行うモジュールが提供されます。
現在対応しているファイルフォーマットは BMP, JPEG, PNG, GIF, PPM, Icon です。
いずれも読み込みおよび書き込みが可能です。
イメージ描画のために、以下のモジュールが実装されています。
* 二次元グラフィックライブラリ Cairo のインターフェースモジュール: cairo
* 三次元グラフィックライブラリ OpenGL のインターフェースモジュール: opengl
画面表示のために、以下のモジュールが実装されています。
* GUI を提供する Tk インターフェースモジュール: tk
* 高速なグラフィック描画を行う SDL のインターフェースモジュール: sdl
HTTP サーバ・クライアントの機能を実現する http モジュールを提供します。
このモジュールをインポートすると、インターネット上の資源をローカルファイルと
同じように扱うこともできるようになります。
zip ファイルの読み書きを行うモジュール zipfile と、tar ファイルの読み込みを行う
モジュール tar を提供します。これらのモジュールをインポートすると、
アーカイブファイルの中のファイルも、通常ファイルと同じようにオープンすることが
できるようになります。
正規表現を処理するモジュール re を提供します。
標準的なテキストフォーマットの読み書きをするモジュールを提供します。
* CSV フォーマット: csv
* XML フォーマット: xml
* YAML フォーマット: yaml
== インストール
Windows および Linux (Ubuntu) に対応しています。Windows XP、Vista および Ubuntu 10.10 で動作確認をしています。
=== For Windows
ファイル ascript-x.xx-win32.zip を適当なディレクトリに展開してください。
=== For Linux (Ubuntu)
''Ubuntu 10.10 は、デフォルトでは C++ コンパイラや readline ライブラリが入っていないので、
以下のようにパッケージをインストールしておきます。''
{{{
$ sudo apt-get install g++
$ sudo apt-get install libreadline5-dev
}}}
以下の手順で AScript の本体をビルド・インストールします。
{{{
$ tar xvfz ascript-x.xx.tar.gz
$ cd ascript-x.xx/src
$ ./configure
$ make
$ sudo make install
$ sudo ldconfig # 必要に応じて
}}}
続けて、以下の手順でモジュールファイルをビルド・インストールします。
{{{
$ ascript build_modules.az
$ sudo ascript build_modules.az install
}}}
エラーが出る場合は、モジュールに必要なライブラリがシステムにインストールされていない
可能性があります。エラーメッセージにしたがって、パッケージをインストールしてください。
== 実行方法
{{{ascript[.exe]}}} はコマンドラインプログラムです。
* 引数にスクリプトファイルを指定すると、その内容を実行します。スクリプトファイルの拡張子は {{{.az}}} です。
* {{{ascript[.exe]}}} を引数なしで実行するとプロンプトが出て対話モードに入ります。終了するときは、キーボードから {{{Ctrl+C}}} を入力、または、コマンド {{{sys.exit()}}} を実行してください。
== 応用プログラム例
AScript を使った応用プログラム例が
[svn:trunk/sample/ sample]
ディレクトリの下に格納されています。ご参照ください。
||Cairo を使った二次元グラフィック描画||[svn:trunk/sample/cairo/ sample/cairo]||
||OpenGL を使った三次元グラフィック描画||[svn:trunk/sample/opengl/ sample/opengl]||
||HTTP のクライアントおよびサーバ機能||[svn:trunk/sample/http/ sample/http]||
||SDL を使った画面描画||[svn:trunk/sample/sdl/ sample/sdl]||
||Tk を使った GUI プログラミング||[svn:trunk/sample/tk/ sample/tk]||
||Active-X を使った Win32 操作 (Windows 版のみ)||[svn:trunk/sample/win32/ sample/win32]||
== 開発状況
現在の開発状況はベータ版です。モジュールによっては、実装が不完全なものがあります。
ご意見、ご感想を [http://sourceforge.jp/forum/forum.php?forum_id=22931 フォーラム] にてお待ちしています。
''Please post your idea and opinions into [http://sourceforge.jp/forum/forum.php?forum_id=22931 Forum]. Messages written in English would also be welcome.''
== 使用した開発環境・ライブラリ・ツール
以下の開発環境・ライブラリ・ツールを使わせていただきました。ありがとうございます。
||開発環境||[http://www.embarcadero.com/jp/ Borland C++ Compiler] 5.5||
||正規表現||[http://www.geocities.jp/kosako3/oniguruma/ 鬼車] 5.9.2||
||乱数生成||[http://www.math.sci.hiroshima-u.ac.jp/~m-mat/MT/SFMT/index-jp.html Mersenne Twister SFMT] 1.3.3||
||XML パーサ||[http://www.libexpat.org/ Expat] 2.0.1||
||YAML パーサ||[http://www.yaml.org/ YAML] 1.2||
||SDL||[http://www.libsdl.org/ SDL] 1.2||
||cairo||[http://cairographics.org/ cairo] 1.10.2||
||JPEG||[http://www.ijg.org/ Independent JPEG Group] 8c||
||PNG||[http://www.libpng.org/pub/png/libpng.html libpng]||
||TIFF||[http://www.libtiff.org/]||
||zlib||[http://www.zlib.net/ zlib]||
||bzip2||[http://bzip.org/ bzip2]||
||Tcl/Tk||[http://www.tcl.tk/ Tcl/Tk] 8.5||
||データベース||[http://www.sqlite.org/index.html SQLite] 3.6.23.1||
||combination||[http://photon.poly.edu/~hbr/boost/combinations.html Header <boost/algorithm/combination.hpp>]||
||CSV テストデータ生成||[http://kazina.com/dummy/ なんちゃって個人情報] ||
[[ReleaseList]]
[[RecentTickets(limit=5)]]