Seite 2 von 2

Verfasst: 09.06.2008 09:27
von inc.
Hallo Danilo,

schön dich hier wieder aktiver zu sehen.

Die Umwege über Macros bzw. einem Include etc. brauchst du eigentlich nicht mehr. Solche Wege der Klassenerstellung hatten hier schon einige wie z.B. Hellhound66 oder auch andere mal geposted.

Mittlerweile geht das besser über einen Preprozessor, der neben der eigentlichen Klassenerstellung auch Vererbung, Polymorphie!, Einkapselung und auch abstrakte Klassen beherrscht.

http://pb-oop.origo.ethz.ch/wiki/main

Ich habe den Preprozessor so aufgebaut, dass er final im User/Temp Ordner den übersetzten, nativen PB Code abgelegt, der sodann zum eigentlichen PB Compiler gesendet wird. Diesen Code kann man auch sodann nutzen um ihn in Foren etc. zu posten. Probier's mal aus und schaue ihn dir an, ... was dort an Code intern erstellt wird, ist sehr übersichtlich und auch nachvollziehbar

Bedeutet, du kannst den Preprozessor nutzen und dennoch deine Projekte/Codeschnipsel mit anderen Teilen, die den Preprozessor nicht nutzen möchten.

Verfasst: 09.06.2008 13:13
von Danilo
inc. hat geschrieben:Die Umwege über Macros bzw. einem Include etc. brauchst du eigentlich nicht mehr. Solche Wege der Klassenerstellung hatten hier schon einige wie z.B. Hellhound66 oder auch andere mal geposted.
Danke, inc. - mir ging es aber mehr darum auszuloten was Macros können.

Dabei ist dann mein Beispiel rausgekommen...etwas besseres ist mir gerade
nicht eingefallen zum testen. Ich bitte um Verzeihung. ;)
Was ich suchte ist sowas wie define + undefine oder so, um etwas über
mehrere Macros 'mitzunehmen' (z.B. den Klassenname).
Oder auch unbekannte Argumentzahl für Macros, da in der Hilfe was mit '...' stand,
so wie in C (printf etc.). Oder mit Parameterrotation wie in NASM.

Code: Alles auswählen

Macro longdata( x, ... )
  Data.l x, ...
EndMacro

longdata(12,15,99)
longdata(1,2,3,147,798,16,9,56)

Macro HiHi( name )
  define __hehe__ name
EndMacro

Macro yo( name )
 Procedure __hehe__#name
EndMacro

Macro EndHihi
  EndProcedure
  undefine __hehe__
EndMacro

Hihi( Hello )
yo( World )
EndHihi

Hihi( Hallo )
yo( Welt )
EndHihi
Es scheint aber nichts dergleichen zu geben. Im Chat meinte man jedenfalls geht nicht.

Verfasst: 09.06.2008 21:51
von inc.
Wenn das in ASM möglich ist, dann kannst du viell. den Macro Support aus ASM nutzen?! Also so wie wir das hier genutzt hatten bevor PB 4.0 raus kam.

!macro xxxxx
!{
!...
!...
!...
!}

!xxxxx

o.ä.

Verfasst: 10.06.2008 09:01
von helpy
Hi Danilo,

Beide Dinge (unbekannte Argumentzahl, Name merken) hatte ich mal als Feature Request ins englische Forum gestellt:

==> unbekannte Argumentzahl: http://www.purebasic.fr/english/viewtopic.php?t=19743

==> Name merken (Named Macro Variables): http://www.purebasic.fr/english/viewtopic.php?t=21124

Das war vor zwei Jahren!

cu, guido

Verfasst: 10.06.2008 09:55
von Danilo
helpy hat geschrieben:Beide Dinge (unbekannte Argumentzahl, Name merken) hatte ich mal als Feature Request ins englische Forum gestellt:

==> unbekannte Argumentzahl: http://www.purebasic.fr/english/viewtopic.php?t=19743

==> Name merken (Named Macro Variables): http://www.purebasic.fr/english/viewtopic.php?t=21124

Das war vor zwei Jahren!
OK, Danke... dann ist es wie immer nur noch eine Frage der Zeit.

Entweder Freds Liste ist so groß, oder aber Dinge mit niedriger Priorität
kommen nie nach oben. ;)

Verfasst: 10.06.2008 10:39
von inc.
Wäre doch was für einen Preprozessor was "Define" und "Undefine" von Konstanten angeht, genauso jene Idee mit Wildcats "*" als Argument in Macros ...

Ich hatte eh vor den OOP Preprozessor mehr "modular" aufzubauen. Bedeutet, neben den OOP Fähigkeiten können PlugIns erstellt werden, die in den Parsing & Converting Prozess mit eingebunden würden.

Die Anzahl der Möglichkeiten wäre richtig lecker.

Verfasst: 10.06.2008 11:04
von Danilo
inc. hat geschrieben:Wäre doch was für einen Preprozessor was "Define" und "Undefine" von Konstanten angeht, genauso jene Idee mit Wildcats "*" als Argument in Macros ...

Ich hatte eh vor den OOP Preprozessor mehr "modular" aufzubauen. Bedeutet, neben den OOP Fähigkeiten können PlugIns erstellt werden, die in den Parsing & Converting Prozess mit eingebunden würden.

Die Anzahl der Möglichkeiten wäre richtig lecker.
Das kannst Du natürlich machen, aber das ändert nichts daran das PureBasic es
nicht kann. Es ist dann nur für Programmierer nutzbar die Dein (Zusatz-)Produkt
nutzen, nicht mit plain PB.

Alles ist möglich. Du kannst auch PureBasic nach C++ oder C# übersetzen oder
andersrum. Inwiefern das sinnvoll ist, ist Ansichtssache.
Dann könnte man gleich aufhören Verbesserungsvorschläge und -wünsche für
PureBasic selbst zu machen und alles selbst mit externen Tools machen.
Ich denke das ist nicht der Sinn der Sache.

Du kannst gerne bauen was Du möchtest, das ist ja auch gut was Du da machst!
Nur sollte es trotzdem für andere Programmierer möglich sein sich neue Features
für PB selbst zu wünschen, auch wenn es extern schon von jemandem umgesetzt
wurde (als LIB oder Preprozessor etc.).