OberonCore

Библиотека  Wiki  Форум  BlackBox  Компоненты  Проекты
Текущее время: Пятница, 29 Март, 2024 02:16

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 78 ]  На страницу 1, 2, 3, 4  След.
Автор Сообщение
 Заголовок сообщения: BlackBox 64
СообщениеДобавлено: Понедельник, 15 Март, 2010 21:25 
Администратор

Зарегистрирован: Вторник, 15 Ноябрь, 2005 01:14
Сообщения: 4695
Откуда: Россия, Орёл
Товарищи, всё таки интересно.
Давайте прикинем, что нужно менять, если переходить на 64 бита, кроме непосредственно кодогенерации.

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

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: BlackBox 64
СообщениеДобавлено: Понедельник, 15 Март, 2010 21:34 
Модератор
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 9459
Откуда: Россия, Орёл
Смена разрядности целых, на самом деле, всегда небезболезненна.
И неизвестно, каким боком может выйти (какие где допущения в коде сделаны).

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: BlackBox 64
СообщениеДобавлено: Понедельник, 15 Март, 2010 22:04 
Аватара пользователя

Зарегистрирован: Пятница, 25 Ноябрь, 2005 12:02
Сообщения: 8500
Откуда: Троицк, Москва
Целые, как и SET, ни в коем случае нельзя трогать.
Ни по-хорошему, никак.
Они были зафиксированы для переносимости, и это должно быть сохранено.

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: BlackBox 64
СообщениеДобавлено: Понедельник, 15 Март, 2010 22:50 
Модератор
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 9459
Откуда: Россия, Орёл
Да, я бы не двигал.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: BlackBox 64
СообщениеДобавлено: Понедельник, 15 Март, 2010 23:04 

Зарегистрирован: Воскресенье, 03 Февраль, 2008 12:50
Сообщения: 249
Эх, было бы вообще здорово, если б само название типа явно указывало количество отводимых бит под хранение (INT32, INT64, ...). А так, да, "фиксированные" типы - добро.

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

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: BlackBox 64
СообщениеДобавлено: Понедельник, 15 Март, 2010 23:23 
Администратор

Зарегистрирован: Вторник, 15 Ноябрь, 2005 01:14
Сообщения: 4695
Откуда: Россия, Орёл
Info21 писал(а):
Целые, как и SET, ни в коем случае нельзя трогать.
Ни по-хорошему, никак.
Они были зафиксированы для переносимости, и это должно быть сохранено.

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

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: BlackBox 64
СообщениеДобавлено: Вторник, 16 Март, 2010 03:04 

Зарегистрирован: Суббота, 26 Ноябрь, 2005 10:37
Сообщения: 875
Откуда: Россия, Владивосток
Борис Рюмшин писал(а):
Это ещё почему?
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). По хорошему то оно конечно надо, но нельзя.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: BlackBox 64
СообщениеДобавлено: Вторник, 16 Март, 2010 03:38 

Зарегистрирован: Суббота, 26 Ноябрь, 2005 10:37
Сообщения: 875
Откуда: Россия, Владивосток
Просмотр Сообщения о языке вызвал вопрос:
а кто сказал, что в КП целые типы фиксированы? В том же Сообщении о языке есть основной раздел:
Цитата:
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.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: BlackBox 64
СообщениеДобавлено: Вторник, 16 Март, 2010 04:11 
Аватара пользователя

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: BlackBox 64
СообщениеДобавлено: Вторник, 16 Март, 2010 04:27 

Зарегистрирован: Суббота, 26 Ноябрь, 2005 10:37
Сообщения: 875
Откуда: Россия, Владивосток
SYSTYPES - только типы, своеобразный индикатор ориентированности на железо и вообще внешний мир, SYSTEM - потенциально опасные вещи


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: BlackBox 64
СообщениеДобавлено: Вторник, 16 Март, 2010 08:06 
Администратор

Зарегистрирован: Вторник, 15 Ноябрь, 2005 01:14
Сообщения: 4695
Откуда: Россия, Орёл
Иван Горячев писал(а):
Так что именно ради сохранения переносимости и универсальности мы должны сдвинуть целые типы, причём не добавляя новых типов (LONGINT->128, INTEGER->64, SHORTINT->32)!

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: BlackBox 64
СообщениеДобавлено: Вторник, 16 Март, 2010 11:15 
Аватара пользователя

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: BlackBox 64
СообщениеДобавлено: Вторник, 16 Март, 2010 11:24 
Модератор
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 9459
Откуда: Россия, Орёл
Иван Горячев писал(а):
Так что именно ради сохранения переносимости и универсальности мы должны сдвинуть целые типы, причём не добавляя новых типов (LONGINT->128, INTEGER->64, SHORTINT->32)!


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

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: BlackBox 64
СообщениеДобавлено: Вторник, 16 Март, 2010 11:36 

Зарегистрирован: Пятница, 25 Сентябрь, 2009 13:10
Сообщения: 1177
Откуда: Мариуполь
Во Free Pascal используется следующая система именований типов:
Код:
Integer     either smallint or longint     size 2 or 4

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: BlackBox 64
СообщениеДобавлено: Вторник, 16 Март, 2010 11:49 

Зарегистрирован: Пятница, 25 Сентябрь, 2009 13:10
Сообщения: 1177
Откуда: Мариуполь
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.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: BlackBox 64
СообщениеДобавлено: Вторник, 16 Март, 2010 12:23 
Модератор
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 9459
Откуда: Россия, Орёл
Проблема, как всегда, в том, что буквоедство не хочет видеть твёрдости реальной стенки, которую надо пробивать :) Вот действительно так. Буквы буквами, но типы - это то, чем язык связан с реальной железкой. Тут неизбежно будут проблемы.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: BlackBox 64
СообщениеДобавлено: Вторник, 16 Март, 2010 12:48 

Зарегистрирован: Суббота, 26 Ноябрь, 2005 10:37
Сообщения: 875
Откуда: Россия, Владивосток
Илья Ермаков писал(а):
Проблема, как всегда, в том, что буквоедство не хочет видеть твёрдости реальной стенки, которую надо пробивать :) Вот действительно так. Буквы буквами, но типы - это то, чем язык связан с реальной железкой. Тут неизбежно будут проблемы.

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: BlackBox 64
СообщениеДобавлено: Вторник, 16 Март, 2010 13:04 

Зарегистрирован: Суббота, 26 Ноябрь, 2005 10:37
Сообщения: 875
Откуда: Россия, Владивосток
Где обязательно возникнут грабли: Stores.

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: BlackBox 64
СообщениеДобавлено: Вторник, 16 Март, 2010 13:37 
Модератор
Аватара пользователя

Зарегистрирован: Среда, 16 Ноябрь, 2005 00:53
Сообщения: 4625
Откуда: Россия, Орёл
Уже было, уже описано:
Цитата:
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.
и т.д.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: BlackBox 64
СообщениеДобавлено: Вторник, 16 Март, 2010 13:56 

Зарегистрирован: Суббота, 26 Ноябрь, 2005 10:37
Сообщения: 875
Откуда: Россия, Владивосток
Ситуация немножко другая. Тогда был один разработчик, который сказал "мигрируем" - и все мигрировали. Теперь же разработчик ничего не говорит, а новая версия возникнет сбоку (если возникнет, конечно) - поэтому будет сосуществование. Другими словами сейчас и интерфейсы базовых модулей, и формат документов должны остаться неизменными


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 78 ]  На страницу 1, 2, 3, 4  След.

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 6


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Вся информация, размещаемая участниками на конференции (тексты сообщений, вложения и пр.) © 2005-2024, участники конференции «OberonCore», если специально не оговорено иное.
Администрация не несет ответственности за мнения, стиль и достоверность высказываний участников, равно как и за безопасность материалов, предоставляемых участниками во вложениях.
Без разрешения участников и ссылки на конференцию «OberonCore» любое воспроизведение и/или копирование высказываний полностью и/или по частям запрещено.
Powered by phpBB® Forum Software © phpBB Group
Русская поддержка phpBB