プログラミング言語 Icon & C# 入門




最初に

どうなんでしょう?ほぼ10年位前でしょうか。 日本中の会社が競ってITの導入を始めたのは。 当時はWindows95の時代でメールやワードから 使い始め、ぼちぼちエクセルの表に慣れぬ 手つきで数値を打ちこんでいたのが平均的な サラリーマンの姿だったと記憶しています。私もですが。 以来、 エクセルの関数とVBAからスタートして、 VB6,C,VC++6,Java,Delphi(Pascal)3.1,C#,Perl,PHP,Ruby, Python,Lisp,Scheme,SWIProlog,Haskell,ObjectiveCaml, Curl,Rebolとメジャーなコンピュータ言語から マイナーな言語まで次々と言語仕様を読みながら "HelloWorld"に毛が生えたようなプログラムを 書き続けて参りました。 車の好きな人に二種類あります。ドライブが好きな タイプと車のデザインやメカが好きなタイプです。 私はコンピュータ言語に関して典型的な後者の タイプです。ソフトやシステムを開発するより 言語仕様や文法、IDEの操作性に惹かれます。 従って「自慢じゃないですが」未だ過って一度も 実用的なプログラムを書いたことはありません。 (書いたプログラムで動かなかったことも ありませんが・・・「桐の一括処理」でも) で、最近ひょんなことからIconというレトロな 言語を知りました。なんと、オブジェクト指向では ないんです!awkに似たテキスト処理がメインだそうな。 アメリカの「アリゾナ州立大学」で開発されました。 (アリゾナって西部劇に出てくるサボテンの生えた 大荒原のあるところです。ご承知でしょうが念のため) 日本のWebでこの言語を紹介しているサイトは 以下の二つだけだと思います。: http://homepage1.nifty.com/kazuf/icon_lec/ 風つかいさんとなっていますが、ひょっとして niftyでスクリプト系言語の紹介をしていた 藤岡さんか? 最終更新が1998年です。 http://www.kmonos.net/alang/etc/icon.php そして稲葉さんの2003年のもの。 http://www.kmonos.net/ これが稲葉さんの本家です。関数型言語系が好き そうな?でも実用的なソフトを作るところは 私とは大違いですが・・・ では、この記事の意味を確認しましょうね。 1.「ここ」でIconプログラミング言語を勉強しても 実用的なソフトは開発出来ません。これには「かなり」の 自信があります。 2.でも頭が良くなるっていうかぁ、頭が良いとはどういう   ことかが分かるかも知れません。これは当然ですが   全く自信はありません。    次回はIcon開発環境の設定からです。乞うご期待! ってサイトからダウンロードして解凍するだけですが・・・ 以上 目次へ

環境の設定

プログラミング言語Iconの開発環境設定は簡単です。 アイコンホームページ: http://www.cs.arizona.edu/icon/ 私のパソコンのOSはWindows XPですから http://www.cs.arizona.edu/icon/v93w.htm からWin版Icon 9.3.2zipをダウンロード・解凍して インストールするだけです。 デフォルトでC:\WINICON\BINのフォルダーに実行 ファイルが生成されます。 プログラムスタートからWindows Icon->Wi_ Windows Iconをクリックすると,GUIが立ち上がります。 その上の欄に procedure main () write("今日はIcon!") end と打ち込んでメニューのRun->Runで実行出来ます。 DOS窓っぽい?のが開き: 今日はIcon! Strike any key to close console... と表示されたらOKです。 ただ、せめて予約語の色分けぐらいと思いますよね? Icon用のエディターで日本語!を色々探しました。 なんと、たくさんあるじゃないですかぁ! 画像アイコン用は・・・ で、ついに http://www.kaoriya.net/#VIM64 でVIMエディターを発見しました。これをインス トールしてgvim.exeを実行して下さい。 新規ファイルー>シンタックスー>対応形式ー>HIJK −>Iconを選んで下さい。 驚いたことにVIMは200以上の言語に対応しています。 Haskellは勿論,JAL(航空会社か?)とかJAM(セッション?)とか・・・ ご存知でしょうか?VIMはUNIX Viのクーロンです。 GUI版でも最初にi(Insert Command)を押さないと 入力出来ないので気をつけてくださいね。 それでもって、上記のIcon Home folderの\Binに パスを設定すれば、DOSモードで動きます。 デフォルトではNTICONT.exeが実行ファイルですが 私はicon.exeに名前を変えています。先程の プログラムをhello.icnの名前と修飾子で保存し、 そのフォルダに移動して、>icon hello で hello.exeが生成され、>hello で実行出来ます。 ものは試しに、Icon環境をインストールしていない パソコンでhello.exeをクリックしたら動きました。 CやC++から見れば当たり前ですが、VBやC#、その他 Perl,Rubyなどの言語とは違ってNative Codeを生成 出来る?・・・ 次回からいよいよIconプログラミングの「核心」?に 迫ります。ご期待下さい。 以上 目次へ

C#はIconを凌ぐのか?

いよいよこのIcon入門講座も第三回をむかえ、佳境に 入らんとしております。(苦境の間違い?・・・) Icon プログラミング言語も「Perlほど」ではありませんが 若干言語特有の癖があります。(癖の「全く無い」 言語も存在しませんが・・・) そこで文法や言語仕様を解説する際、他の言語で書けば こうなります,と説明した方が一般の方にはより分かり易い のではないかと考えました。 謂わば模擬コード代わりです。 風つかいさんは http://homepage1.nifty.com/kazuf/icon_lec/icon_lec.htm これにawkを使用しておられます。 Iconの時代性!を勘案するとbashか?それとも思い切って asmか?と考えました。 しかしながら、私は敢えて、逆に、C#でやってみようと 思います。 理由は: 1.Java,C,C++,VBなど広く使用されている言語から   「平均的に」最も近い言語仕様になっていること。   (それがC#のメリットでもありデメリットでも・・・) 2.今を時めくって最近はGoogleに押されてはいますが、   痩せても枯れてもマイクロソフト製の最新言語で   一応,ECMA,JIS規格になっている。(但しJavaを   抜けるかどうか?は、微妙ですが。) 3.対するはアリゾナ州立大製のオープンソフト言語で   1970年代後半から開発が開始され、1996年には既に   ほぼ固まってしまったIconです。   後継言語としてIdol?とかunicon?とかオブジェクト   指向の要素を取り入れた言語が開発されましたが、 いまいちパッとしておりません。 このIconライブラリを見て下さい。 http://www.cs.arizona.edu/icon/library/ipl.htm JavaやC#なんかとは質量とも比べものになりません、 が、 殆どGriswoldさん一人がコツコツと書かれている。 この彼のIconに対する情熱に感涙を禁じえないのは 言語フリークたる私だけでしょうか? 一つ間違えば、 Rubyの松本さんも同じ境遇だったか!(?) このIconとC#という状況的には,全く対照的言語を比較する ことにより、コンピュータ言語のさらなる深みを解明する ことをも本連載記事の射程に入っております。 なお、C#の開発環境についてはご承知とは思いますが, Visual C#Net 2005 Express版が無償で、この マイクロソフトのサイトからダウンロード出来ます。 http://www.microsoft.com/japan/msdn/vstudio/express/vcsharp/ 単にそれをインストールするだけでNetFrameWork2.0も 自動的に環境設定されます。 ここで、 皆さんに一つお願いがあります。 Iconの「いかにも」オープンソフトぽいツールと Visual C# NetのIDEを比較しないで下さい。 JavaのEclipse3.1のIDEなんかともです。 「雲泥の差があります。」 言語は見かけじゃありません。 言語仕様の整合性とその操作性こそが言語の優劣を 決めるファクターですからして。 さて、前置きはその程度にして前回のIconのプログラム hello.icnです。 procedure main () write("今日はIcon!") end これをC#で書くと hello.csです。 using System; using System.Collections.Generic; using System.Text; namespace hello { class Program { static void Main(string[] args) { Console.WriteLine("今日はC#!"); Console.ReadLine(); } } } となります。 具体的な差異説明に関しては、また次回ということで。 (でも、こうして比較すると、どちらが模擬コードなの? って感じがしないでもないが・・・) 以上
目次へ


ブルドーザーじゃサイクリングは出来ない?

さて、前回のC#のプログラム中下記の部分は全て Visual C# Netが自動生成したものです。 using System; using System.Collections.Generic; using System.Text; namespace hello { class Program { static void Main(string[] args) { } } } はっきり言えば殆ど自動生成… さらに、 Console.ReadLine(); をC#で付加するのであれば、Iconでも read() を書いてexeファイルのDOS窓操作におけるレベルを 統一しないと不公平ではないか? とAransk内部から厳しい批判がありました。 そこで、DOSプロンプトでC#を実行すべく.Net Framework SDK ベースで、必要最低限のコードを書き直してみました。 class 今日は{ static void Main(){ System.Console.WriteLine("今日はC#!"); } } //C#はクラス名、変数名、メソッド名にも //日本語が使える。(あまり使わないが・・・) //Mainのmが大文字,Javaよりは簡単な宣言。 //直接System.Consoleと規定すれば //using System;も不要となる。 再度IconとC#の比較をします。 procedure main() write ("Hello World! 今日はIcon!") read() end classの有る無し以外は、ほとんど変わらなくなりました・・・ では、前回Visual C# Netが自動生成したコードは何だったのか? かなり誇張した表現で、かつ大胆に簡略化して申し上げれば、 大規模システム開発用に本来は不要であるはずのコードが 付加されているわけです。 少し話はそれますが、programmingをする際に気をつけなければ いけないのは、個々の些細な部分にに囚われすぎることです。 何故囚われるのでしょうか? プログラムは詳細なしでは動かないからです。また、本質的な 部分を理解していなくてもプログラムは動くからです。 極端に言えば誤りなく詳細まで丸ごとコピーしたコードは作動します。 しかしながら、いくら理論を知悉していても「;」一つ抜けたら 動かないのがプログラムです。 本来、プログラミング作業そのものが「詳細志向」、 「木を見て森を見ない」傾向を助長することにご留意願います。 (前回のプログラムのusingで規定されていたGenericsの概念や 仕様は言語の結構広い範囲をカバーしておりそう些細なものでも ないが、それはひとまず置いておいて下さい。 どうしても、知りたい方はGoogleで「C#2.0 Generics」を検索 すれば、即、それを懇切丁寧に説明しているサイトは 見つかります。 ) 話を大規模システム用の言語論に戻します。 C++,Java,C#などの大規模システム構築用「ブルドーザー型」 言語がIconのようなスリムで個人のフィーリングを重視する 「サイクリング型」言語を駆逐しているのが現状じゃないで しょうか? Perlなんか当初はスリムなサイクリング型言語でスタート したものが、徐々に言語仕様を肥大化させブルドーザー型に 変身しつつあります。いや、生き残るために変身せざるを 得ないのではないでしょうか? 自然破壊を彷彿する、このようなコンピュータ言語業界の 状態が我々の思考にどのような影響を与えているのか? 一部の人々は「人力車」が「自動車」に駆逐されるのは、 時の流れの必然と、上記現状をこのように仰っております。 本当にそうなのか? IconとC#のコードを比較しつつ、さらにこれを解明して 行きたいと考えております。 以上
目次へ