Lista funkcji języka Delphi i wersji, w których zostały wprowadzone / wycofane

114

Zanim zacznę, chciałbym zaznaczyć, że wielokrotnie i dogłębnie szukałem czegoś takiego w Google w sposób uczciwy i autentyczny i nie mogłem go znaleźć.

Potrzebuję (dla projektu, który tworzę) listy wszystkich Delphi (od 2007 do najnowszej wydanej wersji, nie obsługuję już żadnej wersji starszej niż 2007) "Funkcje językowe" oraz wersje, w których zostały wprowadzone i ( w stosownych przypadkach) wycofane, ulepszone lub usunięte.

Już wcześniej zauważyłem podobne pytania do tego w Stack Overflow, chociaż większość z nich została sformułowana w formie „która funkcja jest najlepsza” i została zamknięta jako niewłaściwa.

Byłbym bardzo wdzięczny, gdyby ktoś wiedział o takiej liście (lub miał dość czasu na jej sporządzenie).

Zaakceptowana odpowiedź będzie zawierała link do takiej listy lub samą listę.

LaKraven
źródło
P: Więc dlaczego dokładnie potrzebujesz takiej listy? P: Czy próbujesz utworzyć jeden zestaw kodu (być może komponent lub bibliotekę), który obsługuje wszystkie platformy między BDS2007 i XE2 (tj. Nie używa żadnych funkcji nowszych niż BDS2007)? P: Jeśli tak, dlaczego nie spróbować skompilować go w 2007 roku i zobaczyć, co się zepsuje? (PS: nadal szczęśliwie używam BDS2006;)).
paulsm4
8
Simon sprawdź to pytanie Wybór listy nowości w języku Delphi, RTL, VCL? , Również na swoim blogu utrzymuję zaktualizowaną listę zmian między wersjami Delphi
RRUZ
3
@ paulsm4 1) Mogę więc uwzględnić ograniczenia funkcji w różnych wersjach w bibliotekach publicznych, 2) Tak (ale niekoniecznie w bibliotece komponentów), 3) Ponieważ łatwiej jest wiedzieć z wyprzedzeniem niż stale testować na różnych wersjach każdy indywidualny aspekt biblioteki . Teoretycznie D2006 działałby dobrze, ale nie zamierzam go aktywnie wspierać (bez obrazy).
LaKraven,

Odpowiedzi:

159

Zauważ, że ta odpowiedź wymienia tylko nowe funkcje językowe, a
nie nowe funkcje VCL / FMX.

Oto linki do docwiki RAD Studio:

Pełna lista z Embarcadero: What's New
Zobacz także: lista Davida I.


Podsumowując:

Delphi 10.3.x, 10.4 (jeszcze nie dostępne, to spekulacje)

Delphi 10.3

  • 64-bitowy kompilator Linuksa nie używa już ARC , zamiast tego używa domyślnego zarządzanego ręcznie, który jest taki sam jak w kompilatorze Windows. To sprawia, że ​​przenoszenie kodu z Windows lub OSX do Linuksa jest znacznie łatwiejsze.
  • Zmienne wbudowane z automatycznym wnioskiem o typie
  • 8-bitowa obsługa AnsiChar / AnsiString w systemie Linux.
  • C ++ Builder i Delphi używają teraz tego samego ABI dla wszystkich wywołań.

Delphi 10.2 Tokio

Delphi 10.1 Berlin

Delphi 10 Seattle

  • Wsparcie dla Androida 5.1.1 i iOS 8.4
  • Ulepszona obsługa wyjątków OSX

Delphi XE8

  • Wsparcie dla 64-bitowego iOS;
  • Nowe typy liczb całkowitych: FixedInt , FixedUInt 32-bitowe typy liczb całkowitych na wszystkich platformach;
  • Nowe typy liczb całkowitych zależne od platformy: LongInt , LongWord (64-bity na iOS-64, 32-bity na wszystkich innych platformach);

Delphi XE7

Delphi XE6

Delphi XE5

Delphi XE4

W XE4 zmieniło się to tak, że $ ENDIF stał się akceptowanym terminatorem dla $ IF, $ IFDEF, $ IFNDEF i $ IFOPT.

Delphi XE3

Delphi XE2

Delphi XE

  • {$STRINGCHECKS}Dyrektywa kompilator jest ignorowany w XE;
  • Nowa 16-bajtowa wartość dla {$ALIGN}dyrektywy: Dopuszczalne wartości dla {$ALIGN}dyrektywy obejmują teraz 1, 2, 4, 8 i 16.
  • new {$CODEALIGN}, ustawia adres początkowy procedury lub funkcji.
  • {$STRONGLINKTYPES ON}dyrektywa
  • Wsparcie dla wyrażeń regularnych.

Delphi 2010

  • Ulepszone Delphi RTTI (informacje o typie czasu pracy).
  • Atrybuty
  • asOperatora może być stosowany do oddania interfejsu jest odniesieniem do obiektu, z którego został ekstrahowany.
  • isOperatora może być wykorzystane do zweryfikowania, czy Interface ekstrahowano z danej klasy.
  • Normalna niebezpieczny odlew można przeprowadzić na interfejsie: TObject(SomeInterface).
  • nowa delayeddyrektywa wskazuje, że biblioteka zewnętrzna, taka jak DLL, nie ma być ładowana w momencie deklaracji, ale ma czekać do pierwszego wywołania metody
  • Konstruktor / Destruktor klasy

Delphi 2009

Delphi 2007

  • Żadnych zmian językowych, o których wiem;
    Zwróć uwagę, że Delphi 2007 to wydanie nieprzerwane, DCU z D2006 będą działać bez zmian w D2007 ;
  • („Osobowość” platformy .NET z 2007 r. Wprowadziła typy ogólne )

Delphi 2006

Delphi 2005

  • for ... in pętle,
  • inline słowo kluczowe
  • Dozwolone symbole wieloznaczne w instrukcji use
  • typy zagnieżdżone
  • zagnieżdżone stałe
  • {$REGION}/ {$ENDREGION}dyrektywy

Delphi 7

  • trzy dodatkowe ostrzeżenia kompilatora:
    • Unsafe_Type,
    • Unsafe_Code i
    • Unsafe_Cast. Te ostrzeżenia są domyślnie wyłączone, ale można je włączyć
  • nowa dyrektywa kompilatora {$WARN UNSAFE_CODE ON}
  • Przeciążenia procedur, które formatują i analizują liczby, wartości daty i godziny oraz walutę przy użyciu TFormatSettingsstruktury.

Delphi 6

Delphi 5

Brak nowych funkcji językowych, ale:

Delphi 4

  • Tablice dynamiczne
  • LongWordi Int64; Cardinaljest UINT32 (przed 31-bitową wartością bez znaku)
  • Realzajmuje 8 bajtów i jest taki sam jak double(poprzednio było to 6 bajtów);
    • Zastąp nową {$REALCOMPATIBILITY ON}dyrektywą kompilatora;
    • REAL48zastępuje stare 6-bajtowe real;
  • Wsparcie dla resourcestrings
  • Przeciążanie metod
  • Parametry domyślne
  • {$EXTERNALSYM}i {$NODEFINE}dyrektyw
  • implementssłowo kluczowe dotyczące właściwości

Delphi 3

  • Wordbool, longbool i bytebool przechowują truejako -1zamiast 1 (wartość logiczna pozostaje niezmieniona)
  • Komponenty należy instalować za pomocą packages.
  • Asercje.
  • out parametry.
  • Widestring
  • interfaceoraz obsługa dispinterfacesłów kluczowych i COM ( dispid).

Delphi 2

  • Wsparcie dla wersji 32-bitowej;
  • Ansistringzastępuje shortstringjako domyślny typ ciągu
  • Currency
  • Variant (do współpracy z automatyzacją OLE).
  • Obsługa wątków i ThreadVarsłowo kluczowe.
  • 4-bajtowe dane to 4-bajtowe wyrównane packedsłowo kluczowe new, nadpisuje to zachowanie;
  • TDateTime zaczyna się 1899/12/30 pod D1 i zaczyna się o0000/00/00
  • nowe finalizationsłowo kluczowe
  • registeri stdcalldodano konwencje wywoływania.
  • packed słowo kluczowe.
Johan
źródło
Ach, cudownie! Nie mogłem znaleźć sposobu, aby Docwiki pokazywało mi strony specyficzne dla starszych wersji Delphi (przed XE2) ... nie mam pojęcia dlaczego! To jest cudowne i zostało oznaczone jako poprawna odpowiedź! Dzięki!
LaKraven
@DavidHeffernan Przydatne jest posiadanie nowych funkcji w 2007 roku, ponieważ wyznacza to punkt odniesienia ... w pewnym sensie będę wiedział z pewnością, czy część tego, co produkuję, może działać we wcześniejszych wersjach (nawet jeśli sam mam nie ma zamiaru go wspierać)
LaKraven,
9
Na swoim blogu mam zaktualizowaną listę zmian pomiędzy wersjami Delphi
RRUZ
3
Holy Crap OPÓŹNIONE, to NIESAMOWITE! Dlaczego nie podadzą ci tej listy podczas aktualizacji!
Peter Turner
1
To nie jest dokładne. $LIBPREFIXet al dyrektywy istnieją przynajmniej od D7 (podejrzewam D6, ponieważ są związane z Kylixem)
Bezpłatne konsultacje
16

Aby uzupełnić odpowiedź Johana, sprawdź ten wpis na moim blogu List of changes between versions of Delphi (Since Delphi 5)i doskonałą stronę, na The TIndexktórej znajduje się lista większości nowych funkcji od Delphi 2005 oraz zasoby o każdej z nich.

RRUZ
źródło
Jakiś czas temu inna witryna Delphi, delphi3000, została oznaczona jako niebezpieczna dla niektórych programów antywirusowych.
RRUZ
2
Jestem właścicielem The TIndex i mogę potwierdzić, że jest to fałszywie pozytywny wynik.
LachlanG,
7

Plik jedi.inc używany w projekcie Dephi JEDI przedstawia szereg definicji funkcji. Jeśli Twój projekt jest zgodny z MPL, możesz nawet użyć go do wykrywania funkcji i zaoszczędzić sobie kłopotów związanych z wymyślaniem na nowo tego konkretnego koła.

Na przykład określa, SUPPORTS_FOR_INczy kompilator obsługuje moduły wyliczające. Można zawinąć kod modułu wyliczającego w IFDEFsprawdzanie, czy nie ma definicji, zamiast sprawdzać określoną wersję kompilatora.

afrazier
źródło
Tak, to z pewnością jest pomocne, ale brakuje mu kompletności szczegółowej listy (stąd to pytanie). Dziękuję za sugestię ... potraktuj zaakceptowaną odpowiedź na to pytanie jako rozszerzenie informacji dostarczonych przez jedi.inc :)
LaKraven
1
@LaKraven: To prawda, jest wiele rzeczy, których nie ma, ale dla niektórych może to wystarczyć. Ma również tę zaletę, że jest już zrobiony. :-) Osobiście uważam, że spłaszczenie hierarchii VCL, usunięcie nagłówków praw autorskich i wrzucenie ich wszystkich do repozytorium kontroli wersji też może być przydatne. W ten sposób możesz zobaczyć, kiedy zostały zaimplementowane określone funkcje RTL / VCL.
afrazier
@LaKraven, uważam, że co jedi.incnajmniej dokładne, podczas gdy lista Johana wymaga weryfikacji.
bezpłatne konsultacje