Daniël Mantione wrote:

Op Thu, 2 Jun 2005, schreef Jamie McCracken:


Daniël Mantione wrote:



Ok! We'll be happy to assist anyone doing interresting developments with
Free Pascal. Keep in mind though that implementing ideas can take "a lot"
more time that thinking out ideas.

The Free Pascal parser is indeed manual craftmanship. Some experimenting
was done using yacc in the past but a handwritten parser turned out to be
the best choice. The parser units start with the letter p, for example
pexpr.pas is the expression parser.

You've done it the hard way - no wonder developer's are reluctant to implement syntax changes!


Yes... Because Java often turns out to be the wrong tool and its memory
management is one of the reasons. We need to be carefull to prevent Pascal
becoming a wrong tool. However, automated memory management does have some
advantages. Nobody can deny that.

Ref counting does not use more memory! (well okay 32 bits extra to store the ref count for each object).

except were the source is bloated by forward declarations :)


Just order your procedures like you should order them, go go!! :)

[EMAIL PROTECTED]:~/fpc2/fpc/compiler> grep ';forward;' *.pas
browlog.pas:    procedure writesymtable(p:Tsymtable);forward;
pexpr.pas:    function sub_expr(pred_level:Toperator_precedence;accept_equal : 
boolean):tnode;forward;
pstatmnt.pas:    function statement : tnode;forward;
[EMAIL PROTECTED]:~/fpc2/fpc/compiler> grep '; forward;' *.pas
browcol.pas:  function GetDefinitionStr(def: tdef): string; forward;
scanner.pas:        function read_expr : string; forward;
[EMAIL PROTECTED]:~/fpc2/fpc/compiler>

Wow! 5 forward declarations in the entire compiler source. Yeah, bloat
indeed.... :)



its a bit more than that. Forward declarations include the class interfaces too in the type section. EG under delphi :


uses
  Classes, SysUtils;

type

  TMyObject = class (Tobject)
  private
      count : integer;  
  public
      constructor create; override;
      destructor destroy; override;     
  end;

implementation

constructor TConfigureBuildLazarusDlg.Create(AnOwner: TComponent);
begin
  inherited Create(AnOwner);
  inc (count);  
end;

destructor TConfigureBuildLazarusDlg.Destroy;
begin
  inherited Destroy;
end;

end.



would become under Rad Pascal:

uses
  Classes, SysUtils;

 TMyObject = class (Tobject)
    private
        count : integer;        
    public
        constructor create; override;
            inherited Create(AnOwner);
            inc (count);
        
        destructor destroy; override;   
            inherited Destroy;


Notice its at least 50% less code to write.


jamie.

_______________________________________________
fpc-devel maillist  -  fpc-devel@lists.freepascal.org
http://lists.freepascal.org/mailman/listinfo/fpc-devel

Reply via email to