Today アクセスカウンター Yesterday アクセスカウンター

ホワット・ア・ワンダフル・ワールド

私は知識に何ものかを付け加え,また他の人々がより多くのものを付け加える手助けをした --- G.H.ハーディ

全記事一覧 << 2008/07 12345678910111213141516171819202122232425262728293031 2008/09 >>

プロフィール

あろは (alohakun)

  • Author:あろは (alohakun)
  • 若槻俊宏 (WAKATSUKI toshihiro)

    連絡先 : alohakun ___at___ gmail.com
    mixi : http://mixi.jp/show_friend.pl?id=182927
    twitter : http://twitter.com/alohakun

    abstract

    プログラミングという人間の知的行為を体系化し,単なる職人芸ではなく,サイエンスにするための研究をしています.

    具体的には,等価変換計算モデルに基づいた,仕様記述からのプログラム合成の研究をしています.

    もっと噛み砕くと,プログラムの正しさをどのように定式化し,どのような枠組みで,どのように変換を進めていけば,正しさを保証したまま,効率的なプログラムを手に入れることができるのか,ということについて研究しています.

    キーワード : equivalent transformation, computation model, programming paradigm, formal specification, program synthesis













    あわせて読みたい


    この日記のはてなブックマーク数


    スカウター : ホワット・ア・ワンダフル・ワールド


    Map









    FC2 BLOG RANKING

FC2カウンター

ブロとも申請フォーム

この人とブロともになる

ホーム

GNU Pascal Compiler は素晴らしい

2006/09/29(金) 17:34:21

というか,標準 Pascal 自体が,標準 C とは比較にならないくらい素晴らしいような気もしますが,GCC (コンパイラコレクション) の gpc ではさらに

1 Some of GPC's most interesting features.

From Standard Pascal: Many popular Pascal compilers claim to extend Standard Pascal but miss these important features.

# Conformant array parameters – the standardized and comfortable way to pass arrays of varying size to procedures and functions. [Example]
# Passing local procedures as procedural parameters – with full access to all variables of the “parent” procedure. [Example]
# Automatic file buffers and standard Get and Put procedures. Read ahead from files without temporary variables. [Example] This allows you, for instance, to validate numeric input from text files before reading without conversion through strings. [Example]
# True packed records and arrays. Pack 8 Booleans into 1 byte. [Example]
# Internal files. You don't have to worry about creating temporary file names and erasing the files later. [Example]
# Global goto. (Yes, goto has its place when it is not restricted to the current routine.) [Example]
# Automatically set discriminants of variant records in New. [Example]
# Sets of arbitrary size. [Example]
やっぱり,「流行らなかった」というのは,言語の進化においては負の相関関係を生じさせるのでしょうかね ? 無責任だからこそ,リベラルになれたというか.もちろん,もともとしっかり設計された言語だった,というのもあるのでしょうが.

特に注目すべきなのは

Passing local procedures as procedural parameters – with full access to all variables of the “parent” procedure.
(手続き引数としてのローカル手続き渡し --- 親手続き内のローカル変数に全てアクセスできる)

これって,クロージャ以外の何者でもないような… 最近ようやく Java とかいうトラディショナルな言語に取り入れられるようになったとかならないとかいう話アルよ.あれれ ?

まぁ,手続きや関数を直接返すことはできないみたいですが.

いろいろ制限がきつい感じですが,こういう高階手続き程度は普通に書けるみたい.


procedure ForEach (p: PList; procedure Proc (var Element: TList));
begin
while p <> nil do
begin
Proc (p^);
p := p^.Next
end
end;



何気にインナーにテンポラリファイル作れるとか, boolean 8 つを 1 byte にパックできるとかって便利かも.

ていうか,本物の大域 goto があるってのが一番衝撃的… そんなもん含めちゃっていいのか ?

Extended Pascal (それでも多くのコンパイラがサポート.gpc は「だいたい準拠」らしい) に至っては,任意サイズで自由に連結とか可能な文字列型とか,2 から 36 までの自由な基数を選べる数リテラルとか,可変長配列とか.

Delphi や gpc 独自拡張まで含めると,CPU/IO に自在にアクセスできるわ,配列同士を + とかできるわ,抽象オブジェクトにメソッド,gcc とか他の言語のオブジェクトやライブラリと自由自在にリンクできるわ,gdb 使えるわ (完全ではないらしい),正規表現/任意精度演算 (GMP ライブラリ)/メモリリーク検出/MD5/プロセス生成/ファイルアクセスいろいろできるみたい.

う〜ん,今研究室だから試せないけど (なぜか cygwin の gpc はリンクでこける),そのうち試してみよう.

これで GC があったら,普通に Java よりも使えそうだ.ていうか,gcj でコンパイルしたモジュールともリンクできるのかね ?

まぁ,多相型が扱えない (例えば,型ごとに foreach を書かないといけない.SICP では,この点を指して,pascal は総称関数を扱えないピラミッドだ,と scheme に散々叩かれている) という致命的な問題点もあるのだけど.あんまり Pascal に理想を求めても,…ねぇ ?

FreePascal との互換性はどこまであるのだろう.PKU では, gpc は使えないからなぁ… FreePascal は Delphi 言語 (Object Pascal の方言.ISO Pascal は無視) の実装で,gpc は ISO Pascal の実装という感じらしい.GNU らしく拡張しまくりだから,限りなく曖昧になってるけど.

それにしても,gpc のマスコットキャラはキモすぎる.



[Gnu and Blaise Pascal]


Pascal/PKUTB:0CM:0 このエントリーを含むはてなブックマーク | livedoorクリップ livedoorクリップ BuzzurlにブックマークBuzzurlにブックマーク newsing it!

PKU 始めました

2006/09/27(水) 21:07:13

私もようやくだいぶ前に収束したブームに追い付くべく,PKU を始めてみました.

Welcome To PKU JudgeOnline

言語は C/C++/Java といろいろ選べるのですが, ここはもちろん Pascal !

とりあえず,標準入力から 2 つの数を受け取って結果を表示という,非常にどうでもいい問題を解いてみる.

a + b problem

まず,コンパイラのインストール.PKU に合わせて,ここでは FreePascal をチョイス.

# apt-get install fp-compiler fp-utils fp-docs fp-ide

なにげに,Pascal プログラムファイルにつける拡張子がよくわからない… とりあえず,テキトーに .pas とか付ける.どうせオンラインジャッジだから,ファイル名はどうでもいい.


program p1000(Input, Output);

var a,b:Integer;
begin
Readln(a, b);
Writeln(a + b);
end.


というか,サンプルプログラムコピペですな.end が,実に Ruby らしい趣があって素晴らしいですね.これで慣れておけば,僕も立派な Rubyist に成れるかもしれません.


そもそも,何で Pascal を使ってみようかと思ったかというと.YT さんがコメント

ゲーム&&オブジェクト指向プログラミング / 塚越 一雄 (著) [asin:4874085644]

言語への偏愛が感じられる本を語る上でこれは外せません。C++とTurboPascalの両方でゲーム(コンソールで動く思考ルーチンが全てみたいなやつ)の製作を通じてオブジェクト指向を説明する本なのですが、このうち「C++」「ゲーム」「オブジェクト指向」は全てTurboPascal本を書く為のカモフラージュしかし手抜きは無し(全ソースがC++とTurboPascal両方に書き下されてます)という出版界の事情と著者の不屈の意思に満ちた良本です。

ほう,そんな素晴らしい人が.

なんとなく,Pascal とか Delphi とか PHP とか HSP とかの素晴らしさってのは,信者がいないってことだと思っていたのですが.日本語 Programming 言語 「ひまわり」 とかの作者の素晴らしさは,そこにあるというか.やりたいことがあって,ライブラリと開発環境があったから,とりあえず書いてみました.的なやわらかいノリが素敵だと思います.

J ■ Delphi

あと、こういうのって調べようにもソース公開されてないんだよな…と、思ったら、http://hima.chu.jp/download/download.htm普通にダウンロードのとこに置いてある。惚れそうだ。

中身は…なんと、Delphiじゃないですか。

Delphiユーザってなんか信者とかの危険な匂いが全然無いような。「Delphiで書いてあります。Delphiで書いたからこそ〜ほげほげ〜」みたいな話を絶対しない。

僕は〜言語万歳 (マンセィ) な人ってのは,かなり苦手なので (特に Java とかアレとかソレとか).なぜかジェーンスッポスッポ先生は大好きなんですが.それは C++ にはある種のコンセンサスがあるような気がするから.みんな必要悪だとわかって使っているというか.

対照的に,某言語群とかにありがちな,一見中立な立場で広い視野で公正に批評しているかのように見せかけつつ (というか,本人達はマジなのかもしれない),最後には必ず某言語を推すような某人達は危険だと思うのですよね.あの類の言語愛ってのは,結局のところナルキシズムなので.

歴史上最も酷い悲劇の多くは善意から生まれたと,C++ の生みの親であるじぇーんすっぽすっぽ先生自らがおっしゃっておられるというのは,いろいろ素晴らしいと思います.きっと先生のそのような人徳が,僕等の心を引き付けてやまないのだと.

Bjarne Stroustrup Interview about C++

う〜ん,しかし,なぜ Pascal だとあまり嫌悪感が無いのか.

やはり Pascal は,教育用言語という割りきりから生まれたため作者のニクラウス・ビルト先生の個人的思想が薄い言語だからなのかもしれない.単によく知らない言語だから,という説も有力ですが.

どうせなら,FORTRAN を覚える方が,まだ実用性はあるかもしれないけど.FORTRAN は科学技術計算 HPC の分野では最強言語の名を欲しいがままにしてますから.

しっかし,Pascal は情報が少なすぎる… 文字列の入力さえよくわからん.fgets みたいに,入力文字数の制限とかはしなくても良いのかね ? いろいろ謎.
古本屋で Pascal 入門でも捜して来るか… 100 円とかで売ってそうだ.


というか,想像以上に Pascal チャレンジャーが多いことが気が付いて,飽きてしまった.終了.

(今時のこらえしょうの無い若者管理人)

本当に大切なものは

夢とか 理想とか そんな大げさなものじゃなくて

もっとささやかで つつましい

貧弱でみすぼらしいけど

もとめれば いつでもとなりにいてくれた

そう,君だったんだなぁ

scanf()


(秋の夜長のポエミー管理人)

どうでもいいけど,なんで Pascal があるのに,Ada が無いんだ ?

いなくなってしまった言語のこと… ときどきでいいので 思い出してください

というか,リファレンスマニュアルを眺めていて気が付いたのだけども,ライブラリの数がなにげに凄いような.実は FreePascal はとても素晴らしいのかもしれない.なぜか fp-ide がちゃんとうごかないんだけど,これが動けば Delphi ばりに素敵な環境が Linux で手に入るのかもしれない.Delphi とか使ったことないけど.




う〜ん,ほぼ丸一日 Pascal の情報を探していたのだけど,matrix 演算をはじめとして,あれだけいろいろライブラリがありながら,なぜか FreePascal の標準ライブラリ (Standard Unit) に,多倍長演算は無いらしい.

# 非標準というか,FreePascal.org に投稿されたライブラリの中には mpcalc とかがあるみたい.

いや,PKU 1001 のためなんだけど.

というか,一問目と二問目の難易度差があり過ぎのような… 難易度というか,面倒臭さか.Java だったら Bignum の乗算するだけなんだけど.

どういうことなのだろう.これはやはり,問題に合わせていろいろな言語を使ってみよう ☆ という啓示なのだろうか.

やはり,ここらへんの言語を触っていると,Java とか Ruby の (ライブラリの) 素晴らしさを実感します.

それにしては,やけに Pascal のチャレンジャが多いような… 謎.当初は,Pascal にもライブラリがあるからだと思ったのですが,文字数からすると,正攻法で文字列で入力取って自前で乗算手続きして文字列で出力みたいな感じだろうと思う.Pascal の writeln も,かなり癖があるから… 浮動小数点は指数形式で表示される (表示する桁数を指定すれば,普通の 10 進形式も可能) とか.どのみち無限精度の表示はできないから,同じなんだけど.

強い型付けの言語だから,printf/scanf 相当の関数も無いみたい.read は,パスカル文字列型の,最初に指定した数 (str:string[10] とか) ぶんだけきっちり読みこまれるという… なんだかいろいろ慣れないですわ.

もちろん,C より良いところもいっぱいあるんだけどね.配列宣言とかの文法の一貫性とか部分範囲型とかは非常に素晴らしいと思う.なんてったって,誇りと伝統の LL(1) 文法だし.PDP11 マクロアセンブラの末裔とは,血統が違う,血統が.Pascal は生まれ付いての貴族なのだ.

あと,FreePascal は,演算子のオーバーロードとか普通にできて,なにげに凄い.クラス定義とかもできるしインタフェースも使える,気分は Pascal++ というか.というか,名前だけで,これはもう Pascal でも何でも無いような.GNU C みたいに.Borland Pascal というか.

ああ,PKU で Ada が使えたら… たぶん bignum とか普通にありそうだ.

(Java を使ったら負けだと思っている 23 歳)

というか,Java だけ全ライブラリと処理系がセットになってるっていう仕様がズルいよなぁ.C++ も STL が使えるか.

裸一貫でがんばる C はエライ ! (Free)Pascal は無駄にデカイなぁ… やはりお坊ちゃんだよ.




あー,あと,Pascal は,列挙型 (というか,任意の順序型) を配列の添え字にできます !!!

Pascal 入門 : データ型

OCaml に勝った ! (んなこたーない)

というか,何気に OOPascal と D は良い勝負のネイティブ言語なんじゃね ?

The D Programming Language : 他言語との比較2

Delphi だけど.

ひじょうにどうでもいいな.
Pascal/PKUTB:0CM:2 このエントリーを含むはてなブックマーク | livedoorクリップ livedoorクリップ BuzzurlにブックマークBuzzurlにブックマーク newsing it!

最近のコメント

リンク

このブログをリンクに追加する

最近のトラックバック

人生の残り日数

日本人男性の平均寿命は 28700日.

RSSフィード

カテゴリー