「Fortran」の版間の差分
imported>GamerBook |
Administrator (トーク | 投稿記録) |
||
(2人の利用者による、間の10版が非表示) | |||
1行目: | 1行目: | ||
'''FORTRAN'''(読み:ふぉーとらん)とは、[[ジョン・バッカス]]と[[IBM]]の愉快な仲間たちが開発した[[プログラミング言語]]である。 | '''FORTRAN'''(読み:ふぉーとらん)とは、[[ジョン・バッカス]]と[[IBM]]の愉快な仲間たちが開発した[[プログラミング言語]]である。 | ||
+ | |||
== 概要 == | == 概要 == | ||
[[IBM]]とFORTRANには何も面白いところはない。[[青いネクタイ]]を装着せずにFORTRANを書くのは[[シンタックスエラー]]となる。 | [[IBM]]とFORTRANには何も面白いところはない。[[青いネクタイ]]を装着せずにFORTRANを書くのは[[シンタックスエラー]]となる。 | ||
+ | |||
+ | === 表記について === | ||
+ | フォートランの英語表記には「FORTRAN」と「Fortran」がある。 | ||
+ | フォートランは[[ソースコード]]を紙に書いて[[パンチカード]]に起こしていた古代から、[[統合開発環境]]を用いる現代まで日々進化しつづけ、時代とともに文法なども変化してきた。そのため近代的なフォートランでは初期の原型をとどめておらず既に別の[[プログラミング言語]]とも言える状態となっている。 | ||
+ | |||
+ | このためFortran 90の制定にあたり古代と現代の明確な区別として、「FORTRAN」という表記は[[FORTRAN 77]]までの古い仕様を指し、「Fortran」という表記は[[Fortran 90]]以降の新しい仕様を指すという取り決めが行われた。 | ||
=== 並列処理 === | === 並列処理 === | ||
− | FORTRANは基本的な演算や[[条件分岐]]などは何の特徴もない平凡な[[プログラミング言語]]であるが、[[配列]] | + | FORTRANは基本的な演算や[[条件分岐]]などは何の特徴もない平凡な[[プログラミング言語]]であるが、[[配列]]の演算は以下のように範囲指定で一気に計算が行えるという特徴がある。この記述だけで賢い[[コンパイラ]]は自動的に[[並列処理]]としてくれる。このため[[プログラマー]]は[[CPU]]のコア数だのスレッド数だのと言った細かいことを意識しなくてもよく、もう規模が大きすぎて人力ではそれらを把握しきれない[[スーパーコンピューター]]などの世界では人気が高いという。 |
<source lang="fortran"> | <source lang="fortran"> | ||
− | ! | + | program array |
− | a(1 : 10) = b(11 : 20) + c(21 : 30) | + | ! C言語のように変数の型宣言を強制させる。 |
+ | ! fortranでは初期状態で変数の型宣言が不要であり、変数名の1文字目によって整数になったり実数になったりするが、 | ||
+ | ! いわゆる動的言語の同じくタイプミスでもエラーにならずバグの温床になるので可能な限り以下の一行は含めよう。 | ||
+ | implicit none | ||
+ | |||
+ | ! 配列を宣言する。 | ||
+ | integer a(10), b(20), c(30) | ||
+ | |||
+ | ! 並列処理 | ||
+ | ! 配列を初期化する。 | ||
+ | ! 添字なしで配列に代入すると全部に入る。 | ||
+ | a = 0 ! 配列全部に0を代入する。 | ||
+ | b = 1 ! 配列全部に1を代入する。 | ||
+ | c = 2 ! 配列全部に2を代入する。 | ||
+ | |||
+ | ! 並列処理 | ||
+ | ! 配列bの添字11から20までと、配列cの21から30までを足して、配列aの1から10に格納する。 | ||
+ | ! fortranの添字は1から始まる。C言語から来た人は注意。 | ||
+ | a(1 : 10) = b(11 : 20) + c(21 : 30) | ||
+ | |||
+ | ! 配列の中身を表示する。 | ||
+ | print *, a | ||
+ | |||
+ | end program array | ||
</source> | </source> | ||
− | + | 上記の演算部分を[[C Sharp|C#]]で書くと以下のような感じである。 | |
<source lang="csharp"> | <source lang="csharp"> | ||
Parallel.For( 0, 10, i => a[i] = b[i + 10] + c[i + 20] ); | Parallel.For( 0, 10, i => a[i] = b[i + 10] + c[i + 20] ); | ||
23行目: | 53行目: | ||
} | } | ||
</source> | </source> | ||
+ | |||
+ | == 主な仕様 == | ||
+ | Fortranと一言でいっても時代とともに進化しており、文法なども変化している。 | ||
+ | * [[IBM 704 FORTRAN]] | ||
+ | *: 1953年に開発された最初のFORTRANは32の命令をもち[[IBM 704]]で動作した。輸送中に転ぶと殴られる[[パンチカード]]の時代である。 | ||
+ | * [[FORTRAN II]] | ||
+ | *: 1958年に開発された安定バージョン。[[関数]]と[[サブルーチン]]が使えるようになった。 | ||
+ | * [[FORTRAN III]] | ||
+ | *: 1958年に開発された実験バージョン。一般流通はしなかったという。IIとIIIの関係は[[FreeBSD]]のSTABLEとCURRENTのようなものである。 | ||
+ | * [[IBM 1401 FORTRAN]] | ||
+ | *: 1959年、[[中間コード]]と[[JITコンパイラ]]という驚異的な技術が生み出された。もはや伝説である。 | ||
+ | * [[FORTRAN IV]] | ||
+ | *: 1961年、[[IBM 1401 FORTRAN]]の[[算術IF文]]が[[Excel]]のIF文風であり、あまりに[[C言語]]に似ていないため批判が殺到し、[[C言語]]風の[[論理IF文]]が取り入れられた。この批判は[[C言語]]も[[Excel]]もまだ考案されていないにもかかわらず起きている。 | ||
+ | * [[FORTRAN 66]] | ||
+ | *: 1966年の魔改造である。 | ||
+ | * [[FORTRAN 77]] | ||
+ | *: 1977年の魔改造である。 | ||
+ | * [[Fortran 90]] | ||
+ | *: 1990年の魔改造である。1980年代から延々と議論された挙げ句に決定した最大の変更点は、名称表記が全部大文字の「FORTRAN」から「Fortran」になったことである。 | ||
+ | * [[Fortran 95]] | ||
+ | *: 1995年の魔改造である。 | ||
+ | * [[Fortran 2003]] | ||
+ | *: 2003年の魔改造である。 | ||
+ | * [[Fortran 2008]] | ||
+ | *: 2008年の魔改造である。 | ||
+ | * [[Fortran 2015]] | ||
+ | *: 2015年の魔改造である。 | ||
+ | |||
+ | == 主な実装 == | ||
+ | ざっくり | ||
+ | {|class="wikitable" | ||
+ | |- | ||
+ | ! 製品名 | ||
+ | ! 対応[[OS]] | ||
+ | ! [[ライセンス]] | ||
+ | ! style="width:30em" | 概要 | ||
+ | |- | ||
+ | | [[Oracle Solaris Studio]] | ||
+ | | [[Solaris]], [[Linux]] | ||
+ | | [[フリーソフト]] | ||
+ | | [[NetBeans]]をベースに[[C言語]]と[[C++]]と[[FORTRAN]]の[[コンパイラ]]や[[デバッガー]]、[[パフォーマンスアナライザー]]を搭載したもの。 | ||
+ | |- | ||
+ | | [[PGFORTRAN]] | ||
+ | | [[Windows]], [[Linux]] | ||
+ | | [[プロプライエタリ]] | ||
+ | | [[Visual Studio]]の[[アドオン]]も付いてくる。 | ||
+ | |- | ||
+ | | [[PathScale Compiler Suite]] | ||
+ | | [[Linux]] | ||
+ | | [[プロプライエタリ]] | ||
+ | | | ||
+ | |- | ||
+ | | [[Absoft Pro Fortran]] | ||
+ | | [[Windows]], [[POSIX]] | ||
+ | | [[プロプライエタリ]] | ||
+ | | | ||
+ | |- | ||
+ | | [[G95]] | ||
+ | | [[Windows]], [[POSIX]] | ||
+ | | [[GPL]] | ||
+ | | | ||
+ | |- | ||
+ | | [[GFortran]] | ||
+ | | [[Windows]], [[POSIX]] | ||
+ | | [[GPL v3]] | ||
+ | | | ||
+ | |- | ||
+ | | [[Intel Fortran Compiler]] | ||
+ | | [[Windows]], [[Linux]], [[Mac OS X]] | ||
+ | | [[プロプライエタリ]] | ||
+ | | [[Visual Studio]][[やEclipse]]、[[XCode]]の[[アドオン]]あり | ||
+ | |- | ||
+ | | [[Lahey Fortran]] | ||
+ | | [[Linux]] | ||
+ | | [[プロプライエタリ]] | ||
+ | | | ||
+ | |- | ||
+ | | [[Open64]] | ||
+ | | [[Windows]], [[POSIX]] | ||
+ | | [[GPL]] | ||
+ | | | ||
+ | |- | ||
+ | | [[FNT95]] | ||
+ | | [[Windows]] | ||
+ | | [[プロプライエタリ]] | ||
+ | | | ||
+ | |- | ||
+ | | [[NAG Fortran]] | ||
+ | | [[Windows]], [[POSIX]] | ||
+ | | [[プロプライエタリ]] | ||
+ | | | ||
+ | |- | ||
+ | | [[VS Fortran]] | ||
+ | | [[z/OS]], [[z/VM]] | ||
+ | | [[プロプライエタリ]] | ||
+ | | [[IBM]]製の元祖Fortranの[[メインフレーム]]版である。最近では[[Eclipse]]ベースの[[IDE]]が付いてる。 | ||
+ | |- | ||
+ | | [[Force]] | ||
+ | | [[Windows]] | ||
+ | | [[フリーソフト]] | ||
+ | | [[プログラミング言語]]の[[Forth]]と名前が似てるので注意。 | ||
+ | |- | ||
+ | | [[XL Fortran]] | ||
+ | | [[Linux]] ([[POWER]]と[[Cell]]限定), [[AIX]], [[BlueGene]] | ||
+ | | [[プロプライエタリ]] | ||
+ | | [[IBM]]製の元祖Fortranの[[スーパーコンピューター]]版である。最近では[[Eclipse]]ベースの[[IDE]]が付いてる。 | ||
+ | |} | ||
+ | |||
+ | == 文法 == | ||
+ | * [[Fortran/PROGRAM|PROGRAM]] | ||
+ | * [[Fortran/SUBROUTINE|SUBROUTINE]] | ||
+ | * [[Fortran/FUNCTION|FUNCTION]] | ||
+ | * [[Fortran/MODULE|MODULE]] | ||
+ | * [[Fortran/CONTAINS|CONTAINS]] | ||
+ | * [[Fortran/INTERFACE|INTERFACE]] | ||
+ | * [[Fortran/USE|USE]] | ||
== 関連項目 == | == 関連項目 == | ||
30行目: | 176行目: | ||
{{reflist}} | {{reflist}} | ||
− | + | [[category: プログラミング言語]] |
2024年2月9日 (金) 09:51時点における最新版
概要編集
IBMとFORTRANには何も面白いところはない。青いネクタイを装着せずにFORTRANを書くのはシンタックスエラーとなる。
表記について編集
フォートランの英語表記には「FORTRAN」と「Fortran」がある。 フォートランはソースコードを紙に書いてパンチカードに起こしていた古代から、統合開発環境を用いる現代まで日々進化しつづけ、時代とともに文法なども変化してきた。そのため近代的なフォートランでは初期の原型をとどめておらず既に別のプログラミング言語とも言える状態となっている。
このためFortran 90の制定にあたり古代と現代の明確な区別として、「FORTRAN」という表記はFORTRAN 77までの古い仕様を指し、「Fortran」という表記はFortran 90以降の新しい仕様を指すという取り決めが行われた。
並列処理編集
FORTRANは基本的な演算や条件分岐などは何の特徴もない平凡なプログラミング言語であるが、配列の演算は以下のように範囲指定で一気に計算が行えるという特徴がある。この記述だけで賢いコンパイラは自動的に並列処理としてくれる。このためプログラマーはCPUのコア数だのスレッド数だのと言った細かいことを意識しなくてもよく、もう規模が大きすぎて人力ではそれらを把握しきれないスーパーコンピューターなどの世界では人気が高いという。
program array
! C言語のように変数の型宣言を強制させる。
! fortranでは初期状態で変数の型宣言が不要であり、変数名の1文字目によって整数になったり実数になったりするが、
! いわゆる動的言語の同じくタイプミスでもエラーにならずバグの温床になるので可能な限り以下の一行は含めよう。
implicit none
! 配列を宣言する。
integer a(10), b(20), c(30)
! 並列処理
! 配列を初期化する。
! 添字なしで配列に代入すると全部に入る。
a = 0 ! 配列全部に0を代入する。
b = 1 ! 配列全部に1を代入する。
c = 2 ! 配列全部に2を代入する。
! 並列処理
! 配列bの添字11から20までと、配列cの21から30までを足して、配列aの1から10に格納する。
! fortranの添字は1から始まる。C言語から来た人は注意。
a(1 : 10) = b(11 : 20) + c(21 : 30)
! 配列の中身を表示する。
print *, a
end program array
上記の演算部分をC#で書くと以下のような感じである。
Parallel.For( 0, 10, i => a[i] = b[i + 10] + c[i + 20] );
C言語やJavaで並列処理を考慮せず書くと以下のような感じである。
for (i = 0; i < 10; i++)
{
a[i] = b[i + 10] + c[i + 20];
}
主な仕様編集
Fortranと一言でいっても時代とともに進化しており、文法なども変化している。
- IBM 704 FORTRAN
- FORTRAN II
- FORTRAN III
- 1958年に開発された実験バージョン。一般流通はしなかったという。IIとIIIの関係はFreeBSDのSTABLEとCURRENTのようなものである。
- IBM 1401 FORTRAN
- FORTRAN IV
- FORTRAN 66
- 1966年の魔改造である。
- FORTRAN 77
- 1977年の魔改造である。
- Fortran 90
- 1990年の魔改造である。1980年代から延々と議論された挙げ句に決定した最大の変更点は、名称表記が全部大文字の「FORTRAN」から「Fortran」になったことである。
- Fortran 95
- 1995年の魔改造である。
- Fortran 2003
- 2003年の魔改造である。
- Fortran 2008
- 2008年の魔改造である。
- Fortran 2015
- 2015年の魔改造である。
主な実装編集
ざっくり
製品名 | 対応OS | ライセンス | 概要 |
---|---|---|---|
Oracle Solaris Studio | Solaris, Linux | フリーソフト | NetBeansをベースにC言語とC++とFORTRANのコンパイラやデバッガー、パフォーマンスアナライザーを搭載したもの。 |
PGFORTRAN | Windows, Linux | プロプライエタリ | Visual Studioのアドオンも付いてくる。 |
PathScale Compiler Suite | Linux | プロプライエタリ | |
Absoft Pro Fortran | Windows, POSIX | プロプライエタリ | |
G95 | Windows, POSIX | GPL | |
GFortran | Windows, POSIX | GPL v3 | |
Intel Fortran Compiler | Windows, Linux, Mac OS X | プロプライエタリ | Visual StudioやEclipse、XCodeのアドオンあり |
Lahey Fortran | Linux | プロプライエタリ | |
Open64 | Windows, POSIX | GPL | |
FNT95 | Windows | プロプライエタリ | |
NAG Fortran | Windows, POSIX | プロプライエタリ | |
VS Fortran | z/OS, z/VM | プロプライエタリ | IBM製の元祖Fortranのメインフレーム版である。最近ではEclipseベースのIDEが付いてる。 |
Force | Windows | フリーソフト | プログラミング言語のForthと名前が似てるので注意。 |
XL Fortran | Linux (POWERとCell限定), AIX, BlueGene | プロプライエタリ | IBM製の元祖Fortranのスーパーコンピューター版である。最近ではEclipseベースのIDEが付いてる。 |