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

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

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

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

Сообщение coyot.rush » 06.01.2011 01:45:48

Интересует какие новые лексемы появились в 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:
Аватара пользователя
coyot.rush
постоялец
 
Сообщения: 309
Зарегистрирован: 14.08.2009 08:59:48

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

Сообщение daesher » 06.01.2011 10:24:19

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

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

Сообщение SII » 06.01.2011 11:54:56

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


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

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


В Дельфях нет "стопроцентной" модульности, как, например, в Аде, из-за чего и появляется необходимость в типах внутри классов, спецификаторах видимости вроде private и т.п. В частности, нужда в типах внутри классов возникает в том случае, если эти самые типы используются (и, соответственно, должны быть видимы) только внутри класса. Если объявить тип до класса, он станет доступным всем подряд, что не есть хорошо. Перенести же объявление типа в раздел реализации невозможно, поскольку заголовки методов класса, а также поля и свойства должны быть полностью объявлены в разделе интерфейса, даже если снаружи класса они и не видны благодаря использованию strict private.
SII
новенький
 
Сообщения: 64
Зарегистрирован: 24.06.2007 17:15:09
Откуда: Зеленоград

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

Сообщение Иван Шихалев » 06.01.2011 13:26:51

daesher
Проверяли в каком режиме? При {$MODE DELPHI} в 2.5.1, насколько я помню, есть и записи с методами, и class operators.
Аватара пользователя
Иван Шихалев
энтузиаст
 
Сообщения: 1138
Зарегистрирован: 15.05.2006 11:26:13
Откуда: Екатеринбург

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

Сообщение coyot.rush » 06.01.2011 21:02:35

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 :?:
Аватара пользователя
coyot.rush
постоялец
 
Сообщения: 309
Зарегистрирован: 14.08.2009 08:59:48

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

Сообщение daesher » 07.01.2011 11:42:57

Иван Шихалев писал(а):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
daesher
постоялец
 
Сообщения: 221
Зарегистрирован: 09.03.2010 22:17:14

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

Сообщение SII » 07.01.2011 14:27:02

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


Класс -- более громоздкая вещь, что не всегда целесообразно. Например, если совершенно не нужны виртуальные методы, зачем выделять память под VMT? Зачем тянуть кучу никому не нужных стандартных методов? Ну и т.д.
SII
новенький
 
Сообщения: 64
Зарегистрирован: 24.06.2007 17:15:09
Откуда: Зеленоград

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

Сообщение zub » 07.01.2011 14:48:08

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

Вчера собраный из транка FPC в режиме {SMODE DELPHI} ругается на generic и spezialize - вроде появилась совместимость с делфовыми генериками
zub
долгожитель
 
Сообщения: 2887
Зарегистрирован: 14.11.2005 23:51:26

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

Сообщение coyot.rush » 07.01.2011 17:21:49

Синтаксис работы с 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)Срузу по коду можно отличить обычную запись (структуру в С) от запись с методом
Аватара пользователя
coyot.rush
постоялец
 
Сообщения: 309
Зарегистрирован: 14.08.2009 08:59:48

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

Сообщение Павел Ишенин » 12.01.2011 06:00:31

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

Добавлено спустя 3 минуты 14 секунд:
Включить поддержку методов и прочих возможностей для записей можно директивой
Код: Выделить всё
{$MODESWITCH ADVANCEDRECORDS}
Павел Ишенин
постоялец
 
Сообщения: 475
Зарегистрирован: 24.03.2007 10:16:52


Вернуться в Free Pascal Compiler

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

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

Рейтинг@Mail.ru