アカウント名:
パスワード:
C言語でランタイムエラーになるものの多くがPascalではコンパイル時のチェックで引っかかるので助かるC言語でデバッガに頼らなければならないデバッグ作業がPascalでは関数の実行経路のトレースバックのチェックで済むことが多いので助かる(言語仕様で規定されているのではないが、Pascal系というかWirth系の言語のコンパイラ作成のお約束になっている機能がいろいろあって助かる)Modula-2やOberonもいろいろと勉強になった
PascalはLL(1)文法なので、文法エラーの指摘がわかりやすいのも助かりましたね。初期のCコンパイラの無茶苦茶大量のエラーを解読するのは難しかった。というか、あきらめて最初のエラーだけ取って再コンパイルしまくったり。プログラマーとして無能なほどコンパイル回数が多いと誰かが言ってたなあ。
TeXとかPhotoshopとか複雑で巨大なソフトをあの時代に作れたのも、Pascalの文法と実装のおかげかも知れませんね。
TeX の B巻(program)は読みました。最初のPascalの文法と機能は厳しかったですね。でも読みやすかったです。このストーリーとはズレますが、こんな大規模programも作れるのだと思いました。
> C言語でランタイムエラーになるものの多くがPascalではコンパイル時のチェックで引っかかるので助かる
この部分の意味が判らないのですが、Pascal のコンパイラはコードの静的解析を行っていて、静的解析で実行時エラー(ランタイムエラー)が検出できる、ってことですか?
コードの静的解析がまともに使える様になったのは2010年以降で、1980年代のコンパイラがそこまでの静的解析を実装できていたとは俄かに信じられないのですが一体何が「助かる」だったんでしょう?
当時のC言語は宣言されてない関数も呼べたりして引数の数や型が合わなかったら普通に暴走してたり(今でもできるかも)returnを書き忘れても何の警告も無かったりしたので、そういうのをちゃんと弾いてくれる、程度の意味でしょう。程度は低くても静的解析と言えなくもない。
> 当時のC言語は宣言されてない関数も呼べたりして引数の数や型が合わなかったら普通に暴走
当時のC言語はプロトタイプ宣言がなく、一方でPascalはプロトタイプ宣言(に準ずるもの)があった、と言う事ですか?
> 程度は低くても静的解析と言えなくもない。
プロトタイプ宣言のことでしたら、それは静的解析とは全く別次元の話です。
#4590507 とは別人ですが
> 当時のC言語はプロトタイプ宣言がなく、一方でPascalはプロトタイプ宣言(に準ずるもの)があった、と言う事ですか?
そうです。
>プロトタイプ宣言のことでしたら、それは静的解析とは全く別次元の話です。プロトタイプ宣言に限りません、C言語だと警告もなく素通しして暴走するけれどPascalだとエラーチェックしてくれるケースがたくさんありました。「Pascalは型に厳しい」みたいな話を聞いたこと無いですか?今の水準ですと全く厳しくないどころかむしろゆるゆるの部類ですが、CLU経由で各種OOPLに、間接的に関数型言語にも続く「型で静的なチェックを行う」流れを作ったのは間違いなくPascalです。
>プロトタイプ宣言のことでしたら、それは静的解析とは全く別次元の話です。プロトタイプ宣言が必須の言語仕様しか知らないとそう感じるだけでは?
>>プロトタイプ宣言のことでしたら、それは静的解析とは全く別次元の話です。> プロトタイプ宣言が必須の言語仕様しか知らないとそう感じるだけでは?
そうですかね?1995年に書かれた、静的解析ツールに関する論文(結構有名なやつ)でさえ- 静的解析ツールのアイデア自体は1970年代からある- C言語のプロトタイプ宣言程度の技術は静的解析とは言えないと書いてありますよ。
具体的にはこのpdfの2.1節の後半です。https://web.archive.org/web/20110927010304/http://www.ida.liu.se/~TDDC... [archive.org]
その論文の表現も"far from complete"で、「完璧とは言えない」であって「こんなもん静的解析じゃねーよ」とまでは言ってないようですが、何れにせよこのツリーで静的解析の定義を深堀りする意味はないでしょう。「コードの静的解析がまともに使える様になったのは2010年以降で、1980年代のコンパイラがそこまでの静的解析を実装できていたとは俄かに信じられないのですが」の部分が余計な仮定で、当時のC言語は遥かに酷かったので相対的に簡単なチェックでも充分「助かる」だったというだけの話。
> プロトタイプ宣言のことでしたら、それは静的解析とは全く別次元の話です。
「プロトタイプ宣言が無いため、静的解析ではチェックできることがかなり少ない」と書けば想像できるんじゃないでしょうか
#4590501が「静的解析」という用語を持ち出すから話がややこしくなってる気がする。コンパイラの仕様によってランタイムエラーは様々に起きるし、それを防ぐ技術をすべて「静的解析」と言ってしまってよいのかどうかは人によるだろう。
より多くのコメントがこの議論にあるかもしれませんが、JavaScriptが有効ではない環境を使用している場合、クラシックなコメントシステム(D1)に設定を変更する必要があります。
一つのことを行い、またそれをうまくやるプログラムを書け -- Malcolm Douglas McIlroy
Pascalは助かる (スコア:1)
C言語でランタイムエラーになるものの多くがPascalではコンパイル時のチェックで引っかかるので助かる
C言語でデバッガに頼らなければならないデバッグ作業がPascalでは関数の実行経路のトレースバックのチェックで済むことが多いので助かる(言語仕様で規定されているのではないが、Pascal系というかWirth系の言語のコンパイラ作成のお約束になっている機能がいろいろあって助かる)
Modula-2やOberonもいろいろと勉強になった
Re:Pascalは助かる (スコア:1)
PascalはLL(1)文法なので、文法エラーの指摘がわかりやすいのも助かりましたね。
初期のCコンパイラの無茶苦茶大量のエラーを解読するのは難しかった。というか、あきらめて最初のエラーだけ取って再コンパイルしまくったり。
プログラマーとして無能なほどコンパイル回数が多いと誰かが言ってたなあ。
Re:Pascalは助かる (スコア:1)
TeXとかPhotoshopとか複雑で巨大なソフトをあの時代に作れたのも、Pascalの文法と実装のおかげかも知れませんね。
Re:Pascalは助かる (スコア:1)
TeX の B巻(program)は読みました。
最初のPascalの文法と機能は厳しかったですね。でも読みやすかったです。
このストーリーとはズレますが、こんな大規模programも作れるのだと思いました。
maruken
Re: (スコア:0)
> C言語でランタイムエラーになるものの多くがPascalではコンパイル時のチェックで引っかかるので助かる
この部分の意味が判らないのですが、
Pascal のコンパイラはコードの静的解析を行っていて、静的解析で実行時エラー(ランタイムエラー)が検出できる、ってことですか?
コードの静的解析がまともに使える様になったのは2010年以降で、1980年代のコンパイラがそこまでの静的解析を実装できていたとは俄かに信じられないのですが
一体何が「助かる」だったんでしょう?
Re: (スコア:0)
当時のC言語は宣言されてない関数も呼べたりして引数の数や型が合わなかったら普通に暴走してたり(今でもできるかも)returnを書き忘れても何の警告も無かったりしたので、そういうのをちゃんと弾いてくれる、程度の意味でしょう。
程度は低くても静的解析と言えなくもない。
Re: (スコア:0)
> 当時のC言語は宣言されてない関数も呼べたりして引数の数や型が合わなかったら普通に暴走
当時のC言語はプロトタイプ宣言がなく、一方でPascalはプロトタイプ宣言(に準ずるもの)があった、と言う事ですか?
> 程度は低くても静的解析と言えなくもない。
プロトタイプ宣言のことでしたら、それは静的解析とは全く別次元の話です。
Re: (スコア:0)
#4590507 とは別人ですが
> 当時のC言語はプロトタイプ宣言がなく、一方でPascalはプロトタイプ宣言(に準ずるもの)があった、と言う事ですか?
そうです。
Re: (スコア:0)
>プロトタイプ宣言のことでしたら、それは静的解析とは全く別次元の話です。
プロトタイプ宣言に限りません、C言語だと警告もなく素通しして暴走するけれどPascalだとエラーチェックしてくれるケースがたくさんありました。
「Pascalは型に厳しい」みたいな話を聞いたこと無いですか?
今の水準ですと全く厳しくないどころかむしろゆるゆるの部類ですが、CLU経由で各種OOPLに、間接的に関数型言語にも続く「型で静的なチェックを行う」流れを作ったのは間違いなくPascalです。
Re: (スコア:0)
>プロトタイプ宣言のことでしたら、それは静的解析とは全く別次元の話です。
プロトタイプ宣言が必須の言語仕様しか知らないとそう感じるだけでは?
Re:Pascalは助かる (スコア:1)
>>プロトタイプ宣言のことでしたら、それは静的解析とは全く別次元の話です。
> プロトタイプ宣言が必須の言語仕様しか知らないとそう感じるだけでは?
そうですかね?1995年に書かれた、静的解析ツールに関する論文(結構有名なやつ)でさえ
- 静的解析ツールのアイデア自体は1970年代からある
- C言語のプロトタイプ宣言程度の技術は静的解析とは言えない
と書いてありますよ。
具体的にはこのpdfの2.1節の後半です。
https://web.archive.org/web/20110927010304/http://www.ida.liu.se/~TDDC... [archive.org]
Re: (スコア:0)
その論文の表現も"far from complete"で、「完璧とは言えない」であって「こんなもん静的解析じゃねーよ」とまでは言ってないようですが、何れにせよこのツリーで静的解析の定義を深堀りする意味はないでしょう。
「コードの静的解析がまともに使える様になったのは2010年以降で、1980年代のコンパイラがそこまでの静的解析を実装できていたとは俄かに信じられないのですが」の部分が余計な仮定で、当時のC言語は遥かに酷かったので相対的に簡単なチェックでも充分「助かる」だったというだけの話。
Re: (スコア:0)
> プロトタイプ宣言のことでしたら、それは静的解析とは全く別次元の話です。
「プロトタイプ宣言が無いため、静的解析ではチェックできることがかなり少ない」と書けば想像できるんじゃないでしょうか
Re: (スコア:0)
#4590501が「静的解析」という用語を持ち出すから話がややこしくなってる気がする。
コンパイラの仕様によってランタイムエラーは様々に起きるし、
それを防ぐ技術をすべて「静的解析」と言ってしまってよいのかどうかは人によるだろう。