Есть ли у Паскаля будущее?

Любые обсуждения, не нарушающие правил форума.

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

Re: Есть ли у Паскаля будущее?

Сообщение Vadim » 02.11.2013 05:02:02

debi12345 писал(а):Я бы наоборот расширил язык до C-ых "#define"-макросов. Иногда их не хватает.

Ну, да... А потом всё плавно перетечёт в Си с обоснованием, что это популярно и всем нужно...
Vadim
долгожитель
 
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Re: Есть ли у Паскаля будущее?

Сообщение sign » 02.11.2013 09:27:24

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;

То написание i. и нажатие Ctrl+пробел сопровождается ошибкой - Error: обнаружен некорректный квалификатор .
sign
энтузиаст
 
Сообщения: 1131
Зарегистрирован: 30.08.2009 09:20:53

Re: Есть ли у Паскаля будущее?

Сообщение debi12345 » 02.11.2013 10:12:51

А потом всё плавно перетечёт в Си с обоснованием, что это популярно и всем нужно...

Ну и пусть - лишь бы (из-за второго прохода) не увеличилось время компиляции :) Эти макросы в С используются чрезвычайно часто, хотя по идее могли бы заменяться функциями - но не всегда эту замену можно выполнить.
Мартин же пишет - низкоуровневость до голого металла - а это значит С-подобность не отбрасывается на корню :) Да и 2-й проход компиляции может помочь с оптимизацией..
Аватара пользователя
debi12345
долгожитель
 
Сообщения: 5759
Зарегистрирован: 10.05.2006 23:41:15
Откуда: Ташкент (Узбекистан)

Re: Есть ли у Паскаля будущее?

Сообщение Mikhail » 02.11.2013 12:02:10

debi12345 писал(а):Ну и пусть - лишь бы (из-за второго прохода) не увеличилось время компиляции :) Эти макросы в С используются чрезвычайно часто, хотя по идее могли бы заменяться функциями - но не всегда эту замену можно выполнить.
Мартин же пишет - низкоуровневость до голого металла - а это значит С-подобность не отбрасывается на корню :) Да и 2-й проход компиляции может помочь с оптимизацией.


Макросы это вчерашний день. Шаблоны рулят, если это не шаблоны С++. :D
Низкоуровневые возможности определяются не наличием макросов, а возможностью линковки с объектными файлами, отражением переменных на конкретные адреса, задания смещения полей в записях, возможность работы с битами и т.д. и т.п.
Mikhail
энтузиаст
 
Сообщения: 565
Зарегистрирован: 24.10.2013 16:06:47

Re: Есть ли у Паскаля будущее?

Сообщение debi12345 » 02.11.2013 12:23:04

Макросы это вчерашний день

Имеются ввиду синтаксические макросы. Тексто-постановочные - для избежания многократного вписывания громоздких (или очень часто встречающихся) кусков текса там, где код макросов не может быть заменен вызывом функций и процедур, или такая замена нецелесооборазна - инлайнинг,.. Раз они используются очень интенсивно - значит реально нужны людям. Не понимаю я этого отвержения с ходу реально полезных и юзаемых конструкций.

Добавлено спустя 12 минут 23 секунды:
Например чем заменить макрос "OUTSZ" в следующем коде :
Код: Выделить всё
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
}

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

Re: Есть ли у Паскаля будущее?

Сообщение Mirage » 02.11.2013 14:33:57

Например чем заменить макрос "OUTSZ" в следующем коде :


Переменной?

Макросы фиг с ними, если инлайн работает как надо. А вот дженерики Мартин зря выкидывает. Правда, чем-то их заменить обещает. Но вот чем?
Mirage
энтузиаст
 
Сообщения: 881
Зарегистрирован: 06.05.2005 20:29:07
Откуда: Russia

Re: Есть ли у Паскаля будущее?

Сообщение debi12345 » 02.11.2013 17:56:01

А вот дженерики Мартин зря выкидывает. Правда, чем-то их заменить обещает. Но вот чем?

Намерен выкинуть. Проект открыт для заявок и дебатов :)
Аватара пользователя
debi12345
долгожитель
 
Сообщения: 5759
Зарегистрирован: 10.05.2006 23:41:15
Откуда: Ташкент (Узбекистан)

Re: Есть ли у Паскаля будущее?

Сообщение Mikhail » 02.11.2013 19:19:57

debi12345 писал(а):Имеются ввиду синтаксические макросы.

Что это?

debi12345 писал(а):Например чем заменить макрос "OUTSZ" в следующем коде


процедурой
Mikhail
энтузиаст
 
Сообщения: 565
Зарегистрирован: 24.10.2013 16:06:47

Re: Есть ли у Паскаля будущее?

Сообщение debi12345 » 02.11.2013 19:36:50

Что это?

Подстановки текста исходного кода.

процедурой

Внутри маленьких процедур фрэймы вызовов (настройка и восстановление стека) других процедур дурно влияют на перформанс.
Аватара пользователя
debi12345
долгожитель
 
Сообщения: 5759
Зарегистрирован: 10.05.2006 23:41:15
Откуда: Ташкент (Узбекистан)

Re: Есть ли у Паскаля будущее?

Сообщение Mikhail » 02.11.2013 19:50:25

debi12345 писал(а):Подстановки текста исходного кода.

Так это классический макрос, а что есть синтаксический?

debi12345 писал(а):Внутри маленьких процедур фрэймы вызовов (настройка и восстановление стека) других процедур дурно влияют на перформанс.


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

Re: Есть ли у Паскаля будущее?

Сообщение debi12345 » 02.11.2013 21:22:39

Так это классический макрос, а что есть синтаксический?

Не придирайтесь к словам :)
В FPC тоже есть макросы ({$macro on} - классический ?), но они - такой млын куцый "обрезок",...

Но хороший компилятор должен делать inline в таких случаях.

Тогда он должен быть о-о-очень умным - чтобы не напортачить с ЦПУ-регистрами (которых ограниченное количество), особенно в случае нескольких такие микрофункций в одном выражении. Думаете это реально ?
Аватара пользователя
debi12345
долгожитель
 
Сообщения: 5759
Зарегистрирован: 10.05.2006 23:41:15
Откуда: Ташкент (Узбекистан)

Re: Есть ли у Паскаля будущее?

Сообщение Mikhail » 02.11.2013 21:37:10

debi12345 писал(а):В FPC тоже есть макросы ({$macro on} - классический ?), но они - такой млын куцый "обрезок",...


Не знаю, но про "синтаксический маскрос" нагуглил следующее http://stdray.livejournal.com/69945.html
что не просто зло, а исчадие ада какое-то! :)

Шаблон или generic имеет неоспоримые преимущества перед макросами, потому макросы не нужны.

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


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

Re: Есть ли у Паскаля будущее?

Сообщение carrots » 03.11.2013 00:29:24

Mikhail писал(а):Intel C умеет векторизовать код для того чтобы использовать SSE. Т.е., теоретически, такое возможно, но для этого надо быть весьма подкованным в математике. В общем, надо быть очень умным для написания хорошего оптимизатора. :)

Вы правы, аж слезы из глаз...
Это и не сложно, но freepascal такого нет.., просто нужно такой код
Код: Выделить всё
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

подобно и с другими командами sse
если есть кто-то, кто знает как патчить оптимизатор - буду рад помочь векторизировать его.

на данный момент приходится писать целые циклы обработки на сплошном ассемблере

сейчас даже правильно переобявить операторы не удается, так как они:
1. Не инлайнятся, inline ничего не дает.
2. Не будут оптимально располагаться переменные в регистрах, так как в asm придется указать один из них.
3. С получением и передачей атрибутов какая-то каша

как видите на скришотах, вместо того чтоб получить одну строчку кода я получаю строк 10 ...
если бы можно было реально оператор заинлайнить и указать в качестве атрибутов любой из xmm операторов, а не reg64 - было-бы класно
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Аватара пользователя
carrots
постоялец
 
Сообщения: 138
Зарегистрирован: 28.03.2008 02:13:02

Re: Есть ли у Паскаля будущее?

Сообщение debi12345 » 03.11.2013 09:30:06

Мы как-то забыли про важнейшую фишку - "run-time PACKAGES" (типа BPL). И Мартин промолчал как партизан.

ПС:
"Исходный код" = "Початковый код" :) Бедные "москали", что могут подумать ? Почти как "швыдкисть 30км/год" :)
Аватара пользователя
debi12345
долгожитель
 
Сообщения: 5759
Зарегистрирован: 10.05.2006 23:41:15
Откуда: Ташкент (Узбекистан)

Re: Есть ли у Паскаля будущее?

Сообщение Mikhail » 03.11.2013 09:41:59

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


Это можно потом сделать.
Mikhail
энтузиаст
 
Сообщения: 565
Зарегистрирован: 24.10.2013 16:06:47

Пред.След.

Вернуться в Потрепаться

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

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

Рейтинг@Mail.ru