Freepascal: Unterschied zwischen den Versionen
Zeile 13: | Zeile 13: | ||
== Spracherweiterungen == | == Spracherweiterungen == | ||
hier fasse ich einige Spracherweiterungen auf, die mir so einfallen | |||
=== "param" anstelle von "var" === | === "param" anstelle von "var" === | ||
<code> | <code> | ||
var | |||
MomentTimeout : ANFiXDate; | MomentTimeout : ANFiXDate; Parameter; | ||
c,i,r : integer; | c,i,r : integer; Parameter; | ||
begin | begin | ||
Zeile 40: | Zeile 42: | ||
"param" Variable sind wie "var" Variable, die aber erst gesetzt werden, wenn ein (erster) lesender Zugriff erfolgt. Das "Setzen" des VAriablen-Wertes erfolgt gar nicht, an dieser Stelle wird kein Code ausgeführt, erst beim ersten Vergleich wird "MomentTimeout" gesetzt. Danach wird MomentTimeout wie eine normale Variable verwendet. Dadurch lässt sich der Code übersichtlicher gestalten. Man kann die "gathering" Phase schön beisammenhalten - auch wenn die die Kosten hoch sind. Es wird jedoch keine Zeit verbraten, und eine Menge komplexe if-Bedingungen gespart. | "param" Variable sind wie "var" Variable, die aber erst gesetzt werden, wenn ein (erster) lesender Zugriff erfolgt. Das "Setzen" des VAriablen-Wertes erfolgt gar nicht, an dieser Stelle wird kein Code ausgeführt, erst beim ersten Vergleich wird "MomentTimeout" gesetzt. Danach wird MomentTimeout wie eine normale Variable verwendet. Dadurch lässt sich der Code übersichtlicher gestalten. Man kann die "gathering" Phase schön beisammenhalten - auch wenn die die Kosten hoch sind. Es wird jedoch keine Zeit verbraten, und eine Menge komplexe if-Bedingungen gespart. | ||
=== nebenläufige Zuweisung === | |||
var | |||
a,b : integer; Concurrent; | |||
begin | |||
a := sql('count SOULS from EARTH'); | |||
b := sql('count STARS from UNIVERSE'); | |||
if (a>=b) then | |||
beep; | |||
end; | |||
Die Zuweisung nach a erfolgt in einem eigenen Thread. DIe Codeausführung wird sofort mit der nächsten Zeile fortgesetzt. Auch für die Zuweisung zu b wird ein Thread gestartet. Erst bei einem lesenden Zugriff auf a oder b wird auf das Ergebnis (= Beendigung des Threads) gewartet, ein erneuter schreibender ZUgriff auf a oder b würde den Thread ohne Warten auf das Ergebnis abbrechen. |
Version vom 7. Juli 2014, 15:06 Uhr
Freepascal oder fpc ist ein freier Pascal / Delphi(tm) Compiler. Der Entwicklungsstand kann mit Turbo Pascal(tm) 7.0 erweitert um aktuelle Delphi(tm) Sprachelemente verglichen werden. OrgaMon verwendet Freepascal für die Linux-Server-Seite des OrgaMon in den Projekten keepcon, domadd, cOrgaMon.
Installation
Für OpenSuse sollten ausschliesslich für diese Plattform compilierte Pakete verwendet werden. Das 64-Bit Paket von Sourceforge wird nicht laufen! Also besser hier:
https://build.opensuse.org/package/show?package=fpc&project=devel%3Alanguages%3Apascal
Installation 2
zypper ar http://download.opensuse.org/repositories/devel:/languages:/pascal/openSUSE_Factory/devel:languages:pascal.repo zypper install fpc
Spracherweiterungen
hier fasse ich einige Spracherweiterungen auf, die mir so einfallen
"param" anstelle von "var"
var
MomentTimeout : ANFiXDate; Parameter;
c,i,r : integer; Parameter;
begin
// all zu alte Einträge löschen
MomentTimeout := DatePlus(DateGet, -10);
i := 0;
c := colOf('MOMENT');
for r := RowCount downto 1 do
if (StrToIntDef(readCell(r, c), 0) < MomentTimeout) then
begin
del(r);
inc(i);
end;
if (i > 0) then
Log('INFO: ' + 'gebe ' + inttostr(i) +
' Dateieinträge frei, da sie älter als 10 Tage sind');
end;
"param" Variable sind wie "var" Variable, die aber erst gesetzt werden, wenn ein (erster) lesender Zugriff erfolgt. Das "Setzen" des VAriablen-Wertes erfolgt gar nicht, an dieser Stelle wird kein Code ausgeführt, erst beim ersten Vergleich wird "MomentTimeout" gesetzt. Danach wird MomentTimeout wie eine normale Variable verwendet. Dadurch lässt sich der Code übersichtlicher gestalten. Man kann die "gathering" Phase schön beisammenhalten - auch wenn die die Kosten hoch sind. Es wird jedoch keine Zeit verbraten, und eine Menge komplexe if-Bedingungen gespart.
nebenläufige Zuweisung
var a,b : integer; Concurrent; begin a := sql('count SOULS from EARTH'); b := sql('count STARS from UNIVERSE'); if (a>=b) then beep; end;
Die Zuweisung nach a erfolgt in einem eigenen Thread. DIe Codeausführung wird sofort mit der nächsten Zeile fortgesetzt. Auch für die Zuweisung zu b wird ein Thread gestartet. Erst bei einem lesenden Zugriff auf a oder b wird auf das Ergebnis (= Beendigung des Threads) gewartet, ein erneuter schreibender ZUgriff auf a oder b würde den Thread ohne Warten auf das Ergebnis abbrechen.