Difference between revisions of "Delphi language features missing from the Free Pascal Compiler"

From Free Pascal wiki
Jump to navigationJump to search
 
(57 intermediate revisions by 12 users not shown)
Line 1: Line 1:
 +
Note: some new Delphi features are already implemented in [[FPC_New_Features_Trunk|FPC trunk]].
 +
 +
== New since D4 ==
 +
 +
=== Exporting of overloaded functions ===
 +
(version not entirely sure, but came in with overloading, so definitely pre-D6)
 +
 +
In library packages select an overloaded variant to export. Assume we have some overloaded methods:
 +
 +
function doSomeThing(a:type1):type2;stdcall;
 +
function doSomeThing(a:type3):type4;stdcall;
 +
 +
and in the library (for building the dll using the unit above) we want to export them:
 +
 +
exports
 +
    doSomeThing(a:type1) name 'doSomeThingTYPE1',
 +
    doSomeThing(a:type3) name 'doSomeThingTYPE3';
 +
 +
=== implements delegation of interfaces ===
 +
 +
Delegating interfaces to classes is not always supported,
 +
* [http://bugs.freepascal.org/view.php?id=16531 Mantis 16531]
 +
* [http://bugs.freepascal.org/view.php?id=8951 Mantis 8591]
 +
* [http://bugs.freepascal.org/view.php?id=23403 Mantis 23403]
 +
 
== New since Delphi 2007 ==
 
== New since Delphi 2007 ==
==== Operator Overloading Syntax for records and classes ====
 
  
Info:
+
== New since Delphi 2009 ==
http://docwiki.embarcadero.com/RADStudio/en/Operator_Overloading
+
 
http://wiert.wordpress.com/2009/10/19/delphi-operator-overloading-table-of-operators-names-and-some-notes-on-usage-and-glitches/
+
==== Anonymous Methods ====
 +
#http://docs.embarcadero.com/products/rad_studio/delphiAndcpp2009/HelpUpdate2/EN/html/devcommon/anonymousmethods_xml.html
 +
#http://delphi.about.com/od/objectpascalide/a/understanding-anonymous-methods-in-delphi.htm
 +
 
 +
Supported since 3.3.1:
 +
[[FPC_New_Features_Trunk#Support_for_Function_References_and_Anonymous_Functions|Support for Function References and Anonymous Functions]]
  
==== Class Helpers ====
 
==== Records with Methods ====
 
==== Class Variables, Types and Consts ====
 
==== Class Properties ====
 
==== Static Class Methods ====
 
== New since Delphi 2009 ==
 
==== Generics Syntax ====
 
==== Unicode string support ====
 
==== Anonymouse Methods ====
 
 
== New since Delphi 2010 ==
 
== New since Delphi 2010 ==
 
==== Custom Attributes ====
 
==== Custom Attributes ====
 +
Custom Attributes are a language feature in Delphi that allow annotating types and type members with special objects that carry additional information. Attributes extend the object-oriented model with aspect-oriented elements.
 +
 +
http://delphi.about.com/od/oopindelphi/a/delphi-attributes-understanding-using-attributes-in-delphi.htm
 +
 +
Supported since 3.3.1: [[Custom Attributes]]
 +
 
==== Enhanced RTTI ====
 
==== Enhanced RTTI ====
 +
http://docwiki.embarcadero.com/RADStudio/en/RTTI_directive_(Delphi)
 +
 
==== Delayed directive ====
 
==== Delayed directive ====
  
 
Info is here: http://docwiki.embarcadero.com/RADStudio/en/Libraries_and_Packages#Delayed_Loading
 
Info is here: http://docwiki.embarcadero.com/RADStudio/en/Libraries_and_Packages#Delayed_Loading
 +
Some info about internals:
 +
#http://blogs.embarcadero.com/abauer/2009/08/25/38894
 +
#http://blogs.embarcadero.com/abauer/2009/08/29/38896
 +
#http://blogs.embarcadero.com/chrishesik/2009/11/02/35056
  
 
fpc wiki about that topic: http://wiki.freepascal.org/Dynamically_loading_headers
 
fpc wiki about that topic: http://wiki.freepascal.org/Dynamically_loading_headers
  
 +
Originally I thought that delayed is similar to weakexternal which FPC has for some platforms but after reading this: http://docwiki.embarcadero.com/CodeExamples/XE3/en/DelayedLoading_(Delphi) I understand that this is simply a wrapper around LoadLibrary and GetProcessAdress with automatic loading and unloading.--[[User:Paul Ishenin|Paul Ishenin]] 13:45, 18 January 2013 (UTC)
 +
 +
== Misc ==
 +
# [[packages|(Library) packages]]
 +
# "automated" keyword, which is like "public", but generates COM specific RTTI. Afaik this kind of COM usage is deprecated though.
 +
 +
== Already implemented ==
 +
=== FPC 3.0.4 ===
 +
==== Advanced records ====
 +
http://docwiki.embarcadero.com/RADStudio/en/Structured_Types#Records_.28advanced.29
 +
 +
=== FPC 2.6.0 ===
 
==== AS and IS extended for interfaces ====
 
==== AS and IS extended for interfaces ====
 +
New since Delphi 2010. Info is here:
 +
#http://docwiki.embarcadero.com/RADStudio/en/Interface_References#Casting_Interface_References_to_Objects
 +
#http://blogs.embarcadero.com/abauer/2009/08/21/38893
  
Info is here: http://docwiki.embarcadero.com/RADStudio/en/Interface_References#Casting_Interface_References_to_Objects
+
Implemented in FPC 2.6.0.
 
 
== Misc: ==
 
#{$SCOPEDENUMS ON} directive which allows to use enumeration name before the item. Example:
 
<delphi>
 
type
 
  TColor = (red, green, blue);
 
begin
 
  WriteLn(ord(TColor.red));
 
end;
 
</delphi>
 
#{$pointermath ON} directive which turns on pointer arithmetic.
 
  
 
== Reference ==
 
== Reference ==
Line 43: Line 79:
 
#http://edn.embarcadero.com/article/images/39076/New_Delphi_Coding_Styles_and_Architectures.pdf
 
#http://edn.embarcadero.com/article/images/39076/New_Delphi_Coding_Styles_and_Architectures.pdf
 
#http://docwiki.embarcadero.com/RADStudio/en/What's_New_in_Delphi_and_C%2B%2BBuilder_2010
 
#http://docwiki.embarcadero.com/RADStudio/en/What's_New_in_Delphi_and_C%2B%2BBuilder_2010
 +
 +
[[Category:Delphi]]
 +
[[Category:FPC]]

Latest revision as of 09:12, 8 August 2023

Note: some new Delphi features are already implemented in FPC trunk.

New since D4

Exporting of overloaded functions

(version not entirely sure, but came in with overloading, so definitely pre-D6)

In library packages select an overloaded variant to export. Assume we have some overloaded methods:

function doSomeThing(a:type1):type2;stdcall; function doSomeThing(a:type3):type4;stdcall;

and in the library (for building the dll using the unit above) we want to export them:

exports

   doSomeThing(a:type1) name 'doSomeThingTYPE1',
   doSomeThing(a:type3) name 'doSomeThingTYPE3';

implements delegation of interfaces

Delegating interfaces to classes is not always supported,

New since Delphi 2007

New since Delphi 2009

Anonymous Methods

  1. http://docs.embarcadero.com/products/rad_studio/delphiAndcpp2009/HelpUpdate2/EN/html/devcommon/anonymousmethods_xml.html
  2. http://delphi.about.com/od/objectpascalide/a/understanding-anonymous-methods-in-delphi.htm

Supported since 3.3.1: Support for Function References and Anonymous Functions

New since Delphi 2010

Custom Attributes

Custom Attributes are a language feature in Delphi that allow annotating types and type members with special objects that carry additional information. Attributes extend the object-oriented model with aspect-oriented elements.

http://delphi.about.com/od/oopindelphi/a/delphi-attributes-understanding-using-attributes-in-delphi.htm

Supported since 3.3.1: Custom Attributes

Enhanced RTTI

http://docwiki.embarcadero.com/RADStudio/en/RTTI_directive_(Delphi)

Delayed directive

Info is here: http://docwiki.embarcadero.com/RADStudio/en/Libraries_and_Packages#Delayed_Loading Some info about internals:

  1. http://blogs.embarcadero.com/abauer/2009/08/25/38894
  2. http://blogs.embarcadero.com/abauer/2009/08/29/38896
  3. http://blogs.embarcadero.com/chrishesik/2009/11/02/35056

fpc wiki about that topic: http://wiki.freepascal.org/Dynamically_loading_headers

Originally I thought that delayed is similar to weakexternal which FPC has for some platforms but after reading this: http://docwiki.embarcadero.com/CodeExamples/XE3/en/DelayedLoading_(Delphi) I understand that this is simply a wrapper around LoadLibrary and GetProcessAdress with automatic loading and unloading.--Paul Ishenin 13:45, 18 January 2013 (UTC)

Misc

  1. (Library) packages
  2. "automated" keyword, which is like "public", but generates COM specific RTTI. Afaik this kind of COM usage is deprecated though.

Already implemented

FPC 3.0.4

Advanced records

http://docwiki.embarcadero.com/RADStudio/en/Structured_Types#Records_.28advanced.29

FPC 2.6.0

AS and IS extended for interfaces

New since Delphi 2010. Info is here:

  1. http://docwiki.embarcadero.com/RADStudio/en/Interface_References#Casting_Interface_References_to_Objects
  2. http://blogs.embarcadero.com/abauer/2009/08/21/38893

Implemented in FPC 2.6.0.

Reference

  1. http://edn.embarcadero.com/article/34324
  2. http://edn.embarcadero.com/article/images/39076/New_Delphi_Coding_Styles_and_Architectures.pdf
  3. http://docwiki.embarcadero.com/RADStudio/en/What's_New_in_Delphi_and_C%2B%2BBuilder_2010