2010年1月26日火曜日

プログラム言語について -アセンブラ-

今日は、アセンブラについてお話します。アセンブラとは、コンピュータのCPUが動作する機械語と1対1に対応するものです。FortranやCobolと言った高級プログラム言語が人間に分かり易く設計されているのに対し、アセンブラは、機械に分かり易く設計されていると言った方が分かり易いかも知れません。
初期のパソコンでは、MS-DOSやCP/MなどのOSとアセンブラしかなく、FortranやCobolなどのコンパイラが提供されていませんでした。そのため、これらの開発環境では、場合には、このアセンブラを使ってプログラムを書いていました。
私もCPM(8ビットのパソコン用オペレーティングシステム)で、Basicインタプリターやデータ入力システムなどを開発しました。
通常のCPUでは、メモリからCPUが持っているレジスタにデータを取り出したり、レジスタの内容をメモリに書き戻したり、レジスタ上で演算(比較を含む)などを行います。
通常は、命令と呼ばれる部分(レジスタ同士の計算、メモリからレジスターへのロード、レジスターからメモリへの書き込み)とオペランドと呼ばれる部分(命令の対象となるレジスタやメモリを指定する)から構成されます。
最初にソフト会社に入った時の教育でミニコンでのアセンブラプログラム教育がありましたが、全く動作しませんでした。その後、CPMでデバッガーが会いアセンブラでのプログラミングできるようになり、最後には再帰呼び出しのプログラムもアセンブラで書くようになり、結局、昔のAPPLE IIに搭載されていた6502, Z80,インテル8086,モトローラ68000,SunのSPARCチップなどのアセンブラによるプログラム作成を行いました。
また、アセンブラでプログラムを書くようになると、それぞれのCPUの特色が分かり、その点もメリットがあったと今でも思っています。

アセンブラによるプログラムを行うには、非常に根気の要る作業で、プログラマー35才定年説も個々から出たのかもしれません。しかし、現在では、javaなどの高級言語のお陰で、私のような実際の定年近くになる老人でもプログラムが可能になっています。



2010年1月17日日曜日

プログラム言語について -Pascal-

私がソフトウェア会社に入社した1978年当時、大型ホストコンピュータのプログラム言語としては、以前にお話したFortranやCobol、PL/Iが主なプログラム言語でした。
その後、数年でパーソナルコンピュータ(パソコン)が販売されるようになり、このパソコン用の言語としてPascal処理系が搭載されるシステムが販売されました。有名なものがAPPLE Pascalですが、これは、UCSD(カルフォルニア大学サンディエゴ分校)で開発されたUCSD-PascalをAPPLE上で動作させたものになります。
なお、UCSD-Pascalについては、本ブログの
をご覧ください。
このUCSD-Pascalは、起源を辿ると、チューリッヒ工科大学のニクラウス・ヴィルトが開発したP4 Pascalを元に開発されたようです。P4パスカルは、コンパイラによって生成されたPコードと呼ばれる仮想的なマシンコードと、この仮想マシンコードで記述されたプログラムを実行するインタプリターから構成されています。ちなみに、この仮想マシンコードを処理するインタプリターを各CPUに合わせて開発することで、様々なコンピュータ上で動作させたのがUCSD-Pascalとなります。この仮想マシンコードを使った処理は、Javaに引き継がれています。

Pascalの特徴は、プログラミング作成のために必要となる制御文(for文、do-while文, repeat-until文)が用意されており、構造化プログラミングを実現するツールとなる点でしょう。また、通常のシステムプログラミングで必要となるポインターが使えることも大きな特徴です。また、変数は、基本的にオートマチック変数(手続き内だけに有効となる変数)であり、より信頼性の高いプログラミングが可能となります。
これらの強力な機能により、システムプログラミング言語としてパソコンを中心に使われるようになりました。

しかし、Pascalの弱点は、分割コンパイルによるプログラム開発(大きなプログラムを、いくつかの部分に分割して開発し、それぞれ開発した部品をリンクにより結合するプログラム開発)が、初期のPascal仕様には無かったことが弱点でした。
また、Pascalは、最初、教育用のプログラム言語から出発したことから、データ変数の扱いなど、なるべくコンピュータの処理系に依存しないように定義されており、ビット演算などの処理が煩雑であること等も弱点の一つです。

その後、パソコンなどのシステム言語として利用されたPascalは、より記述するコード量が少なくて済み、かつ、ビット演算などが簡単に行えるC言語に移行されました。

2010年1月9日土曜日

ASP.NETでWebシステムを開発してみました。


様々なWebシステムの特徴を調べるために、典型的なWebシステムをそれぞれの次のようなシステムで開発してみました。


まずは、ASP.NETを使ってみました。ASP.NETは、htmlを拡張したページをWebサーバー上に保存しておくと、IISなどのWebサーバーでは、このページのASP.NETで拡張した部分をサーバー上で処理して、htmlページを作成し、クライアントに送信するものです。詳しくは、Yawdbaのページをご覧ください。

Webアプリケーション開発に便利なタグ(カレンダー、ツリーメニュー、ログイン)が用意されていること、htmlを拡張したASP.NETページデータ作成にするための専用のエディターが用意されれいることなどにより高い生産性を実現できる点が、ASP.NETの特徴と言えます。
しかし、最近のシステム開発の潮流であるMVC(Model, View, Control部分に分割して開発する手法)には、準拠していません。上記の専用エディターでは、データベース参照や参照結果をテーブルに表示するためのルールなどまで記述する必要があります。このため、画面設計を専用のデザイナーに任せることができません。
ASP.NETでのWeb開発では、エディターを使って簡単に開発はできます(SQLコマンドを知る必要もありません)が、エディタでの操作を記録する方法がなく、内容を確認することが困難である点が欠点といえます。いずれにしても、ASP.NETで用意されているコンポーネントを熟知して利用することがポイントでしょう

2010年1月3日日曜日

プログラム言語について -PL/I-

私がソフト会社でシステムの開発をはじめた時に習ったのが、PL/Iでした。PL/Iは、IBMが開発したプログラム言語であり、それまで使用されていた科学計算で使われていたfortranと、事務計算で行われていたcobolの機能を足して、すべての計算分野で万能となるプログラム言語を目指したものです。PL/Iとは、Program Language Oneを意味しており、IBMが付けた野心的な名前といえます。PL/Iは、コンパイルに必要となるメモリなどの資源を大幅り必要となるため、あまり普及はされませんでしたが、日本IBMのユーザでは、PL/Iで書かれたプログラムが多かったと聞いています。

PL/Iは、fortranにあった様々な数学関数や算術関数が用意されていることと、cobolにあった10進数表現が導入されたことや集団項目などの構造体が導入されています。さらに、システムプログラムを開発するためにポインターや動的メモリ確保等の機能が追加されています。

ポインターや動的メモリ、オートマチック変数などがあり、当時では強力なシステムプログラム言語といえます。しかし、万能の機能を持っているためにプログラム言語が非常に大きくなっており、コンパイルに非常にに時間がかかってしまうなどの問題があり、普及しませんでした。ちなみに、2000行のプログラムをコンパイルするだけでも、メモリを大きく利用するために、投入ジョブのプライオリティが下がり、コンパイル終了までに半日ぐらいかかってしまいました。

ちなみに、C言語が使われる前には、PL/I言語のサブセットであるPL/Mでシステムプログラムが開発されていました。

Rubyの勉強その後

Rubyの勉強を始めて約2週間経ちました。本などでは、「Instant Rails」による開発方法や統合開発環境の「Eclipse」や「Aptana RadRails」を使った開発などがあります。
勉強で使用する開発環境として、「Eclipse」では、必要なプラグインなどの依存関係が難しいので、Ruby On Rails向けの開発環境として開発されている「Aptana RadRails」を使って開発をトライしました。しかし、どう言う訳か上手くいきませんでした。ひょっとしたら必要となるRubyやRuby Railsでの組み合わせで知らないところがあるのかも知れません。
そこで、仕方なく「Instant Rails」によって、簡単な社員データベースを作ってみました。感想とすると、なるほど、コーディングをあまりすることなく簡単にデータベースシステムを開発することができました。
これは、コーディング部分がInstant Railsが持っているデフォルトの動作と違うところだけをコーディングすれば良いという所がミソのようです。特に、データーベースに対する操作が、通常のSQLコマンドを介するのではなく、AR(Active Record)のインタフェースで行われており、このインタフェースで多くの標準的な操作がデフォルトとして定義している点がコーディング量を減らすのに寄与していると思います。

Ruby On Railsでは、標準的な操作がデフォルトとして定義していますが、逆に、使いこなすためには、このデフォルト動作について十分知る必要がある点が他のWebシステムと異なる点かと思います。
特に、記述方法などについて言うと、インタフェースがまだ固まっていないところもあり、バージョンによっては、Rubyの書き方が変更されている点が気になるところです。

なお、ASP.NET、RubyOnRails、Struts、 Yawdbaなどでどのように開発方法が異なるか、比較を開始しました。次は、Strutsについても勉強するつもりですが、結果については、Yawdbaのサイトに掲載する予定にしています。掲載時には、ご連絡しますので、楽しみにして下さい

2010年1月1日金曜日

明けましておめでとうございます。


あけましておめでとうございます。
昨年の立ち上げたこのブログも6ヶ月経ちました。昨年は、ブログの内容は、コンピュータの話が主でしたが、今年は、内容をもっと広げたいと思っています。あまり、頻繁にアップできませんでしたが、今年は、1週間に一回はアップするつもりですので、立ち寄ってコメントなど頂けるとありがたいです。

2009年12月27日日曜日

プログラム言語について -COBOL(1)-

ソフト会社に入社して最初に教わったCOBOLについてお話しましょう。

それまでプログラム言語であったアセンブラとfortranが、プログラムの処理ロジックや計算ロジックを記述する言語として開発されていました。その後に開発されたCOBOLでは、事務計算(会計や財務などの計算)向けの言語として開発されました。

それまでの計算機では、2進数の数値しかありませんでしたが、COBOLでは、10進数の数値が追加されて、計算誤差が発生しない10進数の数値が使えるようになりました。
例えば、2進数で0.1を表現しようすると
0×2-1 + 0×2-2 + 0×2-3 + 1×2-4 + 1×2-5 + 0×2-6 + 0×2-7 + 1×2-8 + 1×2-9 + …
となってしまい、2進数の小数表現が不可能となります。このため、利率の計算等で全く誤差が発生しないようにすることが不可能です。COBOLで導入された10進数の数値は、1バイトに1桁の数字を割りあて、10進数の計算をコンピューター上で実現しているので計算誤差が発生しません。

さらに、COBOLでは、プログラム自身がドキュメントとして使用できように、英文で文章を書くように処理を記述できるようになりました。プログラム記述では沢山のコードを書かなければなりませんが、fortranやアセンブラに比べ、プログラムソースを見れば、処理内容が分かる点が改善点となります。

しかし、COBOLはCODASYLによって定義されたCOBOL言語を元に、各コンピュータメーカーが独自に拡張をおこなったため、プログラム間の互換が完全に保たれなくっっているのが弱点となっています。特に、対話型に画面操作を行う処理、レポート作成処理、データーベースのアクセス方法などについて、各メーカー間で互換はありません。また、COBOLのもう一つの特徴である構造体を使ったコーディングでは、各処理系のメモリ配置や数値の構造を知った上でコーディングする必要があるので、すでに作れているプログラムを移行する際には、十分注意する必要があります。
このため、COBOLは、各社での互換のあるプログラム言語のように思われていますが、他のシステムに移行する際には、全部の処理を確認しなければ移行は不可能となります。オープンCOBOLと称するコンパイラーでも移植のためには、全ての処理を見直す必要があります。

C言語では、Unixで開発されたC言語を、各メーカーでそのまま移植しているケースが多く、また、共通ライブラリも各メーカーで同様の関数が用意されていることから、あまりこのようなことは発生しません。もっとも、C言語でもウィンドウ制御のプログラムが各メーカー毎に違うことはあるとは思いますが、COBOL程違ってる訳ではありません。