Source code |
|
1 2 3 4 5 6 7 |
Dim n As Integer: n = 20 Dim A(n) As String Dim i As Integer: i = 1 A(i) = "first": i = i +1 A(i) = "second": i = i +1 A(i) = "third": i = i + 1 '... |
Source code |
|
1 2 |
Dim A As String() = {"first", "second", "third"} MsgBox(A(0)) |
Intermediate
Date of registration: Jan 1st 2009
Location: Hanover, Germany
Occupation: Software Engineer
Hobbies: Hilbert Curves
Source code |
|
1 |
Dim a() As String : a = Split("Ene,Mene,Muh", ",") |
Administrator
Date of registration: Jul 16th 2008
Location: Erlangen, Germany
Occupation: Software Developer
Hobbies: Jabaco, game theory, text-mining
guter vorschlag. wird implementiert.Quoted
vom OlimilO:
Dim A As String() = {"first", "second", "third"}
jabaco ist flexibel und gute ideen werden auf jeden fall implementiert. wie stellst du dir die initialisierung einer udt-variable vor?Quoted
von A1880:
Für den allgemeinen Fall wäre eine Syntax nett, mit der man Type- und Array-Variablen initialisieren kann. Da habe ich aber auch nichts in Jabaco gefunden.
Source code |
|
1 |
int iarr[] = {1, 2, 3}; |
Source code |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
Option Explicit Private Type MyType IntVal1 As Integer intVal2 As Integer StrVal As String End Type Private Type ArrayOfMyType Arr() As MyType End Type Private Function New_ArrayOfMyType(ParamArray params()) As ArrayOfMyType Dim i As Integer, j As Integer Dim u As Integer: u = (UBound(params) + 1) / 3 - 1 With New_ArrayOfMyType ReDim .Arr(0 To u) For i = 0 To u .Arr(i).IntVal1 = CInt(params(j)): j = j + 1 .Arr(i).intVal2 = CInt(params(j)): j = j + 1 .Arr(i).StrVal = CStr(params(j)): j = j + 1 Next End With End Function Private Function MyTypeToString(this As MyType) As String With this MyTypeToString = CStr(.IntVal1) & " " & _ CStr(.intVal2) & " " & _ .StrVal End With End Function Private Sub Command1_Click() Dim a As ArrayOfMyType a = New_ArrayOfMyType(1, 2, "first", 3, 4, "second", 5, 6, "third") MsgBox MyTypeToString(a.Arr(0)) End Sub |
Quoted
von Manuel:
guter vorschlag. wird implementiert
Intermediate
Date of registration: Jan 1st 2009
Location: Hanover, Germany
Occupation: Software Engineer
Hobbies: Hilbert Curves
Administrator
Date of registration: Jul 16th 2008
Location: Erlangen, Germany
Occupation: Software Developer
Hobbies: Jabaco, game theory, text-mining
Ich habe bereits "Option Strict" für die nächste Version implementiert. In Zukunft ist das also kein Problem. Es ist bereits jetzt möglich komplexe Aufgaben zu lösen und in Zukunft wird das alles noch einfacher werden.Quoted
Wenn ich typsicher programmieren, komplexe Algorithmen mit verschachtelten Datenstrukturen in professioneller Qualität hervorbringen und pflegen will, sollte ich wohl doch eher Java, C++ oder C# nutzen.
Solche Erweiterungen sind problemlos möglich. Es ist kaum Aufwand für mich.Quoted
Bei Erweiterungen von Jabaco wäre ich eher zurückhaltend und würde Vorschläge jeweils danach beurteilen, ob der Zuwachs an Komplexität sich wirklich lohnt. Die Initialisierer-Syntax ist so ein Fall. Nett, wenn sie da ist. Man kommt aber auch gut ohne aus.
Wird es geben.Quoted
- Dokumentation (muss kein Hochglanz sein, ganz ohne ist aber wirklich kein Dauerzustand)
Den Call Stack kann ich dir problemlos anzeigen. Wann und wo würdest du den gerne sehen? Für mich war das eine unnötige Information. Überwachungsausdrücke sind auch möglich, aber sind die wirklich nötig?Quoted
Debugger ist sehr eingeschränkt (z.B. keine Anzeige des Call Stacks, keine Überwachungsausdrücke)
Das Errorhandling ist relativ kompliziert. Was fehlt dir da genau?Quoted
Erweiterte Fehlerbehandlung (entweder mit try/catch oder mit verbessertem ON ERROR)
Der ist bereits rudimentär implementiert (Project => References). Was fehlt dir genau? Wie würdest du den gerne verwenden?Quoted
Object Explorer fehlt
Ich auch. Das Framework ist OpenSource. Vielleicht sollten wir mal ein Preisgeld für sowas ausschreibenQuoted
Ich würde gerne ActiveX Controls einbinden können
Eigentlich kein Problem, aber ist das wirklich nötig? Hast du ein Beispiel?Quoted
Einstellmöglichkeiten für Stack- und Heap-Größe
Das Framework ist OpenSource. Du könntest es einfach implementieren. Bsp:Quoted
In der Klasse "Form" fehlt mir die Collection "Controls"
Jabaco Source |
|
1 |
MsgBox Me.ContentFrame.Parent.getComponentCount()
|
Wie oft passiert dir das?Quoted
"Endif" sollte automatisch zu "End if" werden
Steht bereits auf meiner Todo-Liste.Quoted
Generell sollten eingegebene Identifier automatisch die Groß-/Kleinschreibung gemäß erstmaliger Definition annehmen
Diese Funktion werde ich noch implementieren.Quoted
Ich würde gerne per Kontext-Menü schnell von einem Identifier zu seiner Definition springen können
Ok - die nächste Version wird diese Dateien in "%temp%/%guid%/..." schreiben.Quoted
Jabaco sollte Projektdaten und temporär übersetzte Klassen nicht im Programm- sondern im jeweiligen Projekt-Verzeichnis ablegen. (ich möchte nicht, dass jemand in meinem Programmverzeichnis "herumschreibt")
Das "Declare" war mir zu allgemein. Mit Jabaco kannst du platformunabhängige Software erzeugen und deshalb habe ich "Declare" durch "WinApi" ersetzt.Quoted
Die WINAPI-Syntax is OK. Besser fände ich die alte API-Syntax von VB6 (nicht zu reden vom VB6 API Assistenten)
Intermediate
Date of registration: Jan 1st 2009
Location: Hanover, Germany
Occupation: Software Engineer
Hobbies: Hilbert Curves
Quoted
Den Call Stack kann ich dir problemlos anzeigen. Wann und wo würdest du den gerne sehen? Für mich war das eine unnötige Information. Überwachungsausdrücke sind auch möglich, aber sind die wirklich nötig?
Quoted
Das Errorhandling ist relativ kompliziert. Was fehlt dir da genau?
Quoted
(Object Explorer) Der ist bereits rudimentär implementiert (Project => References). Was fehlt dir genau? Wie würdest du den gerne verwenden?
Quoted
(Stack-/Heap-Größe einstellbar) Eigentlich kein Problem, aber ist das wirklich nötig? Hast du ein Beispiel?
Source code |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
Option Explicit ' cf. http://de.wikipedia.org/wiki/Ackermannfunktion Public Function Ackermann(m As Long, n As Long) As Long If m = 0 Then Ackermann = n + 1 Else If n = 0 Then Ackermann = Ackermann(m - 1, 1) Else Ackermann = Ackermann(m - 1, Ackermann(m, n - 1)) End If End If End Function Public Function AckermannIterative(m As Long, n As Long) As Long Do While m <> 0 If n = 0 Then n = 1 Else n = AckermannIterative(m, n - 1) End If m = m - 1 Loop AckermannIterative = n + 1 End Function |
Quoted
"Endif" sollte automatisch zu "End if" werden . Wie oft passiert dir das?
Administrator
Date of registration: Jul 16th 2008
Location: Erlangen, Germany
Occupation: Software Developer
Hobbies: Jabaco, game theory, text-mining
Sollst du kriegen. Vermutlich aber noch nicht in der nächsten Version.Quoted
Bei der Fehlersuche im Debugger hilft es mir, wenn ich sehe, was im Call Stack steht. Da finde ich VB6 vorbildlich. Auch die Überachungsausdrücke nutze ich oft, um beim Durchsteppen auf einen Blick diverse Variable und Ausdrücke verfolgen zu könne
Alle Exceptions: http://java.sun.com/j2se/1.5.0/docs/api/…/Exception.htmlQuoted
In der VB6-Dokumentation gibt es eine Liste der "trappable errors". Kannst Du sagen, welche Fehler in Jabaco "trappable" sind?
Ok. So ähnlich stelle ich mir das auch vor und ich habe auch schon überlegt wie wir das realisieren können. Mehr dazu werde ich demnächst posten.Quoted
Ich verwende den Object Explorer bei Microsoft als Dokumentation und sehe mir dort an, was mit einer Objekt-Klasse "geht", welche Enum-Parameter erlaubt sind, welche Methoden und Properties definiert sind.
Das selbe Problem hast du aber auch mit VB6 und Java Die JavaVM reagiert nicht auf Änderungen der Stack-Größe. Ich muss noch mal schauen wie das genau geplant ist.Quoted
Ich habe mit der Ackermannfunktion experimentiert, um die Gesamtperformance von Jabaco zu testen. Das sprengt schon bei kleineren Beispielen den Stack. Die Heap-Größe hatte ja schon ein anderer Kollege geposted
Das kannst du beim Kompilieren doch per Dateityp angeben, oder verstehe ich dich falsch? Wenn du kein embedded Framework willst, dann solltest du "Project" auswählen und dort in Properties => Package die Einstellung auf "Nothing" ändern.Quoted
Beim Ausführen eines Jabaco-Exe-Binaries wird im Verzeichnis %TEMP% ein "executable jar" erzeugt und mit java ausgeführt. Ich fände es praktisch, wenn ich Jabaco-Projekte in ein (dann kleineres) Jar-Archiv kompilieren und dann selber mit Jabaco.jar im classpath per Skript oder "zu Fuß" ausführen könnte.
Intermediate
Date of registration: Jan 1st 2009
Location: Hanover, Germany
Occupation: Software Engineer
Hobbies: Hilbert Curves
Source code |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 |
public class jAckermann { public static long nesting; public static long nestingMax; // start with // // java -Xss4M -Xms32M -Xmx128M jAckermann public static void main(String args[]) { Exception Err = null; Exception h3 = null; MyThread t; t = new MyThread(); t.start(); } public static void runTest() { long res; nesting = 0; System.out.println("Ackermann test started ..."); try { res = AckermannIterative(4, 1); // res = Ackermann(4, 0); System.out.println("OK! res = " + res + " max. nesting = " + nestingMax); } catch (StackOverflowError e) { System.out.println("Stack overflow! nesting = " + nesting); } } // nesting // A(3, 6) = 509 508 // A(3, 7) = 1021 1021 - 1023 // A(4, 0) = 13 12 - 16 // A(4, 1) = 65533 65532 public static long Ackermann(long m, long n) throws StackOverflowError { long Ackermann = 0L; Exception Err = null; Exception h8 = null; nesting++; if (nesting > nestingMax) { nestingMax = nesting; } if(m == (long)0) { Ackermann = n + (long)1; } else { if(n == (long)0) { Ackermann = Ackermann(m - (long)1, 1); } else { Ackermann = Ackermann(m - (long)1, Ackermann(m, n - (long)1)); } } nesting--; return Ackermann; } public static long AckermannIterative(long m, long n) throws StackOverflowError { long AckermannIterative = 0L; Exception Err = null; Exception h8 = null; nesting++; if (nesting > nestingMax) { nestingMax = nesting; } do { if(m != (long)0) { if(n == (long)0) { n = 1; } else { n = AckermannIterative(m, n - (long)1); } m -= 1; } else { AckermannIterative = n + (long)1; nesting--; return AckermannIterative; } } while(true); } } class MyThread extends Thread { public void run() { jAckermann.runTest(); } } |
Source code |
|
1 |
java -Xss4M -Xms32M -Xmx128M jAckermann |