Purebasic 6 Beta 6 Frage zum C-Backend

Für allgemeine Fragen zur Programmierung mit PureBasic.
Heinz Mendax
Beiträge: 50
Registriert: 29.03.2013 12:25
Wohnort: Eisenach

Purebasic 6 Beta 6 Frage zum C-Backend

Beitrag von Heinz Mendax »

Hallo !
Auf der Purebasic-Seite wird seit einiger Zeit von einer neuen Betaversion 6 gesprochen.
Dabei geht es um ein C-Backend. Der Begriff wird für Nichtinformatiker nicht weiter erklärt,
der Sinn eines solchen Backends scheint aber zu sein, das der Purebasic-Programmcode
in die Programmiersprache C überführt wird. Um der ständig wachsenden Zahl neuer Programmier-
sprachen für immer neue Plattformen gewachsen zu sein, und für eben diese neuen Plattformen
mit PB programmieren zu können, wurde das C-Backend geschaffen. So stelle ich es mir vor.
Dazu ist es sicher deshalb entwickelt worden, weil es für alle diese Plattformen sicher auch
C-Compiler gibt. Dann könnte das PB-programm mit der Zwischenstufe C-Backendergebnis
mit dem C-Compiler dieser Plattform für dieselbe zur App werden. Ist das noch so richtig ?
Es ist ja eine gute Sache, wenn ich mit Purebasic weiter auch für andere Plattformen pro-
grammieren kann, ohne mich immer in neue Programmiersprachen wie Swift,Xojo usw.
einarbeiten zu müssen. Das richtige dabei zu finden ist für den Nichteingeweihten sowieso
Glückssache - mir reichen die Möglichkeiten von Purebasic. Auf einer Internetseite wurden
die Compilierzeiten für Compiler VC++ und GCC verglichen. Meine Frage ist nun: woher
kommen die Quelldateien für diese C-Compiler (c und h). Bei der Installation der neuen Beta-
Versionen kann man nach bestimmten Einstellungen zwischen pbcompiler.exe und pbcompilerc.exe
(normaler x86-Compiler oder Purebasic 6.00 Beta 6 - C Backend (Windows x86)) wählen.
Der Backendcompiler ergibt aber auch nur eine EXE-Datei des Programmcodes - von Quelldateien
für C-Comiler keine Spur. Es wäre doch einmal an der Zeit, den Weg aufzuzeigen und nicht vielleicht
irgendwo versteckt, wie das Alleinstellungsmerkmal C-Backend von Purebasic seinen Dienst tut.
Wo kamen die Quelldateien her, mit denen die Geschwindigkeitsversuche mit VC++ und GCC
gemacht wurden ? In welchem Verzeichnis werden sie erzeugt ? Wenn so etwas entwickelt
und beworben wird, darf das nicht nur für ein paar Spezialisten durchsichtig sein und
muß in die vordere Reihe.
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8675
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 32 GB DDR4-3200
Ubuntu 22.04.3 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken
Kontaktdaten:

Re: Purebasic 6 Beta 6 Frage zum C-Backend

Beitrag von NicTheQuick »

Du kannst dir auch schon beim alten Purebasic-Compiler mit dem Flag -c, --commented oder /COMMENTED den generierten Assembler-Code ausgeben lassen. Siehe auch in der Hilfe unter Referenz-Handbuch -> Allgemeine Themen -> Benutzung des SHELL-Compilers.

Das geht so auch mit C-Code.

Im Hintergrund erstellt Purebasic im %temp%-Verzeichnis unter Windows einen Ordner mit dem Namen "PurebasicXXXXX", wobei die X für Ziffern stehen. Und darin enthalten sind alle Dateien, die zum Kompilieren notwendig sind. Allerdings verschwinden die auch ganz schnell wieder, wenn das Kompilieren abgeschlossen ist. Deswegen ist --commented Parameter die bessere Wahl.
Bild
Benutzeravatar
juergenkulow
Beiträge: 188
Registriert: 22.12.2016 12:49
Wohnort: :D_üsseldorf-Wersten

Re: Purebasic 6 Beta 6 Frage zum C-Backend

Beitrag von juergenkulow »

Wenn mein Programm mit den Compiler Optionen C-Backend und Optimize Generated Code doppelt so schnell läuft, muß ich dann die Unterschiede im Assembler Code oder den Inhalt von purebasic.c kennen? Wenn ja empfehle ich das englischsprachige PB Forum seit Mai letzten Jahres.
Bitte stelle Deine Fragen, denn den Erkenntnisapparat einschalten entscheidet über das einzig bekannte Leben im Universum.

Jürgen Kulow Wersten :D_üsseldorf NRW D Europa Erde Sonnensystem Lokale_Flocke Lokale_Blase Orion-Arm
Milchstraße Lokale_Gruppe Virgo-Superhaufen Laniakea Sichtbares_Universum
Benutzeravatar
stab
Beiträge: 92
Registriert: 24.02.2006 16:09
Computerausstattung: 286er Big Tower; 16MHz; 1MB Ram; 40MB Festplatte, 5 1/4" und 3 1/2" Diskettenlaufwerk; VGA Farbmonitor 14"; Windows 3.1; PureBasic 0.5
Wohnort: Hardt
Kontaktdaten:

Re: Purebasic 6 Beta 6 Frage zum C-Backend

Beitrag von stab »

Hallo, gibt es im C-Backend eigentlich jetzt die Möglichkeit, direkt C-Code einzufügen?
Paul sagt: "Max lügt."
Max sagt: "Otto lügt."
Otto sagt: "Max und Paul lügen."

Wer lügt hier wirklich und wer sagt die Wahrheit?

_________________________________________

286er Big Tower; 16MHz; 1MB Ram; 40MB Festplatte, 5 1/4" und 3 1/2" Diskettenlaufwerk; VGA Farbmonitor 14"; Windows 3.1; PureBasic 0.5
Benutzeravatar
mk-soft
Beiträge: 3695
Registriert: 24.11.2004 13:12
Wohnort: Germany

Re: Purebasic 6 Beta 6 Frage zum C-Backend

Beitrag von mk-soft »

Ja, das geht ...

Beispiel mit builtin funktion von GCC

Code: Alles auswählen

Procedure.l BSWAP32(Value.l)
  CompilerIf #PB_Compiler_Backend = #PB_Backend_Asm
    !MOV eax, dword[p.v_Value]
    !BSWAP eax
    !MOV dword[p.v_Value], eax
  CompilerElse
    !v_value = __builtin_bswap32(v_value);
  CompilerEndIf
  ProcedureReturn Value
EndProcedure

a.l = $12345678
b.l = BSWAP32(a)
Debug Hex(b, #PB_Long)
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
Benutzeravatar
stab
Beiträge: 92
Registriert: 24.02.2006 16:09
Computerausstattung: 286er Big Tower; 16MHz; 1MB Ram; 40MB Festplatte, 5 1/4" und 3 1/2" Diskettenlaufwerk; VGA Farbmonitor 14"; Windows 3.1; PureBasic 0.5
Wohnort: Hardt
Kontaktdaten:

Re: Purebasic 6 Beta 6 Frage zum C-Backend

Beitrag von stab »

OK?!
Danke mk-soft, aber für mich sieht das immer noch sehr nach assembler-syntax aus. 2 register werden getauscht.
Ich dachte eher an sowas:

CompilerIf #PB_Compiler_Backend = #PB_Backend_C
?printf("Hello World\n");

:-)
Paul sagt: "Max lügt."
Max sagt: "Otto lügt."
Otto sagt: "Max und Paul lügen."

Wer lügt hier wirklich und wer sagt die Wahrheit?

_________________________________________

286er Big Tower; 16MHz; 1MB Ram; 40MB Festplatte, 5 1/4" und 3 1/2" Diskettenlaufwerk; VGA Farbmonitor 14"; Windows 3.1; PureBasic 0.5
Benutzeravatar
mk-soft
Beiträge: 3695
Registriert: 24.11.2004 13:12
Wohnort: Germany

Re: Purebasic 6 Beta 6 Frage zum C-Backend

Beitrag von mk-soft »

Nicht genau hin geschaut ...

Oberer Teil ASM und unterer Teil C
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
Benutzeravatar
stab
Beiträge: 92
Registriert: 24.02.2006 16:09
Computerausstattung: 286er Big Tower; 16MHz; 1MB Ram; 40MB Festplatte, 5 1/4" und 3 1/2" Diskettenlaufwerk; VGA Farbmonitor 14"; Windows 3.1; PureBasic 0.5
Wohnort: Hardt
Kontaktdaten:

Re: Purebasic 6 Beta 6 Frage zum C-Backend

Beitrag von stab »

Ja stimmt, ich hatte nur den ASM Teil im Blick, weil bei mir dieser Teil durchlaufen wird.
Unter welchen Umständen wird denn "CompilerElse" ausgeführt?

Müssen wir aber von meiner Seite auch nicht vertiefen.
War eher eine allgemeine Frage.

Vielen Dank
Paul sagt: "Max lügt."
Max sagt: "Otto lügt."
Otto sagt: "Max und Paul lügen."

Wer lügt hier wirklich und wer sagt die Wahrheit?

_________________________________________

286er Big Tower; 16MHz; 1MB Ram; 40MB Festplatte, 5 1/4" und 3 1/2" Diskettenlaufwerk; VGA Farbmonitor 14"; Windows 3.1; PureBasic 0.5
Benutzeravatar
mk-soft
Beiträge: 3695
Registriert: 24.11.2004 13:12
Wohnort: Germany

Re: Purebasic 6 Beta 6 Frage zum C-Backend

Beitrag von mk-soft »

Wenn es nicht ASM ist, was bleibt denn übrig ... :roll:
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
Benutzeravatar
stab
Beiträge: 92
Registriert: 24.02.2006 16:09
Computerausstattung: 286er Big Tower; 16MHz; 1MB Ram; 40MB Festplatte, 5 1/4" und 3 1/2" Diskettenlaufwerk; VGA Farbmonitor 14"; Windows 3.1; PureBasic 0.5
Wohnort: Hardt
Kontaktdaten:

Re: Purebasic 6 Beta 6 Frage zum C-Backend

Beitrag von stab »

Vielleicht habe ich ein Brett .....
PB 6.00 Beta 8

Code: Alles auswählen

Procedure.l BSWAP32(Value.l)
  CompilerIf #PB_Compiler_Backend = #PB_Backend_Asm
    !MOV eax, dword[p.v_Value]
    !BSWAP eax
    !MOV dword[p.v_Value], eax
    Debug "ASM"
  CompilerElse
    !v_value = __builtin_bswap32(v_value);
    Debug "C"
  CompilerEndIf
  ProcedureReturn Value
EndProcedure

a.l = $12345678
b.l = BSWAP32(a)
Debug Hex(b, #PB_Long)
ASM
78563412
Paul sagt: "Max lügt."
Max sagt: "Otto lügt."
Otto sagt: "Max und Paul lügen."

Wer lügt hier wirklich und wer sagt die Wahrheit?

_________________________________________

286er Big Tower; 16MHz; 1MB Ram; 40MB Festplatte, 5 1/4" und 3 1/2" Diskettenlaufwerk; VGA Farbmonitor 14"; Windows 3.1; PureBasic 0.5
Antworten