Bin neu hier im Forum und habe mich mit PB immer wieder sporadisch in den letzten Jahren befaßt und durchzuwursteln versucht. Normalerweise schreibe ich in C, PHP und einigen anderen Sprachen. Deshalb scheitere ich auch wiederholt an Verständnisproblemen in Verbindung mit den Modalitäten von PB. Ich hoffe, diese Sammlung an Fehlern, Mängeln und Anregungen an PB und seinen Untersystemen führt nicht zur Auffassung, ich wolle es runterschreiben. Ich liebe und schätze die schnelle Umsetzbarkeit kleinerer Hilfsprogramme, speziell mit schlichter GUI. Da ist bei meinen anderen Sprachen deutlich mehr Aufwand zu treiben. Ursprünglich nur als Daddelsprache für schnelle Helferlein gewählt, zeigt PB erhebliches Programmierpotential. Es wäre schade, auf PB nur wegen einer Anzahl von meist schnell behebbaren Fehlern und meiner begrenzten Kenntnis im Umgang mit der Sprache verzichten zu müssen. Also gleich zu Sache. Übrigens beziehe ich mich dabei auf PB 5.41 beta 1 x86 für Linux.
Editor:
<Return> für Zeilenvorschub funktioniert nicht, nur <Shift><Return>; <Tab> und <Shift><Tab> ebensowenig, nur <Ctrl><i>.
Tabulator des aktuellen Quelltextes wandert bei mehreren vorhandenen Texten in der IDE häufig (nicht immer, Bedingung nicht nachvollziehbar) mit der x-Position des Mauszeigers mit, als würde er mit der Maus gezogen werden.
Keine Blockkommentare möglich wie in C:
Code: Alles auswählen
/* bla bla */
Manchmal werden die Dateinamen in den Tabulatoren vertauscht, speziell, wenn neue Quelltexte geladen oder neu angelegt werden. Nach dem Speichern eines Textes steht der richtige Name häufig wieder im eigenen Tabulator, aber der desjenigen Tabs, mit dem zuvor getauscht wurde, wird nicht mehr korrigiert.
Wie schaltet man den Fensterteilungsmodus ein, um zwei oder mehr Quelltext gleichzeitig betrachten zu können? Das kann jeder halbwegs moderne Editor, z.B. Kate oder KDevelop aus KDE. Ich hoffe, die PB-IDE kann das auch - sonst Fred nachrüsten lassen!

Offline-Hilfe:
Links funktionieren nicht im Fließtext. Themen sind nur umständlich über "Inhalte" oder "Suche" zu finden.
Aufrufmodalitäten sind in der Hilfe nicht oder nur in unerwarteten Themen explizit angegeben. Nichtexplizite Angaben eröffnen ein weites Feld beliebiger Interpretation nach den eigenen Programmierkenntnissen, auch anderer Sprachen. Z.B.:
- Aufruf von Prozeduren mit Feldern "by reference" ist in PB selbstverständlich, "by value" anscheinend unmöglich. Viel Zeit mit der Suche nach der Syntax für "Procedure Name(var.l, Array @arr)" verbracht, da in "Prozeduren" die standardmäßige Übergabe "by reference" nur indirekt als Beispielquelltext dokumentiert ist (und "Structure Point" fehlt!). In vielen anderen Sprachen wird vom Compiler standardmäßig "by value" angenommen und "by reference" durch z.B. "@" ermöglicht. In 99% der Fälle wähle ich aus Gründen der Geschwindigkeit und des Speicherverbrauches "by reference" und so suchte ich nach der expliziten Schreibweise dafür.
- Aufruf von Prozeduren mit Feldern - Feldidentifikation mit Schlüsselwort "Array" notwendig.
- Aufruf von Prozeduren mit Feldern - Feldidentifikation mit Klammerpaar notwendig.
- Warum sind Deklarationen für Prozeduren nötig?
- Welche Deklarationen sind für Prozeduren mit Feldern nötig?
- Welche Reihenfolge von "Define", "Declare" und "Dim" ist notwendig bei Verwendung von EnableExplicit und Prozeduren mit Zeichenkettenfeldern?
In "Compiler Funktionen" wird Unicode als mit 2 Bytes Speicherbedarf pro Zeichen angegeben. Unicode ist aber eine Angabe zur verwendeten Zeichentabelle, nicht die der Kodierung, aus der der Platzbedarf des Zeichens abzuleiten ist. Auch variablen Platzbedarf pro Zeichen gibt es, z.B. "UTF-8" mit 1-4 Bytes pro Zeichen.
Der Wert der in PB verwendbaren Konstanten sollte leicht auffindbar sein. Warum sollte man erst ein Miniaturprogramm schreiben müssen, das den Wert einiger weniger namentlich bekannter Konstanten per Debug ausgibt? Die eintreffenden Nachrichten der Ereignisschleife wären so sehr viel leichter nachzuvollziehen.
Die Suche erlaubt nicht, mehrere Wörter zu nutzen - weder mit AND, noch mit OR verknüpft.
Lösungen allein im Netz sind NICHT erwünscht, da auf den Inseln vielfach kein Internet verfügbar ist (Stromausfall, Mobilfunknetzausfall, extrem kleine und teure Volumentarife, keine Flatrate verfügbar).
Compiler:
Bekannte und nützliche Funktionen wie strrpos(), explode(), print_r(), sprintf(), preg_match() aus PHP oder C sind in PB unbekannt und müssen händisch nachgebildet werden.
- strrpos, explode selbst nachgebildet, eigenwillige Nachbildung von sprintf als "Format()" von "mk-soft" und "peterb" aus dem engl. Forum raubmordkopiert (danke!).
- preg_match mit CreateRegularExpression(), ExtractRegularExpression() und FreeRegularExpression() nachzubilden versucht (vorerst gescheitert, extra Forenthema eröffnet).
Fehlermeldungen präzisieren (z.B. Routine(Var, Arr) ergibt "Bad parameter type: an array is expected." statt "Felder müssen bei Prozeduraufrufen als <Feldname>() übergeben werden."; das Klammernpaar dabei fett schreiben).
Warum muß man Prozeduren deklarieren? Kann der Compiler den Quelltext nicht überblicken?
Warum muß einer Prozedur die Dimensionsanzahl des übergebenen Feldes mitgeteilt werden? Was passiert, wenn diese Anzahl von der tatsächlich vorhandenen abweicht? Die Post erwartet doch auch keinen Aufkleber auf einem Brief mit dem Text "Achtung: Ich bin ein Brief!".
Variablen-, Konstanten-, Prozedurnamen usw. sollten ebenfalls Unicode-Zeichen beinhalten dürfen. Viele andere Sprachen akzeptieren dies; warum hält PB am steinzeitlichen ASCII fest?
Warnungen und Fehlermeldungen in Makros sollten in diesen zusammen mit der Aufrufposition des Makros im Quelltext angezeigt werden, da man sich sonst bei insgesamt 7000 Zeilen Quältext leicht einen Wolf sucht.
Mehrzeilige TextGadgets ignorieren Flags wie #PB_Text_Right.
Warum kommen oft (nicht immer!) zwei Meldungen in der Ereignisschleife rein über ein "LeftDoubleClick" eines beliebigen Gadgets?
Es sollten endlich Felder aus Prozeduren und Unterroutinen zurückgegeben werden dürfen.
Vorder-/Hintergrundfarbänderung an Einträgen von ComboGadgets funktioniert nicht: "SetGadgetItemColor(Combo, i, #PB_Gadget_BackColor, $ffffc0)"
Maskierbare Zeichen sollten erlaubt sein, also z.B.
Code: Alles auswählen
"\""+Var+"\" angeklickt."
Gibt es in absehbarer Zeit eine Präzisierung des Vergleichsoperators in Variablenabfragen auf "=="? Damit könnte man endlich Variablenwertzuweisungen in derselben Zeile wie die Abfrage einbauen:
Code: Alles auswählen
If (db = OpenDatabase()) == 0
Code: Alles auswählen
${'Audio'.$i}
Kontextsensitive GUI ist wünschenswert, worin ähnlich wie im CSS-Flexbox-Modell die Elemente ihre Abmessungen ausdehnen, wie Platz vorhanden ist. Rudimentäre Umsetzung mit PB-Quelltext erprobe ich gerade per Ereignisschleife. Diese Funktion sollte aber automatisiert werden können und innerhalb PB in C oder gleich ASM vorliegen.
Debugger:
F10 öffnet und schließt nur das Fenstermenü und funktioniert nicht als "Schritt darüber".
Der Rückgabewert von einfachen Funktionen sollte beim Überfahren des Funktionsnamens mit der Maus ebenfalls numerisch dargestellt werden, z.B. "blubb = GadgetWidth(#bla)" ergibt dann "97", während "blubb" bereits wieder geändert worden ist.
Quelltextwiederherstellung:
Es läßt sich zwar ein Quelltext in einer beliebigen Version auswählen und der Inhalt manuell kopieren, aber es gibt keine Schaltfläche, um diesen Quelltext in den Editor zu übernehmen.
Beim jeweils ersten Fehler im Editor, in der Hilfe und im Debugger vermute ich, die PB-eigene Ereignisschleife arbeitet fälschlicherweise wie mit gedrückten Alt-Taste (oder einem ähnlichen Effekt). Kein anderes Programm auf meinem Entwicklungsrechner verhält sich derart unvorhersehbar.
Kann sich dabei bitte einer darum kümmern, die Verbesserungsvorschläge in die deutsche Hilfe einzuflechten und vielleicht auch Fred bescheidzugeben für erweiterte Funktionen?
Liebe Grüße
Domino