[ノンプロ研Python中級講座1期]卒業LT後編~Pythonの実行と正体~

python中級Python

どうも。ケニー(tsujikenzo)です。このシリーズでは、2023年3月から始まりました「ノンプロ研Python中級講座1期」について、全6回でお届けします。今日は最終回の最終回です。

前回のおさらい

前回は、「卒業LT中編~環境変数とPath~」をお届けしました。

[ノンプロ研Python中級講座1期]卒業LT中編~環境変数とPath~
どうも。ケニー(tsujikenzo)です。このシリーズでは、2023年3月から始まりました「ノンプロ研Python中級講座1期」について、全6回でお届けします。今日は最終回の2回目です。前回のおさらい前回は、「卒業LT前...

今回は、「卒業LT後編~Pythonの実行と正体~」をお届けします。

今日のアジェンダ

  • Pythonの実行
  • コンパイル言語とインタプリテッド言語
  • Pythonのインタープリター
  • Pythonの正体

Pythonの実行

前回、言い忘れたことがあります。

それは、「PythonのPathを通すのは、Python本体があるディレクトリ」ということです。

わたしのパソコンには、Anaconda3がインストールされています。

Anaconda3フォルダの直下にPython.exeファイルがあります。 

なので、環境変数にも、このようにPathを通しています。 

任意のフォルダに、メッセージを出力するだけの、かんたんなpyファイルを作成します。

# python-sample.py
print("Hello, I'm Python.")

コマンドプロンプトを起動し、カレントディレクトリを移動し、python ファイル名で実行しましょう。 

前回の復習ですが、裏では、python(exeが省略されている)を、

  1. カレントディレクトリで探す
  2. なければPath変数を参照しに行く

と、いうことをやっています。

Path変数を参照しにいくと、Anaconda3というディレクトリの中にPython.exeを発見しましたので、起動して、python-sample.pyを実行できました。 という流れです。

※ちなみに、pythonを付けずに、python-sample.pyだけを実行すると、VS Codeなどのエディタが立ち上がると思います。これは、Windows上で、python-sample.pyをダブルクリックした状態と同じです。

実行可能ファイル

ここで、お気づきの方もいるかもしれませんが、Pythonファイルを実行すると、C++のような、「実行可能ファイル」が生成されません。 

このように、コンパイルして実行可能ファイルを作成せず、ソースコードを読み込んで実行することを、インタープリター方式(またはインタープリテッド言語)と呼びます。

コンパイル言語とインタプリテッド言語

どんなプログラミング言語であれ、人間が書いたソースコードは、パソコンには読めません。パソコンは、01で書かれたマシン語という言葉しか理解できません。

なので、必ず、ソースコードを翻訳する必要があります。その翻訳機が「コンパイラ」です。 

コンパイラのお仕事

コンパイラは、中でさまざまなことを行っています。

  1. 字句解析(Lexical Analysis): ソースコード(文字列)を読み取りながら、トークン(識別子、キーワード、演算子など)に分割します。
  2. 構文解析(Syntax Analysis): 字句解析されたトークンの順序や構造を確認し、構文的な正当性を検証します。
  3. 構文木(Syntax Tree):構文解析の結果、構文木が生成されます。
  4. 意味解析(Semantic Analysis): 構文木を解析し、変数の宣言や型チェック、スコープの管理など、言語固有の意味を持つかどうかを確認します。
  5. 中間表現の生成(Intermediate Code Generation): 意味解析が完了したら、中間表現(Intermediate Representation)を生成します。中間表現は、最適化やコード生成のための準備段階として使用されます。
  6. 最適化(Optimization): 中間表現を最適化することで、生成されるコードの効率や実行時間を改善します。
  7. コード生成(Code Generation): 最適化された中間表現から、ターゲットプラットフォームに対応した実行可能なコード(アセンブリ言語、機械語)を生成します。コード生成では、レジスタの割り当て、命令の配置、メモリの管理などが考慮されます。
  8. 最終処理(Finalization): コード生成が完了したら、必要な最終処理を実行します。

JavaScriptで聞かれる「レキシカルスコープ」とは、まさに、字句解析を行った時点で、スコープを決定するというものです。

また、構文木とは、ソースコードの構造をツリー上の階層的な形式で表現したものです。 

コンパイルには、「事前コンパイル方式」と「事後コンパイル方式」の、2種類があります。

事前コンパイル方式

ファイル(アプリケーションなど)を実行するまえに、翻訳を行うのが、事前コンパイル方式です。 

どのプラットフォームで動作させるのか、というのを予め決めておく必要がありますが、事前にコンパイルを済ませておくので、処理が早いというメリットがあります。

事後コンパイル方式

いっぽうで、ファイル(アプリケーションなど)を実行するときに、翻訳を行うのが、事後コンパイル方式です。 

事後コンパイル方式のことを「インタープリター方式」とも呼びます。事後コンパイル方式における翻訳機のことを、インタープリターと呼びます

事後コンパイル方式は、ソースコードさえ用意しておけば、プラットフォーム側がコンパイラを用意すれば、どこでも実行できる、というメリットがあります。もちろん、実行の都度コンパイルするので、動作は遅いです。

メリット・デメリット

コンパイル言語とインタープリテッド言語には、下記のようなメリット・デメリットがあります。

プロパティコンパイル言語インタプリタ言語
実行速度高速遅い
メモリ効率
デバッグ容易困難
コンパイル必要不要
プラットフォーム依存性
学習難易度

JavaScriptなどは、サーバーからダウンロードしたソースコードを、ブラウザが翻訳して実行している言語です。

Pythonのインタープリター

Anacondaや、標準配布されている生Pythonのインタープリターは、CPythonです。

CPythonがあるおかげで、Pythonソースコードを実行できるようになっています。

CPythonは、C言語で書かれています。CPythonの公式サイトやオフィシャルなパッケージ管理システムから入手できるものは、C言語でソースコードが書かれていてコンパイルされたものが配布されている、ということです。

ちなみに、Google Apps ScriptのV8 Runtimeは、C++で作られていましたね。

その他のインタープリター

その他にも、PyPyや、IronPythonなどの特定のプラットフォーム用の実装があります。PyPyは、インタープリター方式は遅いというデメリットを解消するために、事前コンパイル方式(正確には、Just In Timeインタープリターを使用する)を提供しています。

現在はPythonも高度に進化していますので、もっとも適した実装は、一概には言い切れません。

「全てのPythonはインタープリター方式である」というわけではないので、ご注意ください。

Pythonの正体

で、結局Pythonの正体はなんなの?と聞かれたら、

  • インデントでステートメントを決めたりするソースコード
  • ソースコードを翻訳する翻訳機
  • Windows用、Mac用などの、プラットフォーム用に実装された総合的なプログラミング開発環境

など、文脈によって違います、というのが答えでしょうか。

お粗末さまでした。

まとめ

以上で、 「卒業LT後編~Pythonの実行と正体~」 をお届けしました。

考察を通じて、Pythonの開発・保守が、少しだけできるようになったかもしれません。

このシリーズの目次

  1. [ノンプロ研Python中級講座1期]受講理由と事前課題
  2. [ノンプロ研Python中級講座1期]Day1 関数と式
  3. [ノンプロ研Python中級講座1期]Day2 オブジェクトとクラス
  4. [ノンプロ研Python中級講座1期]Day3 モジュール
  5. [ノンプロ研Python中級講座1期]Day4 ファイル操作とAPI
  6. [ノンプロ研Python中級講座1期]卒業LT前編~はじめてのC++~
  7. [ノンプロ研Python中級講座1期]卒業LT中編~環境変数とPath~
  8. [ノンプロ研Python中級講座1期]卒業LT後編~Pythonの実行と正体~
タイトルとURLをコピーしました