宿題で出題されました。パスカル変数はマシン上でどのように表現されていますか? たとえば、C では異なるマシンやコンパイラで異なる可能性があります。Java では VM があるため、プログラマは異なるマシンでまったく同じ表現が得られると想定できます。
しばらくグーグルで検索しましたが、パスカルに関する答えが見つかりませんでした。問題は、何かを変更する場合、パスカルの元のバージョンについてです。
ありがとうございました!
宿題で出題されました。パスカル変数はマシン上でどのように表現されていますか? たとえば、C では異なるマシンやコンパイラで異なる可能性があります。Java では VM があるため、プログラマは異なるマシンでまったく同じ表現が得られると想定できます。
しばらくグーグルで検索しましたが、パスカルに関する答えが見つかりませんでした。問題は、何かを変更する場合、パスカルの元のバージョンについてです。
ありがとうございました!
オリジナル (J&W) Pascal は非常に珍しく、ほとんどの人が知りません。ISO 7185 標準に合わせて少しクリーンアップされましたが、これらの変更 IIRC は主に、型の種類ではなく、スコープと型の同等性に影響します。
オリジナル (非 UCSD、Borland/Turbo 方言の 10 年以上前) Pascal には、マシンに依存する型がほとんどありません。1 つの型 INTEGER と 1 つの浮動小数点型、REAL、および列挙型、ブール値、文字などの非整数序数型のみ。Char は 8 ビットであることが保証されておらず、マシン語に依存していました。
Pascal はここで彼のメインフレームのルーツを示しています。ここでは、単語が 60 ビットのようなエキゾチックなサイズを持ち、サブワード アクセスを許可せず (たとえば、バイト レベルのアクセスですが、バイトの概念を知らない可能性があるため、それはストレッチです)、複数の文字がパックされていました。機械語に。(以下のパック配列を参照)。C は数年後、ミニをターゲットにしたため、その遺産の最悪の部分を回避しました。
整数型はシステムで最大の型であり、多くの場合、マシンが便利に実行できる最大の型です。より小さな整数サイズは部分範囲で構築され、符号なしの型はありませんが、これらは関連する部分範囲で定義できます (これらを効率的に実装するのはコンパイラ/VM 次第です)。
例: BYTE= 0..255;
配列はパックすることができ、使用する前に (pack() および unpack() を使用して) アンパックする必要があります。
stringtype はありません。通常は、char の固定サイズのパックされた配列が使用され、文字列の終わりを知らせるためにスペースを右にパディングします (したがって、末尾のスペースは難しいですが、これは単なる慣例であり、実行時のサポートはあまりないため、例外的なケースでは、単純に例外を作る)
ユニオンには、すべてのコンポーネントが個別のフィールド (重複なし) として含まれ、常に名前が付けられます。
ポインターはありましたが、任意のシンボルのアドレスを取得することはできず、新しいポインターは NEW でしか作成できませんでした。
したがって、一般に、元の Pascal は、合理的に「安全な」言語と呼ばれるものですが、そのように完全に設計されたわけではありません (そして、理論的には 100% 安全というわけではありません。また、TP よりも VMing にはるかに適していました (そして、それはサブセットではありますが、UCSD)。
Pascal とその後継者は、後に Java で普及した概念の偵察と見なすことができます。
C では、マシンやコンパイラによって異なる場合があります。もちろん、Pascal でも同様です。