Страница 7 из 23
Re: MSElang : обсуждение фишек
Добавлено: 08.11.2013 20:00:51
Kemet
Mikhail писал(а):Kemet писал(а): компиляторе я оперирую лишь одной сущностью - целое.
Вам кажется. На самом деле это не так. Вот если есть только Integer, то действительно сущность будет одна.
ИМХО, Вы усложняете. Излишнее обобщение тоже плохо.
С чего бы мне казалось, если я этот компилятор пишу?
В смысле пишу не компилятор zonnon'а, а языка, где типы обозначаются так же.
Re: MSElang : обсуждение фишек
Добавлено: 08.11.2013 20:04:58
alexey38
Mikhail писал(а):Нет не чушь. если бы после Integer могло стоять любое число, то сущность была бы одна.
Вы себя реально ведете странно.
Вы говорите "если бы после Integer могло стоять любое число, то сущность была бы одна", например, "int{17}". Вопрос, а для того, чтобы int был сущностью сам по себе, обязательно ли нужно поддерживать дробные числа "int{17.3123124}"? А нужно ли поддерживать буквы "int{аываы}"?
Как содержимое в скобках, и ограничения на содержимое в скобках влияет на сущность слова "int" ???
Mikhail писал(а):Явное указание размера операндов очень слабо вяжется с кроссплатформенным программированием.
Явное указание размера операндов для языка высокого уровня ни как не является ограничением на кроссплатформенность. Собственно это уже задача компилятора рождать машинный код под нужную платформу.
В тоже время должны быть типы без модификатора, указывающего на размер операдна, для того бы на конкретной платформе под этим понимался "родной тип" этой платформы.
Mikhail писал(а):а если у вас 8-ми битный контроллер?
И что? Вы, что ли никогда не программировали на таких (8-ми битный контроллере)?
Там 64 битная арифметика реализуется точно также, как и на 32-битном процессоре. Учите ассемблер, и затем уже давайте советы. А то реально какой-то малограмотный бред несете.
Re: MSElang : обсуждение фишек
Добавлено: 08.11.2013 20:09:17
Mikhail
Kemet писал(а): чего бы мне казалось, если я этот компилятор пишу?
В смысле пишу не компилятор zonnon'а, а языка, где типы обозначаются так же.
Ну тогда Вам следующее рацпредложение, по "сокращению сущностей".
Код: Выделить всё
var r: Number{32}; //целое 32 бита
d: Number{32.}; //вещественное с плавающей точкой 32 бита
d: Number{32.4}; //вещественное с фиксированной точкой 32 бита 4 бита на дробную часть
Re: MSElang : обсуждение фишек
Добавлено: 08.11.2013 20:14:00
Kemet
debi12345 писал(а):Зачем ?
Для опоры.
debi12345 писал(а):А если напрмер хотим ограничить значение до 31 :
Это уже диапазонные типы, размероность которых определяется компилятором.
Re: MSElang : обсуждение фишек
Добавлено: 08.11.2013 20:15:04
Mikhail
alexey38 писал(а):И что? Вы, что ли никогда не программировали на таких (8-ми битный контроллере)?
Там 64 битная арифметика реализуется точно также, как и на 32-битном процессоре. Учите ассемблер, и затем уже давайте советы. А то реально какой-то малограмотный бред несете.
Алексей, умоляю, больше не пишите мне.
Re: MSElang : обсуждение фишек
Добавлено: 08.11.2013 20:21:38
hinst
Mikhail я вижу тебе не нравятся классы, но ведь все кто применяют объектно-ориентированный дизайн не могут ошибаться, и не зря наверное классы вделали во все нормальные языки, в том числе, в те, в которых классов изначально не было. В Pascal приделали классы, в C приделали классы, получился C++. В Java, C#, Python, Perl, PHP - везде классы. Если кто-то не осилил классы, это не значит, что надо их выбросить
Re: MSElang : обсуждение фишек
Добавлено: 08.11.2013 20:24:02
Kemet
Mikhail писал(а):Kemet писал(а): чего бы мне казалось, если я этот компилятор пишу?
В смысле пишу не компилятор zonnon'а, а языка, где типы обозначаются так же.
Ну тогда Вам следующее рацпредложение, по "сокращению сущностей".
Код: Выделить всё
var r: Number{32}; //целое 32 бита
d: Number{32.}; //вещественное с плавающей точкой 32 бита
d: Number{32.4}; //вещественное с фиксированной точкой 32 бита 4 бита на дробную часть
Очередное обострение?
i: integer{16};
u: cardinal{16}
r: real{32};
x: real{32, IEEE-LE}
Re: MSElang : обсуждение фишек
Добавлено: 08.11.2013 20:29:15
Mikhail
hinst писал(а):Mikhail я вижу тебе не нравятся классы, но ведь все кто применяют объектно-ориентированный дизайн не могут ошибаться, и не зря наверное классы вделали во все нормальные языки, в том числе, в те, в которых классов изначально не было. В Pascal приделали классы, в C приделали классы, получился C++. В Java, C#, Python, Perl, PHP - везде классы. Если кто-то не осилил классы, это не значит, что надо их выбросить
Я не считаю их панацеей, но в данной теме это оффтоп.
Добавлено спустя 2 минуты 10 секунд:Kemet писал(а):Очередное обострение?
i: integer{16};
u: cardinal{16}
r: real{32};
x: real{32, IEEE-LE}
Вы меня не переубедите, я категорически против введения
лишних сущностей в грамматику языка.
Re: MSElang : обсуждение фишек
Добавлено: 08.11.2013 20:35:07
debi12345
а если у вас 8-ми битный контроллер?
АФАЙК, под них производитель выкладывает свои SDK - пока что на "С". Чтобы выкладывали на PASCAL-е, реально нужно чтобы было:
Код: Выделить всё
i1: integer as MIN_FIT;
i2: integer as MAX_FIT;
i3: integer as HUGE;
Re: MSElang : обсуждение фишек
Добавлено: 08.11.2013 20:41:33
Mikhail
debi12345 писал(а):АФАЙК, под них производитель выкладывает свои SDK - пока что на "С". Чтобы выкладывали на PASCAL-е, реально нужно чтобы было:
Любите Вы все усложнять.

Re: MSElang : обсуждение фишек
Добавлено: 08.11.2013 21:16:40
debi12345
Нет не чушь. если бы после Integer могло стоять любое число, то сущность была бы одна.
100%.
Если не любое, а фиксированный (пусть даже расширяемый) набор значений - то это ничем не отличается от набора "int8..in64".
Добавлено спустя 8 минут 57 секунд:Это уже диапазонные типы, размероность которых определяется компилятором.
Для IA32 все что не равно 32 - диапазонные (неотлавливемые аппаратными прерываниями), АФАЙК. 8 бит в это случает ничуть не оптимизированне чем 5 бит.
Re: MSElang : обсуждение фишек
Добавлено: 08.11.2013 21:32:51
Mikhail
debi12345 писал(а):Для IA32 все что не равно 32 - диапазонные (неотлавливемые аппаратными прерываниями), АФАЙК. 8 бит в это случает ничуть не оптимизированне чем 5 бит.
Кстати, сложение int32 + int32 будет быстрее чем int32 + int8
Re: MSElang : обсуждение фишек
Добавлено: 08.11.2013 21:56:40
debi12345
Кстати, сложение int32 + int32 будет быстрее чем int32 + int8
Может потому, что компилятор генерит код проверки диапазона для INT8 перед каждой операцией ?
Re: MSElang : обсуждение фишек
Добавлено: 08.11.2013 22:07:05
Mikhail
debi12345 писал(а):Может потому, что компилятор генерит код проверки диапазона для INT8 перед каждой операцией ?
AI32 не умеет складывать операнды разных размеров. Хотя насчет быстрее, я может погорячился, но команд больше нужно будет.
Re: MSElang : обсуждение фишек
Добавлено: 08.11.2013 23:16:50
debi12345
Рантайм-проверка на диапазон отнимает примерно 10% быстродейсвия молотильных операций. Но обычных операциях все не так страшно. INT32+INT32 на 2..3% быстрее чем INT32+INT8
из-за более "movl %ebx,%eax" чем "movzbl %bl,%eax".
Код: Выделить всё
program addspeed;
{$mode objfpc}
uses
sysutils,dateutils;
var
i2: longint;
i3: longint;
i1: byte;
i: longint;
dt: tdatetime;
begin
i1:= 1;
i2:= 0;
dt:= now;
for i:=0 to 100000000 do i2:= i2 + i1;
writeln('longint + byte: ',millisecondof(now - dt),' ms');
i3:= 1;
i2:= 0;
dt:= now;
for i:=0 to 100000000 do i2:= i2 + i3;
writeln('longint + longint: ',millisecondof(now - dt),' ms');
end.
fpc -O3 -a <file>
Код: Выделить всё
int32 + int8
incl %edx
movzbl %bl,%eax
addl %esi,%eax
movl %eax,%esi
cmpl $100000000,%edx
jl .Lj11
int32 + int32
incl %edx
movl %ebx,%eax
addl %esi,%eax
movl %eax,%esi
cmpl $100000000,%edx
jl .Lj46
fpc -O3 -a -Cr - Co <file> // range & overflow checks
Код: Выделить всё
int32 + int8
.Lj11:
addl $1,%edx
movzbl %bl,%eax
addl %esi,%eax
jno .Lj14
call FPC_OVERFLOW
.Lj14:
movl %eax,%esi
cmpl $100000000,%edx
jl .Lj11
int32 + int32
.Lj47:
addl $1,%edx
movl %ebx,%eax
addl %esi,%eax
jno .Lj50
call FPC_OVERFLOW
.Lj50:
movl %eax,%esi
cmpl $100000000,%edx
jl .Lj47
Добавлено спустя 14 минут 3 секунды:Самопальная проверка на диапазон
Код: Выделить всё
for i:=0 to 100000000 do begin
if i2 > -1 then i2:= i2 + i1;
end;
Приводит к 20..25% замедлению на молотильных операциях :
Код: Выделить всё
.Lj11:
incl %edx
cmpl $-1,%esi
jng .Lj13
movzbl %bl,%eax
addl %esi,%eax
movl %eax,%esi
.Lj13:
cmpl $100000000,%edx
jl .Lj11
Код: Выделить всё
.Lj48:
incl %edx
cmpl $-1,%esi
jng .Lj50
movl %ebx,%eax
addl %esi,%eax
movl %eax,%esi
.Lj50:
cmpl $100000000,%edx
jl .Lj48
хотя занимает совсем мало инструкций. Но на молочении даже это "совсем мало" заметно.
Добавлено спустя 4 минуты 24 секунды:При дефолтной оптимизации самопальная проверка диапазона снижает скорость молочения на 5..6%.