Новое в fpc 2.4.x по сравнению с Delphi 7

Вопросы программирования на Free Pascal, использования компилятора и утилит.

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

Ответить
Аватара пользователя
coyot.rush
постоялец
Сообщения: 309
Зарегистрирован: 14.08.2009 08:59:48

Новое в fpc 2.4.x по сравнению с Delphi 7

Сообщение coyot.rush »

Интересует какие новые лексемы появились в fpc 2.4.x по сравнению с delphi 7(6) , что они значат и как их применять?
Вот небольшой обзор, но это delphi. "Delphi 2007 - новинки языка по сравнению с Delphi 7" http://www.interface.ru/home.asp?artId=6763
Например что значит

Код: Выделить всё

TFPStrObjMap = specialize TFPGMap<string, TObject>;

PSS про http://www.freepascal.org/docs-html/ref/ref.html я знаю :roll:
daesher
постоялец
Сообщения: 221
Зарегистрирован: 09.03.2010 21:17:14

Сообщение daesher »

Результаты собственной проверки (ветка trunk, 2.5.1) показали (из наиболее простого):
class operator - отсутствует. В языке freepascal давно есть другой способ перегрузки операторов; жалко, что в Delphi не пошли по этому же пути (как пошли с generic).
class helper - не работает (единственная полезная вещь из всего, представленного в Delphi, но отсутствующего в fpc)
strict private - есть, работает.
Записи с методами - нет (а зачем?)
Типы внутри классов - есть (а зачем?)
sealed - есть
experimental - есть, работает
SII
новенький
Сообщения: 64
Зарегистрирован: 24.06.2007 17:15:09
Откуда: Зеленоград

Сообщение SII »

Записи с методами - нет (а зачем?)


Таким путём можно создавать сложные типы вместе с выполняемыми над ними операциями (например, комплексную арифметику). Так что сие в определённых ситуациях полезно.

Типы внутри классов - есть (а зачем?)


В Дельфях нет "стопроцентной" модульности, как, например, в Аде, из-за чего и появляется необходимость в типах внутри классов, спецификаторах видимости вроде private и т.п. В частности, нужда в типах внутри классов возникает в том случае, если эти самые типы используются (и, соответственно, должны быть видимы) только внутри класса. Если объявить тип до класса, он станет доступным всем подряд, что не есть хорошо. Перенести же объявление типа в раздел реализации невозможно, поскольку заголовки методов класса, а также поля и свойства должны быть полностью объявлены в разделе интерфейса, даже если снаружи класса они и не видны благодаря использованию strict private.
Аватара пользователя
Иван Шихалев
энтузиаст
Сообщения: 1138
Зарегистрирован: 15.05.2006 11:26:13
Откуда: Екатеринбург
Контактная информация:

Сообщение Иван Шихалев »

daesher
Проверяли в каком режиме? При {$MODE DELPHI} в 2.5.1, насколько я помню, есть и записи с методами, и class operators.
Аватара пользователя
coyot.rush
постоялец
Сообщения: 309
Зарегистрирован: 14.08.2009 08:59:48

Сообщение coyot.rush »

6. Записи с методами. Record теперь может иметь не только свойства но и методы (конструкторы в том числе), классовые свойства, методы, свойства а также вложенные типы.

Тогда чем отличается запись от класса? Случаем множественного наследия нет? :shock:

Использование (свойства) Generic в fpc и delphi, какие есть отличия?

Код: Выделить всё

TFPStrObjMap = specialize TFPGMap<string, TObject>;
класс унаследованный от TObject ... :oops:

Добавлено спустя 23 минуты 18 секунд:
Статью "Обобщённое программирование(generics) в Delphi 2009 для Win32" http://www.tdelphiblog.com/2009/10/generics-delphi-2009-win32.html можно применять к fpc 2.4.2 :?:
daesher
постоялец
Сообщения: 221
Зарегистрирован: 09.03.2010 21:17:14

Сообщение daesher »

Иван Шихалев писал(а):daesher
Проверяли в каком режиме? При {$MODE DELPHI} в 2.5.1, насколько я помню, есть и записи с методами, и class operators.

Записи с методами есть, да, отстал от жизни (хотя, действительно, можно заменить обычным объектом - будет практически то же самое). А ведь раньше разница между objfpc и delphi была лишь в мелочах (вызовы процедурных переменных), любая конструкция в режиме delphi имела полное соответствие в objfpc.
class operator - даже не догадывается, что подобная конструкция возможна (unit1.pas(16,11) Error: Procedure or Function expected). Возможно, ввели в последние дни (компилятор я перебирал из svn примерно месяц назад, может, чуть меньше).

Добавлено спустя 28 минут 53 секунды:
coyot.rush писал(а):
Статью "Обобщённое программирование(generics) в Delphi 2009 для Win32" http://www.tdelphiblog.com/2009/10/generics-delphi-2009-win32.html можно применять к fpc 2.4.2 :?:

Не совсем.
1. Синтаксис работы с generic слегка отличается. Например, fpc требует ключевого слова specialize
2. Типизированный список находится в разрабатываемом модуле fgl
SII
новенький
Сообщения: 64
Зарегистрирован: 24.06.2007 17:15:09
Откуда: Зеленоград

Сообщение SII »

coyot.rush писал(а):Тогда чем отличается запись от класса? Случаем множественного наследия нет? :shock:


Класс -- более громоздкая вещь, что не всегда целесообразно. Например, если совершенно не нужны виртуальные методы, зачем выделять память под VMT? Зачем тянуть кучу никому не нужных стандартных методов? Ну и т.д.
zub
долгожитель
Сообщения: 2890
Зарегистрирован: 14.11.2005 22:51:26
Контактная информация:

Сообщение zub »

>>1. Синтаксис работы с generic слегка отличается. Например, fpc требует ключевого слова specialize

Вчера собраный из транка FPC в режиме {SMODE DELPHI} ругается на generic и spezialize - вроде появилась совместимость с делфовыми генериками
Аватара пользователя
coyot.rush
постоялец
Сообщения: 309
Зарегистрирован: 14.08.2009 08:59:48

Сообщение coyot.rush »

Синтаксис работы с generic слегка отличается. Например, fpc требует ключевого слова specialize

http://wiki.freepascal.org/Generics_Vote http://wiki.freepascal.org/Generics_Vote

Код: Выделить всё

type
    TGenericClass = generic class of x
      ..
    end;
    TGenericRec = generic record of x
       ...
    end;

Имхо мне этот вариант больше нравится.
1) не С++ 8)
2)Срузу по коду можно отличить обычную запись (структуру в С) от запись с методом
Павел Ишенин
постоялец
Сообщения: 475
Зарегистрирован: 24.03.2007 09:16:52

Сообщение Павел Ишенин »

1. http://wiki.lazarus.freepascal.org/FPC_ ... ures_2.4.2
2. http://wiki.lazarus.freepascal.org/FPC_ ... ures_Trunk

Добавлено спустя 3 минуты 14 секунд:
Включить поддержку методов и прочих возможностей для записей можно директивой

Код: Выделить всё

{$MODESWITCH ADVANCEDRECORDS}
Ответить