• 第1回 : デジタルコンピュータの夜明け前から正午迄
  • 第2回:ソフトウェア
  • 第3回:数値解析と図化の進化
  • 第4回:コンピュータの進化と構造計算プログラムの登場
  • 第5回:一貫構造計算プログラムと構造設計者の職能
  • 第6回:小型コンピュータとインターネットの時代
  • 第7回:AIの出現と人類とコンピュータの黄昏
  • 第8回:建築構造設計の未来像
和泉 正哲

(いずみ まさのり
/ Masanori Izumi)

 

< 略 歴 >

1953年|東大工学部建築学科卒業、同学科修士課程進学

1958年|東京大学数物系研究科博士課程修了(工学博士)建設省建築研究所研究員

1972年|東北大学教授(工学部建築学科構造力学講座)

1994年|東北大学名誉教授 東北芸術工科大学教授

1999年|東北芸術工科大学名誉教授 清水建設顧問

2006年|清水建設技術研究所顧問

2008年|大崎研究室顧問、現在に到る。

その他:タイAIT、チリカトリカ大学、米カルポリ大Visit. Prof.、マケドニヤスコピエ大学名誉教授、上海同済大学工程力学研究所名誉所長、運輸省通訳ガイド(英語)、日本建築学会賞、同大賞、科学技術庁長官賞 受賞、論文、著書多数

第2回:ソフトウェア

前回はデジタルコンピュータの夜明け前から正午迄(=現代迄)を述べた。今回は、ソフトへと話を進めたい。また、コンピュータで2進法を用いている理由について、今回の最後で参考として解説している。

2. コンピュータのソフト

多くの技術がゆっくり成長を始める黎明期、急速に発展する昼間(朝昼午後)そして完成度が進み成長が遅くなる黄昏期を持つ。図ではロジスティックカーブ的になる(【図8】)ハードウェア上コンピュータは午前を過ぎ午後の領域に入ったと思われるが、ソフトウェア上は未だ午前にいる。そこでソフトウェアに話を進め、私の専門(建築構造)との関連へと進みたい。

【図8】logistic curve:
通常物事にはゆっくり進行する黎明期、急速に発展する昼間期そして発展が遅くなり最終状態に近づく黄昏期が存在する。

2.1 ソフトウェア(通常はソフトと略称)の重要性

「コンピュータ、ソフトがなければただの箱」と言う川柳がある。ハードウェアと呼ばれるコンピュータの実体の機械部分に比べ、ソフトウェアと呼ばれるプログラム等は物としての実体はないが、川柳で言う通り、これがなければ、コンピュータは何の役にも立たない。人間の、身体(ハード)と心(ソフト)に喩える人もいるが、人間については、後で述べたい。(【図9】)

【図9】コンピュータも心(=ハード)身(ソフト)共に健全でないと役に立たない。

2.2 ソフトウェアの歴史

現在のコンピュータはAI(Artificial Intelligence 人工知能)とも呼ばれ、例えばチェス将棋碁等ルールの確定しているゲームでは世界の第一人者達を打ち負かして人間に勝る頭の良さを示している。

しかし、私のように初期のコンピュータを取り扱った者に取っては、ひとつひとつ懇切丁寧に動作の指示をせねば全く動かず、これ程頭の悪い者は珍しいと思わせる代物であった。

コンピュータを動かした初期のソフトは機械語で数字の0と1だけで書かれた。この0、1の並びが、メモリー上のある位置(=番地address)を指定し、そこにある数値を計算装置に移して多くの電気または電子素子のスイッチを開け閉めして演算をさせ、結果をメモリー上の指定した位置に記憶させ、再び次の計算を機械語で書かれたプログラムに従い実行、それを繰り返して最終結果を出力装置へ移し人間が理解できる形で示させる。その作業手順を逐一少しの省略も許さずに0と1だけで書いて行く。それがプログラムの作成である。これでは人間の負担が多過ぎ、もしプログラム作成時にミスを犯しても誤りを探すのは容易でない(【図10】)。

【図10】初期のコンピュータではプログラムもデータも皆2進法で書かれ、0と1の羅列であった。誤りを探すのに苦労した。

そこで0、1でなく人間の判り易い記号で書きその記号を機械語に翻訳するプログラムを作っておけば、機械が異なっても、記号で書いたプログラムは共通に使える。その様な意図で共通的に造られた記号がアセンブラー(Assembly Language、Assembleは組み立ての意)であり、例えば加算にはADDを記号に使う。実は、世界最初のノイマン型コンピュータEDSACでも10進数の記述を2進数に変換するアセンブラー的なプログラム言語も使用していた。アセンブラー等記号で書かれたプログラムをソースプログラム、それが機械語に翻訳されたものをオブジェクトプログラムと呼ぶ(翻訳の為のプログラムはtranslatorと呼ばれる)。どうせ機械語への翻訳プログラムを作るのなら、もっと人間がプログラムを書き易く間違い難くしたい。そこで、コンパイラー(Compiler、Compile は「編集する」の意)が出現した。例えば 数式A+B実行用プログラムをそのままA+B と書ければ便利である(この場合、一度で機械語に翻訳するより一旦アセンブラー等の低位の言語に翻訳しておき、これを更に機械語に直した方が、機械(ハード)の進化ごとにコンパイラー自体を書き直す必要がないので便利である)。

理系で多用されたコンパイラーの一つに1957年IBMのJ.バッカス等の開発したFortran(FORmula TRANslation)があり、最適化(最も簡便安定状態にする事)が考慮された世界初の完全のコンパイラーと言われ、その後改善も続けられた。

1960年にG.ホッパ-等の開発したCOBOLは事務計算用であり、異なった構成のコンピュータに適用可能で、1962年MITのメンバーはLISP(LISt Processor)としてコンパイル対象言語で記述されたソースプログラムを編集する(Self-hosting)世界初のコンパイラーを開発し、以後のPASCALやC、C++、JAVA、Python等の高水準言語へと繋いだ(【図11-1、2】)。

#include ‹iostream.h›

template‹class T› class junk {

private:

int inter;

T   templ_mem;

T   stor_val;

public:

junk(int i,T j): inter(i),templ_mem(j)

{cout ‹‹"***Inside C++ constructor" ‹‹ endl;}

 ~junk()          {cout ‹‹"***Inside C++ Destructor"  ‹‹ endl;}

void store(T *val){ stor_val = *val;}

void :print(void) {cout ‹‹ inter << "¥t" ‹‹ templ_mem ;

cout ‹‹"¥t" ‹‹ stor_val ‹‹ endl; }};

template‹class T› class temp {

private:

int internal;

T temp_var;

public:

temp(int i, T j): internal(i),temp_var(j)

{cout ‹‹"***Inside C++ temp Constructor" ‹‹ endl;}

~temp()           {cout ‹‹"***Inside C++ temp destructor"  ‹‹ endl;}

 

【図11-1】Fortran(cplus.h)から呼び出されるC++コード記述例

public void textField1_focus_focusLost(FocusEvent e) {

if( !defaultEventProc(e) ) {

try {

int val = Integer.parseInt( textField1.getText() );

if (val ‹ 100 || val › 500) {

MsgDlg("100以上500以下の値を入力して下さい","入力エラー");

textField1.requestFocus();

return;

}

} catch(NumberFormatException exception) {

MsgDlg ("数値以外の文字が入力されています","入力エラー");

textField1.requestFocus();

return;

}

return;

}

}

 

【図11-2】JAVA「textField1」のイベントに対するJava記述例

共用言語と同時に、目的を特化したプログラムも多数提供されている。後述の一貫構造計算やFEM(有限要素法)のソフト類(例えばOpenSees)がその例である。

コンピュータが進化し高速になり、プログラムをその様に組めば多くの作業を短時間に連続的にあたかも並列的に行なったかのように処理する事ができる。この様にコンピュータ全体を管理制御し、人間がコンピュータを使いこなす為のソフトをoperation system略してOSと呼ぶ。その初めは1970年発表のUNIXで、現在はパソコン、サーバ、スマートフォン、タブレット等機器に応じたOSがある。PC用にはWindowsが大きなシェアを占め、少数派だがMacには特性がある。

2.3 プログラム言語

我々が外国語を理解し使用する為には、少なくともその単語と文法を知らねばならない。コンピュータの高水準言語も同じである。

それは外国語程例外使用法がないにしても、精通するには時間と努力を必要とする。しかし、近い将来、我等自身の言語(日本語)で書いたり言ったりすれば、それを翻訳して我々の期待通りの事をしてくれる時代が来る(【図12】)と信じている。(次回に続く)

【図12】

今は、コンピュータは操作法を知らないと使えないし、操作を間違えるとトンデモナイ事も起こり得る。近未来のコンピュータは日本語で仕事を頼めると同時に重大事はコンピュータがそう判断して命令に誤りがないかを確かめてくれる様になる・・・。と私は期待している。

(参考)2進法:コンピュータでは主に2進法を使う。

我等は日常の演算には0〜9の10個の数字を用いる10進法を使う。それは人間の手の指が総計10本あり、物を数えるのに便利だからである。コンピュータでの演算では2進法を使う。では、何進法が最も優れているのか?10進法では10個の数字を使うが10以上の数は桁数を2,3....と上げる。2進法では0と1の2個の数字で桁数を多く使う。例えば10進法で1桁の数9は2進法では1001と4桁になる。一般化し$\small P$進法で$\small n$桁の数の何でも表現するには$\small p$と$\small n$の積$\small pn$個の札を準備して置く必要があり、これで$\small p$の$\small n$乗($\small =p^n$)の異なった数値を表現できる。そこでこれを一定数$\small N$とし($\small N=p^n$)これを表現するのに必要な札数を$\small x$とすると、$\small x$を最少とする$\small p$進法が、もっとも少ない札(電気素子)で一定数$\small N$を表現できるので最良と言えるだろう。

その様な$\small p$は

$$x=np$$

$$N=p^n$$

$$log_eN=nlog_ep$$

$$x=p\frac{log_eN}{log_ep}$$

$$\frac{dx}{dp}=log_eN\frac{log_ep-1}{log_ep^2}=0$$

$$\therefore log_ep=1$$

$$\therefore p=e=2.7182718.........$$

e進法はなく(【図13】)、2進法か3進法となるが、電気素子の場合、素子1個で電流のあるなしで0、1を表現できるので2進法が便利である。

【図13】

理論的にはe(=2.7182818….)進法がベスト!実際には2進法または3進法が有利である。
殊に電子機器ではスィッチ1個で通電中(1)とそうでない時(0)の2数が表現されるので2進法を使用する。