スクリプティング言語資料室(仮)

著作権保護期間の70年延長に反対

はじめに
スクリプティング言語に関する資料をまとめました。本来は「研究室」と銘打ってそれなりの ことを書きたいのですが(自分で実装してみるとか)、 今のところはそういう余裕もないので資料をまとめているに とどまっています。翻訳などして私自身がまとめたものと、 各言語のホームページへのリンク等で構成しています。ここでは、「プログラミング言語」との 対比と原語のスペルが scripting language であることの二点を理由に、良く使われている「スクリプト言語」ではなく、 「スクリプティング言語」としています。

スクリプティング言語とは?

http://www.idiom.com/free-compilers/CATEGORY/scriptin-1.html にある Free compiler Catalogによれば、

Description: These are languages that are primarily interpreted, and on unix sytems, can ususally be invoked directly from a text file using #!.

だということです。なんか身も蓋もないようなという気がしないでもありません が、具体的にはBASIC, Bourne Shell, icon. Korn Shell, Perl, Python, REXX, Snobol4, Tcl, awk といったものなどがこれに分類されています。 Scripting Languageという ページがあり、そこではschemeなんかもはいってます。


更新情報


幾つかの言語に関する資料/ポインター

awk

イマドキはどのくらい使われているんでしょうか…。gawkのバージョンは2005年8月31日 現在で、3.1.5まで進んでいます。 2007年10月に3.1.6がリリースされました。 2009年8月に3.1.7がリリースされました。 ネイティブでの正規表現のマルチバイト対応や国際化対応等 多くの拡張がなされています。当然ドキュメントにも多くの手が加えられているわけですが さて、どうしましょうかね…。

ほぼすべての機能をWindows上で使えるようにし、 マルチバイト文字対応が有効になるようにしたものを公開しています。 ダウンロードはこちらからたどってください

お願い:
現在、サロゲートペア領域を使用する文字をきちんと扱えるようにする修正の 準備を進めています。 実際に該当領域の文字を使っているという方がいらっしゃいましたら そのテキストデータをコピーさせてはもらえませんでしょうか? プログラムの開発(動作確認とデバッグ)にのみ使用し、 ほかに公開するようなことはいたしません。 よろしくお願いします。

現在 gawkを基にしてXML対応等の拡張を行った xgawk の開発が進められています。 将来はgawkに一本化されるという話もあるようですが、 現状ではxgawk自体がまだβリリースの段階なので マージされるのはまだまだ先でしょう。→ SourceForge.net: Extensible GNU Awk, with XML, PostgreSQL

GNU Linux等のUNIX互換環境であれば日本語テキストも問題なく処理できると思います。

Guile

Guile(GNU Ubiquitous Intelligent Language Extension/GNUのどこにでも使える 拡張言語)はGNUプロジェクトによる拡張言語(extension language) です。基本的には アプリケーションへの組込みが可能な Scheme インタープリター ですが、他の形式の 言語からのトランスレーターも用意され ています。 また、グラフィックを扱うためのパッケージなどもあります。 CygwinのパッケージにGuileもあるのですが、ソースアーカイブを持ってきて 自前でコンパイルしようとしてもできませんでした。 誰か情報もってませんか?

そういやGuileの国際化とか多言語対応ってどうなってるんだろう?

Guile 1.0付属のドキュメント邦訳を置いています。GUILE本体は 1.8までバージョンが進んでいます。

いい加減1.0のドキュメントが古くなってきたのでちょっと1.6.4の ドキュメントに手を出してみました。まだまだ作業途中です。 guile.html

上記の元のtexinfoファイルをアーカイブしたものを公開します。ファイル名の 大小文字等で問題のある環境があるかもしれません。漢字コードはShift JISに なっています。

Schemeの資料も挙げておきます。

Perl

解説の必要はないですよね。多分…。以下のもの以外にも検索エンジンで 探せばいやというほど見つかることでしょう^^; 5.005のドキュメントは 現時点では5.005_03ベースのものです。perl 5.8.xのドキュメントに関しては ぼちぼちやってます。また、perldoc.jp にもコアドキュメントのいくつかがあるようです。

2008年2月現在、最新の stableバージョンは 5.10 系になっています。 残念ながら、ppm でインストールできるモジュールを提供しているサイトでも 5.10への対応は進んでいないようです(5.8と5.10はバイナリ互換性がありません)。

Perl 5.8で日本語テキストを扱うときの注意事項など
Perl 5.8になり、use encoding 'xxx' を使用することにより、jperlとほぼ同等の処理を行うことができるようになりましたが、 いくつか注意すべき点があります。 また、 Encode.pmのメンテナーである小飼弾さんによれば、 use encoding 'xxx'は過去の資産を救済することが 主眼であり、これから新たにスクリプトを書くときには使わないことを推奨する とのことです。 また、 use encoding プラグマはレキシカルスコープを持っていないので 使用している他のモジュールにも影響を及ぼしてしまうということです (後者は体験しました(^^;)。

ActivePerlで UTF-16(BE|LE)のデータを出力するときの注意事項
ActivePerlではファイルをオープンしようとすると、特に指定しなければ テキストモードでオープンします。 このため出力の文字コードにUTF-16のデータを出力しようとしたとき、 テキストモード時に行われる LF → CR LF 変換が変なタイミングで 行われてしまうため、出力結果がおかしくなります。 対応策は 183 : Writing a Unicode file via perl ... にあるとおり、ファイルのオープン時の指定を工夫するというものです。

    open( INIFILE, ">:raw:encoding(UTF16-LE):crlf:utf8", "$INIFILE" )

まず :raw によってLF → CR LF変換を抑制します。 次にエンコーディング指定(ここではリトルエンディアンでのUTF-16)を行い、 そのあとで LF → CR LF 変換を行うように指定します。

このとき、rawとcrlfの順序は重要です。 また、無指定でopenしたあとでbinmode で変更するという手段ではうまく動作しないようです。

Perl 6
進んでるんだが進んでないんだかよくわからないPerl 6ですが 以下のところに情報があるようです。英語ですけどね。

Python

今さらながらPython入門を本の山から発掘して読みなおしています。ま、本を 読んでるだけじゃなく、処理系をインストールして使ってみないと だめでしょうけど(と書きつつまた本(Learning Python)を買ってしまった…)。

Ruby

Rubyはまつもとゆきひろ氏の手によるオブジェクト指向の スクリプティング言語です。 各種UNIXをはじめとして、様々な プラットフォームで動作します。

Tcl/Tk

注目され、利用されるのはTkばかりでTclの肩身はずいぶんとちっちゃいような。 Stallmanがケチつけたのも遠い昔ですね。

その他

とりあえず目に付いたが良く調べてないような言語に関するリンクや、 スクリプティングに関係ありそうなものをリストアップしておきます。

そのままずばり、 How To Design A Scripting Languageというのがありました (How To Design A Programming Languageに変わったようです)。

The Programming Language Lua

LuaはPascalに似た単純な手続き型構文を持ち、動的に型づけを行う言語で ガーベッジコレクターも備えているそうです。ぱらぱらとドキュメントを 見る限りではなかなか興味をそそられるところがあるのですが、なんとも 時間と余裕がありません。 2007年末に日本語による本が出版されました。
入門Luaプログラミング
入門Luaプログラミング

Lua に関するFAQが http://www.lua.org/faq.htmlにあり ます。
Luaに関しては Lua-an extensible extension languageというドキュメントもあります。また、 ftp://ftp.tecgraf.puc-rio.br/pub/lhf/doc/semish94.ps.gz にある "The design and implementation of a language for extending applications" も興味深いものがあります。 日本語訳されたリファレンスマニュアルがhttp://www.uri.sakura.ne.jp/~cosmic/yuno/lab/lua5_manual_ja.htmlに あります。

Lua/組み込み系言語 Wiki* が作られました。 Luaに限らず組み込み用途で使われる言語を扱うようです。 (2006/03/22)

この他、mixiにLuaコミュニティがあります。

  • Luaの本がついに発売されました(2007年12月) 入門Luaプログラミング
    入門Luaプログラミング
  • Ftwalk

    ftwalkのページにある説明によれば

    A command-line tool for UNIX file system management, which is especially well suited for file searches, software installation and verification, and on-line backups. An interactive tool for calculation, exploration, prototyping and debugging. A script programming language, inspired by awk but with plug-in input generators, a rich type system, 300+ built-in functions. Free software, with source code, complete HTML documentation, and free redistribution.

    だとか。確かにサンプルプログラムをみると、見た目には awkを思わせるよう なところが多々あります。ソースコードでは全面的にC++が使われているという ことはこの手のスクリプティング言語にはめずらしいかもしれません。

    steel

    LISPをベースにした言語で、正規表現ライブラリを組込みで持ち、フィル ターとしても使うことができるそうです。残念ながら使ったことはないので その辺のコメントはできません。

    The Icon Programming Language

    この言語はわりと有名な部類に入るだろうと思います。Iconのホームページから いろいろとドキュメントなども入手できます。Windows用のものもあります。 以下にちょっとIconドキュメントから引用しておきます。

    Icon is a high-level, general-purpose programming language with a large repertoire of features for processing data structures and character strings. Icon is an imperative, procedural language with a syntax reminiscent of C and Pascal, but with semantics at a much higher level.

    Pike

    Pikeのページによれば、以下のような言語だそうです。 方向性としては一つ前にある Blueと同じようなものだと思われます。 スクリプティング言語でもオブジェクト指向が当然のように導入されつつ あるように感じます。

    PikeはCに似た構文を持つ動的プログラミング言語である。 また、Pikeは学ぶのには単純で、長いコンパイル時間も不要で、 単純かつ高速にデータ操作を行うことのできる 強力な組み込みデータ型を持っている。

    URLにある通り、Roxenというhttpサーバー用のスクリプティング言語として良く使われ ているようです。

    In order of frequency (highest first) 1) Server side scripting (Roxen) 2) Roxen Modules/ Roxen customisation 3) Custom mail gateways 4) Unix scripting (ie. things which could probably be done with: bash awk grep)

    Gem

    これは純粋なスクリプティング言語ではなく、アプリケーションに組み込んで 使われる拡張言語ですが、結構面白そうなので取りあげました。以下は Gemのページからの転載です。

    Gem (Graph Editor with Macroscript)はテキスト形式の数値データか ら、科学用グラフを生成するシステムです。現在、Linux、Solaris及び Windows95/NTでの動作を確認しています。

    もう1つの大きな特徴として、Gemはスクリプト言語(Gem script)インタ プリタ を持っています。このスクリプトはPerlのサブセットを基本ベ ースとし、グラ フオブジェクトにアクセスできるよう拡張を施したも のです。たいへん強力なスクリプト言語に仕上がっており、機能拡張 やバッチ処理に威力を発揮します。既に有用なスクリプトをGem script libraryで公開しています。

    ficl

    Forthのようなスタックベースの言語です。 http://www.taygeta.com/ficl.html#whatisに よれば、

    Ficl (Forth inspired command language) is an ANS Forth interpreter written in C. Unlike traditional Forths, this interpreter is designed to be embedded into other systems as a command/macro/development prototype language. Ficl provides object extensions that can be used to wrap methods and structures of the host system without altering them.

    gorby

    スタックベースのスクリプティング言語としてはこのgorbyもあります。 この言語の名前に関しては興味深いいわれがあるようです。興味のある方は About the name Gorbyをどうぞ。

    VSEL - Very Small Embedded Language

    VSEL はその名の通り非常に小さな、組み込み可能なスクリプティング言語です。 この言語のモットーというものがあって、それは "VSEL's motto is "If There's More Than One Way To Do It, We Should Probably Remove One Of Them To Save Space". というのだそうです。
    2000年1月現在、上記のページはありません。.eduなんで卒業されたんです かね。AltaVistaでVSELで検索しましたが見つかりませんでした。どっかに 残しておいてもよいと思うのですけど…

    SWIG

    これは厳密には「言語」ではありません。Perl5やPython、Tclといった 言語がその言語側で「どのように他の言語(特にC)で書かれた ルーチンを呼ぶのか」という努力が払われているのに対して、SWIGは 「C・C++で作るプログラムからいかに簡単に(Tclなどの)スクリプティング 言語を使用するか、呼び出すか」といった目的を果たすものです。

    Executive Summary (What is SWIG?) にある記述ではこうなっています。

    SWIG is a program development tool designed to make it easy to build scripting language interfaces to C/C++ programs. Its primary audience is scientists, engineers, and programmers who would like to build interactive C/C++ programs, but who would rather work on more interesting problems than figuring out how to extend their favorite scripting language or using an excessively complicated programming tool.

    また、http://www.swig.org/doc.htmlに あるドキュメント類がSWIGを知るための良い参考になるでしょう。

    SWIGはDr. Dobb's Journal の1998年2月号(特集 Scripting Language)でも 取り上げられています。そこで使われたサンプルプログラムが http://www.ddj.com/ftp/1998/1998_02/swig.txtに あります。

    日本語のページ Simplified Wrapper and Interface Gnerator日本語ページがあります。

    NRW SWIGにも簡単なドキュメントがあります。

    SPLASH (Small PERL-Like List And String Handling)

    SPLASHはその名の示す通り、Perlで使用しているリスト、文字列と言った データ型に基づいた、C++によるクラスライブラリです。もちろん正規 表現も扱えます。SPLASHのwebページでも分かりますが、実際にクラス ライブラリを使ったときのプログラムは

    {
        SPList<int> mylist;
        mylist.push(1);
        mylist.push(2);
        x = mylist.shift();
        y = mylist.shift();
    }
    

    {
        SPList<float> mylist, sortedlist;
        sortedlist = mylist.sort().reverse();
    }
    

    のようになります。

    UNIX用ソースは ftp://ftp.wolfman.com/users/m/morris/splash/splash190.tar.gzか ら、 MS-DOS/Windows用ソースは ftp://ftp.wolfman.com/users/m/morris/splash/splash192.zip から入手できますが、 ftp://ftp.wolfman.com/users/m/morris/splash からも入手できます(サンプルなどもあります)。

    Groovy

    GroovyはJava VM上で動作するスクリプティング言語です。 スクリプトをJavaのバイトコードに変換して実行します。

    Boo

    BooはCLIをバイトコードとして使用するスクリプティング言語です。 .NETもしくはMono環境で動作します。

    この他にも幾つか見つけたりしたものがありますが、このリストに追加することは 見送りました(ってそんな御大層なリストでもないですけど)。というのは、 見つけたそれがシェアウェアであるとか、実行モジュールそのものは無料で あってもソースコードが非公開であったりしたからです。あとは rexxとsnobol あたりがリストに載せる候補かなと考えてます。もちろん他にも見つか ればそれもということです。PHPなんかは載せたほうがいいですかね。調べないと。


    Scripting Higher Level Programming for the 21st Century

    Tcl/Tkの生みの親による論文。21世紀はスクリプティングの時代だそうな。 簡単にいっちゃうと、CなどのSystem Programming Languageで作成した 部品(コンポーネント)をスクリプティング言語で組み合わせてプログラムを 作り上げるというものです。

    Scripting - the fourth generation

    アセンブラを第一世代として、第四世代がスクリプティング言語だということが 書かれています(第二、第三世代がなんなのかは見てのお楽しみということで:-)。

    スクリプト言語ソースツアー!

    各種スクリプティング言語のソースコードを閲覧できます。必ずしも最新のものではないようです。

    未整理なもの。
    

    正規表現

    ある意味でスクリプティング言語とは切っても切れない関係の正規表現についてのまとめです。 といってもgrepやsedに関してのまとめが主です。表記法に関しては、PythonやRubyを見ていると Perl5の正規表現がこれからの主流になるかなという気がします(まだ拡張している し^^;)。しかしPerl 6ではがらっと変わったものになるようです。


    おまけ


    ときどきの雑記帖

    I'd just be the catcher in the rye and all. I know it's crazy, but that's the only thing I'd really like to be. I know it's crazy.

    The catcher in the rye
    J. D. Salinger

    引っ越しました

    ときどきの雑記帖は移動しました。 移動先は http://www.kt.rim.or.jp/~kbk/zakkicho/index.html です。


    ・X-filesはあまり見てなかったのですが、友人に薦められた一本は とても気に入りました。その中の台詞から。

    人生はチョコレートの箱だ。誰も欲しがらない陳腐な贈り物。
    返却したくてもそれもできない。
    それでも他に何もなければ、仕方なくむさぼり食うことに。
    もちろん中には好物もいくつか混じっている。
    でもそれらはすぐに無くなり…
    残るのは甘ったるいゼリーと歯に挟まるナッツだけだ。
    意を決してそれを食べてしまうと、あとはもう空の箱と茶色い紙しか残らない。
    

    Copyright (C) 1997,1998,1999,2000,2001,2002,2003,2004,2005,2006 KIMURA Koichi (木村浩一)
    この文書の無断転載はご遠慮ください(リンクはご自由にどうぞ)。

    メールの宛先はこちらkbk AT kt DOT rim DOT or DOT jp