Список функций языка Delphi и версии, в которой они были введены / объявлены устаревшими

114

Прежде чем я начну, я хотел бы указать, что я честно и искренне неоднократно и исчерпывающе искал через Google такую ​​вещь, но не смог ее найти.

Мне требуется (для проекта, который я разрабатываю) список всех Delphi (от 2007 до самой последней выпущенной версии, я больше не поддерживаю никакие версии старше 2007 года) «Языковые функции», а также версии, в которых они были представлены и ( где применимо) устарел, улучшен или удален.

Я уже отмечал подобные вопросы в Stack Overflow и раньше, хотя большинство из них были сформулированы в форме «какая функция лучше всего» и закрыты как неподходящие.

Если кто-нибудь знает о таком списке (или имеет достаточно свободного времени для его составления), я был бы очень благодарен.

В принятом ответе будет либо ссылка на такой список, либо сам список.

ЛаКравен
источник
В: Так зачем именно вам такой список? Вопрос: Вы пытаетесь создать один набор кодов (возможно, компонент или библиотека) , который поддерживает все платформы между BDS2007 и XE2 (т.е. использует не имеется новее BDS2007)? В: Если да, то почему бы просто не попробовать скомпилировать 2007 и посмотреть, что ломается? (PS: Я до сих пор с удовольствием использую BDS2006;)).
paulsm4
8
Саймон, проверьте этот вопрос. Список новых возможностей языка Delphi, RTL, VCL. , Также в моем блоге я поддерживаю обновленный Список изменений между версиями Delphi
RRUZ
3
@ paulsm4 1) Таким образом, я могу учитывать ограничения функций для разных версий в публичных библиотеках, 2) Да (но не обязательно в библиотеке компонентов), 3) Потому что легче знать заранее, чем постоянно тестировать на разных версиях каждый отдельный аспект библиотеки . Теоретически D2006 подойдет, но я не собираюсь его активно поддерживать (без обид).
LaKraven

Ответы:

159

Обратите внимание, что в этом ответе перечислены только новые языковые функции, а
не новые функции VCL / FMX.

Вот ссылки на docwiki RAD Studio:

Полный список из Embarcadero: Что нового
См. Также: Список Давида I.


Подвести итоги:

Delphi 10.3.x, 10.4 (еще не вышло, это предположение)

Delphi 10.3

  • 64-битный компилятор Linux больше не использует ARC , вместо этого он использует ручное управление по умолчанию, такое же, как и в компиляторе Windows. Это значительно упрощает перенос кода из Windows или OSX в Linux.
  • Встроенные переменные с автоматическим выводом типа
  • Поддержка 8-битного AnsiChar / AnsiString включена в Linux.
  • C ++ Builder и Delphi теперь используют один и тот же ABI для всех вызовов.

Delphi 10.2 Токио

Delphi 10.1 Берлин

Delphi 10 Сиэтл

  • Поддержка Android 5.1.1 и iOS 8.4
  • Улучшенная обработка исключений OSX

Delphi XE8

  • Поддержка 64-битной iOS;
  • Новые целочисленные типы: FixedInt , FixedUInt 32-битные целочисленные типы на всех платформах;
  • Новые платформо-зависимые целочисленные типы: LongInt , LongWord (64- битные на iOS-64, 32-битные на всех остальных платформах);

Delphi XE7

Delphi XE6

Delphi XE5

Delphi XE4

В XE4 это изменилось, так что $ ENDIF стал допустимым ограничителем для $ IF, $ IFDEF, $ IFNDEF и $ IFOPT.

Delphi XE3

Delphi XE2

Delphi XE

  • {$STRINGCHECKS}Директива компилятора игнорируется в ХЕ;
  • Новое 16-байтовое значение для {$ALIGN}директивы: допустимые значения для {$ALIGN}директивы теперь включают 1, 2, 4, 8 и 16.
  • {$CODEALIGN}Директива new устанавливает начальный адрес процедуры или функции.
  • {$STRONGLINKTYPES ON}директива
  • Поддержка регулярных выражений.

Delphi 2010

  • Улучшенный Delphi RTTI (информация о типе времени выполнения).
  • Атрибуты
  • asОператор может быть использован , чтобы бросить интерфейсную обратную ссылку на объект , из которого он был извлечен.
  • isОператор может быть использован для проверки , была ли ссылка на интерфейс , извлеченные из определенного класса.
  • Нормальное небезопасным литье может выполняться на интерфейсе: TObject(SomeInterface).
  • delayedДиректива new указывает, что внешняя библиотека, такая как DLL, не должна загружаться во время объявления, а должна дождаться первого вызова метода
  • Конструктор / деструктор класса

Delphi 2009

Delphi 2007

  • Я не знаю никаких языковых изменений;
    Обратите внимание, что Delphi 2007 - это безотказный выпуск, DCU из D2006 будут работать без изменений в D2007 ;
  • («Личность» .NET 2007 года представила дженерики )

Delphi 2006

Delphi 2005

  • for ... in петли,
  • inline ключевое слово
  • Подстановочный знак в операторе использования разрешен
  • вложенные типы
  • вложенные константы
  • {$REGION}/ {$ENDREGION}директивы

Delphi 7

  • три дополнительных предупреждения компилятора:
    • Unsafe_Type,
    • Unsafe_Code и
    • Unsafe_Cast. Эти предупреждения по умолчанию отключены, но могут быть включены.
  • новая директива компилятора {$WARN UNSAFE_CODE ON}
  • Перегрузки подпрограмм, которые форматируют и анализируют числа, значения даты, времени и валюты с помощью TFormatSettingsструктуры.

Delphi 6

Delphi 5

Нет новых языковых функций, но:

Delphi 4

Delphi 3

  • WordBool, LongBool и bytebool магазин , trueкак -1вместо 1 (Boolean не изменяется)
  • Компоненты должны быть установлены с использованием packages.
  • Утверждения.
  • out параметры.
  • Widestring
  • interfaceи поддержка dispinterfaceключевых слов и COM ( dispid).

Delphi 2

  • Поддержка 32-битной версии;
  • Ansistringзаменяет shortstringтип строки по умолчанию
  • Currency
  • Variant (для взаимодействия с автоматизацией OLE).
  • Поддержка потоковой передачи и ThreadVarключевое слово.
  • 4 байта данных выровнены по 4 байта. Новое packedключевое слово отменяет это поведение;
  • TDateTime начинается в 1899/12/30 D1, он начался в0000/00/00
  • новое finalizationключевое слово
  • registerи stdcallдобавлены соглашения о вызовах.
  • packed ключевое слово.
Johan
источник
Ах замечательно! Я не мог найти способ заставить Docwiki показывать мне страницы, относящиеся к более старым версиям Delphi (до XE2) ... не знаю почему! Это замечательно и отмечен как правильный ответ! Спасибо!
LaKraven
@DavidHeffernan Полезно иметь особенности нового в 2007 году , так как это устанавливает базовый уровень ... в некотором смысле, я буду знать с уверенностью, что часть того , что я мог бы производить , возможно , работать в более ранних версиях (даже если я сам нет намерения его поддерживать)
LaKraven
9
В моем блоге я храню обновленный Список изменений между версиями Delphi
RRUZ
3
Черт возьми ОТЛОЖЕН, это УДИВИТЕЛЬНО! Почему бы вам не дать вам этот список при обновлении!
Питер Тернер
1
Это не совсем так. $LIBPREFIXи другие директивы существуют, по крайней мере, с D7 (я подозреваю, что D6, поскольку они связаны с Kylix)
Free Consulting
16

Просто чтобы дополнить ответ Йохана, проверьте эту запись в моем блоге List of changes between versions of Delphi (Since Delphi 5)и отличную страницу, на The TIndexкоторой перечислены большинство новых функций, появившихся после delphi 2005, и ресурсы по каждой из них.

РРУЗ
источник
Некоторое время назад другой сайт delphi delphi3000 был отмечен как опасный для некоторых антивирусов.
RRUZ
2
Я владелец TIndex и могу подтвердить, что это ложное срабатывание.
LachlanG 05
7

Jedi.inc файл , используемый в проекте Dephi JEDI предоставляет ряд полнометражных Определяет. Если ваш проект совместим с MPL, вы даже можете использовать его для обнаружения функций и избавить себя от необходимости заново изобретать это конкретное колесо.

Например, он определяет SUPPORTS_FOR_IN, поддерживает ли компилятор счетчики. Можно обернуть ваш код перечислителя IFDEFпроверкой этого определения, а не проверять конкретную версию компилятора.

afrazier
источник
Да, это включение, безусловно, полезно, но ему не хватает полноты подробного списка (отсюда и этот вопрос). Спасибо за предложение ... Считайте принятый ответ на этот вопрос улучшением информации, предоставленной jedi.inc :)
LaKraven
1
@LaKraven: Да, у него много чего не получается, но для некоторых этого может быть достаточно. Это также имеет то преимущество, что уже сделано. :-) Лично я считаю, что сглаживание иерархий VCL, удаление заголовков авторских прав и их размещение в репозитории управления версиями тоже может оказаться полезным. Таким образом вы сможете увидеть, когда были реализованы определенные функции RTL / VCL.
afrazier
@LaKraven, я считаю, что jedi.incпо крайней мере точным, а список Йохана требует некоторых проверок.
Бесплатная консультация