質問

そしてなぜそれを変えないのでしょうか?

編集:質問する理由は、私は emacs を初めて使用するため、Emacs を「プログラマの計算機」として使用したいからです。したがって、32 ビットおよび 64 ビットの整数を操作して、ネイティブ マシン上で動作するように動作させることができます。

役に立ちましたか?

解決

Emacs-Lisp は動的に型付けされる言語です。これは、実行時に type タグが必要であることを意味します。したがって、数値を扱いたい場合は、通常、数値を指定できる何らかのタグ付きコンテナーに数値を詰め込む必要があります (つまり、何らかのタグ付けスキームがなければ、実行時にポインタとマシン整数を区別する方法がないためです。

したがって、効率上の理由から、ほとんどの Lisp 実装は生のポインタを使用せず、記述子と呼ばれるものを使用します。これらの記述子は通常、ポインタ、ボックス化されていない数値 (いわゆる、 フィックスナム)、または他のさまざまなハードコーディングされたデータ構造の 1 つ (たとえば、NIL セルやコンス セルを特別にエンコードする価値がある場合もよくあります)。

ここで、明らかに、type タグを追加すると、その数値に完全な 32 ビットが残らないため、MIT スキームの場合は 26 ビット、Emacs の場合は 29 ビット、またはその他のビット数が残ります。タグ付けを使い切っていません。

さまざまな動的言語の一部の実装では、30 ビットまたは 31 ビットの fixnum を提供できるように、fixnum 用に複数のタグが予約されています。SBCL は Common Lisp の実装の 1 つであり、 これをしますか. 。ただし、これが引き起こす複雑さは Emacs にとって価値があるとは思いません。29 ビットの fixnum 演算ではなく、高速な 30 ビットの fixnum 演算が必要になる頻度はどのくらいですか? テキストエディタ Lisp コードをマシンコードにコンパイルすることさえしません (あるいはコンパイルするのでしょうか?)実は覚えていないのですが)?Emacs-Lisp で分散.net クライアントを作成していますか?それなら、Common Lisp に切り替えた方が良いでしょう。;)

他のヒント

残りの 3 ビットは、Lisp インタプリタによってフラグとして使用されます。(64 ビット マシン用に Emacs をコンパイルすると、より大きな整数を取得できます。)

他の人は、fixnum の幅が 29 ビットしかない理由についてコメントしています。ただし、プログラマー向けの電卓が必要な場合は、チェックしてください。 計算する. 。任意精度の整数、行列演算、単位変換、gnuplot によるグラフィックス、統計関数、財務関数、科学関数、RPN および代数表記、数式の簡略化などを提供します。これはすでに Emacs の一部なので、始めるには、「calc」の情報ノードにアクセスしてチュートリアルから始めてください。

他の 3 ビットはオブジェクトの種類のタグとして使用されます。これはかつて非常に普及していたので、多くの CPU アーキテクチャの命令セットにタグ付き整数の少なくとも一部のサポートが含まれていました。スパーク, アルファ, バロウズ, 、 そしてそのK-マシン 例えば。現在では、追加のハードウェア サポートなしで、Lisp ランタイムにタグを処理させるようにしています。歴史の概要を簡単に知りたい場合は、Sparc に関する最初のリンクを読むことをお勧めします。

多くの Lisp 実装では、ワード内のビットの一部がタグに使用されます。これにより、ガベージ コレクターなどは、推測することなく、何がポインターで何がそうでないかを知ることができます。

Elisp fixnum の大きさをなぜ気にするのですか?巨大なファイルもそのまま開くことができます。

私は Common Lisp インタプリタ CLISP をプログラマの計算機として使用しています。Common Lisp は、私がこれまで見たプログラミング言語の中で最もまともな数値処理を備えています。最も注目すべき点は、任意のサイズの整数を持っていることです。bignum および有理数。また、任意の基数の入力と bignum のビットごとの関数も備えています。Emacs 内から計算したい場合は、M-x シェルで CLISP を実行できます。おまけに、構文は Emacs Lisp で使用するものとほぼ同じです。

これは 32 ビット アーキテクチャにのみ当てはまり、ビルド オプションに基づいて変更できます。他のビットは、基本的なデータ構造のタグ付けに使用されます。

より大きな整数を含む 64 ビット ビルドを使用できます。また、任意の大きな整数演算用のパッケージもあります。

それとも、あなたは単に怒っていて重要な印象を与えようとして、修辞的な質問をしているだけですか...

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top