作者: 機械伯爵
日時: 2002/6/16(00:56)
 機械です。

 最近、中学校で廃棄用のTOWNSが大量に出たので、同僚の先生と一緒に、生徒
の練習用に再調整しました。

 結果・・・殆ど問題なく稼動することが判明。

 ・・・なんで捨てるんだろ?(汗)

 ま、それはともあれ、後期の目玉タウンズや、横置きタウンズの初期型なの
で、Winは走りません。

※TOWNSは、実は後期型ならWin95までは走ります。実際、私のマシンではWin95
  が走ってました。

 そこで、TOWNS-OS内臓のMS-DOSv3.1でも動く16bit Pythonがどのくらい使え
るのか、調べてみることにしました。

 Pythonのバージョンは1.0.1・・・ほとんど正式リリース直後ですな(これ以
降は、32bit版しか存在しません。なおこのファイルは、
http://www.python.org/ftp/python/pc/で、16python.exe.gzとして見つかります)

 [16python.exeの立ち上げ場面]
 Python 1.0.1 (Feb 11 1994) built by Guido van Rossum
 Copyright 1991-1994 Stichting Mathematisch Centrum, Amsterdam
 >>>

 Guidoさんご本人がビルドした、署名が残ってるのがいいですねぇ(笑)

 1ファイルなので、ビルドされている機能を調べて、あるものは利用し、無
いものは作ることにします。

 なお、後期版のPythonなら、組み込みで__builtins__という組み込み辞書に
全て登録してあるので、

 >>>dir(__builtins__)

 とやれば、組み込み関数・定数は全て表示されるのですが、古いバージョン
では、まず、組み込み関数・定数の名前空間である__builtin__モジュール(最
後にsが無いので注意!)をインポートしてやり、

 >>>dir(__builtin)

 とやってやれば、表示されます。

<module '__builtin__'>:
        AccessError
        AttributeError
        ConflictError
        EOFError
        IOError
        ImportError
        IndexError
        KeyError
        KeyboardInterrupt
        MemoryError
        NameError
        None
        OverflowError
        RuntimeError
        SyntaxError
        SystemError
        SystemExit
        TypeError
        ValueError
        ZeroDivisionError
        __name__
        abs
        apply
        chr
        cmp
        coerce
        compile
        dir
        divmod
        eval
        execfile
        filter
        float
        getattr
        hasattr
        hash
        hex
        id
        input
        int
        len
        long
        map
        max
        min
        oct
        open
        ord
        pow
        range
        raw_input
        reduce
        reload
        repr
        round
        setattr
        str
        type
        xrange

 若干、組み込み関数や組み込み例外が少ないので注意しなければなりません
が、まぁ、そこそこ必要なものはあるようです。

 次に組み込みsysモジュールをインポートし、内容表示します。

<module 'sys'>:
        __name__
        argv
        builtin_module_names
        copyright
        exit
        maxint
        modules
        path
        ps1
        ps2
        setprofile
        settrace
        stderr
        stdin
        stdout
        version

 sys.builtin_module_namesは組み込みモジュールのリストですので、こいつ
の中身を確認して、順番に組み込みモジュールの内容を表示させていきます。

<module 'dos'>:
        __name__
        chdir
        chmod
        close
        dup
        dup2
        environ
        error
        fdopen
        fstat
        getcwd
        listdir
        lseek
        mkdir
        open
        read
        rename
        rmdir
        stat
        system
        unlink
        utime
        write

<module 'marshal'>:
        __name__
        dump
        dumps
        load
        loads

<module 'math'>:
        __name__
        acos
        asin
        atan
        atan2
        ceil
        cos
        cosh
        e
        exp
        fabs
        floor
        fmod
        frexp
        ldexp
        log
        log10
        modf
        pi
        pow
        sin
        sinh
        sqrt
        tan
        tanh

<module 'regex'>:
        __name__
        casefold
        compile
        error
        match
        search
        set_syntax
        symcomp

<module 'strop'>:
        __name__
        atof
        atoi
        atol
        index
        joinfields
        lower
        lowercase
        rindex
        split
        splitfields
        strip
        swapcase
        upper
        uppercase
        whitespace

<module 'time'>:
        __name__
        altzone
        asctime
        clock
        ctime
        daylight
        gmtime
        localtime
        mktime
        sleep
        time
        timezone
        tzname

 残るは、組み込み型のメソッドですが、この時代にはリスト、辞書、そして
ファイルにしかメソッドは実装されていない筈なので、総当りで調査しました。

※dirコマンドは、組み込み型メソッドの内容表示はできなかった・・・

<builtin method type list>
        append
        sort
        reverse
        index
        insert
        count
        remove

<builtin method type dictionary>
        has_key
        keys
        values
        items

<builtin method type file>
        read
        readline
        readlines
        write
        writelines
        close
        tell
        seek
        isatty
        flush
        fileno

 細かい動作の差異についてはもう少し調べてみないとわかりませんが、オー
ルドタイプのPythonについては、以下のようなことが知られています(確認済
み)

・関数のデフォルト値の設定が不可
	× def f(x=0):return x
	上記のように書くとエラーを発生
	当然、キーワード引数による関数呼び出しも不可
	× f(x=10)
	さらにキーワード引数の指定も、勿論不可
	× def f(**x)
	ただし、リストによる位置引数指定は可能なので、引数の数を指定し
	ない関数を作ることは可能。
	○ def f(*x)
	キーワード引数は、辞書あるいはクラスインスタンスを引数として渡
	すことで似たような機能は得られますが、参照渡しとなるので、元の
	オブジェクトが変更されることに注意。

・from文によるコピーを防止するPrivate名'_x'(アンダースコア+名前)は有
  効。ただし、1.5以降に導入されたプライベートクラス変換は無効。

・キーワードassertは未実装、代わりに後に廃止されるキーワードaccessが予
  約されているので注意。無論、1.6以降の拡張文法のキーワードasは未実装。

 若干注意さえすれば、O'Reilly刊の「Python入門」あたりの記述が使えると
思われます。

 古いDOSマシンを大切に使ってる方、一度お試しあれ・・・

   機械伯爵