ただいまFORTRAN77を学習しております
基本的な構文(IF,DO,SUBROUTINE,FUNCTION)までやってみて
思ったのですが
いまいち計算しか出来ない言語に思えてきました
C言語やJavaScriptはFORTRANの次に出来た言語ですから
たくさんの処理が出来るのは分かりますが
FORTRANでの処理が少なすぎると思います
演算以外の事は出来るのですか!?
玄人プログラマーさま方回答お願いします
ただいまFORTRAN77を学習しております
なんで、八咫烏さんが Fortran を、という疑問は脇によけておくとして、
(玄人かどうかはわからんですが)経験者として。
「演算以外のこと」というと、画面の描画とかになると思うんですが、
割と最近の言語でも、言語の仕様として組み込まれているか、というと、
そういうことではなくて、「ライブラリが充実してる」だけです。
質問であげられてる範囲だと、javascript は境界があいまいですが、
C言語なんかは、言語の仕様として定められているわけではなく、
使えるライブラリが充実しているだけです。
だから、何かの画面を作るにしても、Windows と Unix で、ライブラリで用意されている
関数の呼び出し方が全く違っている、というようなことがおきます。
もう、20年くらい前のことですが、汎用機の OS で、Fortran から呼び出せる
グラフィックのライブラリを使って、CAD っぽい画面を作ってたことがあります。
線を引くとか、領域を塗りつぶす、みたいたサブルーチンが Fortran から呼び出せるように
作ってあるライブラリを使ってました。
Fortran や COBOL が古いなあ、と思うのは、変数などのスコープが自由にならないことだと思います。
関数やサブルーチンの再帰的な呼び出しができない、とか、
変数の宣言がモジュールの先頭でしかできないので、プログラムの全体を眺めないと、
変数の名前を自由につけられない、とか。
後、変数のメモリ割り当てが自由にできない、というのも、古さを感じさせます。
古い人に言わせると、「だから、メモリリークが存在しないんだ」とか言い出しますが、
ソースの中で配列の最大値を固定で書いて、それを超えるデータを扱えない、
というようなプログラムしか書けません。
書きだすとキリが無い話題ですが、質問の意図とずれているところがあれば、
指摘してもらえれば、答えられる範囲で回答します。
ただいまFORTRAN77を学習しております
なんで、八咫烏さんが Fortran を、という疑問は脇によけておくとして、
(玄人かどうかはわからんですが)経験者として。
「演算以外のこと」というと、画面の描画とかになると思うんですが、
割と最近の言語でも、言語の仕様として組み込まれているか、というと、
そういうことではなくて、「ライブラリが充実してる」だけです。
質問であげられてる範囲だと、javascript は境界があいまいですが、
C言語なんかは、言語の仕様として定められているわけではなく、
使えるライブラリが充実しているだけです。
だから、何かの画面を作るにしても、Windows と Unix で、ライブラリで用意されている
関数の呼び出し方が全く違っている、というようなことがおきます。
もう、20年くらい前のことですが、汎用機の OS で、Fortran から呼び出せる
グラフィックのライブラリを使って、CAD っぽい画面を作ってたことがあります。
線を引くとか、領域を塗りつぶす、みたいたサブルーチンが Fortran から呼び出せるように
作ってあるライブラリを使ってました。
Fortran や COBOL が古いなあ、と思うのは、変数などのスコープが自由にならないことだと思います。
関数やサブルーチンの再帰的な呼び出しができない、とか、
変数の宣言がモジュールの先頭でしかできないので、プログラムの全体を眺めないと、
変数の名前を自由につけられない、とか。
後、変数のメモリ割り当てが自由にできない、というのも、古さを感じさせます。
古い人に言わせると、「だから、メモリリークが存在しないんだ」とか言い出しますが、
ソースの中で配列の最大値を固定で書いて、それを超えるデータを扱えない、
というようなプログラムしか書けません。
書きだすとキリが無い話題ですが、質問の意図とずれているところがあれば、
指摘してもらえれば、答えられる範囲で回答します。
なんとなくこの質問にa-kuma3さんが来てくれると思っていました
一応とある書物で読んだのですが
「プログラミングをするうえで古い言語は一度はしておけ」と
書物に書いてあったのです
それがきっかけですね(アセンブラはお手上げ)
確かにライブラリが現代人気を占める言語に携わっていましたね
Perlもモジュールを用いてWindowを作ったりTkでしたかな
後はあまり知りません
C言語のライブラリも友人が文字列のソートの時に使っているのを目のあたりにしました、しかしそれを考えるとJavaScriptについて説明に悩んでしまいますが...
FORTRANでCADの絵画が出来るのですか!!
正直コンパイルして実行しても返す文字は数字か文字だけ
少しソースが気になったり
確かにFORTRANはいろいろと規制がありますね
変数は6文字しかおけないという記述をサラッと見た覚えがあります
話はかわりますが
FORTRANの構文はやはり(Whileやforにそれに携わるbreakやcontinue)が無いのも
扱いづらく思いました
なかなか詳しい説明ありがとうございます!!
たくさんの言語やOSについて長く携わっておられるのですね
近々Linuxの不具合の対処について質問しようと思っているのです
前回のLinuxの不具合での質問ではコメント欄で見守っていただいた時の事を覚えています
もしよければ分かる不具合について一緒に考えていただきたいのです
昔アセンブラ、Fortranをやっていました。
計算機でできることは皆アセンブラでできますし、
スマートに書けるかどうかは別にして
Fortranでできます(もちろん、READ, WRITEも含めてですが)
で、「演算/計算以外」とは具体的にどのようなことを指すのでしょうか。
すべては(アセンブラも含めて)「演算/計算」と思いますが。
例えばメモリ空間内の検索。これはメモリ空間に対して
検索指示語と同じかどうかを探すことを繰り返して
行うという演算です。
画像処理、音声処理、CADソフトというのも、昔はFortranで
書いていました。
(追記)
音声処理というのは、入出力は別として、デジタルデータとしてみれば
例えばフーリエ演算ですが、これはもろ数値計算ですね。
画面上に一本、線分を描くというのも、Y=A*X+Bに従って、
2次元平面を、「Xが一つ増えたら、そのYはどこか」を始点から
終点まで繰り返していく処理です。
sibazyunさんもアセンブラやFORTRANをやっておられたのですね
演算や計算以外とは自分の中でマウスを連携したウインドウでの操作などをさします
FORTRANもそうですがC言語も初めは単に黒い画面と向きあって計算の処理を繰り返します
そして初問を突破してようやくその土台からゲームなどを作ったりするわけですが
FORTRANはC言語の前の言語ですからC言語は超えられなくても
それに沿う形で何かしらの処理は出来ないのだろうか!?
という疑問がわき質問させていただきました
音声処理なんてものがFORTRANにあるのですか...
入門書を一通り読んでも最後がCommon文やサブルーチンとかでしたから...
sibazyunさんも長い人生の中でたくさんの事を勉学されているのですね
その飛び抜けた知識に驚くばかりです
アセンブラこそがプログラマーを選ぶ言語なのでしょうかね...
BASICが一般人のうち1/10が理解できたら
アセンブラはそのBASICが出来た人のうちの1/10しか理解できないという
言語のレベルを説明している本で見た覚えがあります
FORTRANはおっしゃる通り、数値演算に強い言語です。C言語も同じですが、裸で走らせればWindowsで箱入り娘になったソフトより100倍くらい処理速度はあります(アセンブラや機械語はもっと速い)ですが、インターフェースに乏しいですね。私はGASと言うインターフェース的なサブルーチン群(中身は殆どアセンブラ)を共用する事によりグラフィック画面に図形を表示させました。面白い使い方としてはC言語が得意とするビット毎の計算や論理演算、変数を2重定義(バイト数が違う変数として共用)なども出来ることです。FORTRAN,COBOL、APL,PLI(ピーエルワン)などは第3世代、旧C言語は3.5世代と言われています。面白いのは(変数・命令が)日本語の方言で組める言語もありました。私は「逆ポーランド法」でプログラムを組むのは好きです。
何時も思うのですが言語の処理スピードには何が関係しているのかが気になります
コンパイラ言語かインタープリタ言語か
そこから徐々に分けてC言語が早いという記事を見ました
低級言語の方がそれなりに機械処理の形に近いから
早い!?ということでしょうか
もしアセンブラに画像処理なんてものがあったらソースが大変な事になる
気がしました
結構難しい話なため面白いのか理解に悩んでしまいます...
言語も時代と共に世代の名前がつけられているんですね
FORTRANのライバルがALGOL、COBOL、そしてPascalが現れそれに対抗する形でPL/1が登場したけど勝てずFORTRAN77が登場したというお話を見ました
逆ポーランド法ですか見てみましたがなかなかユニークな方法ですね
FORTRANで書くのは大量の数値処理だけで,他はライブラリにお任せするのがよいです.(他の方が書いてらっしゃる通りです.)
かつて(あまりライブラリが充実していない状況)、FORTRANで書きづらい処理は多言語(CやPL/I的な言語やアセンブラ)で書いた副プログラムや関数を使うなど適材適所で言語選択するやり方をしていました.
なので,グラフィックデバイスやプレゼンテーション層のライブラリ提供者には,とっても感謝しております (^^;
また,言語は書き易さで選択するもので,プログラマ・コンパイラ・インタープリタ・リンカ・OS・ハードウェアの優秀さが性能を左右します.
やはりFORTRANは単に数値計算の処理が素晴らしい事を追求しているのですね
ライブラリを使わないとやはり単なる演算や計算ということはどの言語も
一緒であると今回理解しました
FORTRANやアセンブラという言語が現代ではほとんど使われなくなった中
それらの言語の行方はやはり今流行りのJava,C,またはWEBで充実のPerl,JavaScript
そのような比較的新しい言語をするプログラマーが原点に回心してする
ものだと思っています
正直古いプログラミングで大文字の仕様が多いいやデフォルトですかな
気になる所がありました
ライブラリが充実してそれなりにGUIに適応できるソースを記述できるように
なったのですね
「言語は人を選ぶ」ととある友人が言っておりました
できると言えばできますし、できないと言えばできないと言えるでしょう。
まず、図形描画という点ではa-kuma3さんが#a1で指摘されている通り、Fortranにもグラフィックライブラリが提供されていましたから、私の学生時代だと流体の流れを図式化していました。
Fortranの出現当時は各社個別に言語もライブラリも提供していましたから、呼び出しは違ってくるのが常識とされていました。
ライブラリを含めて言語と見るなら可能ですし、ライブラリを言語と見なさないなら不可能です。これはCも含めて同じです。
音声処理については、初期においてはFortranで行われていましたよ。入力装置があってデジタルデータになれば後は別に言語は殆ど問われませんからね。
何点か指摘をしますと、最近のFortranならCASE文というものがありますから、ストラクチャードプログラミングにかなり対応していると思います。
また、リカーシブ(再帰)についてはむしろAlgolが目指した理学の世界が必要としたものであって、Fortranが重宝された工学の世界ではむしろ避けられた手法ですからね。そこに中西正和先生の11行プログラムという傑作が書かれるきっかけが生じたわけです。
http://www.jssac.org/Editor/Suushiki/V12/No3/V12N3_102.pdf
それと、
>FORTRANのライバルがALGOL、COBOL、そしてPascalが現れそれに対抗する形でPL/1が登場したけど勝てずFORTRAN77が登場したというお話を見ました
ここはどういった資料か存じませんが大きく誤解をした資料ですね。FORTRANのライバルがALGOL、COBOLってそれぞれの分野で相容れないものがありましたし、PL/IはFORTRAN、ALGOL、COBOLの全てを統合する言語として登場させたものであって、ライバル視はしていませんでしたし、PascalはALGOLの改良版を求める国際コンテストで落選した言語(採用はSimula)で、PL/Ⅰよりずっと後に持て囃されるようになりましたからね。
ですから、私の専門分野の文献で言えば、理論先行の流体力学の文献はALGOLで書かれていましたが、実際の製品の設計や性能に関する流体工学はFortranで書かれていましたからね。
逆にその資料にADAがどう書かれているか興味のあるところです。
今、大人方のみなさんの学生時代ではやはり
今言われる古い言語が一般に使用されていたのですね
OSもそうですが今思えば、昔に比べ不可能なことが随分と可能になりましたね
WEBの方しかあまり携わっていませんが
HTMLの進化論を見たのでなんとなくFORTRAN系列も分かります
C言語もライブラリがなければただ黒い画面に演算結果が算出されるのは
FORTRANと全く同じですね
FORTRANの簡易説明書(先程のライバルの話が書かれていた本です)を読んでも
実行画面はすべて文字でしたので
その説明書にはCASE文について書かれていませんでした
やはり入門から外されるレベルなのでしょうか
あげられたPDFの内容も興味深そうなので後でじっくり読んでみます
あとライバル関連の話の概要をもう少し説明すると
IBM社が開発したFORTRANの使いが悪くピンチになったとの事でした
開発元の会社等は詳しくありませんが見たとき開発元が違うのかなと思いましたね
Pascalが滅びてPerlが標準になったという話も聞いているぐらいです
FORTRANしか目にしていないためPL/1やALGOL,COBOLがどのような仕様かは分かりませんが古い言語にもなかなか面白い可能性があったのですね
# 懐かしさがこみあげてきたので、もうひとつ書き込み。
Fortran が数値演算でよく使われるのは、数値演算をするのに便利だから、という側面があります。
ひとつは、数値演算用のライブラリが充実していたこと。
行列の演算とか、フーリエ解析とか、難しい計算はライブラリに頼らざるを得ないんですが、Fortran では、昔から充実してました。
純粋に計算だけを行うライブラリなので、デバイスなど環境に依存しませんから、
どんな計算機でも、Fortran があれば利用できる、という汎用性があります。
もうひとつは、ひとつめの回答にも書きましたが、スタックや動的なメモリ割り当てが無い分、
コンパイラがソースを最適化しやすい、ということがあります。
文法の違いを別にして、同じようなソースを書いた場合、Fortran でコンパイルした
実行モジュールの方が、早く動作しました。
そのうち、最適化だけだったら C言語のコンパイラの方が、いろいろなことが
できるようになったので、お株を奪われてしまった感じはありますが、
並列演算に関する最適化は、いまだに Fortran の方に軍配があがるようです。
ベンダーによる方言(独自実装)を別にしても、Fortran は大きく三つあります。
FORTRAN 66, FORTRAN 77, Fortran 90 のみっつです。
とくに断りを入れずに Fortran というときには、FORTRAN 77 を指してます。
Fortran 90 は、言語に大幅な拡張が取り入れられ、do while や switch case に相当する
記述もできますし、メモリの動的割り当てや、サブルーチンの再帰呼び出しなんかもできます。
Fortran 90 を実装したコンパイラがリリースされたくらいの時にも、ちょこちょこ
Fortran を使っていましたが、周りで使ってるのは、ほとんど見たことがありませんでした。
確かに、他の言語と同じようなイメージでソースは書けるし、数値演算のライブラリも
使えるし、ってことなんでしょうけど、
C言語では、他言語で実装したルーチンを呼び出すことができるし、
C言語と同じようなソースを書くために、わざわざ乗り換える必要が無いんですね (^^;
http://www1.doshisha.ac.jp/~jmizushi/program/Fortran90/3.1.txt
↑は、同志社大学 水島研究室 というページからひっぱってきた Fortran 90 のソースです。
Fortran 90 のテイスト満載、という感じではないんですが、
シンボル名の長さの制限が無くなってたり、DO の終端が CONTINUE じゃなくて、END DO になってたりします。
http://www.sci.hokudai.ac.jp/grp/poc/top/old/software/other/fortran_tips/index.htm
これはFortran77の知識があるuserがFortran 90 を使うためのtipsです.
どちらかというと、こっちのページの方が Fortran 90 テイストが感じられるかも。
これでも、Fortran なんです :-)
a-kuma3さんまたみなさんの時代に生まれていれば少なくとも
当時の感動について身に感じられたかもしれません
かなり奥深い話なためゆっくりgoogleで検索しながら見ます
ずばりFORTRANがあれば大学で学ぶような
今自分が見たら意味のわからない謎な記号を含む数学的な演算が
可能と言うことなのですね
フーリエについての本は友人から数分だけ貸してもらい
そのまま見なかったことにして返したわけですが
FORTRANを継ぐようにして作られたC言語
まだまだFORTRANの方が力をあげる分野が残っているのですね
しかしC言語の無限の可能性の力に押されて今では名前すらも聞きなれない
言語になってしまったと思います
それか新参者が単に興味がなかっただけ!?という事かもしれません
FORTRANの名前は年号にちなんだと聞いております
FORTRAN66は初めて聞きましたFORTRAN77にはwhileやswitchはありませんね
本には90/95の場合は新しい言語として取り組むようにと書いてありましたが
これは構文にちなんだものかなと思いました
77ではDO文が終わりが[数値] CONTINUE でしたからEND DOという書き方は
IF文に似ているなと思いました
しかし繰り返しのラベルの戻りが少々気になるところ
興味深いソースの提示などもありがとうございます
FORTRAN、最初は今の言語に敵わないしやる必要があるのだろうか
いつしか読んだ「古い言語もやっておくべき」の内容が分かったきがします
FORTRAN77で、開発しているシステムも少しはまだ生き残っていると思いますが、
FORTRAN77→C言語やJavaScriptに移行する際、両方の知識は必要でないでしょうか?
私も、COBOLから他の言語に移行する為に、仕事はなくなりません。
やはり、汎用機からの移行は最低限元言語と、移行言語最低2つは必要だと思います。
まだ、使う用途があるなら勉強は続けて良いと思います。
自分で『FORTRAN77言語のプログラム構築の限界』と思うなら、移行する言語のデリメリがあると思います。まぁ、それが理解しないで勉強止めると、その分仕事は減るさぁ。
A言語作ったシステムでで、B言語、C言語、D言語に幾つ変えられて、それぞれのデリメリを考えられる。その位の知識は必要だと思います。
私は面倒だから、機械語に全て変えてしまいます。
具体的にまだ使用される分野がある事は分かりました
FORTRANからCやJavaScriptに移行する逆で
JavaScriptをやっていてその親のCそして祖先とでも例えてFORTRANに
たどり着いたわけです
系統は継ぎながらもFORTRANとJavaScriptは全く異なる言語のように
思いましたね、演算はともかくWEBの見栄えに関するGUIが発展したからなのでしょうか
用途はありませんが、"昔のプログラミングを知ることの重要さ"という点から
学んでいます
そして、その昔の仕様ではやはり実行できる処理が少ない
→限界に挑んだら何が出来るのだろうか!?
そして今に至りました
A言語もB言語も存在を確認しつつソース自体見たことが無いので
分かりませんが、同じ系統でもデリメリを見分けることが大事なのですね(ソースを書き実行するだけでなく)
なんとなくこの質問にa-kuma3さんが来てくれると思っていました
一応とある書物で読んだのですが
「プログラミングをするうえで古い言語は一度はしておけ」と
書物に書いてあったのです
それがきっかけですね(アセンブラはお手上げ)
確かにライブラリが現代人気を占める言語に携わっていましたね
Perlもモジュールを用いてWindowを作ったりTkでしたかな
後はあまり知りません
C言語のライブラリも友人が文字列のソートの時に使っているのを目のあたりにしました、しかしそれを考えるとJavaScriptについて説明に悩んでしまいますが...
FORTRANでCADの絵画が出来るのですか!!
正直コンパイルして実行しても返す文字は数字か文字だけ
少しソースが気になったり
確かにFORTRANはいろいろと規制がありますね
変数は6文字しかおけないという記述をサラッと見た覚えがあります
話はかわりますが
FORTRANの構文はやはり(Whileやforにそれに携わるbreakやcontinue)が無いのも
扱いづらく思いました
なかなか詳しい説明ありがとうございます!!
たくさんの言語やOSについて長く携わっておられるのですね
近々Linuxの不具合の対処について質問しようと思っているのです
前回のLinuxの不具合での質問ではコメント欄で見守っていただいた時の事を覚えています
もしよければ分かる不具合について一緒に考えていただきたいのです