OberonCore
https://forum.oberoncore.ru/

BlackBox 64
https://forum.oberoncore.ru/viewtopic.php?f=2&t=2439
Страница 1 из 4

Автор:  Борис Рюмшин [ Понедельник, 15 Март, 2010 21:25 ]
Заголовок сообщения:  BlackBox 64

Товарищи, всё таки интересно.
Давайте прикинем, что нужно менять, если переходить на 64 бита, кроме непосредственно кодогенерации.

По изменениям в КП, сразу напрашивается перевод INTEGER на 64 бита - ибо машинное слово. За ним идёт SET. Что ещё? Нужно всю систему типов ведь тогда двигать... LONGINT в 128 выводить (тогда поддержка на SSE ляжет, а сейчас он при помощи FPU обслуживается)?

Какие есть соображения?

Автор:  Илья Ермаков [ Понедельник, 15 Март, 2010 21:34 ]
Заголовок сообщения:  Re: BlackBox 64

Смена разрядности целых, на самом деле, всегда небезболезненна.
И неизвестно, каким боком может выйти (какие где допущения в коде сделаны).

Отсюда вопрос: а если не двигать целые?
Да-да, я знаю, что "по-хорошему надо двигать", но всё-таки.

Автор:  Info21 [ Понедельник, 15 Март, 2010 22:04 ]
Заголовок сообщения:  Re: BlackBox 64

Целые, как и SET, ни в коем случае нельзя трогать.
Ни по-хорошему, никак.
Они были зафиксированы для переносимости, и это должно быть сохранено.

Если нужно 128 бит -- это HUGEINT.

Автор:  Илья Ермаков [ Понедельник, 15 Март, 2010 22:50 ]
Заголовок сообщения:  Re: BlackBox 64

Да, я бы не двигал.

Автор:  kemiisto [ Понедельник, 15 Март, 2010 23:04 ]
Заголовок сообщения:  Re: BlackBox 64

Эх, было бы вообще здорово, если б само название типа явно указывало количество отводимых бит под хранение (INT32, INT64, ...). А так, да, "фиксированные" типы - добро.

Интересно, кстати, чем вызван интерес к 64-битному BB...

К сведению, следующая версия Delphi вновь будет только 32-битной. Негодование нарастает. Зато обещают кросс-платформенность...

Автор:  Борис Рюмшин [ Понедельник, 15 Март, 2010 23:23 ]
Заголовок сообщения:  Re: BlackBox 64

Info21 писал(а):
Целые, как и SET, ни в коем случае нельзя трогать.
Ни по-хорошему, никак.
Они были зафиксированы для переносимости, и это должно быть сохранено.

Это ещё почему?
INTEGER и SET опираются на машинное слово - как их не двигать?? Операции усложнять тогда тривиальные?

И для совместимости с чем? У КП - только с Java. Больше ему не с чем быть совместимым. А речь именно про КП.

Автор:  Иван Горячев [ Вторник, 16 Март, 2010 03:04 ]
Заголовок сообщения:  Re: BlackBox 64

Борис Рюмшин писал(а):
Это ещё почему?
INTEGER и SET опираются на машинное слово - как их не двигать?? Операции усложнять тогда тривиальные?

И для совместимости с чем? У КП - только с Java. Больше ему не с чем быть совместимым. А речь именно про КП.

С самим собой:
Component Pascal Language Report писал(а):
Appendix C: Domains of Basic Types

Type Domain

BOOLEAN FALSE, TRUE
SHORTCHAR 0X .. 0FFX
CHAR 0X .. 0FFFFX
BYTE -128 .. 127
SHORTINT -32768 .. 32767
INTEGER -2147483648 .. 2147483647
LONGINT -9223372036854775808 .. 9223372036854775807
SHORTREAL -3.4E38 .. 3.4E38, INF (32-bit IEEE format)
REAL -1.8E308 .. 1.8E308, INF (64-bit IEEE format)
SET set of 0 .. 31

В КП INTEGER - именно 32-битный, поскольку никакого другого целого типа указанной разрядности в нём нет. И куча кода в самом ББ пользует INTEGER, неявно предполагая его 32-битность (тот же Stores, весь Host). По хорошему то оно конечно надо, но нельзя.

Автор:  Иван Горячев [ Вторник, 16 Март, 2010 03:38 ]
Заголовок сообщения:  Re: BlackBox 64

Просмотр Сообщения о языке вызвал вопрос:
а кто сказал, что в КП целые типы фиксированы? В том же Сообщении о языке есть основной раздел:
Цитата:
6.1 Basic Types

The basic types are denoted by predeclared identifiers. The associated operators are defined in 8.2 and the predeclared function procedures in 10.3. The values of the given basic types are the following:

1. BOOLEAN the truth values TRUE and FALSE
2. SHORTCHAR the characters of the Latin‘1 character set (0X .. 0FFX)
3. CHAR the characters of the Unicode character set (0X .. 0FFFFX)
4. BYTE the integers between MIN(BYTE) and MAX(BYTE)
5. SHORTINT the integers between MIN(SHORTINT) and MAX(SHORTINT)
6. INTEGER the integers between MIN(INTEGER) and MAX(INTEGER)
7. LONGINT the integers between MIN(LONGINT) and MAX(LONGINT)
8. SHORTREAL the real numbers between MIN(SHORTREAL) and MAX(SHORTREAL), the value INF
9. REAL the real numbers between MIN(REAL) and MAX(REAL), the value INF
10. SET the sets of integers between 0 and MAX(SET)

в котором нет указаний на разрядность числовых типов, и есть приложение, в котором это дело уточнено.

Прикладные программы должны писаться опираясь на основной раздел, как раз это - гарантия переносимости. А если кто-то при написании кода подглядывал в приложение - это его проблемы. Более того, если оставить жёсткую привязку типов, то мы и порушим переносимость, ибо начнём опираться не на основной закон, а на некие подзаконные акты.

Так что именно ради сохранения переносимости и универсальности мы должны сдвинуть целые типы, причём не добавляя новых типов (LONGINT->128, INTEGER->64, SHORTINT->32)! Если делать в духе Оберона, то нужно вводить псевдомодуль SYSTYPES, в котором и будет куча INTxx, REALxx, SETxx и беззнаковые. Тогда полностью переносимым будет считаться только тот код, который не использует SYSTYPES и SYSTEM.

Автор:  Александр Ильин [ Вторник, 16 Март, 2010 04:11 ]
Заголовок сообщения:  Re: BlackBox 64

Иван Горячев писал(а):
Если делать в духе Оберона, то нужно вводить псевдомодуль SYSTYPES, в котором и будет куча INTxx, REALxx, SETxx и беззнаковые. Тогда полностью переносимым будет считаться только тот код, который не использует SYSTYPES и SYSTEM.
В XDS типы с размером в имени вынесены в псевдомодуль SYSTEM.

Автор:  Иван Горячев [ Вторник, 16 Март, 2010 04:27 ]
Заголовок сообщения:  Re: BlackBox 64

SYSTYPES - только типы, своеобразный индикатор ориентированности на железо и вообще внешний мир, SYSTEM - потенциально опасные вещи

Автор:  Борис Рюмшин [ Вторник, 16 Март, 2010 08:06 ]
Заголовок сообщения:  Re: BlackBox 64

Иван Горячев писал(а):
Так что именно ради сохранения переносимости и универсальности мы должны сдвинуть целые типы, причём не добавляя новых типов (LONGINT->128, INTEGER->64, SHORTINT->32)!

Ну так и я о том же... кроме того, есть ещё эффективность реализации, которая может резко поехать, если базовый тип не будет удовлетворять платформе... и указатели станут 64-битными...

Автор:  Сергей Губанов [ Вторник, 16 Март, 2010 11:15 ]
Заголовок сообщения:  Re: BlackBox 64

Борис Рюмшин писал(а):
что нужно менять, если переходить на 64 бита, кроме непосредственно кодогенерации.
1) название языка (чтобы наплевать на совместимость);
2) названия целочисленных типов (ЦЕЛОЕ8, ЦЕЛОЕ16, ЦЕЛОЕ32, ЦЕЛОЕ64, ЦЕЛОЕ128).

Автор:  Илья Ермаков [ Вторник, 16 Март, 2010 11:24 ]
Заголовок сообщения:  Re: BlackBox 64

Иван Горячев писал(а):
Так что именно ради сохранения переносимости и универсальности мы должны сдвинуть целые типы, причём не добавляя новых типов (LONGINT->128, INTEGER->64, SHORTINT->32)!


Почему? Потому что раньше дела действительно обстояли именно так, при скачке 16-32?

Так надо понимать, что тогда по целым типам был переход от "ужатого, тесного" состояния к давно необходимому. В настоящее время ёмкость целых типов уже насыщена. Нет потребности в расширении. Поэтому нет никаких плюсов, чтобы перевесить неприятности (которые начнутся обязательно).
Имеется потребность только в более широкой адресации. А не в целых.

Автор:  Роман М. [ Вторник, 16 Март, 2010 11:36 ]
Заголовок сообщения:  Re: BlackBox 64

Во Free Pascal используется следующая система именований типов:
Код:
Integer     either smallint or longint     size 2 or 4

Таким образом, можно иметь типы, жёстко привязанные к размеру: например, INT32, INT64, а тип INTEGER может быть принимать значение INT32 или INT64 в зависимости от архитектуры. Причём, типы INT32 и INT64 останутся внутри реализации КП.

Автор:  Роман М. [ Вторник, 16 Март, 2010 11:49 ]
Заголовок сообщения:  Re: BlackBox 64

Info21 писал(а):
Целые, как и SET, ни в коем случае нельзя трогать.
Ни по-хорошему, никак.
Они были зафиксированы для переносимости, и это должно быть сохранено.

Если нужно 128 бит -- это HUGEINT.

Мне кажется, что именно по то причине, что целым типам не даны точные определения, их можно и нужно менять когда меняется архитектура. Диапазоны типов имеют значения, характерные для некоторой архитектуры (в данном случае, для x86 32 bit). Но это не означает, что диапазоны нельзя расширять. Тогда и не нужен HUGEINT.
А в чём проблема с переносимостью?
Даже у Вирта в "Алгоритмах и структурах" можно прочесть:
Цитата:
The type SET denotes sets whose elements are integers in the range 0 to small number, typically 31 or 63.

Автор:  Илья Ермаков [ Вторник, 16 Март, 2010 12:23 ]
Заголовок сообщения:  Re: BlackBox 64

Проблема, как всегда, в том, что буквоедство не хочет видеть твёрдости реальной стенки, которую надо пробивать :) Вот действительно так. Буквы буквами, но типы - это то, чем язык связан с реальной железкой. Тут неизбежно будут проблемы.

Автор:  Иван Горячев [ Вторник, 16 Март, 2010 12:48 ]
Заголовок сообщения:  Re: BlackBox 64

Илья Ермаков писал(а):
Проблема, как всегда, в том, что буквоедство не хочет видеть твёрдости реальной стенки, которую надо пробивать :) Вот действительно так. Буквы буквами, но типы - это то, чем язык связан с реальной железкой. Тут неизбежно будут проблемы.

Как раз в Обероне типы изначально планировались по возможности изолированными от железа. Иначе какой смысл в описании имеет строчка
Цитата:
6. INTEGER the integers between MIN(INTEGER) and MAX(INTEGER)
?
То, что при этом не ввели "железных" типов, вроде того же INT32 - это большое упущение, которое порождает теперь проблемы.

Автор:  Иван Горячев [ Вторник, 16 Март, 2010 13:04 ]
Заголовок сообщения:  Re: BlackBox 64

Где обязательно возникнут грабли: Stores.

Совместимость по форматам файлов документов должна сохраниться обязательно, но и интерфейс модуля должен остаться неизменным/совместимым. И получится что Stores.Writer.WriteLong будет принимать 128-битный LONGINT, а в файл реально писать должно 64-битное целое. в лучшем случае придётся долго и цветасто описывать эту особенность в документации.

Автор:  Евгений Темиргалеев [ Вторник, 16 Март, 2010 13:37 ]
Заголовок сообщения:  Re: BlackBox 64

Уже было, уже описано:
Цитата:
PROCEDURE (VAR wr: Writer) WriteXInt (x: INTEGER)
NEW
Same as WriteSInt, but has an INTEGER-type parameter.
This procedure is provided to simplify migration from Release 1.2 to 1.3.
и т.д.

Автор:  Иван Горячев [ Вторник, 16 Март, 2010 13:56 ]
Заголовок сообщения:  Re: BlackBox 64

Ситуация немножко другая. Тогда был один разработчик, который сказал "мигрируем" - и все мигрировали. Теперь же разработчик ничего не говорит, а новая версия возникнет сбоку (если возникнет, конечно) - поэтому будет сосуществование. Другими словами сейчас и интерфейсы базовых модулей, и формат документов должны остаться неизменными

Страница 1 из 4 Часовой пояс: UTC + 3 часа
Powered by phpBB® Forum Software © phpBB Group
https://www.phpbb.com/