見出し画像

Retro-gaming and so on

Pythonは結構古臭い言語

単なる愚痴。

Pythonは結構古臭い言語だ。より正確に言うと「モダンな機能を持っていながら」その提供された枠組みは結構古臭い。
言語の機能で言うと、何度も言ってるが、マトモなスコープを持っていない、って事がまずは言える。古のBASICやFortranのようだ。
スティーヴ・イエギやポール・グレアムのようなハッカーが指摘しているのはその辺だ。

Pythonの作者のGuido Van Rossumはまた、間抜けな技術的失策を初期に犯している。ラリーの失策ほど甚だしいものではないが、それでもいくつか本当にひどいのがある。たとえばPythonはもともとレキシカルスコープを持っていなかった。そして動的スコープも持っていない。動的スコープにも問題はあるのだが、それなりには機能する。Pythonはグローバルスコープとローカル(関数)スコープ以外のスコープを何も持っていない。

Pythonには完全なレキシカル変数が無い

ホント、この辺は醜い、と言っていい。結果、関数内で大域変数を利用したい場合はglobalを付けなきゃならないし、ローカル関数内の変数が外側にある変数にアクセスする場合はnonlocalを付けなきゃならない。
こんなカッコ悪い実装もねぇだろう。マトモなスコープがあれば、スコープ内に該当する変数名がなければ自動で外部に探しに行くべきなんだ。それがALGOL以降じゃ望まれる動作なんだけど、大凡1990年に生まれたPythonは大凡1960年に生まれたALGOLのスペックに追っついていない。30年も遅れたフレームワークなんだ。

最近はPythonで何らかのライブラリをインストールする際にはpipを使え、と言う方針が普及した。しかし、これも10年ちょっとくらいの歴史しかないんじゃないか。
今だとネット経由でライブラリをコマンド一発でダウンロードするスタイルがPythonでも一般化したが、これが成立するにも長い時間がかかってる。
このテの手法が一般化したのはPerlが最初だったと思うが、ライバル言語のRubyでも早く取り入れられ(Ruby Gem)たが、この辺が全然Pythonでは進展しなかったんだ。
結果、長い間、PythonではWebブラウザで目的のライブラリを検索、ダウンロードサイトまで行ってボタンをクリックしてはインストール、ってスタイルだったんだ。クッソ面倒くさかった。そのうちwheelってのが登場したが(pipの基盤になっている)対応ライブラリが少なかったか、実装に問題があったのか、相変わらずPythonユーザーは「ネットで検索・ダウンロードボタンをクリック」してたし、PerlのCPANやRubyのgemのような便利ツールを夢見てたが明日はどっちだ?状態だったんだ。

そしてPython最大の問題はヴァージョン間の互換性だ。3と2の話じゃない。例えば3.13と3.12の話だ。なんでPythonをインストールすると「アップグレード」じゃなくって別々のフォルダに別々の処理系が入るのか?これって1990年代のソフトみてぇなんだよ。全部コンピュータ上に保持される。完全に分かれたブツだ。
要は細かいトコを言うと、例えば3.13と3.12の間に互換性がない、って話になる。んなバカな、だ。
これが意味するのは、Python3.13にwxPythonをインストールするとして、Python3.12ではそれを使えない、って事だ。Python3.12でwxPythonを使いたければ3.12用にインストールする、ってのが原則だ。なんせライブラリ用の共有フォルダがあるわけじゃない。これはHDDやSSD等と言うストレージのリソースを考えると無駄に思えるが、要はやっぱ完全な互換性がない、って話になる。1990年代のソフトウェアの方針だ。
これはかなりイライラする。「仮想環境を作ってくれ」とか言ってるけど、問題の本質はそこじゃないだろ。とにかくPythonは互換性の問題が常にあり、ストレージを圧迫するような方針になってるんだ。
いやまぁ、それでもPythonファンにとってはそれでもいいのかもしれない。しかし、Linuxディストロみたいなブツで根幹に関わるスクリプトをPythonで書いてたりすると危険だ、とか言うような話にならないか。
実際、今回Python3.13を入れてみて、端末で直接扱うブツとして3.13を指定してみた。ところがそうすると、Debian系のアーカイブを操作するaptが正常に動かなくなって慌てて3.12に戻した。ヴァージョン違いで正常に動作するモノが動かなくなる、ってのはかなり致命的なんだよ。まぁ、だからこそ、Debianは超保守的で「上手く動いてるブツは」古くてもアップグレードしねぇんだけど、いや待て、そもそもプログラミング言語のソフトウェアとしての信頼性の問題であって、「ヴァージョンアップしたら上手く動かない」ようなプログラミング言語を基幹システムとして色んなトコで使う、ってのはマズいって話なんじゃねぇの?
Pythonは実はかなりリスキーなんだよ。スクリプト言語として「手軽にシステム上あれこれに使う」ってのは本当はしちゃいけないし、信頼度から言うとPerlにさえ劣るんじゃないか?
ホント、OSみたいな場所で手軽に使って欲しくない。Pythonのインストール/アンインストールってLinuxディストロ上だと結構アタマの痛い問題になっている。

本来、GNUってシステムだと基幹スクリプト言語としてはGuileを使うべきなんだ。GuileはGNUのVBScriptだ。よってOSレベルに近い部分ではリチャード・ストールマンが想定した通り、スクリプトはGuileで書くべきであり、その他の言語を使っちゃいけないし、どんなGNU/LinuxディストロでもデフォルトでGuileが入ってるべきだ。
ところが現実は違う。Guileはオプション扱いになってるし、あらゆるトコで使われてるのは信頼性に欠けるPythonだ。上っ面で「書きやすい」って事で導入してるPythonはシステム障害に強い、って言えるんだろうか?ヴァージョン上げるだけでシステムがおかしくなる可能性があるのに?一体どないなっとんねん、と言いたい。

ホントXubuntu24.04LTSに上げてからPython周り、及びPythonを利用してるツールの正常動作比率が落ちてるわ、解決策が見つからないわ、ってんで困った事になっている。
ホント、そこまでPythonって信頼出来ないよ。
少なくとも、Guileを使えないような奴らが「GNU/Linuxディストロ開発」とかすべきじゃないんじゃねぇか、って切実に思ってるワタクシがここにいる。

Linuxを使ってるみんな、Guileを使えるようになろうぜ。
  • Xでシェアする
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

最近の「プログラミング」カテゴリーもっと見る

最近の記事
バックナンバー
人気記事