参考:他のプログラミング言語の学習

インタープリタとコンパイラ

世の中には様々なプログラミング言語があり、性質がそれぞれ異なる。 本演習ではプログラミング言語としてPythonを学習するが、 別の授業では別の言語を用いることもある。 以下に述べるように、プログラミング言語にはインタープリタ言語とコンパイラ言語という大きく異なる2種類に分類できる。 本節では、その違いを学習する。

これまで学習してきたPythonは”インタープリタ”とよばれる種類のプログラミング言語である。 インタープリタでは、コンピュータがソースコードを1文ずつ読み込み、 それをコンピュータが実行できる形式に内部的に変更し、順番に実行していく。 その変換・実行は1行ずつ行われるので、例えばソースコードの後半にバグがあっても途中までは実行されることになる。

一方で、コンパイラと呼ばれる種類のプログラミング言語もある。 主には

  • Fortran
  • C
  • C++

などがそれにあたる。 コンパイラ言語では、 コンピュータはまず全てのソースコードをコンピュータが実行できる形式に変換する。 そのようにして作成されたファイルを実行ファイルと呼ぶ。 ソースコードに記載した内容を実行するためには、コンパイルによって作成された実行ファイルを用いる。

コンパイラ言語の特徴は”高速な実行が可能”な点であり、シミュレーションや、 OS(オペレーティングシステム)など、高速な挙動が求められる用途に用いられる。 一方でその短所は

  • 一般に文法が厳密であり、同じ作業を記述するためにもインタープリタと比較しソースコードが長くなる
  • コンパイル(実行ファイルを作成する操作)に時間がかかる
  • デバッグ作業・コードの修正に時間がかかる
  • 実行環境に依存性がある(Windowsでコンパイルした実行ファイルはMacでは動かない)

などがある。

ただし、現在ではデバッグが容易なコンパイラ言語の開発環境が開発されていたり 高速計算が可能なインタープリタ言語が開発されていたりするので両者の境界はあいまいになりつつある。 例えば、PythonのNumpyによる行列演算などはFortranで実装されており高速に行うことができる。

コンパイラ言語 Fortran での開発

ここではコンパイラ言語として、Fortran90 と呼ばれる言語を簡単に学ぶ。 なお、Fortranは特に高速計算に向いた言語であり、 科学シミュレーション分野でよく用いられるものである。

まず、適当なフォルダ内に HelloWorld.f90 という名前の新しいテキストファイルを作成する。

ファイル内に以下を記述し、保存する。

program HelloWorld
    write(6,*) 'Hello World!'     ! 出力. クォーテーションマークの内側は任意の文字列.
    stop     ! プログラムを停止.
end program HelloWorld

コンパイル・実行

まず、コマンド・プロンプトで上記ファイルを保存したディレクトリに移動する。 例えば

cd /d M:
cd Johokiso-enshu

Fortranのようなコンパイル言語では、まず作成したコードをコンピュータが理解できる 実行ファイルに変換する必要がある。 その操作をコンパイルと呼ぶ。

教育用情報端末でFortranをコンパイルするには、gfortran を用いる。 コマンドプロンプ卜で以下を実行する。

gfortran HelloWorld.f90 -o HelloWorld.exe

上記コマンドは、Fortranで書かれたソースコードHelloWorld.f90をコンパイルし、 HelloWorld.exe という実行ファイルを作成するための命令である。 この操作が成功すると、同じフォルダ内に`HelloWorld.exe`というファイルが作成される。 コマンドプロンプトで

dir

を実行することで、同フォルダ内のファイル一覧を表示することができるので確認すること。

実際のプログラムの実行は、このファイルを用いて行う。 コマンドプロンプト上で

と入力すれば , クォーテーションマークの内側に書いた文字列 ( サンプルプログラムでは Hello World!) がその まま画面上に表示される .

参考課題

以下のFortranソースコードをvariable.f90というファイル名で保存し、 コンパイルした後、実行せよ。 実行した時のスクリーンショットをメール添付せよ。

program LightSpeed
    !
    ! この例題では, 光が1秒間に地球を何周するかを計算する.
    !
    implicit none     ! 暗黙の型宣言の禁止.
    double precision:: c          ! 光速
    double precision:: dia_km     ! 地球の直径 単位:km
    double precision:: dia_m      ! 地球の直径 単位:m
    double precision:: circumference ! 地球赤道面の円周.
    double precision:: pi         ! 円周率

    c = 299792458.d0      ! 単位:[m/s]
    dia_km = 12742.d0     ! 単位:[km]
    pi = acos(-1.d0)      ! 円周率. 単位:[1]

    dia_m = dia_km * 1.0d3     ! 単位を km から m に変換する.
    circumference = dia_m * pi  ! 円周(単位:m)を直径×円周率で求める.
    write(6,*) c/circumference, ' times/s'

    stop
end program LightSpeed