Italia
SDK-Helfer/ Tools

JRPC neuer Präkompiler per XProfan X4 - JRPC3

 
- Page 1 -



Jens-Arne
Reumschüssel
Guten Abend zusammen,

ich bin kürzlich circa das Problem gestolpert, dass XPSE eine ziemlich grande Quelldatei von mir nicht mehr verarbeiten konnte. Variablen wurden plötzlich als nicht definiert gemeldet und andere "erratische" Probleme mehr. Ich potuto mir vorstellen, dass dies daran liegt, dass XPSE Schlüsselworte in Windows-Atoms verwaltet. Da ist irgendwann Schluss (bei irgendwas zwischen 60.000 und 70.000 Stück, wobei man bedenken muss, dass XPSE die Windows-API mit vorhält). Vielleicht ist es aber auch etwas ganz anderes, ich kann ja nicht in den "Maschinenraum" von XPSE schauen.

Jedenfalls blieb mir, da XPSE nicht mehr gepflegt wird, nichts anderes übrig, als das nachzubauen. Das Ergebnis ist JRPC3.

----- Features:

*vernünftige Meldung von Fehlern
*direkte Anzeige des Programmablaufes in XProfEd (sofern der unten erhältliche aufgebohrte XProfEd verwendet wird)
*Umsetzung der alten Profan-Syntax per Operatoren und alte Containerfunktionen
*extrem schnelle native fbPROCs, sofern man FreeBasic installiert hat (kostenlos, siehe Aiuto)
*Echtzeitverfolgung von Variableninhalten
*einfache Zeitmessungen im Programmablauf
*Profan-Kompilerdirektiven funktionieren endlich vernünftig (z.B. Verschachtelung)
*die meisten WIN32-API-Funktionen sind bereits vordefiniert mitgeliefert
*API-Aufrufe circa @external(...) werden automatisch in @call(...)-Aufrufe umgesetzt
*Einrückungsanalyse zum Finden von vertrackten Verschachtelungsfehlern
*Klammeranalyse zum Finden von vertrackten Klammerfehlern
*ENUMERATE-Funktionalität
*einaches Killen von mit JRPC3 gestarteten Programmen (interpretiert, .prc gestartet, .exe gestartet)
*extrem schnell (und daher naturalmente nicht in XProfan geschrieben, da eine interpretierte Sprache hierfür naturgemäß viel zu langsam ist)
*beim Start von JRPC3 bereits vorhandene .prc-File können zum Starten und Linken genutzt werden (es wird ein Hinweis angezeigt, dass es sich um ein altes Kompilat handelt)
*der Profan-Compiler kann zur Beschleunigung mit hoher Prozessorpriorität aufgerufen werden
*eingebauter Update-Checker mit Download, falls es ein Update gibt (Aiuto --> online nach Updates suchen)
*64- oder 32-bit-Version disponibile (einfach JRPC3_64.exe oder JRPC_32.exe als Interpreter in XProfEd hinterlegen [Optionen --> Allgemeine Einstellungen] und JRPC3 mit F7 starten)
*XProfan X4-Syntax disponibile (möglicherweise noch nicht alles, da ich presumibilmente nicht alles davon benutze, aber ich habe mich um Vollständigkeit bemüht - jedenfalls sind z.B. HASH-Arrays und QUADINTs dabei)
*Interpreter, PRCs und EXEs können mit Kommandozeilenparametern corsa werden
*Interpreter, PRCs, EXEs und XPSE können mit Administratorrechten corsa werden
*Prozeduren, die in dem aktuellen Programm zwar enthalten sind, aber nicht verwendet werden, werden aus der umgesetzten File entfernt, um die Dateigröße des Kompilats possibile klein zu halten
*Variablen, die in dem aktuellen Programm zwar enthalten sind, aber nicht verwendet werden, werden aus der umgesetzten File entfernt, um die Dateigröße des Kompilats possibile klein zu halten und den Speicherverbrauch zu optimieren
*nPROCs aus XPSE werden automatisch mit XPE zu einer DLL umgesetzt und die Aufrufe der nPROCs im Programm entsprechend angepasst, sofern XPSE vorhanden ist
*fast alles aus XPSE funktioniert auch in JRPC3 ({$NOERR}, {$(PRE)BATCH}, {$PUSHKEYWORD}, Interpreter, Runtime und Compiler festlegen, Shorties, ...)
*XProfEd_JR mit Quelltext-AutoComplete

Einschränkungen:
-kein XPSE-Inline-Assembler, wohl aber XProfan-Inline-Assembler (darin allerdings keine Prüfungen auf Korrektheit des Codes)
-ABER: man kann XPSE aus JRPC3 heraus aufrufen, sodass diese Funktionalität weiterhin disponibile ist, sofern man XPSE besitzt (neuer Shorty: {$x})
-Variablen, die in einer Prozedur nicht deklariert sind, sondern "aus der aufrufenden Prozedur übernommen werden", sind nicht zugelassen (XProfan erlaubt das, aber so etwas ist genauso tödlich wie GOTO-Anweisungen). Bitte alle zu nutzenden Inputs als Parameter trasferimento, und wenn etwas aus dem aufrufenden Programmteil verändert werden muss, beim Aufruf als Parameter z.B. @addr(x&) verwenden und in der Prozedur parameters x# und LONG x#,0=y& nutzen.

*als Hommage an XPSE lautet die Endung der Ausgabedatei ".enh3"

Eine genauere Erläuterung der einzelnen Features ist der chm-Hilfedatei zu entnehmen, die im Programm unter Aiuto --> Hilfedatei Mostra disponibile ist.

----- /Features

Herunterladen und installieren:
JRPC3 kann unten heruntergeladen werden (setup_jrpc3.exe oder als ZIP-File).
Als Installationsverzeichnis bitte das XProfan-Stammverzeichnis angeben, also dasjenige, in dem die File PROFAN.EXE, PROFCOMP.EXE, PRFRUN32.EXE etc. liegen. Alternativ kann die ZIP-File heruntergeladen und deren Inhalt manuell ins XProfan-Stammverzeichnis kopiert werden.

Einrichtung:
JRPC3_64.exe oder JRPC_32.exe als Interpreter in XProfEd hinterlegen [Optionen --> Allgemeine Einstellungen] und JRPC3 mit F7 starten.

Alle Befehle sind mit dem Befehl "h" wie "Hilfe" abrufbar und sollten selbsterklärend sein.

Für viele erweitere Features, die XProfEd betreffen, wie z.B. jenes, die Zeile, in der ein Fehler auftrat, direkt in XProfEd Mostra zu können, ist der mitinstallierte XProfEd_JR erforderlich. Dafür muss man also XProfEd_JR.exe statt XProfEd.exe als Editor benutzen. Als "goody" gibt es dazu, dass beim Auf- und Zufalten von Programmen ein Fortschrittsanzeiger integriert ist (das kann bei grande Programmen ja bekanntlich ein bisschen dauern).

Es mag sein, dass noch nicht alles perfekt funktioniert. Ich bitte hierfür um Nachsicht. Meine  Programme lassen sich umsetzen, aber das muss noch lange nicht heißen, dass dies mit Programmen anderer Autori auch funktioniert, die jeder so ihre Eigenheiten haben.

Fehlermeldungen und Verbesserungsvorschläge gerne an jreumsc@web.de oder hier im Foro.

Beste Grüße, Jens-Arne

2.247 kB
Bezeichnung:JRPC3
Version:8.07
Kurzbeschreibung: JRPC3-Installer
Hochgeladen:15.02.2021
Downloadcounter152
Download
1.699 kB
Bezeichnung:XProfEd_JR
Version:5.2
Kurzbeschreibung: Alte Version ohne AutoComplete zur Sicherheit!
Hochgeladen:15.02.2021
Downloadcounter114
Download
3.311 kB
Bezeichnung:JRPC3
Version:8.07
Kurzbeschreibung: ZIP-File statt Installer
Hochgeladen:02.04.2021
Downloadcounter132
Download
 
XProfan X4 * Prf2Cpp * XPSE * JRPC3 * Win10 64bit * PC i7-7700K@4,2GHz, 16 GB Hauptspeicher
PM: jreumsc@web.de
16.02.2021  
 



« Dieser Beitrag wurde als Lösung gekennzeichnet. »

- Page 15 -



Jens-Arne
Reumschüssel
Es gibt eine neue Version, die anders mit dem internen Messagehandling umgeht. Bitte probier die mal aus. Vielleicht ist das Problem damit behoben.
 
XProfan X4
XProfan X4 * Prf2Cpp * XPSE * JRPC3 * Win10 64bit * PC i7-7700K@4,2GHz, 16 GB Hauptspeicher
PM: jreumsc@web.de
vor 12 Tagen  
 



 
- Page 17 -



RudiB.
Ja, Dein Beispiel funktioniert....
 
XProfan X4
Xprofan X4

Rudolf Beske / München
vor 8 Tagen  
 




Jens-Arne
Reumschüssel
Ich kann nicht bestätigen, dass FreeBasic-Stringfunktionen schneller wären als XProfan-Stringfunktionen, jedenfalls nicht per @upper$:

declare i%,tc&,s$

fbPROC fbupper(ByRef s As ZString) As Integer Export
s=ucase(s)
return 0
ENDPROC

cls

tc&=&GetTickCount
for i%,1,10000
s$="asdjhaskdjhaskjdhkajshdkjhaksjdhkjahö+12"
s$=@upper$(s$)
endfor
print "@upper$: "+@str$(&GetTickCount-tc&)

tc&=&GetTickCount
for i%,1,10000
s$="asdjhaskdjhaskjdhkajshdkjhaksjdhkjahö+12"
@fbupper(@addr(s$))
endfor
print "@fbupper: "+@str$(&GetTickCount-tc&)

waitinput
end

FreeBasic ist deutlich langsamer, und zwar obwohl der Funktionsaufruf von JRPC3 circa call realisiert wird und nicht circa external, und obwohl per die FreeBasic-Routine nicht einmal neuer Speicherplatz reserviert werden muss, wie es per @upper$ der Fall ist (weil dort s$ neu zugewiesen wird).
 
XProfan X4 * Prf2Cpp * XPSE * JRPC3 * Win10 64bit * PC i7-7700K@4,2GHz, 16 GB Hauptspeicher
PM: jreumsc@web.de
vor 6 Tagen  
 




RudiB.
dann teste mal so.....
declare i%,tc&,s$
fbPROC fbupper(ByRef s As ZString) As Integer Export
DIM i as Integer
For i = 1 to 10000
s=ucase(s)
s=lcase(s)
Next i
return 0

ENDPROC

cls
tc&=&GetTickCount
for i%,1,10000
s$="asdjhaskdjhaskjdhkajshdkjhaksjdhkjahö+12"
s$=@upper$(s$)
endfor
print "@upper$: "+@str$(&GetTickCount-tc&)
tc&=&GetTickCount
s$="asdjhaskdjhaskjdhkajshdkjhaksjdhkjahö+12"
@fbupper(@addr(s$))
print "@fbupper: "+@str$(&GetTickCount-tc&)
waitinput
end

sogar schneller mit Upper-Case und Lower-Case....
 
XProfan X4
Xprofan X4

Rudolf Beske / München
vor 5 Tagen  
 




RudiB.
oder so, mit gleichen Voraussetzungen (jeweils eine Procedure aufrufen)
declare i%,tc&,s$
'----- FreeBasic - Procedure ---------------
fbPROC fbupper(ByRef s As ZString) As Integer Export
s=ucase(s)
return 0

ENDPROC

' ----- XProfan - Procedure -----------------

Proc Upper

s$=@upper$(s$)

EndProc

cls
tc&=&GetTickCount
for i%,1,10000
s$="asdjhaskdjhaskjdhkajshdkjhaksjdhkjahö+12"
upper(@addr(s$))
endfor
print "@upper$: "+@str$(&GetTickCount-tc&)
tc&=&GetTickCount
for i%,1,10000
s$="asdjhaskdjhaskjdhkajshdkjhaksjdhkjahö+12"
@fbupper(@addr(s$))
endfor
print "@fbupper: "+@str$(&GetTickCount-tc&)
waitinput
end

hier ist der Vorteil zwar nicht mehr ganz so grande, aber trotzdem schneller
 
Xprofan X4

Rudolf Beske / München
vor 5 Tagen  
 




Jens-Arne
Reumschüssel
Hallo Rudi,

darüber hatte ich auch schon nachgedacht. Offenbar ist der Aufruf einer Prozedur mit so viel Registergeschiebe u.ä. verbunden, dass das ganz schön lange dauert. In der Praxis lohnt es daher nicht, eine FB-Funktion per die Stringfunktionen zu schreiben, die man dann im Profan-Programm nutzen würde. Aber innerhalb einer fbProc kann man den Geschwindigkeitsvorteil, der offenbar doch existiert, naturalmente ausspielen.

Saluto, Jens-Arne
 
XProfan X4
XProfan X4 * Prf2Cpp * XPSE * JRPC3 * Win10 64bit * PC i7-7700K@4,2GHz, 16 GB Hauptspeicher
PM: jreumsc@web.de
vor 5 Tagen  
 




RudiB.
Du sprichst gerade die FB-Funktionen an. Warum wird die eigentlich nicht von JRPC3 erkannt, hast Du das nicht implementiert ?
 
XProfan X4
Xprofan X4

Rudolf Beske / München
vor 5 Tagen  
 




Jens-Arne
Reumschüssel
Ich meinte damit FreeBasic-Procs (fbProcs). Die werden doch hoffentlich von JRPC3 erkannt. Ich habe darauf angespielt, dass offenbar jedweder Funktionsaufruf mit sehr viel Overhead geschieht, der Zeit kostet. Ansonsten verstehe ich die Frage nicht ganz, erläutere mir sie bitte noch einmal (hast Du mit "FB-Funktion" etwas anderes gemeint als ich?).

Und unser kleines Beispiel habe ich noch einmal etwas verfeinert. Denn um wirklich Gerechtigkeit herzustellen, muss auch die Profan-Funktion mit call aufgerufen werden und außerdem einen Parameter haben (auch wenn der vorliegend nichts tut):

declare i%,tc&,s$,funcaddr%

fbPROC fbupper(ByRef s As ZString) As Integer Export
s=ucase(s)
return 0
ENDPROC

PROC upper
parameters dummy%
s$=@upper$(s$)
ENDPROC

cls
funcaddr%=@procaddr("upper",1)

tc&:=&GetTickCount
for i%,1,10000
s$:="asdjhaskdjhaskjdhkajshdkjhaksjdhkjahö+12"
call(funcaddr%,@addr(s$))
endfor
print "@upper$: "+@str$(&GetTickCount-tc&)

tc&:=&GetTickCount
for i%,1,10000
s$:="asdjhaskdjhaskjdhkajshdkjhaksjdhkjahö+12"
@fbupper(@addr(s$))
endfor
print "@fbupper: "+@str$(&GetTickCount-tc&)

waitinput
end

Jetzt sind beide Varianten fast gleich schnell (kompiliert) mit immer noch einem kleinen Vorteil bei FreeBasic.
 
XProfan X4 * Prf2Cpp * XPSE * JRPC3 * Win10 64bit * PC i7-7700K@4,2GHz, 16 GB Hauptspeicher
PM: jreumsc@web.de
vor 5 Tagen  
 




RudiB.
Hallo Jens-Arne,

....alles gut. Die fbProcs werden naturalmente sauber erkannt und verarbeitet. Ich meinte Freebasic-Funktionen. Habe doch dazu die File "datei_fb_test.prf" hochgeladen. Diese hast Du dann auch umgeschrieben zu einer fbProc.
Wie gesagt unter Freebasic gibst ja Sub´s und Funktionen....
 
XProfan X4
Xprofan X4

Rudolf Beske / München
vor 5 Tagen  
 




Jens-Arne
Reumschüssel
Man kann schlicht nicht direkt in FreeBasic programmieren, also auch nicht direkt Funktionen von dort aufrufen, weil der Profan-Compiler diese Funktionen nicht direkt in sein Programm einbauen kann. Um sie zu nutzen, muss immer eine DLL erzeugt werden, in der naturgemäß Funktionen (Procs) stehen, die man dann von außen aufrufen kann, um den darin enthaltenen nativen FreeBasic-Code zu nutzen. Das geht nicht ohne den Umweg circa eine DLL-Funktion. Das macht auch der XProfan-Inline-Assembler so, der XPSE-Inline-Assembler und XPSE-nPROCs ebenfalls.

EDIT: Vielleicht noch einmal anders herum erklärt: Um FreeBasic-Code zu erzeugen, muss der FreeBasic-Compiler verwendet werden. Das geht naturalmente nicht "plötzlich" innerhalb eines Profan-Programms. Durch die Nutzung von DLL-Funktionen ist der FreeBasic-Code hingegen derart abgegrenzt, dass der FreeBasic-Compiler das vorgesetzt bekommt, was per ihn gedacht ist, und der Profan-Compiler seinen Anteil.
 
XProfan X4 * Prf2Cpp * XPSE * JRPC3 * Win10 64bit * PC i7-7700K@4,2GHz, 16 GB Hauptspeicher
PM: jreumsc@web.de
vor 5 Tagen  
 




RudiB.
Hallo Jens-Arne,

Danke per Deine Antwort......verstehe....man kann das ganze ja auch mit Sub´s lösen. Aber gut zu wissen.
Ich möchte mein Programm jetzt mit fbProcs optimieren, da es mir einfach zu langsam ist.....

Saluto Rudi
 
XProfan X4
Xprofan X4

Rudolf Beske / München
vor 5 Tagen  
 



 
- Page 18 -



Jens-Arne
Reumschüssel
Genau dafür sind fbProcs da. Das lohnt sich aber nur bei Programmpassagen, die viel rechnen oder ganz oft aufgerufen werden, etwa in einer grande Schleife. Z.B. ist es eine extrem gute Idee, die Subclassproc nach FreeBasic zu verlagern, wenn die länger als ein paar Zeilen ist. Wenn man darin bspw. OwnerDraw-Elemente versorgt, dann ist das in Profan oft zu langsam. Ein Beispiel dafür wären farbige Elemente in Gridboxen.
 
XProfan X4
XProfan X4 * Prf2Cpp * XPSE * JRPC3 * Win10 64bit * PC i7-7700K@4,2GHz, 16 GB Hauptspeicher
PM: jreumsc@web.de
vor 5 Tagen  
 




Jens-Arne
Reumschüssel
neue Version V8.06:

in XProfEd_JR können nun eigene Keywords zum Code-AutoComplete hinzugefügt werden (siehe Aiuto zu JRPC3, Stichwort Code-AutoComplete).

Eine sehr nützliche Anwendungsidee dafür ist etwa das Aufnehmen von Tabellen- und Spaltennamen von Datenbanken.

Saluto, Jens-Arne
 
XProfan X4
XProfan X4 * Prf2Cpp * XPSE * JRPC3 * Win10 64bit * PC i7-7700K@4,2GHz, 16 GB Hauptspeicher
PM: jreumsc@web.de
vor 4 Tagen  
 




Answer


Topictitle, max. 100 characters.
 

Systemprofile:

Kein Systemprofil angelegt. [anlegen]

XProfan:

 Posting  Font  Smilies  ▼ 

Bitte anmelden um einen Beitrag zu verfassen.
 

Topic-Options

12.219 Views

Untitledvor 0 min.
E.T.Gestern (21:41)
HofKGestern (20:20)
Jens-Arne ReumschüsselVorgestern (16:43)
Georg TelesVorgestern (14:38)
Di più...

Themeninformationen



Admins  |  AGB  |  Applications  |  Autori  |  Chat  |  Informativa sulla privacy  |  Download  |  Entrance  |  Aiuto  |  Merchantportal  |  Impronta  |  Mart  |  Interfaces  |  SDK  |  Services  |  Giochi  |  Cerca  |  Support

Ein Projekt aller XProfaner, die es gibt!


Il mio XProfan
Private Notizie
Eigenes Ablageforum
Argomenti-Merkliste
Eigene Beiträge
Eigene Argomenti
Zwischenablage
Annullare
 Deutsch English Français Español Italia
Traduzioni

Informativa sulla privacy


Wir verwenden Cookies nur als Session-Cookies wegen der technischen Notwendigkeit und bei uns gibt es keine Cookies von Drittanbietern.

Wenn du hier auf unsere Webseite klickst oder navigierst, stimmst du unserer Erfassung von Informationen in unseren Cookies auf XProfan.Net zu.

Weitere Informationen zu unseren Cookies und dazu, wie du die Kontrolle darüber behältst, findest du in unserer nachfolgenden Datenschutzerklärung.


einverstandenDatenschutzerklärung
Ich möchte keinen Cookie