Emacs-Lisp - это язык с динамической типизацией. Это означает, что вам нужны теги типа во время выполнения. Если вы хотите работать с числами, вы, как правило, должны будете упаковать их в какой-нибудь теговый контейнер, на который вы можете указать (то есть «поместить в них»), поскольку нет способа отличить указатель от целого числа машины во время выполнения. без какой-либо схемы тегирования.
По соображениям эффективности большинство реализаций Lisp поэтому не используют необработанные указатели, а, как мне кажется, называют дескрипторами. Эти дескрипторы обычно представляют собой одно машинное слово, которое может представлять указатель, распакованный номер (так называемый fixnum ) или одну из различных других жестко закодированных структур данных (часто стоит кодировать NIL и cons-ячейки специально тоже например).
Теперь, очевидно, если вы добавите тег типа, у вас не будет полных 32 битов для числа, поэтому у вас останется 26 битов, как в схеме MIT, или 29 битов, как в Emacs или любом другом числе. битов, которые вы не использовали для пометки.
Некоторые реализации различных динамических языков резервируют несколько тегов для фиксированных значений, чтобы они могли предоставлять 30-битные или даже 31-битные фиксированные. SBCL является одной из реализаций Common Lisp, которая делает это . Я не думаю, что осложнение, которое это вызывает, того стоит для Emacs. Как часто вам нужна быстрая 30-битная арифметика с фикснумом, в отличие от 29-битной арифметики с фикснумом в текстовом редакторе , который даже не компилирует свой лисповский код в машинный код (или делает это? помнишь, собственно)? Вы пишете клиент на Dist.net в Emacs-Lisp? Тогда лучше переключитесь на Common Lisp! ;)