
Также опять всплыл вопрос реализации юникода с учетом интеграции алфавитов инопланетян...
Кто подписан на конфу - можете внести свою лепту в выработку концепции.
Модератор: Модераторы
компилируется?
debi12345 писал(а): Мартин хочет чтобы компилятор позволял писать проги, читаемые как письма
debi12345 писал(а):предлагаю что нужно этих типов остсвить по минимуму (целый со знаком,
целый без знака, вещественный) и если надо то вместо размера указывать нужный диапазон значений
Мартин наоборот считает, что всегда нужно знать с какой разрядностью работаешь и это не должно зависеть, на чем и для чего компилируешь. Я с ним в этом согласен, но предложил вместо разрядности - диапазон значений (который один фиг будет переведен компилятором в разрядность).Может так: int, uint, shortint, shortuint, longint, longuint, byte. Базовый тип int зависит от разрядности процессора, byte всегда беззнаковый 8 бит.
С вещественными аналогично.
Наверное лучше для этого использовать UnicodeString. Работа с остальными типами строк исключительно через соответствующие библиотеки.
debi12345 писал(а):Мартин наоборот считает, что всегда нужно знать с какой разрядностью работаешь и это не должно зависеть, на чем и для чего компилируешь. Я с ним в этом согласен, но предложил вместо разрядности - диапазон значений (который один фиг будет переведен компилятором в разрядность).
debi12345 писал(а):А RawString ? Или ByteArray ? С подcчетом ссылок или без ?
Не думаю что это разумно для кроссплатформенной разработки. Тут нужен слой абстракции, в том числе и по используемым типам.
type
longint = integer from MIN_SINT to MAX_SINT; // зависит от архитектуры
longword = integer from 0 to MAX_UINT; // зависит от архитектуры
var
i1: longint; // зависит от архитектуры
i2: longword; // зависит от архитектуры
i3: integer from 0; // 0..MAX_UINT; // зависит от архитектуры
i4: integer from 0 to 100; // всегда BYTE;
debi12345 писал(а):Получается,что например константа для одной архитектуры - одна, она же самая для другой - другое значение ? Все-таки с диапазонами будет гибче, вроде :
module std.types; unsafe;
type int = int32;
uint = uint32;
...
byte = uint8;
...
end;
module test;
import std.types.*;
...
var i:int;
begin
end;
Почему бы не взять типы данных из Java (кроссплатформенного и весьма успешного)?
debi12345 писал(а):Через указание диапазона для одного универсального типа...
Зачем указывать диапазон, если разрядность аргументов выбивается из конечного числа значени
type
longint = signed integer:32;
cardinal = unsigned integer:32;
ivankob4mse2 Ваш ник?
debi12345 писал(а):но это не так гибко - придется разделять знаковые и беззнаковые типы...
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 3