Borland DevCon - USA

Report #7

Novidades no Compilador do Delphi 2006

 

Criado - 8 de Novembro de 2005 – 15:00 p.m. (local time)

Atualizado - 8 de Novembro de 2005 – 15:00 p.m. (local time)

 

Nesta palestra que foi ministrada pelo arquiteto do compilador do Delphi, Danny Thorpe, foram apresentados os novos recursos incorporados ao compilador da linguagem, principalmente para Win32.

Records

Para você ter uma idéia, agora Records no Delphi podem ter quase que todos os recursos que estão disponíveis em classes. Por exemplo, podem ter métodos, propriedades, fields, especificadores de visibilidade (private, public, protected), podem até mesmo implementar interfaces!

Veja que muitas coisas já estavam disponíveis no compilador Delphi for .NET do Delphi 2005, porém a novidade é que agora os recursos estão disponíveis também no compilador Win32.

Por que tanto “investimento” nos records? Por compatibilidade com o.NET. No .NET Framework, tudo é objeto (descende de System.Object), incluindo strings, inteiros etc. Ou seja, mesmo tipos primitivos podem ter métodos, propriedades etc. Esses tipos são passados por valor, enquanto tipos referência devem ser descendentes de System.MarshalByRef.

No Delphi Win32 (diferente do .NET), se você usar classes, estará obrigatoriamente criando objetos que só podem ser passados por referência. Aí está o motivo do Records terem sido “turbinados”: permitir o uso de estruturas completas com suporte a propriedades, métodos etc., como se fossem classes, porem não passadas por referência, e sim por valor.

Alguns exemplos apresentados por Danny:

 

  TBlock = record

     procedure Foo(i: integer);

     function Bar: TBlock;

  private

    data: Integer;

  public

    property Color: Integer …

  end;

Operator Overloading

Outro tópico da palestra foi o novo suporte a Operador Overloading, agora disponível em Win32. Ele tinha sido adicionado no compilador do Delphi for .NET para compatibilidade com a plataforma. Esse recurso permite que você instrua o compilador como objetos que você cria podem se comportar quando utilizados com operadores da linguagem Pascal, como “+”, “*”, em conversões de tipos etc.

Algumas observações sobre o uso de Operator Overloading no Delphi Win32:

  - Requer objetos passados por valor

  - Suportado somente em tipos record

  - Mesma sintaxe do Delphi for .NET

Um exemplo mostrado por Danny:

 

 TQuark = record

 private

   FCharge: Integer;

   FSpin: Single;

   FColor: Byte;

 public

   class operator Add(a,b: TQuark): TQuark;

   class operator Add(a: TQuark; b: Byte): TQuark;

   class operator Implicit(a: Integer): TQuark;

   class operator Explict(a: TQuark): Integer;

   class operator Explict(a: TQuark): String;

 end;

 

var

  q: TQuark;

  S: string;

Begin

  Q := 12;

  Q := q + 4 ; // Implict conversion from integer

  // Q := Q + 4; // syntax error, no Add (Byte, TQuark)

  S := string(q); // Explict (Quark): string;

  Writeln (q); // Compiler uses Explict(Quark): String;

 

Algumas regras: Overloading só se aplica a operadores da linguagem, como +, -, /, *, shl, shr, não suporta outro símbolos. Operadores Explict definem como typeCasts são feitos.

Operações suportadas:

Cast: Explict, Implict

Unárias: Positivo, Negativo, Inc, Dec, LogicalNot, Trunc, Round

Comparação: Equal, NotEqual, GreaterThen etc.

Binary: Add, Substract etc.

 

Danny reforço que nunca deve-se referenciar operadores pelo nome e devem sempre criar e retornar novos valores, nunca retornar um parâmetro modificado.

Class vars

Uma outra novidade do compilador é que podemos declarar variáveis dentro de uma classe. É como se fosse uma variável global, porém pertence a classe e poder ser acessada / compartilhada por tipos derivados. De forma semelhante, também podemos usar “Class Const”. Um exemplo:

 

type

 

  TMyClass = class

  private

    class var sharedStuff: Integer;

  public

  end;

 

Mais otimizações

Danny salientou mais algumas melhorias no compilador:

  - Unit Initlization Consolitation – otimização para melhorar o startup de aplicações;

  - Inline-able magic functions (string length);

  - Bug Fixes

  - Também Bug Fixes no Compilador Delphi para .NET Compact Framework

RoadMap

Algumas novidades para as próximas versões do compilador:

No Delphi “HighLander” (2007):

  - Suporte completo ao .NET 2.0;

  - Delphi generics e Class Fragments (recursos semelhante ao que já existe para C#, por exemplo, será possível declarar porções de uma mesma classe em diferentes units);

  - Suporte completo ao .NET Compact Framework;

  - Suporte ao .NET 2.0 64 bits;

No “Delphi LongHorn”:

  - Win32 e .NET para Windows Vista

  - Suporte ao Avalon

No “Delphi Win64”:

-         Evolução do Win32;

-         Unicode VCL.

 

Dev2005RP7.JPG 

 

Danny Thorpe, arquiteto do compilador do Delphi

 

Guinther Pauli

Editor Geral Revista ClubeDelphi