Форум программистов, компьютерный форум, киберфорум
Наши страницы
Free Pascal
Войти
Регистрация
Восстановить пароль
 
shyub
344 / 144 / 39
Регистрация: 11.07.2013
Сообщений: 791
#1

Что нового в FPC-3.0.0? - Free Pascal

19.12.2015, 11:59. Просмотров 1377. Ответов 16
Метки нет (Все метки)

Было бы очень интересно услышать обсуждение новшеств FPC-3.0.0 и его отличий от FPC-2.6.4. На эту тему, даже на официальном сайте, удаётся найти только отрывочную информацию.
Например, работа с русскими именами файлов и каталогов, есть ли необходимость использовать функции UTF8ToSys() или UTF8Length() и аналогичные, так же где-то встречал, что теперь поддерживается виртуальная Java-машина и многое-многое другое.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.12.2015, 11:59
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Что нового в FPC-3.0.0? (Free Pascal):

Компиляция в fpc 64
Здравствуйте. Установил FreePascal 64...

Настройка FPC
Я скачал fpc-2.6.4.i386-win32.exe, установил, все работает, только существует...

Ошибка в FPC
Дело вот в чем: компилятор выдает ошибку там, где я пытаюсь засунуть в массив...

fpc под Linux
Здравствуйте, помогите кто-нибудь. Почему после установки всех пакетов вручную...

Сохранить в формате fpc
нужно сохранить программу program Naperstki; var mas:array of integer; ...

FPC в Mac OS X Lion
Имеется файл "file.txt". В нем содержится число 1. Написал код program test1;...

16
Новичок
Модератор
1480 / 946 / 457
Регистрация: 17.07.2012
Сообщений: 4,888
Завершенные тесты: 3
20.12.2015, 02:45 #2
Ну вот некоторые новшества
Инициализация динамического массива.
Пример
Pascal
1
2
3
4
5
6
7
8
9
10
{$mode objfpc}
type TIntArray=array of Integer;
var a:TIntArray;
    i:Integer;
begin
  a:=TIntArray.Create(1,2,3,4,5);
  for i in a do Write(i,' ');//1 2 3 4 5
  Writeln;
  Readln;
end.

Инициализация переменной значением по умолчанию(Default)
Пример
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
type
  TRecord = record
    i: LongInt;
    s: AnsiString;
  end;
 
var
  i: LongInt;
  o: TObject;
  r: TRecord;
begin
  i := Default(LongInt); // 0
  o := Default(TObject); // Nil
  r := Default(TRecord); // ( i: 0; s: '')
end.

Одно из интересных новшеств type-helper. Только у меня почему-то пример из доков не компилируется.
Пример
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
{$mode objfpc}
type
   TLongIntHelper = type helper for LongInt
     class procedure Test; static;
   end;
 
class procedure TLongIntHelper.Test;
begin
   Writeln('Test');
end;
 
var
   i: LongInt;
begin
   i.Test;
   $12345678.Test;
   LongInt.Test;
end.

А так вроде особо нового ничего нет в новой версии FPC.

Добавлено через 10 минут
Еще судя по докам наконец-то стало возможно использовать слово specialize при объявлении переменных.
Before
Pascal
1
2
type TPtrList=specialize TList<Pointer>;
var p:TPtrList;//var p:specialize TList<Pointer> писать нельзя

After
Pascal
1
2
//As of version 3.0 of Free Pascal, the specialize keyword can also be used in a variable declaration:
var p:specialize TList<Pointer>;


Добавлено через 13 минут
К сожалению, дженерики еще нельзя использовать для написания обобщенных функций/процедур.
3
rangerx
1941 / 1550 / 478
Регистрация: 31.05.2009
Сообщений: 2,913
22.12.2015, 15:53 #3
Цитата Сообщение от Новичок Посмотреть сообщение
Инициализация переменной значением по умолчанию(Default)
Странно, что это не появилось сразу, как появились дженерики.
Цитата Сообщение от Новичок Посмотреть сообщение
Одно из интересных новшеств type-helper. Только у меня почему-то пример из доков не компилируется.
У меня компилируется только при использовании {$modeswitch typehelpers}, хотя в доках и написано, что
This modeswitch is enabled by default only in mode Delphi...
Цитата Сообщение от Новичок Посмотреть сообщение
Еще судя по докам наконец-то стало возможно использовать слово specialize при объявлении переменных.
Ну, это было возможно ещё в fpc-2.6.4 Другое дело, что class всё равно так создать не удастся, reсord разве что.
Цитата Сообщение от Новичок Посмотреть сообщение
К сожалению, дженерики еще нельзя использовать для написания обобщенных функций/процедур.
Дженерики, ещё достаточно сырые, на самом деле. Там и помимо обобщенных функций/процедур есть, что доводоить до ума. Попробуй написать какой-нибудь обобщённый контейнер, например Map... А обобщенные функции/процедуры можно кое-как имитировать используя class function/procedure.

Добавлено через 5 минут
Насколько я понимаю ещё появилась возможность наследоваться таким образом
Pascal
1
2
3
4
5
type generic TSomeClass<T> = class
     end;
 
     generic TSomeClassEx<T> = class(specialize TSomeClass<T>)
     end;
1
shyub
344 / 144 / 39
Регистрация: 11.07.2013
Сообщений: 791
22.12.2015, 21:09  [ТС] #4
Основные изменения в этом выпуске:
- Улучшения совместимости с Delphi:
- Добавлена поддержка Delphi-подобных пространств имен для модулей
- Добавлена возможность создания динамических массивов с помощью конструктора Create
- Строки типа AnsiString теперь хранят информацию о своей кодировке

Изменения в компиляторе:
- Добавлен новый уровень оптимизации -O4, при котором компилятор может переставлять поля в объектах классов, не вычислять неиспользуемые значения и ускорять работу с числами с плавающей точкой с возможной потерей точности.
- Добавлен анализ потоков данных (data flow analysis)
- Добавлена поддержка следующих целей:◦Java Virtual Machine / Dalvik
- AIX для PowerPC 32/64-бит (без поддержки сборки ресурсов для 64-бит)
- MS-DOS real mode
- Android для ARM, x86 и MIPS
- AROS

Взято с другого форума, посвящённого обсуждению аналогичной темы.

Добавлено через 5 минут
Цитата Сообщение от shyub Посмотреть сообщение
- Добавлена поддержка следующих целей:◦Java Virtual Machine / Dalvik
- Android для ARM, x86 и MIPS
Хотелось бы "услышать" об этих изменениях подробнее...
0
ZX Spectrum-128
Модератор
Эксперт Pascal/Delphi
3856 / 2843 / 3631
Регистрация: 05.06.2014
Сообщений: 13,941
23.12.2015, 11:14 #5
У меня скорее вопрос возник:
а надо ли сносить 2.6.4 и рваться ставить 3.0 для очень обычного юзера?

Не по теме:

И плач Ярославны - судя по всему, текстовый интерфейс в IDE уже не будут убирать в принципе, да?
Хочу GUI в fpc

0
Новичок
Модератор
1480 / 946 / 457
Регистрация: 17.07.2012
Сообщений: 4,888
Завершенные тесты: 3
23.12.2015, 17:41 #6
Цитата Сообщение от ZX Spectrum-128 Посмотреть сообщение
а надо ли сносить 2.6.4 и рваться ставить 3.0 для очень обычного юзера?
Я думаю смысла нет, особых изменений нет.

Не по теме:

Цитата Сообщение от ZX Spectrum-128 Посмотреть сообщение
Хочу GUI в fpc
Lazarus же есть

0
shyub
344 / 144 / 39
Регистрация: 11.07.2013
Сообщений: 791
23.12.2015, 19:58  [ТС] #7
Цитата Сообщение от ZX Spectrum-128 Посмотреть сообщение
а надо ли сносить 2.6.4 и рваться ставить 3.0 для очень обычного юзера?
Я обычный юзер и до сих пор пользуюсь Lazarus 1.3 + FPC 2.7.1 (т.к. иногда приходится писать под андроид), но собираюсь заменить его на laz4android 1.4.4 + FPC3.0.0 (наконец то появилась стабильная версия). Лично для меня она актуальна.
0
volvo
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
25595 / 17148 / 6820
Регистрация: 22.10.2011
Сообщений: 30,344
Записей в блоге: 6
24.12.2015, 19:33 #8
Цитата Сообщение от ZX Spectrum-128 Посмотреть сообщение
а надо ли сносить 2.6.4 и рваться ставить 3.0 для очень обычного юзера?
Нет. Там будут новые заморочки со строками (они их переделали очень значительно), наплачешься.
Цитата Сообщение от shyub Посмотреть сообщение
Я обычный юзер и до сих пор пользуюсь Lazarus 1.3 + FPC 2.7.1
Ты уже не обычный, судя по этому заявлению. Офсайт Лазаруса до сих пор втюхивает всем версию, собранную под 2.6.4. Вот это - обычный пользователь, тот, кто использует то, что ему предлагается, не рискуя менять компилятор или искать девелоперские версии.
1
vlisp
443 / 412 / 103
Регистрация: 10.08.2015
Сообщений: 1,391
Завершенные тесты: 1
25.12.2015, 02:45 #9
Цитата Сообщение от volvo Посмотреть сообщение
Офсайт Лазаруса до сих пор втюхивает всем версию, собранную под 2.6.4.
fpc 2.7.1 - тупиковая ветвь, выпущенная 2 года назад, fpc 2.6.4 последний релиз - прошлогодний, то есть более новый, такой вот парадокс. В версии 3 обещали исправить проблему с 64 битной версией компилятора из-за которой рекомендовалось использовать только 32битную версию
0
shyub
344 / 144 / 39
Регистрация: 11.07.2013
Сообщений: 791
25.12.2015, 03:43  [ТС] #10
Цитата Сообщение от shyub Посмотреть сообщение
Я обычный юзер и до сих пор пользуюсь Lazarus 1.3 + FPC 2.7.1
Заменил на laz4android 1.4.4 + FPC3.0.0, "полёт" пока нормальный. Приложения под Android перекомпилировал, пошли. Под Windows возникли проблемы с UTF8, но воспользовался советами, ранее приводимыми Volvo, были "заморочки", но в конце-концов старые проекты заработали.
Хотел бы попросить в связи с этим нашего модератера volvo ещё раз объяснить тонкости работы с этим "бл-цким" UTF8, строками и файлами. Не могу пока "въехать", где надо применять ф-ции типа UTF8To... и наоборот ...ToUTF8. Дайте какую-то системную информацию, сложно разбириться "методом тыка".
0
Gluhow
14 / 14 / 15
Регистрация: 12.11.2011
Сообщений: 139
14.03.2017, 11:19 #11
Цитата Сообщение от Новичок Посмотреть сообщение
var p:specialize TList<Pointer>;
А как правильно креейтить переменную такого типа?
0
vlisp
443 / 412 / 103
Регистрация: 10.08.2015
Сообщений: 1,391
Завершенные тесты: 1
14.03.2017, 11:40 #12
Цитата Сообщение от Gluhow Посмотреть сообщение
А как правильно креейтить
Для начала выучить русский язык
0
Новичок
Модератор
1480 / 946 / 457
Регистрация: 17.07.2012
Сообщений: 4,888
Завершенные тесты: 3
14.03.2017, 13:39 #13
Вроде бы только так можно.
Pascal
1
2
3
4
5
type TPtrList = specialize TList<Pointer>;
var p: TPtrList;
begin
//...
p := TPtrList.Create;
0
Gluhow
14 / 14 / 15
Регистрация: 12.11.2011
Сообщений: 139
14.03.2017, 14:41 #14
Цитата Сообщение от vlisp Посмотреть сообщение
Для начала выучить русский язык
С русским у меня действительно беда, но в данном случая я написал так, потому что так может оказаться понятнее, чем если сказать просто "создать".
Цитата Сообщение от Новичок Посмотреть сообщение
Вроде бы только так можно.

Pascal
1
2
3
4
5
type TPtrList = specialize TList<Pointer>;
var p: TPtrList;
begin
//...
p := TPtrList.Create;
В этом случае пропадает весь смысл возможности использования слова specialize при объявлении переменных. У меня получилось так
Pascal
1
2
3
var p:specialize TList<Pointer>;
begin
 p:=(specialize TList<Pointer>).Create;
Но такая конструкция мне не нравится своей громоздкостью. Может есть способ попроще?
0
Новичок
Модератор
1480 / 946 / 457
Регистрация: 17.07.2012
Сообщений: 4,888
Завершенные тесты: 3
14.03.2017, 14:46 #15
Цитата Сообщение от Gluhow Посмотреть сообщение
У меня получилось так
Да, что-то я совсем забыл уже Pascal.
Цитата Сообщение от Gluhow Посмотреть сообщение
Может есть способ попроще?
Если в начале написать
{$mode delphi}
то можно будет вот так создавать
Pascal
1
2
3
var p: TList<Pointer>;
begin
   p := TList<Pointer>.Create;
0
volvo
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
25595 / 17148 / 6820
Регистрация: 22.10.2011
Сообщений: 30,344
Записей в блоге: 6
14.03.2017, 15:10 #16
Цитата Сообщение от Gluhow Посмотреть сообщение
В этом случае пропадает весь смысл возможности использования слова specialize при объявлении переменных
Возможность описания типа при объявлении переменной - это побочное явление. Основное, что делалось - это:

Pascal
1
2
3
4
5
6
7
8
9
10
type
  generic
    TA<T> = class
    end;
 
  generic
    TB<T> = class(specialize TA<T>) // вот оно, inplace-описание класса
    end;
 
// ...
0
shyub
344 / 144 / 39
Регистрация: 11.07.2013
Сообщений: 791
14.03.2017, 20:09  [ТС] #17
Цитата Сообщение от Gluhow Посмотреть сообщение
потому что так может оказаться понятнее
Лично мне понятнее русские слова, чем искаженные английские термины.
0
14.03.2017, 20:09
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.03.2017, 20:09
Привет! Вот еще темы с решениями:

Использование классов в FPC
программа : type mas=array of array of real; Tclass=class private...

Fpc-2.2.0.i386-win32
Здравствуйте, господа! Не подскажите, где можно скачать последнюю версию среды...

Странный фон в FPC IDE
Поменял рабочую папку в свойствах ярлыка, и вот такой фон получается каждый раз...

Указатели FPC. Присвоение значения
Program Lab3; Type UkazPrepodavatel = ^Prepodavatel; Prepodavatel =...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
17
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru