「物理学のための計算機とオープンソース」の版間の差分
削除された内容 追加された内容
Londonbashi (トーク | 投稿記録) M編集の要約なし |
編集の要約なし |
||
2 行
----
==始めに==
この文書は、理学系の学部を卒業したものが、何らかの仕方で計算機を学ぼうと
考えた場合の教科書の役割を果たすものとしてかかれるものである。
27 ⟶ 25行目:
この文書でも、コンパイラの理論自体を扱うことは出来ない。しかし、
それに関係する部分で、それほど複雑でない部分は出来る限り扱っていこうと
考えている。例えば、
それらの原理や設計の思想を出来る限り紹介して行きたい。
また、コンパイラの中でも構文解析と呼ばれる部分は、計算機を扱う上で
いろいろな部分でであう考え方であり、これは詳しく紹介したいと思う。
==計算機との情報伝達手段==
理想的な計算機は、0と1の2種類の信号しか受け取れない機械であり、
これによって2種類以上のことをさせるよう指事を出すことは不可能に思える。
54 ⟶ 48行目:
やや複雑になるが、簡単な例を取って考えてみることにする。
まず、メモリと
考える。ここで、メモリはそれぞれの部分が0と1だけの情報をたくわえることが出来る
ものであり、
実際にはメモリと
電気電子系で扱われることが多い内容であり、その詳細にはふれることが出来ないが、
直観的にはメモリはただ2つの量子状態からなる電子スピンのようなものを
想像し、
ものを想像すればよい。例えば、2進数の1桁の数に対する加算回路を考えてみる。
このとき、2進数の1桁の数は0と1のみであり、これらの足し算の結果の
72 ⟶ 66行目:
\end{pmatrix}
</math>
が得られる。これは回路としては
ある回路によって作ることが出来ることが知られている。
更に、1桁どうしの足し算によって2桁の数が作られることに注目して、
83 ⟶ 77行目:
\end{pmatrix}
</math>
となるが、これは
2進数の加法を行なう回路が作れたわけである。このように、
計算を行なう回路を集積したものであり、どちらかといえば計算機というより
電気系の学課の題材といえるだろう。
また、多くの実際に使われている
それらを自由に扱うことは出来ない。
一般に
数値を与える部分を理想化したものをレジスタと呼ぶ。物理的には、
対して外部から電気信号を送るための端子である。レジスタは通常
複数あり、命令を受けるレジスタと、データを受け取るレジスタは別になっている。
さて、ここまでで計算機に命令と命令を実行するのに必要なデータを与える
手段が分かった。理想的にはここからの話で、
2進数の信号で行なわれており、2進数標記での命令を作ることを人間の側が
行なっているとしてもよい。しかし、それはあくまでも実用的に役立つ
文書を作るという本来のこの文書の目標に反している。例えば、
文書の執筆を行なうという大事業を2進数でかくことはほぼ不可能である。
漢字が加わると更にその作業は難度を増す。
そのため、計算機に効果的な仕方で指示を与えるには、何らかの仕方で
110 ⟶ 104行目:
==移植性==
▲ここまででcpuに命令を与える方法について考察して来た。
▲もちろんcpuに与える命令自体はcpuを作るメーカーに任せられており、
▲それについては個々のcpuメーカーの作る文書を読むしかその内容を知る
方法は無い。しかし、実際にはそれでは問題が生じて来る。
あるソフトウェアをある
あるその
このソフトを、他の
このとき、
この命令の集まりはそちらの
おこさせることが出来ない。このことを、得られた命令に移植性がないという。
このことは、そもそも
当てはめ方が任意であったことを考えると、全く当然のことと言えるのだが、
それでも、1つの
2進数プログラムに全く互換性が無いとすると、それぞれの
全く別のプログラムをしなければならず、このことは非常に大変な
作業になると考えられる。
実際にはこの問題は、
機器、例えばハードディスクやサウンドカードなどがあげられるが、
それぞれが個別の命令の体系を持っており、それら自身もある程度それを
作るメーカーに信号の受け方を決める権限が任されている。
そのため、それらに対しても個別に信号の受け方や送り方を規定せねばならず、
それぞれの機器がそれぞれの
考え合わせると、その組み合わせは非常に多くの数を持つと考えられる。
138 ⟶ 131行目:
いくつかの場合にこのことは依然として問題になっており、完全な
解決が得られたわけではないことに注意しなければならない。
1つめの方法として、ハードウェアや
統一してしまうことがあげられる。このことは通常ハードウェアメーカー各社の
努力によってなされる。
<!--
歴史的には、
家庭用パソコンに登載される
多くを占めたため、パソコン用の
intelの命令に合わせた仕方で
増えた。
しかし、パソコン用であっても、
金銭的な理由やそれ以外の歴史的な理由などにより
それ以外の
-->
例えば、家庭用パソコンでない
より多様な仕方で用いられる
占めるメーカーが存在せず、それらに対する対応はまちまちであるといえる。
関連のハードウェアについてもそれらへの命令の体系はあまり統一されているとは
171 ⟶ 164行目:
幸いにもそのような作業を行なうプログラムが実際にかけることが
知られており、また広く流通してもいる。このような抽象化された
名前によって作られたプログラムを、ある
プログラムをコンパイラと呼ぶのである。
しかし、このことは
それを扱うことが難しいことを意味する。そのようなものについては
必要な部分だけを2進数で書くか、コンパイラに適切な分岐を用いて
182 ⟶ 175行目:
作ることが、それぞれの機器の機能を移植性を保った方法で
用いるために役立つことが分かった。実際にはこれらの抽象化された名前の体系は
まさにOSの機能の一部分を成している。例えば、OSの1つである
このような抽象化された命令としてread()とwrite()を持っている。
これは、例えばハードディスクに対する命令を抽象化することを
248 ⟶ 241行目:
なることが起こることもあり、そのような場合について様々な議論が
かわされているようである。
==アプリケーション==
ここまででそれぞれの機器の機能を抽象化しある一定の機能を用いる方法を
見てきた。おおよそ、現在用いられている家庭用パソコンはここまでに
286 ⟶ 277行目:
===ユーザーインタフェース===
ここからは個々のアプリケーションについて見て行きたいと思う。
ただし、あまりにも個々のアプリケーションの機能に特化した
309 ⟶ 299行目:
OSごとに移植性が無い場合も多く、今後の発展が期待されるところである。
ここでは特に、利用者から計算機のインターフェースに注目する。
現在では主要なインタフェースは大きく分けて
利用者に情報を送る方式である。この方式は古い方式で今は主流でないと
考えられがちであるが、実際にはそうではない。例えば、技術者だけが
319 ⟶ 309行目:
ことが予想される。そのため、より変化の速い分野においては現在もそうであるし、
おそらくこれからも文字による情報伝達は主流であり続けるであろう。
次に、
アイコンやスクロールバーなどのグラフィックを表示し、それぞれの情報を
より直観的に提示する方法である。この方法は使うときには
329 ⟶ 319行目:
多いのである。しかし、幸いにしてそのようなライブラリ等の問題を
全て乗り越えた計算機も家庭用パソコンを中心として多く存在する。例えば、
現在の
そのような問題を解決しているといえる。ただし、更に問題なのは
それらのOSはそれぞれ異なったグラフィック表示ライブラリを用いており、
340 ⟶ 330行目:
加えるのにしたがって、何度もそのような作業をくり返す必要があり
どのような仕方でこのプロジェクトが進行していくかは今の時点では分からない。
このように、
アプリケーションについてはこのような直観的な入力方法は必須であり、
各々のメンバーが様々な仕方で開発を進めているといえる。
ここからは、特に
なぜなら、上でも書いた通り
それぞれのOSに対して解説を加えるのも大変であるからである。
また、計算機の機能を全て使うという点では
例えば、通常あるアプリケーションの
多い。これは、
抽象化された名前の集合であり、それらを扱うのは通常コンパイラの仕事であり、
またコンパイラ自身は通常
また、
様々なOSで実行できる場合が多いことも理由の1つとしてあげられる。
==物理学研究に際して応用上重要なアプリケーション群==
===物理学研究に必要な計算機技術に関する一般論===
ここからは本題である物理的な結果を得るために応用できる
ソフトを説明して行く。一般に物理の研究は実験系と理論系に分かれており、
364 ⟶ 352行目:
理論の側にとって理論研究に必要な計算機技術のうち多くは数値計算と
代数処理である。また、 数値計算を行なうときには計算機言語としては通常Fortranを
用いることになる。しかし、このときには
実はあまり必要でない。どちらかといえば、このときに必要の知識はより実用的な
数値計算の知識であり、どちらかといえば工学に属する分野の知識であるといえる。
387 ⟶ 375行目:
数値計算で得た結果を直接外部のプログラムを呼び出してプロットを
作成する手法が問題になる場合がある。
しかし、このことについては
ここですこし詳しく述べておこうと思う。
416 ⟶ 404行目:
このようなコードの一部分だけを再利用する方法は、巨大なライブラリの多くが
Cによって書かれているため、Cによる方法だけを修得すればよいように思える。
しかし、[[w:Java|Java]],[[w:
異なった手法を提示しているためここではこれ以上深く扱わず、抽象的に
そのようなことがなられたものと仮定するにとどめておく。
435 ⟶ 423行目:
仕事をするだけなら、このようなプロセス管理の考え方は必要がない。
例えば、巨大な数値計算を専門に行なう計算機に取っては、常にただ1つの命令を
扱えば十分であり、それ以上に複雑な処理を行なうことは
負担をかけることになる。そのため、プロセス管理の手法は計算機の用途によって
使いわけることが必要となる。実際の現代的な家庭用パソコンでは
446 ⟶ 434行目:
ことである。これは、実際にはある計算機で動いている2つのプロセスの
間だけでなく、他の計算機で動いているプロセスに対してもおたがいの間で規格が
統一されていればデータを送ることが出来る。例えば、
この仕組みを用いて作成されている。
このような仕組みは伝統的に複数知られており、どの仕組みを用いるかは
462 ⟶ 450行目:
データを送信することも出来そうに思える。しかし、実際にはそのような
機能を付け加えることは割合手間がかかるため、そのような機能をそなえた
外部プログラムはあまり知られていない。例外的に[[w:OpenOffice.org|OpenOffice.org]]
と呼ばれる
オフィスソフトは、利用者が作成したプログラムとソケットを用いて更新することで、
486 ⟶ 474行目:
===計算機代数===
====概説====
理論的な研究手法に役立つ計算機技術の1つとして、計算機代数を
あげようと思う。計算機代数は実用的にそれらによって得られる結果もおもしろい
496 ⟶ 482行目:
計算機によって数式を扱うことは、計算機によって通常の数を扱う場合とは
やや異なった性質をおびる。なぜなら、通常加法や減法のような
数に対する四則演算は、
そのような手法を利用者はいかなる意味でも書き下すことは無い。
これは計算手法のハードウェア的な実装と呼ばれ、あらゆる意味で最も高速に
559 ⟶ 545行目:
<!--
====実際の使い方====
上のような手法で数学的な計算手法を計算機で扱うことが出来ることが分かった。
しかし、手法として知られていても実際にそれらが使える仕方で配付されていないなら
606 ⟶ 591行目:
(2)データとして扱われるものは文字でも数値でもよい。
を満たすものとする。例えば、計算機を用いて計算した数値計算の結果や
すこし一般的には学術論文などに用いられる.texファイル、更に[[w:
保存されたオフィスソフトの文書などもこの中に含まれる。
633 ⟶ 618行目:
====正規表現====
[[w:正規表現]]とは次の規則で生成される文字列のことである。
(1)用いたい文字を全て導入し、それらを<math>a _1</math>,<math>a _n</math>とする。(nは整数。)
658 ⟶ 642行目:
したツールも知られており、その様なものを用いれば、
データを加工することが可能となるのである。
そのようなツールは[[w:
これらについてはプログラミングの手法でより詳しく述べる。
==プログラミングの手法==
===CVS===▼
▲===CVS===
===Fortran===
==CUIの技術==
===viエディタ===
===shellプログラミング===
|