MSElang : обсуждение фишек

Вопросы программирования и использования MSEide + MSEgui.

Модератор: Модераторы

Re: MSElang : обсуждение фишек

Сообщение Kemet » 08.11.2013 20:00:51

Mikhail писал(а):
Kemet писал(а): компиляторе я оперирую лишь одной сущностью - целое.


Вам кажется. На самом деле это не так. Вот если есть только Integer, то действительно сущность будет одна.

ИМХО, Вы усложняете. Излишнее обобщение тоже плохо.
С чего бы мне казалось, если я этот компилятор пишу?
В смысле пишу не компилятор zonnon'а, а языка, где типы обозначаются так же.
Kemet
постоялец
 
Сообщения: 241
Зарегистрирован: 10.02.2010 19:28:32
Откуда: Временно оккупированная территория

Re: MSElang : обсуждение фишек

Сообщение alexey38 » 08.11.2013 20:04:58

Mikhail писал(а):Нет не чушь. если бы после Integer могло стоять любое число, то сущность была бы одна.

Вы себя реально ведете странно.
Вы говорите "если бы после Integer могло стоять любое число, то сущность была бы одна", например, "int{17}". Вопрос, а для того, чтобы int был сущностью сам по себе, обязательно ли нужно поддерживать дробные числа "int{17.3123124}"? А нужно ли поддерживать буквы "int{аываы}"?
Как содержимое в скобках, и ограничения на содержимое в скобках влияет на сущность слова "int" ???

Mikhail писал(а):Явное указание размера операндов очень слабо вяжется с кроссплатформенным программированием.

Явное указание размера операндов для языка высокого уровня ни как не является ограничением на кроссплатформенность. Собственно это уже задача компилятора рождать машинный код под нужную платформу.
В тоже время должны быть типы без модификатора, указывающего на размер операдна, для того бы на конкретной платформе под этим понимался "родной тип" этой платформы.
Mikhail писал(а):а если у вас 8-ми битный контроллер?

И что? Вы, что ли никогда не программировали на таких (8-ми битный контроллере)?
Там 64 битная арифметика реализуется точно также, как и на 32-битном процессоре. Учите ассемблер, и затем уже давайте советы. А то реально какой-то малограмотный бред несете.
alexey38
долгожитель
 
Сообщения: 1627
Зарегистрирован: 27.04.2011 19:42:31

Re: MSElang : обсуждение фишек

Сообщение Mikhail » 08.11.2013 20:09:17

Kemet писал(а): чего бы мне казалось, если я этот компилятор пишу?
В смысле пишу не компилятор zonnon'а, а языка, где типы обозначаются так же.


Ну тогда Вам следующее рацпредложение, по "сокращению сущностей".
Код: Выделить всё
var r: Number{32}; //целое 32 бита
      d: Number{32.}; //вещественное с плавающей точкой 32 бита
      d: Number{32.4}; //вещественное с фиксированной точкой 32 бита 4 бита на дробную часть
Mikhail
энтузиаст
 
Сообщения: 565
Зарегистрирован: 24.10.2013 16:06:47

Re: MSElang : обсуждение фишек

Сообщение Kemet » 08.11.2013 20:14:00

debi12345 писал(а):Зачем ?
Для опоры.
debi12345 писал(а):А если напрмер хотим ограничить значение до 31 :
Это уже диапазонные типы, размероность которых определяется компилятором.
Последний раз редактировалось Kemet 08.11.2013 20:15:38, всего редактировалось 1 раз.
Kemet
постоялец
 
Сообщения: 241
Зарегистрирован: 10.02.2010 19:28:32
Откуда: Временно оккупированная территория

Re: MSElang : обсуждение фишек

Сообщение Mikhail » 08.11.2013 20:15:04

alexey38 писал(а):И что? Вы, что ли никогда не программировали на таких (8-ми битный контроллере)?
Там 64 битная арифметика реализуется точно также, как и на 32-битном процессоре. Учите ассемблер, и затем уже давайте советы. А то реально какой-то малограмотный бред несете.


:D :D :D

Алексей, умоляю, больше не пишите мне.
Mikhail
энтузиаст
 
Сообщения: 565
Зарегистрирован: 24.10.2013 16:06:47

Re: MSElang : обсуждение фишек

Сообщение hinst » 08.11.2013 20:21:38

Mikhail я вижу тебе не нравятся классы, но ведь все кто применяют объектно-ориентированный дизайн не могут ошибаться, и не зря наверное классы вделали во все нормальные языки, в том числе, в те, в которых классов изначально не было. В Pascal приделали классы, в C приделали классы, получился C++. В Java, C#, Python, Perl, PHP - везде классы. Если кто-то не осилил классы, это не значит, что надо их выбросить
Аватара пользователя
hinst
энтузиаст
 
Сообщения: 781
Зарегистрирован: 12.04.2008 18:32:38

Re: MSElang : обсуждение фишек

Сообщение Kemet » 08.11.2013 20:24:02

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}
Kemet
постоялец
 
Сообщения: 241
Зарегистрирован: 10.02.2010 19:28:32
Откуда: Временно оккупированная территория

Re: MSElang : обсуждение фишек

Сообщение Mikhail » 08.11.2013 20:27:05

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}


Вы меня не переубедите, я категорически против введения лишних сущностей в грамматику языка.
Mikhail
энтузиаст
 
Сообщения: 565
Зарегистрирован: 24.10.2013 16:06:47

Re: MSElang : обсуждение фишек

Сообщение debi12345 » 08.11.2013 20:35:07

а если у вас 8-ми битный контроллер?

АФАЙК, под них производитель выкладывает свои SDK - пока что на "С". Чтобы выкладывали на PASCAL-е, реально нужно чтобы было:

Код: Выделить всё
i1: integer as MIN_FIT;
i2: integer as MAX_FIT;
i3: integer as HUGE;
Аватара пользователя
debi12345
долгожитель
 
Сообщения: 5759
Зарегистрирован: 10.05.2006 23:41:15
Откуда: Ташкент (Узбекистан)

Re: MSElang : обсуждение фишек

Сообщение Mikhail » 08.11.2013 20:41:33

debi12345 писал(а):АФАЙК, под них производитель выкладывает свои SDK - пока что на "С". Чтобы выкладывали на PASCAL-е, реально нужно чтобы было:


Любите Вы все усложнять. :D
Mikhail
энтузиаст
 
Сообщения: 565
Зарегистрирован: 24.10.2013 16:06:47

Re: MSElang : обсуждение фишек

Сообщение debi12345 » 08.11.2013 21:07:43

Нет не чушь. если бы после Integer могло стоять любое число, то сущность была бы одна.

100%.
Если не любое, а фиксированный (пусть даже расширяемый) набор значений - то это ничем не отличается от набора "int8..in64".

Добавлено спустя 8 минут 57 секунд:
Это уже диапазонные типы, размероность которых определяется компилятором.

Для IA32 все что не равно 32 - диапазонные (неотлавливемые аппаратными прерываниями), АФАЙК. 8 бит в это случает ничуть не оптимизированне чем 5 бит.
Аватара пользователя
debi12345
долгожитель
 
Сообщения: 5759
Зарегистрирован: 10.05.2006 23:41:15
Откуда: Ташкент (Узбекистан)

Re: MSElang : обсуждение фишек

Сообщение Mikhail » 08.11.2013 21:32:51

debi12345 писал(а):Для IA32 все что не равно 32 - диапазонные (неотлавливемые аппаратными прерываниями), АФАЙК. 8 бит в это случает ничуть не оптимизированне чем 5 бит.


Кстати, сложение int32 + int32 будет быстрее чем int32 + int8
Mikhail
энтузиаст
 
Сообщения: 565
Зарегистрирован: 24.10.2013 16:06:47

Re: MSElang : обсуждение фишек

Сообщение debi12345 » 08.11.2013 21:56:40

Кстати, сложение int32 + int32 будет быстрее чем int32 + int8

Может потому, что компилятор генерит код проверки диапазона для INT8 перед каждой операцией ?
Аватара пользователя
debi12345
долгожитель
 
Сообщения: 5759
Зарегистрирован: 10.05.2006 23:41:15
Откуда: Ташкент (Узбекистан)

Re: MSElang : обсуждение фишек

Сообщение Mikhail » 08.11.2013 22:07:05

debi12345 писал(а):Может потому, что компилятор генерит код проверки диапазона для INT8 перед каждой операцией ?


AI32 не умеет складывать операнды разных размеров. Хотя насчет быстрее, я может погорячился, но команд больше нужно будет.
Mikhail
энтузиаст
 
Сообщения: 565
Зарегистрирован: 24.10.2013 16:06:47

Re: MSElang : обсуждение фишек

Сообщение debi12345 » 08.11.2013 22:58:23

Рантайм-проверка на диапазон отнимает примерно 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%.
Аватара пользователя
debi12345
долгожитель
 
Сообщения: 5759
Зарегистрирован: 10.05.2006 23:41:15
Откуда: Ташкент (Узбекистан)

Пред.След.

Вернуться в MSEide + MSEgui

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

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

Рейтинг@Mail.ru
cron