debi12345 писал(а):Я бы наоборот расширил язык до C-ых "#define"-макросов. Иногда их не хватает.
Ну, да... А потом всё плавно перетечёт в Си с обоснованием, что это популярно и всем нужно...
Модератор: Модераторы
debi12345 писал(а):Я бы наоборот расширил язык до C-ых "#define"-макросов. Иногда их не хватает.
zub писал(а):>>А кто в курсе, будут в FPC helper`ы на простые типы расширять, как это есть в Delphi?
быстрый способ узнать - пошерстить на багтрэкере или в списке рассылки, если этого еще нет, написать соответствующий фичреквест
оно? http://bugs.freepascal.org/view.php?id=23817
  TInt32Helper = type helper for integer
    procedure add(a: Integer);
    function ToStr: string;
  end;
А потом всё плавно перетечёт в Си с обоснованием, что это популярно и всем нужно...
 Эти макросы в С используются чрезвычайно часто, хотя по идее могли бы заменяться функциями - но не всегда эту замену можно выполнить.
 Эти макросы в С используются чрезвычайно часто, хотя по идее могли бы заменяться функциями - но не всегда эту замену можно выполнить. Да и 2-й проход компиляции может помочь с оптимизацией..
   Да и 2-й проход компиляции может помочь с оптимизацией..
debi12345 писал(а):Ну и пусть - лишь бы (из-за второго прохода) не увеличилось время компиляцииЭти макросы в С используются чрезвычайно часто, хотя по идее могли бы заменяться функциями - но не всегда эту замену можно выполнить.
Мартин же пишет - низкоуровневость до голого металла - а это значит С-подобность не отбрасывается на корнюДа и 2-й проход компиляции может помочь с оптимизацией.
 
 Макросы это вчерашний день
wchar_t* mb2wstr(const char* inval) {
    size_t size = strlen(inval);
#define OUTSZ (size+1)*sizeof(wchar_t)
    wchar_t* buf = (wchar_t*)malloc(OUTSZ);
    memset(buf, 0, OUTSZ);
    setlocale(LC_CTYPE,""); //  необходима, чтобы отработала "mbstowcs"
    size = mbstowcs(buf, inval, size);
    if ( size == (size_t)(-1) ) {
   free(buf);
   buf = NULL;
    } else {
   buf = (wchar_t*)realloc(buf,OUTSZ);
    }
    return buf;
#undef OUTSZ
}

Например чем заменить макрос "OUTSZ" в следующем коде :
А вот дженерики Мартин зря выкидывает. Правда, чем-то их заменить обещает. Но вот чем?


debi12345 писал(а):Имеются ввиду синтаксические макросы.
debi12345 писал(а):Например чем заменить макрос "OUTSZ" в следующем коде
Что это?
процедурой

debi12345 писал(а):Подстановки текста исходного кода.
debi12345 писал(а):Внутри маленьких процедур фрэймы вызовов (настройка и восстановление стека) других процедур дурно влияют на перформанс.
Так это классический макрос, а что есть синтаксический?
 
 Но хороший компилятор должен делать inline в таких случаях.

debi12345 писал(а):В FPC тоже есть макросы ({$macro on} - классический ?), но они - такой млын куцый "обрезок",...
 
 debi12345 писал(а):Тогда он должен быть о-о-очень умным - чтобы не напортачить с ЦПУ-регистрами (которых ограниченное количество), особенно в случае нескольких такие микрофункций в одном выражении. Думаете это реально ?

Mikhail писал(а):Intel C умеет векторизовать код для того чтобы использовать SSE. Т.е., теоретически, такое возможно, но для этого надо быть весьма подкованным в математике. В общем, надо быть очень умным для написания хорошего оптимизатора.
operator +(AIn1, AIn2: TPoint3D): TPoint3D;
begin
  Result.x := AIn1.X+AIn2.X;
  Result.y := AIn1.Y+AIn2.Y;
  Result.z := AIn1.Z+AIn2.Z;
end; ADDPS XMM1 XMM0 
 Бедные "москали", что могут подумать ? Почти как "швыдкисть 30км/год"
 Бедные "москали", что могут подумать ? Почти как "швыдкисть 30км/год" 

debi12345 писал(а):Мы как-то забыли про важнейшую фишку - "run-time PACKAGES" (типа BPL). И Мартин промолчал как партизан.
Сейчас этот форум просматривают: Google [Bot] и гости: 1