• Showing Page History #67211
  • Showing Page History #66950

AScript の紹介

ダウンロード

ソースパッケージ ascript-0.02.tar.gz

Win32 バイナリ ascript-0.02-win32.zip

AScript 言語マニュアル (日本語版) 2011年3月3日更新

AScript ライブラリリファレンス (日本語版) 2011年2月25日更新

AScript 開発者向けマニュアル (日本語版) 2011年2月24日更新

AScript とは

言語としての AScript

AScript は、リストやイテレータで表される複数データを一度に処理できる 「暗黙的マッピング処理」と「メンバマッピング処理」を特徴としたスクリプト言語です。 煩雑なリスト要素操作や制御構文を記述せずに、データを処理できます。

他に以下の特徴を持っています。

  • オブジェクト指向プログラミングに必要な、クラスとインスタンスの機構を持っています
  • ブロック形式で記述した手続きを関数に渡すことができます
  • モジュール管理機能を持っています。C++ でユーザ定義のモジュールを書くことができます
  • 評価前の式を引数にした関数を定義できます。この機能を使い、ifwhile などの制御構文もすべて関数で実装されます
  • クロージャに対応しています
  • 関数の引数にオプション引数・デフォルト値・可変長引数を指定できます。 呼び出しの際は、キーワード引数指定ができます。

言語としての主な特徴については こちら をご覧ください。

グルーとしての AScript

AScript に組み込まれたイメージデータ型、データストリームおよび 仮想パス名機能により、さまざまな処理を行うモジュールが、お互いに協調して動作できます。 以下のようなユースケースが、自然な形で実現できます。

  • イメージファイルを読み込んで他のフォーマットに変換
  • イメージファイルを読み、グラフィック描画を重ねあわせてファイルに書き出し
  • データベースの数値に基づいてグラフを描画し、PNG 形式にした後 HTTP プロトコルに出力
  • zip ファイルの中のイメージファイルを取り出して、HTTP プロトコルに出力
  • 複数のイメージファイルを結合してアニメーション GIF ファイルを出力
  • HTTP 経由で CSV ファイルを読み込んでデータ処理

上の例でイメージ操作に関するものが多いのは、協調動作の好例だからです。 イメージにまつわる、ファイル入出力・加工・画面出力は、 各処理を行うライブラリやモジュールが独自のイメージデータ構造を提供しています。 今までのプログラム言語では、そららの間でデータをやりとりするには煩雑な手続きが必要でした。 AScript は、モジュール間でよくやりとりされるデータを言語の標準データ型として提供することで、 そのような問題を解決します。

上の例が、実際にどのようなプログラムで実現できるのか、それは こちら をご覧ください。

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 を使った応用プログラム例が sample ディレクトリの下に格納されています。ご参照ください。

Cairo を使った二次元グラフィック描画sample/cairo
OpenGL を使った三次元グラフィック描画sample/opengl
HTTP のクライアントおよびサーバ機能sample/http
SDL を使った画面描画sample/sdl
Tk を使った GUI プログラミングsample/tk
Active-X を使った Win32 操作 (Windows 版のみ)sample/win32

開発状況

現在の開発状況はベータ版です。モジュールによっては、実装が不完全なものがあります。

ご意見、ご感想を フォーラム にてお待ちしています。

Please post your idea and opinions into Forum. Messages written in English would also be welcome.

使用した開発環境・ライブラリ・ツール

以下の開発環境・ライブラリ・ツールを使わせていただきました。ありがとうございます。

開発環境Borland C++ Compiler 5.5
正規表現鬼車 5.9.2
乱数生成Mersenne Twister SFMT 1.3.3
XML パーサExpat 2.0.1
YAML パーサYAML 1.2
SDLSDL 1.2
cairocairo 1.10.2
JPEGIndependent JPEG Group 8c
PNGlibpng
TIFFhttp://www.libtiff.org/
zlibzlib
bzip2bzip2
Tcl/TkTcl/Tk 8.5
データベースSQLite 3.6.23.1
combinationHeader <boost/algorithm/combination.hpp>
CSV テストデータ生成なんちゃって個人情報

Latest File Release

ascript (0.0.2)2011-03-03 20:45

Recent Tickets

open() with a string prefixed by bar executes a process2010-09-03 11:43
Implements the following functionality. f = open(&quot;|ls -al&quot;) println(f.readlines()) pxn11432
implement a module that has a directory name2010-08-30 09:08
implement a mechanism to handle files named init.az or init.azd. pxn11432
implementation of math.optimize() add math.diff()2010-07-17 08:39
implement math.optimize() and math.diff() completely pxn11432
Active Scripting 対応 (フォーラムメッセージ [#51163] からの引用)2010-06-12 20:36
フォーラム フォーラム [#51163] からの引用 [forum: 51163] こんにちは。 win のみの機能要望なので、かなり重要度低い...pxn11432
socket I/F2010-05-20 16:20
implementation of a traditional socket I/Fpxn11432