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;
А потом всё плавно перетечёт в Си с обоснованием, что это популярно и всем нужно...
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
debi12345 писал(а):Мы как-то забыли про важнейшую фишку - "run-time PACKAGES" (типа BPL). И Мартин промолчал как партизан.
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 12