2010年08月05日

PyMite の機能

(この記事は一ヶ月ほど前に下書きを書いたまま、だいぶ時間が空いてしまいました。。。「タイムリーなことに」とか書いてますが、思いっきり時期を逃してしまいました。とりあえず公開します。)

PyMite は Python のサブセットということですが、どれぐらいの機能をサポートしているのかを調べました。

(pymite-08/docs/html/PyMiteFeatures.html)

タイムリーなことに、

組み込み向け「軽量Ruby」と「Rubyチップ」、福岡県が経産省の事業で開発へ

のように、スクリプト言語の仕様を組み込み向けに軽量化して活用しようという動きも出てきています。

PyMite の仕様は参考になるのではないかと思われます。



・ 環境変数やオプションの類

基本的に OS や対話環境が無い、組み込み環境でダイレクトに動かすことが前提なので、一切存在しません。

・ キーワード

and         assert      break       continue    def
del         elif        else        for         from
global      if          import      in          is
lambda      not         or          pass        print
raise       return      while

以下のキーワードはサポートしません。

class       except      exec        finally     try         yield

class をサポートしないということで、これはもはやオブジェクト指向スクリプト言語とは呼べないのではないかという気も若干しますが、Dean Hall 氏曰く「However, the author feels that enough of Python's core abilities are present in PyMite to call PyMite a flyweight Python interpreter rather than a Basic-like language with Python syntax.」(pymite-08/docs/html/PyMiteOverview.html)とのことです。

リストやタプルなどのデータ構造はサポートしているので、組み込みではこれで十分なのかもしれませんね。

try が無いのに raise だけあってもしょうがない気もします。ドキュメントの下の方では、yield は使えると書いてあったり、ここらへんよくわかりません。(未検証)

・ライブラリモジュール

dict            func            list            string          sys

Python とライブラリ互換性は無いので、PyMite の独自実装です。

・識別子

(letter | "_") (letter | digit | "_")*

Python と同じルールですが、_ident や _ident_、__ident などに特別な意味はありません。

・文字列定数

8 bit クリーンですが、Unicode では無いとのこと。

要するに ASCII のみということでしょうか?

・真偽値定数

True(1 と同値)と False(0 と同値)。

・数値

32 bit 符号付整数をサポート。

(long や complex は未サポート。)

HAVE_FLOAT を立てることにより、浮動小数点数もサポート可能。

・シーケンス

  • String (最大 999 文字(バイト))
  • Tuple (最大 253 要素)
  • List (最大 32767 要素)

・辞書

最大 32767 要素の key/value ペア。

データ構造は以上のような感じで、だいぶ簡素で制限もありますが、演算子や制御構文などは例外周りなどを除いてほぼフルサポートのようです。(演算子のオーバロードなどは未サポート。)

無名関数(lambda)や、デフォルト引数もサポート。

コードオブジェクトの eval() や、グローバル変数やローカル変数のリストを返す globals()/locals() などは、スクリプト言語ならではの機能ですね。



トラックバックURL

コメントする

名前
 
  絵文字
 
 
記事検索
最新コメント
アクセスカウンター
  • 今日:
  • 昨日:
  • 累計:

QRコード
QRコード