was ist ein "intrinsic"
- af0815
- Lazarusforum e. V.
- Beiträge: 6780
- Registriert: So 7. Jan 2007, 10:20
- OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
- CPU-Target: 32Bit (64Bit)
- Wohnort: Burgenland
- Kontaktdaten:
was ist ein "intrinsic"
Einfache Frage, was ist ein "intrinsic" Wie erklärt man sowas einem Laien (wie mir) ? Und verwendet man den Begiff auch bei Übersetzungen bzw. Programmerklärung ins deutsche ?
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).
- Jorg3000
- Lazarusforum e. V.
- Beiträge: 364
- Registriert: So 10. Okt 2021, 10:24
- OS, Lazarus, FPC: Win64
- Wohnort: NRW
Re: was ist ein "intrinsic"
Hi!
Mir gefällt der Begriff "Compiler Magic" am besten - falls damit das Gleiche gemeint ist.
"Compiler Primitive" ist auch so ein Begriff, schon ziemlich selbsterklärend.
Ich würde es so beschreiben, dass ein "intrinsic" eine Basisfunktion oder eine Sonderfunktion des Compilers ist, die zum Einsatz kommt, wenn sich eine Funktionalität in der Hochsprache nicht einfach umsetzen lässt, z.B. weil die Spezifikation einen benötigten Typen oder die benötigte Flexibilität eigentlich nicht hergibt.
Oder wenn etwas Typ-abhängiges oder Plattform-spezifisches passieren muss, was der Compiler am besten selbst unterscheiden und liefern kann.
Mir gefällt der Begriff "Compiler Magic" am besten - falls damit das Gleiche gemeint ist.

"Compiler Primitive" ist auch so ein Begriff, schon ziemlich selbsterklärend.
Ich würde es so beschreiben, dass ein "intrinsic" eine Basisfunktion oder eine Sonderfunktion des Compilers ist, die zum Einsatz kommt, wenn sich eine Funktionalität in der Hochsprache nicht einfach umsetzen lässt, z.B. weil die Spezifikation einen benötigten Typen oder die benötigte Flexibilität eigentlich nicht hergibt.
Oder wenn etwas Typ-abhängiges oder Plattform-spezifisches passieren muss, was der Compiler am besten selbst unterscheiden und liefern kann.
Zuletzt geändert von Jorg3000 am Fr 24. Jan 2025, 10:44, insgesamt 1-mal geändert.
- Jorg3000
- Lazarusforum e. V.
- Beiträge: 364
- Registriert: So 10. Okt 2021, 10:24
- OS, Lazarus, FPC: Win64
- Wohnort: NRW
Re: was ist ein "intrinsic"
Bezüglich der Übersetzung:
Es gibt im Deutschen die Worte "intrinsisch" und "inhärent" - wobei die vermutlich ähnlich selten verwendet werden, wie "intrinsic" in der englischen Alltagssprache wohl auch nur selten vorkommen dürfte.
Wiktionary beschreibt "intrinsisch" als: von sich aus aufweisend; einem Ding oder System innewohnend.
Und "inhärent" als: (einer Sache) anhaftend, innewohnend.
Entweder der Zuhörer kann von sich aus mit "intrinsic" oder "intrinsisch" etwas anfangen, oder man braucht eine fachspezifische Erklärung.
Es gibt im Deutschen die Worte "intrinsisch" und "inhärent" - wobei die vermutlich ähnlich selten verwendet werden, wie "intrinsic" in der englischen Alltagssprache wohl auch nur selten vorkommen dürfte.
Wiktionary beschreibt "intrinsisch" als: von sich aus aufweisend; einem Ding oder System innewohnend.
Und "inhärent" als: (einer Sache) anhaftend, innewohnend.
Entweder der Zuhörer kann von sich aus mit "intrinsic" oder "intrinsisch" etwas anfangen, oder man braucht eine fachspezifische Erklärung.

- Zvoni
- Beiträge: 376
- Registriert: Fr 5. Jul 2024, 08:26
- OS, Lazarus, FPC: Windoof 10 Pro (Laz 2.2.2 FPC 3.2.2)
- CPU-Target: 32Bit
- Wohnort: BW
Re: was ist ein "intrinsic"
Abweichend zu Joergs Antwort:
Ein "Intrinsic" ist eine Funktion, welche der Compiler selbst zur Verfügung stellt bzw. benutzt, im Gegensatz zu einer "Laufzeit"-Funktion.
Beispiel:
Stell dir vor, es gäbe eine Funktion namens "Mul2" (entweder selbst geschrieben, oder in einer Laufzeit-Lib)
Geschrieben, benutzt, funktioniert
ABER: Anstelle o.g. Funktion zu benutzen, könntest du auch die "intrinsic" des Compiler nutzen
In der Regel: Die "intrinsic"-Funktionen sind die am besten optimierten (schnellsten), weil diese direkt auf den Befehlssatz der CPU zugreifen/nutzen
Zumindest verstehe ich es so. Vielleicht hab auch hier nur grossen Schmarrn geschrieben.....
Ein "Intrinsic" ist eine Funktion, welche der Compiler selbst zur Verfügung stellt bzw. benutzt, im Gegensatz zu einer "Laufzeit"-Funktion.
Beispiel:
Stell dir vor, es gäbe eine Funktion namens "Mul2" (entweder selbst geschrieben, oder in einer Laufzeit-Lib)
Code: Alles auswählen
Function Mul2(Const arg:LongInt):LongInt;
Begin
Result:=LongInt * 2;
End;
.....
//Aufruf
MeineVar:=Mul2(4);
ABER: Anstelle o.g. Funktion zu benutzen, könntest du auch die "intrinsic" des Compiler nutzen
Code: Alles auswählen
//Aufruf
MeineVar:=4 shl 1;
Zumindest verstehe ich es so. Vielleicht hab auch hier nur grossen Schmarrn geschrieben.....

Ein System sie alle zu knechten, ein Code sie alle zu finden,
Eine IDE sie ins Dunkel zu treiben, und an das Framework ewig zu binden,
Im Lande Redmond, wo die Windows drohn.
Eine IDE sie ins Dunkel zu treiben, und an das Framework ewig zu binden,
Im Lande Redmond, wo die Windows drohn.
- Jorg3000
- Lazarusforum e. V.
- Beiträge: 364
- Registriert: So 10. Okt 2021, 10:24
- OS, Lazarus, FPC: Win64
- Wohnort: NRW
Re: was ist ein "intrinsic"
Jau stimmt, ich hatte zu sehr an Sonderfälle gedacht, z.B. an die Str() Funktion aus dem anderen Thread.
Aber schon solche Sachen, z.B. wie eine Integer-Addition durchzuführen ist, weiß der Compiler selbst und erzeugt CPU-spezifischen Maschinencode.
Aber schon solche Sachen, z.B. wie eine Integer-Addition durchzuführen ist, weiß der Compiler selbst und erzeugt CPU-spezifischen Maschinencode.
- Zvoni
- Beiträge: 376
- Registriert: Fr 5. Jul 2024, 08:26
- OS, Lazarus, FPC: Windoof 10 Pro (Laz 2.2.2 FPC 3.2.2)
- CPU-Target: 32Bit
- Wohnort: BW
Re: was ist ein "intrinsic"
Eine weitere Erklärung für "Eine Intrinsic-Funktion wird vom Compiler zur Verfügung gestellt":
Hier die Übersicht der Funktionen in der Unit "System" (welche immer im Hintergrund eingebunden wird):
https://www.freepascal.org/docs-html/rt ... dex-5.html
Man könnte jetzt behaupten: Alle Funktionen, welche NICHT in (irgendeiner) Unit definiert sind, sind "intrinsic"
Dazu zähle ich z.B. die ganzen math. Operatoren
Hier die Übersicht der Funktionen in der Unit "System" (welche immer im Hintergrund eingebunden wird):
https://www.freepascal.org/docs-html/rt ... dex-5.html
Man könnte jetzt behaupten: Alle Funktionen, welche NICHT in (irgendeiner) Unit definiert sind, sind "intrinsic"
Dazu zähle ich z.B. die ganzen math. Operatoren
Ein System sie alle zu knechten, ein Code sie alle zu finden,
Eine IDE sie ins Dunkel zu treiben, und an das Framework ewig zu binden,
Im Lande Redmond, wo die Windows drohn.
Eine IDE sie ins Dunkel zu treiben, und an das Framework ewig zu binden,
Im Lande Redmond, wo die Windows drohn.
-
- Beiträge: 2121
- Registriert: Di 23. Sep 2014, 17:46
- OS, Lazarus, FPC: Win10 | Linux
- CPU-Target: x86_64
Re: was ist ein "intrinsic"
Ein Intrinsic ist "compiler magic", es ist also eine "funktion" die nicht direkt in Pascal implementiert (oder sogar implementierbar) ist, sondern bei dem der Compiler speziellen code erzeugt.
Intrinsics haben vor allem drei eigenschaften:
1. Sie sind typagnostisch, WriteLn funktioniert mit (fast) jedem typen, weil der Compiler typspezifischen code generierren kann und nicht eine funktion für einen speziellen typen erzeugen muss
2. Sie erlauben besondere syntax, z.b. kann man in WriteLn Floats formatieren:
3. Sie können zur compilezeit aufgelöst werden:
Intrinsics haben vor allem drei eigenschaften:
1. Sie sind typagnostisch, WriteLn funktioniert mit (fast) jedem typen, weil der Compiler typspezifischen code generierren kann und nicht eine funktion für einen speziellen typen erzeugen muss
2. Sie erlauben besondere syntax, z.b. kann man in WriteLn Floats formatieren:
Code: Alles auswählen
WriteLn('1/3 = ' , 1/3:4:2);
Code: Alles auswählen
const maxInt = High(Integer);
-
- Lazarusforum e. V.
- Beiträge: 3178
- Registriert: Di 22. Jul 2008, 19:27
- OS, Lazarus, FPC: Lazarus: SVN; FPC: svn; Win 10/Linux/Raspbian/openSUSE
- CPU-Target: 32bit x86 armhf
- Wohnort: Köln
- Kontaktdaten:
Re: was ist ein "intrinsic"
Ich würde hier nur den dritten Punkt gelten lassen. Die ersten beiden Punkten hängen einfach von der Implementierung der Funktion ab. Nur weil Write(Ln) und Str so mächtig sind, muss das nicht für alle gelten. Willst du z.B. nur einen Assembler-Befehl zur Verfügung stellen, sind die Parametermöglichkeiten wahrscheinlich eingeschränkt. Da der Compiler aber beim Übersetzen die Datentypen auswerten kann, können so typagnostische Funktionen im Compiler effizienter umgesetzt werden, als wenn du zur Laufzeit immer mit einem array of const hantieren musst und bei jedem Aufruf die sich nicht ändernden Datentypen auswertest.Warf hat geschrieben: Fr 24. Jan 2025, 13:17 Intrinsics haben vor allem drei eigenschaften:
1. Sie sind typagnostisch, WriteLn funktioniert mit (fast) jedem typen, weil der Compiler typspezifischen code generierren kann und nicht eine funktion für einen speziellen typen erzeugen muss
2. Sie erlauben besondere syntax, z.b. kann man in WriteLn Floats formatieren:3. Sie können zur compilezeit aufgelöst werden:Code: Alles auswählen
WriteLn('1/3 = ' , 1/3:4:2);
Code: Alles auswählen
const maxInt = High(Integer);
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein
- fliegermichl
- Lazarusforum e. V.
- Beiträge: 1647
- Registriert: Do 9. Jun 2011, 09:42
- OS, Lazarus, FPC: Lazarus Fixes FPC Stable
- CPU-Target: 32/64Bit
- Wohnort: Echzell
Re: was ist ein "intrinsic"
Write ist ein gutes Beispiel dafür.
Normalerweise muß bei einer Pascal Prozedur bei der Deklaration angegeben werden, wieviele Parameter und von welchem Typ dieser zu übergeben sind.
write und writeln können beliebig viele Parameter von fast beliebigem Typ ausgeben.
Normalerweise muß bei einer Pascal Prozedur bei der Deklaration angegeben werden, wieviele Parameter und von welchem Typ dieser zu übergeben sind.
write und writeln können beliebig viele Parameter von fast beliebigem Typ ausgeben.
-
- Beiträge: 2121
- Registriert: Di 23. Sep 2014, 17:46
- OS, Lazarus, FPC: Win10 | Linux
- CPU-Target: x86_64
Re: was ist ein "intrinsic"
Ich wollte nicht sagen das alle Intrinsics diese Eigenschaften haben, sondern das das die dinge sind die Intrinsics können, die man mit normalen Funktionen nicht machen kann.Socke hat geschrieben: Fr 24. Jan 2025, 13:55 Ich würde hier nur den dritten Punkt gelten lassen. Die ersten beiden Punkten hängen einfach von der Implementierung der Funktion ab. Nur weil Write(Ln) und Str so mächtig sind, muss das nicht für alle gelten. Willst du z.B. nur einen Assembler-Befehl zur Verfügung stellen, sind die Parametermöglichkeiten wahrscheinlich eingeschränkt. Da der Compiler aber beim Übersetzen die Datentypen auswerten kann, können so typagnostische Funktionen im Compiler effizienter umgesetzt werden, als wenn du zur Laufzeit immer mit einem array of const hantieren musst und bei jedem Aufruf die sich nicht ändernden Datentypen auswertest.
Im grunde sind Intrics funktionalitäten die man gerne hätte, die man aber nicht in Pascal code selbst ausdrücken kann.
- af0815
- Lazarusforum e. V.
- Beiträge: 6780
- Registriert: So 7. Jan 2007, 10:20
- OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
- CPU-Target: 32Bit (64Bit)
- Wohnort: Burgenland
- Kontaktdaten:
Re: was ist ein "intrinsic"
Das ist aktuell einmal die beste Arbeitshypothese zur Erklärung

Weil ich habe bisher keine wirklich bessere Erklärung zu dem Thema gefunden. Und mich interessiert das Thema der Erklärungen, weil ich wieder etwas Zeit habe an meinen LazInfos zu arbeiten. Und da habe ich mir gedacht, so Begriffe auch in deutscher Sprache mal zu erklären zu können, nur bin ich drauf gekommen, das ich den Begriff nicht wirklich schlüssig erklären kann. Aber man sieht auch hier im Thread, das das Thema sehr wohl breitgestreut ist von der Wahrnehmung. Nur Wahrnehmung ist nicht Wahrheit
Die Erklärung ist aber auch nicht schlecht.Warf hat geschrieben: Fr 24. Jan 2025, 13:17 Ein Intrinsic ist "compiler magic", es ist also eine "funktion" die nicht direkt in Pascal implementiert (oder sogar implementierbar) ist, sondern bei dem der Compiler speziellen code erzeugt.
Vielleicht stolpert PascalDragon auch noch über den Thread und hat die beste Erklärung.Warf hat geschrieben: Fr 24. Jan 2025, 13:17 Intrinsics haben vor allem drei eigenschaften:
1. Sie sind typagnostisch, WriteLn funktioniert mit (fast) jedem typen, weil der Compiler typspezifischen code generierren kann und nicht eine funktion für einen speziellen typen erzeugen muss
2. Sie erlauben besondere syntax, z.b. kann man in WriteLn Floats formatieren:3. Sie können zur compilezeit aufgelöst werden:Code: Alles auswählen
WriteLn('1/3 = ' , 1/3:4:2);
Code: Alles auswählen
const maxInt = High(Integer);

Weil ich habe bisher keine wirklich bessere Erklärung zu dem Thema gefunden. Und mich interessiert das Thema der Erklärungen, weil ich wieder etwas Zeit habe an meinen LazInfos zu arbeiten. Und da habe ich mir gedacht, so Begriffe auch in deutscher Sprache mal zu erklären zu können, nur bin ich drauf gekommen, das ich den Begriff nicht wirklich schlüssig erklären kann. Aber man sieht auch hier im Thread, das das Thema sehr wohl breitgestreut ist von der Wahrnehmung. Nur Wahrnehmung ist nicht Wahrheit

Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).
-
- Beiträge: 6918
- Registriert: Do 2. Jan 2014, 17:21
- OS, Lazarus, FPC: Linux (die neusten Trunk)
- CPU-Target: 64Bit
- Wohnort: Schweiz
Re: was ist ein "intrinsic"
Was ich zu intrinsic sagen kann, wen ich in /usr/include nach Dateien suche, welche im Datei-Namen intrinsic einhalten, bekomme ich 63 Suchergebnisse.
So wie ich festgestellt habe. sie das die Header, die viele Basis Funktionen eine Paketes enthalten.
So wie ich festgestellt habe. sie das die Header, die viele Basis Funktionen eine Paketes enthalten.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot
Mit Java und C/C++ sehe ich rot
- m.fuchs
- Lazarusforum e. V.
- Beiträge: 2813
- Registriert: Fr 22. Sep 2006, 19:32
- OS, Lazarus, FPC: Winux (Lazarus 2.0.10, FPC 3.2.0)
- CPU-Target: x86, x64, arm
- Wohnort: Berlin
- Kontaktdaten:
Re: was ist ein "intrinsic"
Software, Bibliotheken, Vorträge und mehr: https://www.ypa-software.de
-
- Beiträge: 955
- Registriert: Mi 3. Jun 2020, 07:18
- OS, Lazarus, FPC: L 2.0.8, FPC Trunk, OS Win/Linux
- CPU-Target: Aarch64 bis Z80 ;)
- Wohnort: München
Re: was ist ein "intrinsic"
Die Erklärungen, die ich soweit gelesen habe, passen alle prinzipiell. Nur zu Warfs Erklärung würde ich sagen, dass das Eigenschaften sind, die Intrinsics haben können, aber es müssen nicht alle drei erfüllt sein.af0815 hat geschrieben: Fr 24. Jan 2025, 16:03 Die Erklärung ist aber auch nicht schlecht.Vielleicht stolpert PascalDragon auch noch über den Thread und hat die beste Erklärung.Warf hat geschrieben: Fr 24. Jan 2025, 13:17 Intrinsics haben vor allem drei eigenschaften:
1. Sie sind typagnostisch, WriteLn funktioniert mit (fast) jedem typen, weil der Compiler typspezifischen code generierren kann und nicht eine funktion für einen speziellen typen erzeugen muss
2. Sie erlauben besondere syntax, z.b. kann man in WriteLn Floats formatieren:3. Sie können zur compilezeit aufgelöst werden:Code: Alles auswählen
WriteLn('1/3 = ' , 1/3:4:2);
Code: Alles auswählen
const maxInt = High(Integer);
Der Ausdruck "Intrinsic" in C Headern hat meist nichts mit Intrinsics zu tun, wie sie hier gemeint sind. Ausnahme sind Header wie mmintrin.h und ähnliches, da diese auch Funktionen enthalten, die vom Compiler bereitgestellt werden und ziemlich direkt auf Assemblyinstruktionen runtergehen.Mathias hat geschrieben: Fr 24. Jan 2025, 17:49 Was ich zu intrinsic sagen kann, wen ich in /usr/include nach Dateien suche, welche im Datei-Namen intrinsic einhalten, bekomme ich 63 Suchergebnisse.
So wie ich festgestellt habe. sie das die Header, die viele Basis Funktionen eine Paketes enthalten.
Das ist übrigens auch in welche Richtung zukünftig die Atomic*-Intrinsics in FPC gehen werden. Aktuell sind die Intrinsics implementiert durch Assemblyfunktionen, die zuvor die Basis für die Interlocked*-Funktionen gebildet haben, aber in Zukunft können für jede Platform die Intrinsics auch direkt in Assemblycode umgewandelt werden, da dann der Aufruf vermieden werden kann und der Compiler beliebige Register verwenden und dadurch besseren Code generieren kann.
FPC Compiler Entwickler