OlimilO
Unregistered
Dim A: A = Array("first", "second", "third")
Hallo,
Also erstmal möchte ich meinen Respekt vor JaBaCo zöllen.
es fühlt sich an wie VB
als VB6-Programmierer fühlt man sich wirklcih schnell wie zuhause
hab auch soeben mein ersten Hello-World-Programm auf Anhieb erfolgreich
gestartet
jetzt meine erste Frage:
auf welche Weise kann man ein Array füllen?
muß man es so machen?:
das hat folgende Syntaktische Nachteile:
* man muß die Indexvariable (hier: i) jedesmal mit angeben und auch selbst hochzählen
* man muß den Namen des Arrays jedesmal mit hinschrieben
oder gibt es auch eine schnellere Möglichekeit ?
unter VB6 gibt es ja die Array-Funktion
soll man sich eine Array-Funktion selber schreiben?
unter VB.NET hat man folgende Möglichkeit:
Grüße,
+Oliver
Also erstmal möchte ich meinen Respekt vor JaBaCo zöllen.
es fühlt sich an wie VB
als VB6-Programmierer fühlt man sich wirklcih schnell wie zuhause
hab auch soeben mein ersten Hello-World-Programm auf Anhieb erfolgreich
gestartet
jetzt meine erste Frage:
auf welche Weise kann man ein Array füllen?
muß man es so machen?:
|
|
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 '... |
das hat folgende Syntaktische Nachteile:
* man muß die Indexvariable (hier: i) jedesmal mit angeben und auch selbst hochzählen
* man muß den Namen des Arrays jedesmal mit hinschrieben
oder gibt es auch eine schnellere Möglichekeit ?
unter VB6 gibt es ja die Array-Funktion
soll man sich eine Array-Funktion selber schreiben?
unter VB.NET hat man folgende Möglichkeit:
|
|
Source code |
1 2 |
Dim A As String() = {"first", "second", "third"}
MsgBox(A(0))
|
Grüße,
+Oliver
Array initialisieren mit Split()
Hallo Oliver,
in Deinem Beispiel kann man sich behelfen:
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.
Gruß!
A1880
in Deinem Beispiel kann man sich behelfen:
|
|
Source code |
1 |
Dim a() As String : a = Split("Ene,Mene,Muh", ",")
|
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.
Gruß!
A1880
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.
btw. ich suche momentan nach einer guten roadmap / issue-tracking-software. bis jetzt hat mich leider noch garnichts überzeugt. auch nicht die marktführer trac / bugzilla. ideen sind willkommen
thanks
Hi A1880,
vielen Dank für den Tipp klingt natürlich nicht schlecht
obwohl in Java kann man schreiben:
VB6 macht mit der Array-Funktion immer nur Variant Arrays.
Naja meistens braucht man es nur für kleine Arrays mit unter 100 Elementen, bspw um mal schnell was zu testen.
A1180:
"Für den allgemeinen Fall wäre eine Syntax nett, mit der man Type- und Array-Variablen initialisieren kann"
mit Type meinst du benutzerdefinierte Typen also ein array of structure?
hmm, in VB gibt es die Möglichkeit über einen paramarray-Parameter
aber der ist auch nicht implementiert
hast du so gemeint?
wie kann man Manuel beim programmieren helfen?
Grüße
+Oliver
vielen Dank für den Tipp klingt natürlich nicht schlecht
obwohl in Java kann man schreiben:
|
|
Source code |
1 |
int iarr[] = {1, 2, 3};
|
VB6 macht mit der Array-Funktion immer nur Variant Arrays.
Naja meistens braucht man es nur für kleine Arrays mit unter 100 Elementen, bspw um mal schnell was zu testen.
A1180:
"Für den allgemeinen Fall wäre eine Syntax nett, mit der man Type- und Array-Variablen initialisieren kann"
mit Type meinst du benutzerdefinierte Typen also ein array of structure?
hmm, in VB gibt es die Möglichkeit über einen paramarray-Parameter
aber der ist auch nicht implementiert
|
|
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
|
hast du so gemeint?
wie kann man Manuel beim programmieren helfen?

Grüße
+Oliver
Hi Manuel
Danke!
Tipp an Manuel
ich würde nicht zuviel Energie mit Handbuch schreiben aufwenden
1. gibt es zu VB schon genug
2. wegen 1. wenn dann nur die Unterschiede VB <-> JaBaCo herausstellen und da sich eh noch das eine oder andere ändern kann dann nur das herausstellen was JaBaCo besser kann,
3. lieber das Forum gut bedienen, dann wird automatisch jede Frage beantwortet, und die Forumsteilnehmer lernen mit und können nebenbei irgendwann selbst den Support von JaBaCo übernehmen.
hab auf AVB die Erfahrung gemacht, daß von den Anfängerfragen fast niemand jemals ein VB-Handbuch gelesen hat *g* die meisten machen rumprobieren per "try 'n error"
ansonsten muß ich Dir nochmal sagen daß ich JaBaCo echt genial finde.
kann man beim Programmieren irgendwie behilflich sein?
wieviele programmierer seid ihr, oder hast du etwa bisher alles alleine programmiert.
Grüße
+Oliver
Quoted
von Manuel:
guter vorschlag. wird implementiert
Danke!
Tipp an Manuel
ich würde nicht zuviel Energie mit Handbuch schreiben aufwenden

1. gibt es zu VB schon genug
2. wegen 1. wenn dann nur die Unterschiede VB <-> JaBaCo herausstellen und da sich eh noch das eine oder andere ändern kann dann nur das herausstellen was JaBaCo besser kann,
3. lieber das Forum gut bedienen, dann wird automatisch jede Frage beantwortet, und die Forumsteilnehmer lernen mit und können nebenbei irgendwann selbst den Support von JaBaCo übernehmen.
hab auf AVB die Erfahrung gemacht, daß von den Anfängerfragen fast niemand jemals ein VB-Handbuch gelesen hat *g* die meisten machen rumprobieren per "try 'n error"
ansonsten muß ich Dir nochmal sagen daß ich JaBaCo echt genial finde.
kann man beim Programmieren irgendwie behilflich sein?
wieviele programmierer seid ihr, oder hast du etwa bisher alles alleine programmiert.
Grüße
+Oliver
Jabaco einfach halten!
Hallo,
in meinen Augen ist Jabaco nur und gerade deswegen attraktiv, weil es nach außen relativ einfach ist. Mit VisualStudio oder Eclipse kann man avanciertere Dinge anstellen, aber ich habe noch keine Umgebung gesehen, mit der man derart schnell eine Oberfläche zaubern kann, die sowohl als Windows-Executable als auch als Java Applet einsetzbar ist.
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. Ich sehe Jabaco als ein schnelles Tool, mit dem man "eben mal so" kleinere Tools und Anwendungen hinzaubern kann. Es ist nicht die Plattform für Hersteller von Standardsoftware.
Mein Fazit:
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.
Mir haben bei meinen bisherigen Gehversuchen mit Jabaco folgende Punkte gefehlt:
- Dokumentation (muss kein Hochglanz sein, ganz ohne ist aber wirklich kein Dauerzustand)
- Debugger ist sehr eingeschränkt (z.B. keine Anzeige des Call Stacks, keine Überwachungsausdrücke)
- Erweiterte Fehlerbehandlung (entweder mit try/catch oder mit verbessertem ON ERROR)
- Object Explorer fehlt
- Ich würde gerne ActiveX Controls einbinden können
- Einstellmöglichkeiten für Stack- und Heap-Größe
- In der Klasse "Form" fehlt mir die Collection "Controls"
Kosmetische Dinge:
- "Endif" sollte automatisch zu "End if" werden
- Generell sollten eingegebene Identifier automatisch die Groß-/Kleinschreibung gemäß erstmaliger Definition annehmen
- Ich würde gerne per Kontext-Menü schnell von einem Identifier zu seiner Definition springen können
- 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")
- Debug.Assert muss man bei Bedarf selber bauen
- Die Syntax Cast() finde ich unpraktisch im Vergleich zu den Casts bei Java und C++
- Die WINAPI-Syntax is OK. Besser fände ich die alte API-Syntax von VB6 (nicht zu reden vom VB6 API Assistenten)
Gruß!
A1880
in meinen Augen ist Jabaco nur und gerade deswegen attraktiv, weil es nach außen relativ einfach ist. Mit VisualStudio oder Eclipse kann man avanciertere Dinge anstellen, aber ich habe noch keine Umgebung gesehen, mit der man derart schnell eine Oberfläche zaubern kann, die sowohl als Windows-Executable als auch als Java Applet einsetzbar ist.
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. Ich sehe Jabaco als ein schnelles Tool, mit dem man "eben mal so" kleinere Tools und Anwendungen hinzaubern kann. Es ist nicht die Plattform für Hersteller von Standardsoftware.
Mein Fazit:
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.
Mir haben bei meinen bisherigen Gehversuchen mit Jabaco folgende Punkte gefehlt:
- Dokumentation (muss kein Hochglanz sein, ganz ohne ist aber wirklich kein Dauerzustand)
- Debugger ist sehr eingeschränkt (z.B. keine Anzeige des Call Stacks, keine Überwachungsausdrücke)
- Erweiterte Fehlerbehandlung (entweder mit try/catch oder mit verbessertem ON ERROR)
- Object Explorer fehlt
- Ich würde gerne ActiveX Controls einbinden können
- Einstellmöglichkeiten für Stack- und Heap-Größe
- In der Klasse "Form" fehlt mir die Collection "Controls"
Kosmetische Dinge:
- "Endif" sollte automatisch zu "End if" werden
- Generell sollten eingegebene Identifier automatisch die Groß-/Kleinschreibung gemäß erstmaliger Definition annehmen
- Ich würde gerne per Kontext-Menü schnell von einem Identifier zu seiner Definition springen können
- 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")
- Debug.Assert muss man bei Bedarf selber bauen
- Die Syntax Cast() finde ich unpraktisch im Vergleich zu den Casts bei Java und C++
- Die WINAPI-Syntax is OK. Besser fände ich die alte API-Syntax von VB6 (nicht zu reden vom VB6 API Assistenten)
Gruß!
A1880
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 ausschreiben
Quoted
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)
Wow!
Hallo Manuel,
prima! Da bin ich gespannt auf die nächste Version.
Zu Deinen Rückfragen:
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önnen.
Ideal wäre es, wenn ich in einer Routine einen Fehlerausgang definieren könnte, der alle Fehler fängt, die in der aktuellen Routine und den von ihr aufgerufenen Routinen verursacht werden. Momentan erlaubt Jabaco, wenn ich das richtig sehe, nur das Fangen lokaler Fehler.
In der VB6-Dokumentation gibt es eine Liste der "trappable errors". Kannst Du sagen, welche Fehler in Jabaco "trappable" sind?
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.
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.
Als altem C-Programmierer passiert mir das ständig. VB6 macht automatisch "end if" aus "endif".
Neuer Punkt:
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.
Gruß und frohes Schaffen!
A1880
prima! Da bin ich gespannt auf die nächste Version.
Zu Deinen Rückfragen:
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?
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önnen.
Quoted
Das Errorhandling ist relativ kompliziert. Was fehlt dir da genau?
Ideal wäre es, wenn ich in einer Routine einen Fehlerausgang definieren könnte, der alle Fehler fängt, die in der aktuellen Routine und den von ihr aufgerufenen Routinen verursacht werden. Momentan erlaubt Jabaco, wenn ich das richtig sehe, nur das Fangen lokaler Fehler.
In der VB6-Dokumentation gibt es eine Liste der "trappable errors". Kannst Du sagen, welche Fehler in Jabaco "trappable" sind?
Quoted
(Object Explorer) Der ist bereits rudimentär implementiert (Project => References). Was fehlt dir genau? Wie würdest du den gerne verwenden?
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.
Quoted
(Stack-/Heap-Größe einstellbar) Eigentlich kein Problem, aber ist das wirklich nötig? Hast du ein Beispiel?
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.
|
|
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?
Als altem C-Programmierer passiert mir das ständig. VB6 macht automatisch "end if" aus "endif".
Neuer Punkt:
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.
Gruß und frohes Schaffen!
A1880
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.html
Quoted
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
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
Die JavaVM reagiert nicht auf Änderungen der Stack-Größe. Ich muss noch mal schauen wie das genau geplant ist. 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.
Ackermannfunktion
Hallo Manuel,
der Java-Schalter "-Xss" wirkt bei der Windows-SUN-JVM offenbar nicht auf den Standardstack sondern auf die Stackgröße für Threads.
Ich habe das Jabaco-Compilat der Ackermannfunktion rückübersetzt und in Java ausprobiert:
Mit folgendem Java-Aufruf habe ich die Ackermannfunktion A(4,1) berechnen können:
Auf Jabaco übertragen kann man also einen großen Stack nutzen, wenn man die kritischen Funktionen in Threads aufruft und die JVM mit dem Schalter "-Xss" aufruft.
Gruß!
A1880
der Java-Schalter "-Xss" wirkt bei der Windows-SUN-JVM offenbar nicht auf den Standardstack sondern auf die Stackgröße für Threads.
Ich habe das Jabaco-Compilat der Ackermannfunktion rückübersetzt und in Java ausprobiert:
|
|
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();
}
}
|
Mit folgendem Java-Aufruf habe ich die Ackermannfunktion A(4,1) berechnen können:
|
|
Source code |
1 |
java -Xss4M -Xms32M -Xmx128M jAckermann |
Auf Jabaco übertragen kann man also einen großen Stack nutzen, wenn man die kritischen Funktionen in Threads aufruft und die JVM mit dem Schalter "-Xss" aufruft.
Gruß!
A1880
Similar threads
-
Allgemeine Themen, Fragen und Diskussionen »-
Heap memory
(Dec 1st 2008, 11:03am)
-
General topics, questions and discussions »-
Control Arrays
(Jan 16th 2009, 2:09am)
-
General topics, questions and discussions »-
Split
(Dec 17th 2008, 3:33pm)
