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週間に一回はアップするつもりですので、立ち寄ってコメントなど頂けるとありがたいです。