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程違ってる訳ではありません。

2009年12月23日水曜日

メリークリスマス

Merry Christmas !!
私のブログには、似つかわしくない写真ですが、家内が作ったクリスマスリースです。
家内は、私と違って手を使って作るのが好きで、リースや結婚式のブーケなども作ったりします。

サンタクロースが、素敵なプレゼントを持ってくると良いですね

プログラミング言語について -Fortran-

この職業に就いてから多くのプログラミング言語について勉強しました。
Fortan、COBOL、PL/I、Pascal、アセンブラ、Basic、awk、Lisp、Prolog、VisualBasic、RPG、Perl、Java
などを使ったことがあります。これから、それぞれのプログラム言語について書きたいと思います。昔からのプログラミング言語を知ることで、過去の賢人がどのように考えて現在のような姿になったのか分かるかと思います。

今日は、まず、最初に触ったFortanについてお話しましょう。私は、あまりFortanを使ってプログラミングしたことはありません。大学の時の選択授業の「統計」でプログラミングで習った最初の言語になります。

プログラムは、偏差値を自動的に計算するものでした。当時は、今のように自分のパソコンなどなく、大学の計算センターで計算を依頼することになります。結果は、翌日に取りに行き、ストック用紙に印刷された結果を受け取るといったことになります。プログラムとデータは、当時は、パソコンのようなディスプレイ画面を自由に使用することができず、パンチカードに打っていました。

それまでCPU命令をそのまま記述するアセンブラ言語しかなかった時代に、IF文やDO文により手順を記述できるFortanは、高水準言語と呼ばれました。事務計算で利用されるCOBOL言語とともに、三角関数や指数関数が利用できるFortranは、科学技術計算で利用されました。

しかし、制御文としてDO文とIF文しか無かったために、do while制御やdo until制御を行おうとすると、必ずGOTO文が必要となりました。さらに、当時のプログラム開発では、フローチャートとよばれるチャートを使ってプログラム手順を記述することが標準されていましたが、GOTOを使うことで動作を制御することが普通に行われていました。私は、Fortranの最大の欠点は、この点であった気がします。

しかし、大量のプログラムを開発する上には、いろいろな人が勝手にGOTO文を使うようになるとプログラムをメンテナンスすることが困難になっていくことが分かってきました。そこで、プログラム制御方法としてdo whileやdo untilなどようなプログラム制御方法の型が導入され、GOTOレス-プログラム(GOTOを使わないプログラミングスタイル)によりプログラム開発する構造化プログラミングが開発されました。私が、ソフトハウスに就職した時が、この時代になります。

そして、構造化プログラミングが可能な言語として、PascalやCなどの言語が開発されました。

2009年12月21日月曜日

Ruby On Railsの勉強を始めました

Yawdba開発する上で、データベースを簡易的にWeb画面に表示するシステムとして最近注目されるようになってきたRuby On Railsについて、調べ始めました。
Ruby On RailsもYawdba同様に、できるだけ簡単にデータベースをWeb画面に表示するためのツールです。Ruby On Railsでは、基本としてオブジェクト指向によるプログラミングですが、Yawdbaでは、難しいプログラミングを知らなくても、簡単に開発できることを目指しています。
おそらく、Ruby On Railsでは、プログラミングを使って非常に複雑なロジックも開発できるとは思いますが、Yawdbaでは、複雑なプログラミングなしに、どこまでデータベーステーブルをWeb画面に表示できることを目指しているので、若干、目標となる点が違っているのかもしれません。
いずれにしても、Ruby On Railsの勉強をするため、Webからダウンロードして調べる予定です。何か、分かったらYawdba開発サイトにアップする予定です。
また、同じく、StrutsやASP.NETについても勉強したいと思います。