Python は私のお気に入りの言語です。シンプルで美しく、使いやすいです。 2 日前、私は友人たちに Python の利点を熱心に宣伝しました。
「分かった、Pythonが優れていることは認めるけど、なぜPythonと呼ばれるの?」
「そうですね、テレビシリーズの名前のようです。」
「では、あなたの言っているグイドはアメリカ人ですか?」 ”
「彼は Google から Dropbox で働くようになりましたが、彼の名前はオランダ語のようです。」
「本当に Python に精通していますか?」
それで、私は恥を晴らすために時間をかけて調べました。 Pythonの歴史。 Python の多くの機能の起源と Python の設計哲学、プログラミング言語の進化の歴史、そして Python とオープンソース運動との素晴らしい関係について学びました。 Pythonの歴史からは、オープンソース開発の思想や成果を垣間見ることができます。
これは、私が書いた Python の簡単なチュートリアルの序文としても使用できます。
由来
Pythonの作者、Guido von Rossumは確かにオランダ人です。 1982 年に、グイドはアムステルダム大学から数学とコンピューティングの修士号を取得しました。しかし、彼は数学者でしたが、それ以上にコンピューターが好きでした。彼の言葉によれば、彼は数学とコンピュータの二重の資格を持っているにもかかわらず、常にコンピュータ関連の仕事をする傾向があり、プログラミングに関連することなら何でもすることに熱心です。
その頃、グイドさんはPascal、C、Fortranなどの言語に触れ、使っていました。これらの言語の基本的な設計原則は、マシンをより高速に実行できるようにすることです。 1980 年代、IBM と Apple はパーソナル コンピューターの波を打ち出しましたが、これらのパーソナル コンピューターの構成は非常に低レベルでした。たとえば、初期の Macintosh には 8MHz の CPU 周波数と 128KB の RAM しかなく、大きなアレイがメモリをいっぱいにする可能性がありました。すべてのコンパイラの中核は、プログラムが実行できるように最適化することです。効率を高めるために、この言語はプログラマーにコンピューターのように考えるよう強制し、マシンの好みに合わせたプログラムを作成できるようにします。当時、プログラマーはコンピューターの能力を隅々まで自分の手で絞り出すことに熱心でした。 C 言語のポインタはメモリの無駄だと考える人もいます。動的型付け、自動メモリ管理、オブジェクト指向については…考えないでください。コンピュータが麻痺してしまいます。
この種のプログラミングにより、グイドは苦痛を感じます。 Guido は C 言語で関数を作成する方法を知っていますが、実装方法をすでに正確に知っているにもかかわらず、作成プロセス全体に多くの時間がかかります。彼のもう 1 つの選択肢はシェルです。 Bourne Shell は、UNIX システムのインタープリタとして長い間存在していました。 UNIX 管理者は、シェルを使用して簡単なスクリプトを作成し、定期的なバックアップやファイル システム管理などのシステム メンテナンス作業を実行することがよくあります。シェルは、UNIX の多くの機能を接続する接着剤のようなものです。 C 言語で数百行あるプログラムの多くは、シェル内のわずか数行で完了できます。ただし、シェルの本質はコマンドを呼び出すことです。それは実際には言語ではありません。たとえば、シェルには数値データ型がなく、加算演算は非常に複雑です。つまり、シェルはコンピュータの機能を完全に動員することができません。
グイド氏は、C言語のようにコンピュータの関数インターフェースを完全に呼び出すことができ、シェルのように簡単にプログラムできる言語を望んでいます。 ABC言語はグイドに希望を与えた。 ABC は、オランダの数学コンピューティング研究所によって開発されました。グイドはこの研究所で働き、ABC 言語の開発に携わりました。 ABC言語は教育目的です。当時のほとんどの言語とは異なり、ABC 言語の目標は「ユーザーの気分を良くする」ことでした。 ABC Language は、この言語を読みやすく、使いやすく、覚えやすく、学習しやすいものにし、人々のプログラミング学習への関心を刺激したいと考えています。たとえば、次は Wikipedia の ABC プログラムです。このプログラムは、テキストに出現する単語の総数をカウントするために使用されます。
HOW TO RETURN words document: PUT {} IN collection FOR line IN document: FOR word IN split line: IF word not.in collection: INSERT word IN collection RETURN collection
HOW TO は関数を定義するために使用されます。 Python プログラマーはこのプログラムを簡単に理解できるはずです。 ABC 言語では、コロンとインデントを使用してプログラムのブロックを表します。行末にセミコロンはありません。 for 構造と if 構造には括弧 () もありません。代入では、より一般的な等号の代わりに PUT を使用します。これらの変更により、ABC プログラムがテキストのように読めるようになります。
ABC 言語は読みやすさと使いやすさに優れていますが、最終的には普及しませんでした。当時、ABC 言語コンパイラーを実行するには、比較的ハイエンドのコンピューターが必要でした。これらのコンピュータのユーザーは通常、コンピュータに習熟しており、プログラムの学習の難しさよりもプログラムの効率を重視します。ハードウェアの問題に加えて、ABC 言語の設計にはいくつかの致命的な問題があります:
スケーラビリティが低い。 ABC 言語はモジュール型言語ではありません。グラフィカル サポートなどの機能を ABC 言語に追加する場合は、多くの場所を変更する必要があります。
IOを直接実行することはできません。 ABC言語はファイルシステムを直接操作できません。テキスト ストリームなどの方法でデータをインポートできますが、ABC はファイルを直接読み書きすることはできません。入出力の難しさはコンピュータ言語にとって致命的です。ドアが開かないスポーツカーを想像できますか?
過剰な革新。 ABC では、上記の番組の HOW TO など、番組の意味を自然言語で表現しています。ただし、プログラマの場合は、関数を使用して関数を定義することに慣れています。同様に、プログラマは変数を割り当てるために等号を使用することに慣れています。 ABC言語は非常に特殊ですが、習得するのが非常に難しい言語でもあります。
拡散するのが難しい。 ABC コンパイラはサイズが大きいため、テープに保存する必要がありました。 Guido が訪問したとき、彼は他の人のために ABC コンパイラをインストールするために大きなテープを用意する必要がありました。 このように、ABC言語はすぐには普及しにくいのです。
1989年、クリスマス休暇を過ごすために、GuidoはPython言語用のコンパイラを書き始めました。パイソンという名前は、グイドのお気に入りのテレビ シリーズ「モンティ パイソンのフライング サーカス」に由来しています。彼は、Python と呼ばれるこの新しい言語が、C とシェルの間で包括的で、学習しやすく、使いやすく、スケーラブルな言語を作成するという彼の理想を満たすことを望んでいます。言語設計の愛好家として、Guido はすでに言語の設計を試みています。今回は純粋なハッキング行為に他なりませんでした。
言語の誕生
1991年に最初のPythonコンパイラーが誕生しました。 C言語で実装されており、C言語ライブラリファイルを呼び出すことができます。 Python はその誕生以来、クラス、関数、例外処理、テーブルや辞書を含むコア データ型、モジュールベースの拡張システムを備えています。
Python 構文の多くは C から来ていますが、ABC 言語の影響も強く受けています。強制インデントなど、ABC 言語の一部のルールは今日でも物議を醸しています。しかし、これらの構文ルールにより、Python は読みやすくなります。一方、Python は、等号の割り当ての回帰など、いくつかの規則、特に C 言語の規則に従うことを賢明に選択します。グイド氏は、「常識」に基づいて物事が確立されていれば、それにこだわる必要はないと考えています。
Pythonは最初からスケーラビリティに特別な注意を払ってきました。 Python は複数のレベルで拡張できます。大まかに言うと、.py ファイルを直接インポートできます。内部では C ライブラリを参照できます。 Python プログラマーは、Python を使用して .py ファイルを拡張モジュールとしてすばやく作成できます。しかし、パフォーマンスが考慮すべき重要な要素である場合、Python プログラマーは最下位層に深く入り込んで C プログラムを作成し、それを .so ファイルにコンパイルして Python に導入して使用することができます。 Python は鉄骨で家を建てるようなものです。まず大きなフレームを定義します。プログラマーは、このフレームワークの下で非常に自由に拡張または変更できます。
オリジナルの Python はすべて Guido 自身によって開発されました。 Python はグイドの同僚の間で人気があります。彼らは迅速なフィードバックを提供し、Python の改善に参加します。 Guido と数名の同僚が Python のコア チームを形成しています。彼らは余暇のほとんどを Python のハッキングに費やしています。その後、Python は研究所を超えて拡大しました。 Python はマシンレベルの詳細の多くを隠し、コンパイラーに処理を任せ、論理レベルのプログラミング的思考を強調します。 Python プログラマーは、具体的な実装の詳細ではなく、プログラムのロジックについて考えることに多くの時間を費やすことができます。この機能は多くのプログラマーを魅了します。 Pythonが人気になりました。
人生は短い、私は Python を使っています
時が英雄を作る
Python の時間を一時停止して、絶え間なく変化するコンピューター業界を見てみましょう。 1990年代初頭、パーソナルコンピュータが一般家庭に普及し始めました。 Intel は 486 プロセッサをリリースし、Windows は Windows 3.0 から始まる一連のウィンドウ システムをリリースしました。コンピューターのパフォーマンスが大幅に向上します。プログラマーは、グラフィカルインターフェイスなどのコンピューターの使いやすさに注目し始めました。
Windows 3.0
コンピュータの性能向上により、ソフトウェアの世界も変わり始めました。ハードウェアは多くのパーソナル コンピューターに十分です。ハードウェア メーカーは、ハードウェアのアップグレードを促進するために、需要の高いソフトウェアの出現にも熱心です。 C++ と Java が次々に普及しました。 C++ と Java は、オブジェクト指向プログラミング パラダイムと豊富なオブジェクト ライブラリを提供します。 C++ と Java は、ある程度のパフォーマンスを犠牲にして、プログラム出力を大幅に向上させました。この言語の使いやすさは新たなレベルに引き上げられました。また、ABC の失敗の重要な理由がハードウェアのパフォーマンスの限界にあったことも覚えています。この点で、Python は ABC よりもはるかに幸運です。
静かに起こっているもう 1 つの変化はインターネットです。 1990 年代はまだ Windows と Intel が PC で世界を席巻し、一時は非常に普及した時代でした。インターネット ベースの情報革命はまだ到来していませんが、多くのプログラマや経験豊富なコンピュータ ユーザーはすでに、電子メールやニュースグループなどのコミュニケーションにインターネットを頻繁に使用しています。インターネットにより、情報交換のコストが大幅に削減されました。新しいソフトウェア開発モデル、オープンソースが人気を集め始めています。プログラマーは余暇を利用してソフトウェアやオープンソース コードを開発します。 1991 年、Linus は comp.os.minix ニュース グループで Linux カーネルのソース コードを公開し、多数のハッカーが参加するようになりました。 Linux と GNU は連携して、活気のあるオープンソース プラットフォームを形成します。
ハードウェアの性能がボトルネックになることはなく、Pythonは使いやすいので、多くの人がPythonに注目しています。 Guido はメールリストを管理しており、Python ユーザーは電子メールで通信します。 Python ユーザーはさまざまな分野に属し、さまざまな背景を持ち、Python に対するさまざまなニーズを持っています。 Python は非常にオープンで拡張が容易であるため、ユーザーが既存の機能に満足できない場合でも、Python を拡張または変換するのは簡単です。これらのユーザーは変更内容を Guido に送信し、Guido が新しい機能を Python に追加するか標準ライブラリに追加するかを決定します。コードを Python 自体または標準ライブラリに組み込んでいただければ大変光栄です。グイドは最高の意思決定権を持っているため、「終生慈悲深い独裁者」として知られています。
Pythonは「Battery Included」と呼ばれており、Pythonとその標準ライブラリが強力であることを意味します。これらはコミュニティ全体からの貢献です。 Python 開発者はさまざまな分野の出身であり、さまざまな分野の利点を Python にもたらします。 たとえば、Python 標準ライブラリの正規表現は Perl を指しますが、lambda、map、filter、reduce などの関数は Lisp を指します。 Python 自体の一部の機能と標準ライブラリの大部分はコミュニティから提供されています。 Python コミュニティは拡大を続けており、独自のニュースグループ、Web サイト、および基金を持っています。 Python 2.0 からは、Python もメールリスト開発方式から完全なオープンソース開発方式に変わりました。コミュニティの雰囲気が形成され、コミュニティ全体で作業が共有され、Python の開発も高速化されました。
現在に至るまで、Pythonのフレームワークは確立されています。 Python 言語は、オブジェクトをコアとしてコードを編成し、複数のプログラミング パラダイムをサポートし、動的型を使用し、メモリを自動的にリサイクルします。 Python は解釈と操作をサポートしており、拡張のために C ライブラリを呼び出すことができます。 Python には強力な標準ライブラリがあります。標準ライブラリ システムが安定して以来、Python エコシステムはサードパーティ パッケージに拡張され始めています。 Django、web.py、wxpython、numpy、matplotlib、PIL などのこれらのパッケージは、Python を種の豊富な熱帯雨林にアップグレードします。
啓示
Python は、優雅さ、明快さ、シンプルさを提唱しており、広く使用されている優れた言語です。 Python は TIOBE ランキングで 8 位にランクされており、Google の 3 番目に大きな開発言語であり、Dropbox の基本言語であり、Douban のサーバー言語でもあります。 Python の開発履歴は代表的なものであり、多くのインスピレーションを与えてくれます。
Pythonの開発プロセスにおいて、コミュニティは重要な役割を果たします。 Guido は、自分は万能のプログラマーではないため、フレームワークを策定することだけを担当していると考えています。問題が複雑すぎる場合、彼はその問題を回避する、つまり手を抜くことを選択します。これらの問題は最終的にはコミュニティ内の他の人によって解決されます。コミュニティの人材は非常に豊富で、Webサイトの制作や資金調達など、開発から少し離れたところでも、喜んで取り組んでくれる人がいます。今日のプロジェクト開発はますます複雑かつ大規模になっており、協力とオープンマインドがプロジェクトの最終的な成功の鍵となっています。
Python は、歴史に名を残した ABC であれ、今でも使用されている C や Perl であれ、リストに載っていない他の多くの言語であれ、他の言語から多くのことを学んできました。 Python の成功は、Python の元となるすべての言語の成功を表していると言えます。同様に、Ruby は Python から借用しており、その成功は、ある面では Python の成功も表しています。どの言語もハイブリッドであり、長所と短所があります。一方で、言語の「良し悪し」の判断は、プラットフォーム、ハードウェア、時代などの外部要因に左右されることも少なくありません。プログラマーは多くの言語の戦いを経験してきました。実際、寛容な心でさまざまな言語を受け入れれば、いつかプログラマーもグイドのように独自の言語を混在させることができるようになるかもしれません。
Python の将来の運命に関係なく、Python の歴史はすでに興味深い小説です。