パスワードを忘れた? アカウント作成
10970698 story
プログラミング

2014年になってもFORTRANが選ばれる理由 70

ストーリー by hylom
まだ使われているの…… 部門より
あるAnonymous Coward 曰く、

本家slashdot「Why Scientists Are Still Using FORTRAN in 2014」より。

最先端の科学技術研究の分野で好んで使われる言語は2014年の今もFORTRANであることが多い。FORTRANの名は「数式翻訳」を意味する英語「FORmula TRANslation」からきているが、1950年代に考案されたこの言語の速度に勝る言語は未だ無い。FORTRANがここまで使われる理由はどこにあるのだろうか?

Ars TechnicaではFORTRANに取って代わる力のある言語としてHaskell、Clojure、Juliaが挙げられているが、/.Jerはどう見る?

slashdotではFORTRANが使われる理由として「レガシーコードであるがゆえ」「教授からFORTRANを習った学生が教授になり、そして教授となった学生がまたFORTRANを教え……という『レガシートレーニング』がゆえ」などが挙げられているが、やはりその科学技術計算に適した性質を挙げる声も多いようだ。

この議論は賞味期限が切れたので、アーカイブ化されています。 新たにコメントを付けることはできません。
  • by Anonymous Coward on 2014年05月12日 14時42分 (#2598715)

    こういう議論を見るたびに今はコンパイラの仕組みを知らない人が多いのだなと思う
    コンパイラ作成技術が低かった太古の時代に設計されたFORTRANの特徴はメモリ割り当てが静的なこと(もちろん今は機能が拡張されているが)
    当時の技術レベルでの高速なコード生成に都合の良かったこの特徴は今でも生きているし、今あるFORTRANで間に合っているのだからそれで必要十分

    単にFORTRANが古いと思っているのは使い捨てのwebアプリケーションの開発者なんかだと推測するが、そのような用途に適した「近代的」プログラミング言語の特徴はゴリゴリ数値計算するのに役に立つようなものではない
    そもそもプログラミング言語は階段を上るように進化して一つの万能プログラミング言語に収束するのだというような誤った考えを持っているのが問題ではないか?

    • by Anonymous Coward on 2014年05月12日 15時32分 (#2598739)

      >そもそもプログラミング言語は階段を上るように進化して一つの万能プログラミング言語に収束するのだというような誤った考えを持っているのが問題ではないか?

      レヴィ・ストロースの「野生の思考」みたいな結語でワロタ(いや、批判する意図ではなくて言い得て妙すぎて

      「野生の思考」がマルクス主義の発展段階論に対する強烈なアンチテーゼだったわけだが
      コンピュータ業界にはヘーゲル・マルクス主義の亡霊が生き残っているのだー (ナ、ナンダッテー ΩΩ Ω

      とかつぶやいてみたり。

      親コメント
      • by Anonymous Coward

        「野生の思考」がマルクス主義の発展段階論に対する強烈なアンチテーゼだったわけだが
        コンピュータ業界にはヘーゲル・マルクス主義の亡霊が生き残っているのだー (ナ、ナンダッテー ΩΩ Ω

        なるほど、がちがちの主義者っぽいRMS御大のGCC(GNU Compiler Collectionの方ね)のFortranはナカナカ出なかった上にしょぼいし、
        資本主義の権化たるintelが出してるintel Fortranのほうがよほどまし、てのはそういう訳だったのですね(ナ、ナンダッテー ΩΩ Ω

        • by Anonymous Coward

          共産主義が資本主義に敗北するのは、歴史を見ても明らかではないか。

      • by Anonymous Coward

        マルクス主義も、プログラミング言語も、行き着く先は技術的特異点だからな
        もしFORTRANで実装されたのなら、全ての高級言語FORTRANに始まり、FORTRANに終わるのか、

  • by shima_tetsuo (46446) on 2014年05月12日 13時36分 (#2598679) 日記

    昔ちょっと書いたことがあったけど、77と90では別言語ってぐらい違ってたように思うけど、ここで言うFORTRANは77のことなのかなぁ。

    77は確かにシンプルな言語仕様だったが、C言語と比較してなぜ計算が速いのかは分からなかったな。
    多分、コンパイラとライブラリの成熟度の違いだろうなと今もそう思っている。

    • by Anonymous Coward

      ポインタによるエイリアスが発生しないのが大きい。

      • へーそうなんだ。
        なぜ発生しなのかは今一わからんが…、C言語でも怪しい場合はワーニングが出るはずだから
        気をつけてれば今はそんなに差がないようにも思える。

        親コメント
        • by Anonymous Coward on 2014年05月12日 20時14分 (#2598985)

          > なぜ発生しなのかは今一わからんが…、
          ポインタがないんだからポインタによるエイリアシングなんか発生のしようがない
          > C言語でも怪しい場合はワーニングが出るはずだから
          > 気をつけてれば今はそんなに差がないようにも思える。
          人間に気をつけさせても意味がなくて、コンパイラがエイリアシングが発生しないことを証明できなければならない。さもなければエイリアシングが起きていなければできたであろう最適化を諦めなければならないことがある。
          具体例もあげとこうか。
          http://www.emit.jp/prog/prog_opt0.html [www.emit.jp]
          「コンパイラによる最適化がかからない理由」以降。

          親コメント
          • > ポインタがないんだからポインタによるエイリアシングなんか発生のしようがない
            そうだったか…もうFORTRANの事はすっかり忘れてちゃってるんだな

            > 人間に気をつけさせても意味がなくて、コンパイラがエイリアシングが発生しないことを証明できなければならない。さもなければエイリアシングが起きていなければできたであろう最適化を諦めなければならないことがある。
            具体例もあげとこうか。

            -fstrict-aliasing を付けると(-O2以降でデフォらしい)、コンパイラはエイリアシングしてないことを前提にするから、
            人間が気を付けなくてはいけなくなる。GCCは明らかに怪しい場合はワーニングを出す。
            付けない場合はGCCは常にエイリアシングが発生する前提でコンパイルするはず。

            親コメント
            • by Anonymous Coward on 2014年05月13日 0時06分 (#2599207)

              親コメの人とは別人ですが、そのエイリアシングとは別物ですよ。

              C言語のstrict aliasing ruleは、(charを除く)互いに異なる型の変数が同じポインタを指さないこと。
              ここで言っているのは一般的なポインタのaliasingで、複数の(同じ型を含む)ポインタが同じ実体を指さないことです。

              FORTRAN(77まで)にはポインタがそもそもありません。
              Fortran(90から)にはポインタがありますが、「ポインタに指されることがある変数」は明示的にコンパイラに教える必要があります。
              このおかげで、配列の指す範囲の重複のありなしがコンパイラからわかりやすくなり、命令順を入れ替えても結果が変わらないかどうかを判断しやすくなり、最適化の機会が増える、という寸法です。C言語使いの人には、デフォルトがrestrictポインタ……というと雰囲気がつかみやすいかな。

              親コメント
              • > C言語のstrict aliasing ruleは、(charを除く)互いに異なる型の変数が同じポインタを指さないこと。
                > ここで言っているのは一般的なポインタのaliasingで、複数の(同じ型を含む)ポインタが同じ実体を指さないことです。

                確かに調べてみると-fstrict-aliasingの最適化は互換性の無いポインタが同じアドレスを指さない事に限定してるっぽい…
                ポインタが同じ型の場合は重複する可能性がある前提でコンパイルするんだろうね。
                (よく考えたら、qsortとかもそうだしそんな事しょっちゅうあることだった)

                親コメント
          • by Anonymous Coward

            COMMONとかEQUIVALENCEは?

      • by Anonymous Coward

        C言語の対策(restrictedポインタ)がまたCらしいというかなんというか

    • by Anonymous Coward
      FORTRANの方が変数を格納する領域が単純だからではなかったかな.
      • by Anonymous Coward

        C言語でも固定番地の変数使う分には同じでは?

        • by Anonymous Coward

          その変数を指している余計なポインタが存在しないことを保証できない点が異なる。

  • by Anonymous Coward on 2014年05月12日 13時42分 (#2598682)

    Fortran 90ならば新規で欠く事もあります。
    特にスパコンとかで計算するときにはどうしてもライブラリとか揃ってるし、利用者も多くてコンパイラの整備も早いので。

    …FORTRANの古いCodeとか正直もう見たくもありませんけど、実際にはこっちと格闘している事も多くって、可能ならば少しずつ書き直しています。

    でも最近は積極的に選びません。基本的にはC++を使います。

    機能的には十分な国産のフリーな流体解析ソフトが、言語がFORTRANで書かれてて扱いにくいという事を理由に、機能的にはそうでもない外国のC++でかかれたフリーな流体解析ソフトに負けつつある。HPCまわりでもそういうことが重視され始めているようです。
    別に国内を腐すわけじゃないけど、外国製で使えると聞こえてくる学術系のコードはCが多いのは間違いないし。

    • by Anonymous Coward on 2014年05月12日 13時54分 (#2598688)

      分野によるんだろうけど、自分の守備範囲だと全世界的にFORTRANが圧倒的に多いですな。
      別の言語でフロントエンドが作られるってケースは多々あるけど
      科学技術計算に限ってはFORTRANが読みやすいし書きやすい、自分のような若い世代でも
      そう思うんだから長年使ってる人にとっては他のものは眼中にないんじゃないかな。

      でもだんだん書ける人は少なくなっているみたいで他の分野の人に新規コードの作成を頼まれることが多くなった。

      親コメント
    • by Anonymous Coward

      タイトルに反応するが、80年代後半の大学の計算機演習(マシンはACOS)で
      全部小文字で書いていた奴がいた。
      インデントも普通に付けていたのでぱっと見FORTRANに見えなかったよ。

      • by Anonymous Coward

        Fortan90以前は桁位置に意味のある構文だったと思うけどインデントなんか可能なの?

        • by Anonymous Coward

          頭6桁の意味は普通のFORTRANと同じだから、インデントと言っても
          左端は空白6桁のゲタ付き。

          ACOSのFORTRANが73桁以降をコメントとして見ないように
          なっていたかどうかは覚えていない。
          大学1年の演習なので1行が長くなることもなく、インデントを派手に
          付けても72桁以内に収まっていたかもしれない。

  • 企業が保有する技術計算プログラムは、ほとんどがFORTRANでしょう。
    何百、何千あるプログラムを他の言語に書き換えるメリットはないし、
    ユーザーは動けばいいのであって、言語が何かなんて興味がないし、
    ということでしょう。

    実際は、何十年も前に書かれたプログラムの詳細を知る人がいなくなってしまって
    手を付けられないというケースも多いと思います。
    後継者育成で、20万ステップ程のプログラムを若手に解析させたら1年かかりました。
    FORTRANの構文理解は大して難しくありませんが、そこに書かれた内容を理解するのは容易ではありません。
    それでも何をやっているのかよく分からないところが結構あって、既に退職した
    開発者に聞いたら、その部分は製品が対応しなくなったので、使わないから無視してよい
    と言われて脱力した事があります。
    • by Anonymous Coward

      2014年になっても選ばれる理由、って話なので、できたら古いのはどうなっているかではなくて、新しいものがどうなっているか知りたい。
      古いコードは仕方がない/書き直す必要はないのはともかく、新しいものもまだFORTRAN使っている?

      • by Anonymous Coward

        Co-array Fortranの使い勝手を力説してくれた人がいますが、なかなかどうして落としどころがうまく(さすがCray)、良さげです

  • by Anonymous Coward on 2014年05月12日 13時18分 (#2598670)

    計算が速くて数値計算のライブラリが整っているから。
    特にスパコンでは。

    • by Anonymous Coward

      数学では滅多に仕様変更がないから、
      数学で過去に最適化されたライブラリが、
      「数学の定理が仕様変更されたために使えなくなりました。」
      ってことはまずないでしょう。

      過去の資産がそのまま使える業界なら、そのまま同じのを使うのが効率いいと思う。

      • > 「数学の定理が仕様変更されたために使えなくなりました。」

        なんか、コレ [vector.co.jp]を貼れと言われた気がしました。

        DATA文の主な目的は、定数に名前を付けることである。円周率πを使うたびに3.141592653589793と記述する代わりに、変数 pi にDATA文を使って値を割り当て、 毎回 3.14...という長い定数を記述する必要なく pi を使うことが出来る。さらに、円周率が変わった場合に、プログラムの変更が容易になるという利点がある。

        - FORTRAN manual for Xerox computers

        親コメント
        • by Anonymous Coward

          > さらに、円周率が変わった場合に、プログラムの変更が容易になるという利点がある。

          小学校では円周率は3で計算するってやつですか。

          中学に入ったら円周率が3.14になり、高校に進んだら実はもっと桁数が多くなり、大学に入ったら実は何桁書いても表現仕切れないということを知る。
          (後半はただの妄想です)

          • by Anonymous Coward

            円周率はπ進数で10ぴったりでしょ?

      • by Anonymous Coward

        というか、桁落ちなんかが容易に起きないように鍛えられてきた資産なんでしょ。

        # うん年前の大学の授業の受け売り

  • by Anonymous Coward on 2014年05月12日 13時38分 (#2598681)

    使ってる方々がデメリットを感じなければ別にFORTRANでいいでしょ。

    #もっとイイモノがあるよーっていう意見があってもいいけどさ。

  • by Anonymous Coward on 2014年05月12日 14時51分 (#2598723)

    言語仕様で複素数をサポートしてるからでしょ。

    嘘です。

    • by Anonymous Coward

      ところで今のFortran って、行列はあるの?

      • 行列というか, 多次元配列ですね. これは昔からあります.

        配列演算用組み込み関数はFortran90から標準化されています. Fortran90以降が使える環境であれば, プログラムの見通しの良さや性能向上のために, 積極的に使った方が良いでしょう. 古いプログラムでも配列演算関数を使って書き直す価値はあるかも?

        親コメント
      • by Anonymous Coward

        「行列はあるの?」の意味がわかりませんが、行列演算パッケージLAPACKは90年代からありましたが。
        逆行列とか、疎の行列の演算とかは大体サポートされていたと思います。

        行列を、行列として演算する(Cで表現するとfloat **matrix → float ** inv__matrixが求められる)のは困難だと思います。
        翻訳に手間取りますけど、一度翻訳すれば、処理は早いと思います。そもそも、多次元配列をFortranで扱うのが(ry

        # あ、まさかもしかして、これが言いたかったこと?
        ## 元コメの「Fortran って、行列はあるの?」
        ##  →「《行列》って、逆行列計算などの行列演算が早い、ってことでなくて、単に多次元配列がコーディングしやすい、ってこと?」

        そんな私のFortranの行列演算パッケージの知識は15年位前で止まっているので
        もっと進んでいるかもしれません。

        • by Anonymous Coward

          ダートマスBASICのMAT文みたいなやつ。
          配列ではなくプリミティブとして行列があると抽象度が増してコンパイラも楽だろうと思う。

    • by Anonymous Coward

      標準ライブラリ(C99) 形無し

      ネタです。

      • by Anonymous Coward

        プレビューをよく見なかったすみません。

        標準ライブラリ(C99) complex.h 形無し

        ネタです。

  • by Anonymous Coward on 2014年05月12日 21時57分 (#2599105)

    FORTRAN77のコードいじるの本当に苦痛なんですが、あともう暫くしたらfortran2003使いから同じように思われるんだろうか、なfortran95使いです。

    gcc4.9もintel fortran2015betaも出たのに今ひとつ盛り上がりに欠けてる気がする<fortran2003

  • by Anonymous Coward on 2014年05月12日 23時19分 (#2599172)

    >1950年代に考案されたこの言語の速度に勝る言語は未だ無い。FORTRANがここまで使われる理由はどこにあるのだろうか?

    直前に書いてあるそれが理由じゃないの?

typodupeerror

※ただしPHPを除く -- あるAdmin

読み込み中...