アカウント名:
パスワード:
私もおおよそPython 3.x系へ移行済みなんですが、それでも自分の書いたスクリプトを3.xのインストールされていない環境で実行したいときもあり、3.x用→2.x用へスクリプトを書き直す羽目になってしまいます(^^;)そうしたときは、インタプリタやライブラリ側に大きく手を加えることなく、1つのスクリプトが両方で動くように対処できないものかな、と感じることも。
あまり良いやり方ではないのは承知の上ですが、C言語の#ifdefみたいに条件付きの中間言語コンパイルってのは駄目ですかね?例えば、
#if __PYTHON_VERSION__ < 3 import SimpleHTTPServerdef HTTPServer():
スクリプトですからコンパイルはうけいれられないような気もします。(評価されない限りエラーにならないから困るっていうのはわかります。)
いや、Pythonの場合、スクリプトはメモリ内で一旦中間言語へコンパイルされ、その後に中間言語インタプリタが走ります。なので、読み込んだ時点で3.xの文法エラーになるばやい(特にUNICODE文字列系)、スクリプトが1行も実行されることなく終わってしまうという……。
3.x系で使えるかを判断してくれるツールが別途あったような気がしますが、スクリプトエンジン側でどうすればいいかある程度見せてくれた方が初学者にはありがたいし、(3.x系しかしらない)新規参入者を取り込めればいつの間にか3.x系が主流になると思うのですが。
3.xは相当ドラスティックな変更ですからねー。そもそも旧コードがコンパイルできなかったり、元のライブラリが整理・消滅したりしているので、警告を出すのは負荷が大きいんじゃないでしょうか。移行ツール2to3は重いですし、結構取りこぼしもあったような(^^;)
いや、Pythonの場合、スクリプトはメモリ内で一旦中間言語へコンパイルされ、その後に中間言語インタプリタが走ります。
そうなんですね、勉強になります。それであれば中間言語コンパイラで無視してもらえればサイズも減るし理想的ですね。
3.xは相当ドラスティックな変更ですからねー。
そのようですね、私も勉強がてらlis.pyというプログラムを3.xで動かしてみようとしたらエラーとなり(2.7で動きました)、ならばと3.xに移植しようとしたんですが、思ってたよりもよく使われる機能が改訂されていたりして、2.xも知らない私には敷居が高かったです。http://www.aoky.net/articles/peter_norvig/lispy.htm [aoky.net] lis.py 邦訳
.NETの場合はクラスやメソッド側に古いクラスであることとかエラーにするか警告止まりかを属性としてマークできるのですがそういった仕組みがないと難しいですよね。
より多くのコメントがこの議論にあるかもしれませんが、JavaScriptが有効ではない環境を使用している場合、クラシックなコメントシステム(D1)に設定を変更する必要があります。
未知のハックに一心不乱に取り組んだ結果、私は自然の法則を変えてしまった -- あるハッカー
1つのスクリプトが両方で動くように…… (スコア:2)
私もおおよそPython 3.x系へ移行済みなんですが、それでも自分の書いたスクリプトを3.xのインストールされていない環境で実行したいときもあり、3.x用→2.x用へスクリプトを書き直す羽目になってしまいます(^^;)
そうしたときは、インタプリタやライブラリ側に大きく手を加えることなく、1つのスクリプトが両方で動くように対処できないものかな、と感じることも。
あまり良いやり方ではないのは承知の上ですが、C言語の#ifdefみたいに条件付きの中間言語コンパイルってのは駄目ですかね?
例えば、
Re:1つのスクリプトが両方で動くように…… (スコア:2)
$HTTP_POST_VARSを使うのか$_POSTを使うのかなどで。
if(PHP_VERSION < '4.1.0'){
// $HTTP_POST_VARS使う処理
}else{
// $_POST使う処理
}
スクリプトですからコンパイルはうけいれられないような気もします。(評価されない限りエラーにならないから困るっていうのはわかります。)
python初心者の私としては 2.x系のサンプルばっかりの中、3.x系でやろうとするといろいろ躓くんで、過去にサポートされてたものは他と違うエラー出て欲しいです。
(今はこっちつかってねみたいな。)
.NETだとコンパイル時に使われなくなったものは「xxxは古い形式です。yyyに置き換えられました。」っていうのが出るおかげで、直すときにそんなに困りません。あとバージョンアップでいきなり使えなくなるのは今のところ経験してません。大抵「使える→警告(将来使えなくなる可能性があります)でる→エラー」という3段階ですね。エラーでも「xxxは古い形式・・」は出ます。
phpも危険な関数はワーニング出るようになったりした気がします。
3.x系で使えるかを判断してくれるツールが別途あったような気がしますが、スクリプトエンジン側でどうすればいいかある程度見せてくれた方が初学者にはありがたいし、(3.x系しかしらない)新規参入者を取り込めればいつの間にか3.x系が主流になると思うのですが。
# 結局私もWebにサンプル多い2.x系先にみとくかってことにしましたし。
# yes, fly. no, fry.
Re:1つのスクリプトが両方で動くように…… (スコア:1)
いや、Pythonの場合、スクリプトはメモリ内で一旦中間言語へコンパイルされ、その後に中間言語インタプリタが走ります。
なので、読み込んだ時点で3.xの文法エラーになるばやい(特にUNICODE文字列系)、スクリプトが1行も実行されることなく終わってしまうという……。
3.xは相当ドラスティックな変更ですからねー。
そもそも旧コードがコンパイルできなかったり、元のライブラリが整理・消滅したりしているので、警告を出すのは負荷が大きいんじゃないでしょうか。
移行ツール2to3は重いですし、結構取りこぼしもあったような(^^;)
Re:1つのスクリプトが両方で動くように…… (スコア:1)
そうなんですね、勉強になります。
それであれば中間言語コンパイラで無視してもらえればサイズも減るし理想的ですね。
そのようですね、私も勉強がてらlis.pyというプログラムを3.xで動かしてみようとしたらエラーとなり(2.7で動きました)、ならばと3.xに移植しようとしたんですが、思ってたよりもよく使われる機能が改訂されていたりして、2.xも知らない私には敷居が高かったです。
http://www.aoky.net/articles/peter_norvig/lispy.htm [aoky.net] lis.py 邦訳
.NETの場合はクラスやメソッド側に古いクラスであることとかエラーにするか警告止まりかを属性としてマークできるのですがそういった仕組みがないと難しいですよね。
# yes, fly. no, fry.