Новое в FPC 2.4.0

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

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

Mirage
энтузиаст
Сообщения: 881
Зарегистрирован: 06.05.2005 20:29:07
Откуда: Russia
Контактная информация:

Новое в FPC 2.4.0

Сообщение Mirage »

Всем привет.
Читаю список изменений в FPC 2.4.0
http://wiki.freepascal.org/User_Changes_2.4.0
и удивляюсь большому количеству оных, введенных для совместимости с Delphi. ProjectX на базе FPC чтоли планируется? :)

Еще порадовало изменение в выравнивании рекордов. Раньше они как попало могли лежать на стеке, а сейчас как положено. Очень вероятно, что отставание от дельфей в скорости было обусловлено именно этим. Сейчас буду тестить.:)

Добавлено спустя 23 часа 10 минут 42 секунды:
Так и есть -- реальный код (не синтетический тест) скомпилированный 2.4.0 заметно быстрее чем 2.3.1 и не уступает Delphi.
Аватара пользователя
Ambient
новенький
Сообщения: 24
Зарегистрирован: 27.09.2009 10:51:17

Сообщение Ambient »

Вопрос по нововведениям в FPC.
Планируется ли что-то подобное?
1)
TRec = Record
value : String;
procedure DoProc(A1: String);
End;

2) Классы, совместимые с С++
т.е., чтобы можно было, к примеру описать класс из гнусного с++

[CPP, external]
TClass = class
...
end;

и можно было бы безболезненно использовать внешние объекты из С++ библиотек.
Аватара пользователя
Sergei I. Gorelkin
энтузиаст
Сообщения: 1409
Зарегистрирован: 24.07.2005 14:40:41
Откуда: Зеленоград

Сообщение Sergei I. Gorelkin »

(2) уже черт значет сколько присутствует в форме ключевого слова cppclass.
скалогрыз
долгожитель
Сообщения: 1804
Зарегистрирован: 03.09.2008 02:36:48

Сообщение скалогрыз »

Sergei I. Gorelkin писал(а):(2) уже черт значет сколько присутствует в форме ключевого слова cppclass.

и толком не поддерживается :)

кто-то недавно что-то исправлял в реализации cpp, но вроде как бросил это занятие?!
http://www.mail-archive.com/fpc-devel@l ... 15312.html

потому и Qt widget использует Си-шную обёртку, вместо прямого использования классов.
Аватара пользователя
Ambient
новенький
Сообщения: 24
Зарегистрирован: 27.09.2009 10:51:17

Сообщение Ambient »

Sergei I. Gorelkin писал(а):(2) уже черт значет сколько присутствует в форме ключевого слова cppclass.

Сергей, а где про это почитать подробнее можно?
Аватара пользователя
Sergei I. Gorelkin
энтузиаст
Сообщения: 1409
Зарегистрирован: 24.07.2005 14:40:41
Откуда: Зеленоград

Сообщение Sergei I. Gorelkin »

Не знаю, в официальной документации что-то не видно упоминаний...
Аватара пользователя
coyot.rush
постоялец
Сообщения: 309
Зарегистрирован: 14.08.2009 08:59:48

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

Free Pascal Compiler version 2.4.0
Compiler Date : 2009/12/28

Ow<x> Perform whole-program optimization <x>, see fpc -i for possible values
Supported Whole Program Optimizations:
All
DEVIRTCALLS
OPTVMTS
SYMBOLLIVENESS

Кто нибудь этим пользовался и что эт токаое :?: В 2.2.х нет такого :!:

Добавлено спустя 27 минут 55 секунд:
Ambient
и можно было бы безболезненно использовать внешние объекты из С++ библиотек.

Напрямую врядли, но можно и так.
Смотреть здесь http://www.freepascal.org/docs.var make code written in C or C++ accessible in Pascal. зеркало http://mirror.mirimar.net/freepascal/docs-pdf/
Аватара пользователя
Sergei I. Gorelkin
энтузиаст
Сообщения: 1409
Зарегистрирован: 24.07.2005 14:40:41
Откуда: Зеленоград

Сообщение Sergei I. Gorelkin »

coyot.rush писал(а):Кто нибудь этим пользовался и что эт токаое В 2.2.х нет такого

Оптимизация программы целиком: http://wiki.freepascal.org/Whole_Program_Optimization
Предназначается для уменьшения размера программ, о котором так долго и нудно говорят все, кто способен говорить...
Mirage
энтузиаст
Сообщения: 881
Зарегистрирован: 06.05.2005 20:29:07
Откуда: Russia
Контактная информация:

Сообщение Mirage »

1) тоже присутствует еще со времен Turbo pascal, в виде ключевого слова object.
Аватара пользователя
Ambient
новенький
Сообщения: 24
Зарегистрирован: 27.09.2009 10:51:17

Сообщение Ambient »

Mirage писал(а):1) тоже присутствует еще со времен Turbo pascal, в виде ключевого слова object.

"Нет такой буквы в этом слове" (с)
Суть, реализация и механизмы

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

TRec = Record
   value : String;
   procedure DoProc(A1: String);
End;

и

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

TObj = object
   value : String;
   procedure DoProc(A1: String);
End;

несколько отличаются, достаточно выполнить sizeof, прочитать о нововведениях в Дельфи и наступит просветление.

Добавлено спустя 2 минуты:
Sergei I. Gorelkin писал(а):(2) уже черт значет сколько присутствует в форме ключевого слова cppclass.

Ага, оказалось, что ключевое слово присутствует, но пользы от этого ноль. А жаль.
alexrayne
постоялец
Сообщения: 125
Зарегистрирован: 03.12.2008 15:56:26

Сообщение alexrayne »

Ambient писал(а): Mirage писал(а):1) тоже присутствует еще со времен Turbo pascal, в виде ключевого слова object.


"Нет такой буквы в этом слове" (с)
Суть, реализация и механизмы

Код: Выделить всё
TRec = Record
value : String;
procedure DoProc(A1: String);
End;


и

Код: Выделить всё
TObj = object
value : String;
procedure DoProc(A1: String);
End;


несколько отличаются, достаточно выполнить sizeof, прочитать о нововведениях в Дельфи и наступит просветление.


Вообще в обероне похожую фичу реализовали весьма приятным образом процедурами связанными с типом:
PROCEDURE (t: Tree) Insert (node: Tree);
потом она вызывается как метод t: Tree.
ето конешноже перегрузка функций в слегка переворматированом виде но имхо стилистику писания меняет существенно. (так же как и использование () для индексации массива вместо [])
что интересно, для реализации етого сичас ненужно много пилить, поправить только синтаксический анализатор.
зато помимо методов в рекордах, можно методы к чему угодно прикрутить.
Max Rusov
постоялец
Сообщения: 191
Зарегистрирован: 25.04.2009 15:46:03

Сообщение Max Rusov »

Ambient писал(а): Суть, реализация и механизмы Record... и object... несколько отличаются, достаточно выполнить sizeof, прочитать о нововведениях в Дельфи и наступит просветление.

Вы ошибаетесь. Если не описывать в object виртуальные методы, то это суть Record и будет. Только что case нельзя делать, но это легко обходится.
Аватара пользователя
Astralis
новенький
Сообщения: 45
Зарегистрирован: 06.06.2007 20:33:05
Откуда: Tvercity-Annet
Контактная информация:

Сообщение Astralis »

1. Все зависит от потребности:
а. точное соотвествие Delphi Language 2008
тут уже ничего не изменить
b. record с четко опреденными полями в указанных смещениях, как правило для вызова внешних библиотек
в этом случае достаточно record c полем процедурного типа и однократнного связывания указателя
c. класс, размещенный в стеке
object - очевидное решение
d. статический класс, аналог namespace в c++
можно использовать отдельный юнит, класс с класс-методами и статическими полями, а можно просто создаь класс в секции initialization
e. объектная ориентированность
class решает почти все подобные потребности

2. есть несколько возможнстей
a. ключевое слово cppclass
b. импорт отдельных методов класс, подробнее написал здесь
с. получить экземпляр класс и работать с его VMT. Хотя указание виртуальности метода является оциональным, это является отступлением от ООП в пользу эффективности программного кода. Так что можно сделать все методы виртуальными и эффективно работать.
Аватара пользователя
Cheb
энтузиаст
Сообщения: 994
Зарегистрирован: 06.06.2005 15:54:34
Контактная информация:

Сообщение Cheb »

У меня:
1). Отломились массивы, индексировавшиеся булевым типом. Заменил на [0..1], и на ord() при индексации и сижу теперь, нервно скрестив пальцы
2). В Линуксе взыграл дремавший баг в binutils (при компиляции динамических библиотек) в результате чего обломился линкер, и понадобилось шаманство с привинчиванием к opensuse 11.1 репозиториев от 11.2
3). Неожиданно отломилась моя система перзистентности: в RTTI изменился тип Wide строки, tkWString на tkUString. Причём только в Линуксе: в маздае всё работает не чихнув. Буду разбрираться, W. это за F.
Mirage
энтузиаст
Сообщения: 881
Зарегистрирован: 06.05.2005 20:29:07
Откуда: Russia
Контактная информация:

Сообщение Mirage »

Cheb писал(а):1). Отломились массивы, индексировавшиеся булевым типом.


Как отломились? У меня такие используются. Правда константы только.
А перечисления в качестве индекса использую и в переменных - все работает.

Кстати, вижу, у некоторых на форуме FPC пишет версию 2.4.1 - это где такая берется?
Ответить