Habt ihr eine Laufzeitumgebung (VM/.Net) installiert?
-
Also ich hab 2 Windows Installationen, eine wo ich alles mal testen kann (.NET) und eine, wo nur ausgewählte Profisoftware draufkommt.

-
Optimizer schrieb:
Jo, das ist schlecht.

Aber C# kann das.Ich weiß, ich musste mal für einen Job ein paar Monate C# programmieren. (Ich war jung und brauchte das Geld.(TM))
Ich mag C# trotzdem nicht, ich sehe nach wie vor keine guten Gründe eine proprietäre Programmiersprache zu verwenden die mich noch dazu an eine Plattform bindet wenn sie nichts bietet was eine andere Programmiersprache nicht könnte. (Naja, mal von Zeiten abgesehen in denen ich schlecht bei Kasse bin und das Abhilfe verschaffen kann.
)
-
nman schrieb:
Und ich hasse Java-Code bei dem Klassen Memberfunktionen namens .add() haben statt einen überladenen operator+().

Wie stellst du dir das vor?
myList + "Hallo";
statt
myList.add("Hallo");
???

...also ich finde das mit "add" schöner.

-
Das ist Geschmackssache, aber spätestens wenn die Klasse zB myComplex oä heißt ist die add()-Variante einfach nur furchtbar ekelhaft.
-
Was für ne Zeit?
-
Hab beides nicht. Wozu auch, wenn ich's nicht brauch (ich programmiere größtenteils in C).
Ach ja, nochwas zu Java: Ick find's scheise, dass die main da inner Klasse drinnesteckt. Man kann's auch übertreiben...
-
Gregor schrieb:
nman schrieb:
Und ich hasse Java-Code bei dem Klassen Memberfunktionen namens .add() haben statt einen überladenen operator+().

Wie stellst du dir das vor?
myList + "Hallo";
statt
myList.add("Hallo");
Kein Mensch braucht myList + "Hallo" oder myMenu + FileMenu.
Operator-Überladung ist nicht primär als Obfuscator-Ersatz gedacht
Es geht mehr um "natürliche" Anwdnungsgebiete. Also Gebiete wo man bestimmte Operatoren intuitiv verwendet oder wo es anerkannte Konventionen gibt (wie z.B. im mathematischen Bereich).
James Gosling hat schon 2000 (?) sein Bedauern darüber ausgesprochen, dass Operator-Überladung in Java so strikt abgelehnt wird. Er ist (oder wahr?) der Meinung, dass Java damit unnötig die Community der Leute die Scientific-Computing betreiben vergrault. Die stehen nämlich wohl voll darauf ihre Mathematik in einer der Mathematik ähnlichen Sprache auszudrücken.Wenn ich mir allerdings so die Entwicklung von Java anschaue, schätze ich mal, dass Op-Überladung in den nächsten 5 Jahren dazu kommt. Und wenn dann irgendwann mal keiner so genau hinschaut, wird heimlich auch noch MI (in irgendeiner Form) hinzugefügt.
-
HumeSikkins schrieb:
Und wenn dann irgendwann mal keiner so genau hinschaut, wird heimlich auch noch MI (in irgendeiner Form) hinzugefügt.
Man kann MI heutzutage auch schon über Interfaces etc. zusammenbasteln. Naja, toll finde ich das aber nicht. Der Punkt der mich immer am meisten an Java gestört hat wurde auch schon angesprochen: Die Möglichkeit Operatoren zu überladen fehlt! Klassen wie BigInteger und BigDecimal sind zwar schön (wünsche ich mir ganz heimlich auch manchmal in der STL ;)) aber kaum zu benutzen, weil man immer add, subtract... aufrufen muss. Dazu kommt noch, dass die Klasse für jeden scheiß einen Konstruktor hat, aber nicht für die Ganzzahltypen wie int, long etc. Auch die vermeintliche Notlösung mit toString stinkt. Was nützt mir ein toString wenn ich nicht auch irgendwie die Möglichkeit habe ein toXYZ zu definieren? Vor allem gleichen die Java immer mehr an die Möglichkeiten von C++ an. Sun hätte wohl eher eine VM für C++ schreiben sollen
.
-
Das toString() rockt doch. Das finde ich mal wirklich ne geniale Idee.

Rational myRational = new Rational(17, 6); System.out.println("Wert des Bruches: " + myRational);Also zum Thema Operatoren überladen, ich finde es auch schade, dass das in Java fehlt, weil es für manche Anwendungsgebiete einfach natürlich ist.
Was ich auch vermisse ist die Möglichkeit, primitive Datentypen als Referenz zu übergeben. C# bietet das und ich verwette wirklich meine Hand darauf, dass Sun das in Java auch noch einbaut.
Zum Thema "Das wünsche ich mir in der STL" fällt mir einiges ein:
- String-Klasse wie in Java (würde aber nichts nützen, weil ein "Text" immer noch ein char* bleibt, noch dazu ANSI
)
- BigInteger und BigDecimal
- Socket
- Form (<- aus C#, ka wie das jetzt in Java heisst)
- Arrays wie in Java
Das sollte man eigentlich fast schon in die Sprache selber integrieren und wenns so unglaublich performancekritisch ist, dann halt im Release ohne Indexprüfung. Aber so ein Array als Parameter übergeben rockt in Java/C# einfach hart, da geht mir std::vector irgendwie auf die nerven mit seinem .at()
Ihr wisst schon dass viele Sicherheitslücken in Programmen und Betriebssystemen auf Arrays, insbesondere char[] zurückzuführen sind?WebFritzi schrieb:
Hab beides nicht. Wozu auch, wenn ich's nicht brauch (ich programmiere größtenteils in C).
Ach ja, nochwas zu Java: Ick find's scheise, dass die main da inner Klasse drinnesteckt. Man kann's auch übertreiben...
Ich finds überhaupt nicht scheiße, weil das halt einfach die MainClass ist - PUNKT. Ich find daran gar nichts, aber auch überhaupt nichts schlecht, dass Code ausschließlich in Klassen steht.
Ich finde, jeder sollte sich seine eigene Programmiersprache schreiben.

-
Optimizer schrieb:
Was ich auch vermisse ist die Möglichkeit, primitive Datentypen als Referenz zu übergeben.
Also, in C++ fällt mir nur eine Sache ein, wo man das braucht, bei der Überladung vom []-Operator. Ansonsten schafft man sich doch nur Probleme, wenn überall im Programm Referenzen auf die internen Daten einer Klasse rumliegen...
Aber so ein Array als Parameter übergeben rockt in Java/C# einfach hart,
In welcher Sprache kann man keine Arrays als Parameter übergeben? Was meinst du?
da geht mir std::vector irgendwie auf die nerven mit seinem .at()
Ihr wisst schon dass viele Sicherheitslücken in Programmen und Betriebssystemen auf Arrays, insbesondere char[] zurückzuführen sind?Kann ja das arme char[] nichts für, wenn die Programmierer zu unfähig sind. Nicht dass ich vor Fehlern gefeit bin, aber diese gefürchteten Indexüberschreitungen passieren mir eigentlich gar nicht. Und in den seltensten Fällen braucht man auch noch eine Überprüfung bei *jedem* Zugriff.
-
Optimizer schrieb:
Ihr wisst schon dass viele Sicherheitslücken in Programmen und Betriebssystemen auf Arrays, insbesondere char[] zurückzuführen sind?
Nein, das hast Du gerade frisch erfunden; hauptsächlich liegt es am Programmierer. C verlangt da wesentlich mehr Erfahrung als Java(TM), und etwas konsequenteres Arbeiten.
-
Nein, das hab ich nicht erfunden. Freilich kann der Programmierer *wenn er dran denkt* das verhindern. Aber offenbar kommt es ja oft genug vor, dass er nicht daran denkt. Stichwort Buffer Overflow
DrGreenthumb schrieb:
In welcher Sprache kann man keine Arrays als Parameter übergeben? Was meinst du?
Ich meine sowas:
void foo(int[][] array) { } void foo(int[] array) { for (int i = 0; i < array.length; ++i) array[i] = i%865 * 874356; }Das finde ich echt godlike.
-
Optimizer schrieb:
Nein, das hab ich nicht erfunden. Freilich kann der Programmierer *wenn er dran denkt* das verhindern. Aber offenbar kommt es ja oft genug vor, dass er nicht daran denkt.
Es geht nicht um's Denken. Es geht darum, daß Buffer Overflows Anfänger- oder Leichtsinnsfehler sind, die maschinell gefunden werden können. Es besteht nur ganz offensichtlich kein Bedarf daran. So what?
Stichwort Buffer Overflow
Nein. "Es gibt Pufferüberläufe, weil es Pufferüberläufe gibt", ist noch nichtmal im Grundkurs Deutsch als Argument zu bezeichnen. Außerdem ist Speichermanagement wesentlich differenzierter. Java oder C# sind per se auch nicht für sicherheitskritische Anwendungen zu gebrauchen, wie man in den einschlägigen Normen nachschlagen kann.
-
Optimizer schrieb:
void foo(int[][] array) { } void foo(int[] array) { for (int i = 0; i < array.length; ++i) array[i] = i%865 * 874356; }Das finde ich echt godlike.
Was, dass man array.length schreiben kann?
Für mich sieht diese Schleife genauso potthässlich aus, wie in C/C++.
-
Gut, dass man in C++ nicht mehr weiss, was es ist, wenn man ein int* bekommt (es muss nichtmal ein Array sein). Oder umgekehrt, die Funktion kann nicht verlangen, ein Array zu bekommen und ist auch noch darauf angewiesen, dass es die korrekte Länge auch noch kriegt.
Beispiel aus der Praxis:
D3DXVECTOR2 temp[5] = { D3DXVECTOR2(drawX, drawY), D3DXVECTOR2(drawX + width, drawY), D3DXVECTOR2(drawX + width, drawY + height), D3DXVECTOR2(drawX, drawY + height), D3DXVECTOR2(drawX, drawY) }; lpLine->Draw(temp, 5, 0xFFFFFFFF);// C# Vector2[] temp = new Vector2[] { new Vector2(40, 60), new Vector2(700, 90), new Vector2(200, 400), new Vector2(800, 300) }; line.Draw(temp, Color.FromArgb(200, 100, 0));Aber gut, es haut dich nicht vom Hocker, aber mir gefällt sowas.
-
Optimizer schrieb:
Gut, dass man in C++ nicht mehr weiss, was es ist, wenn man ein int* bekommt (es muss nichtmal ein Array sein). Oder umgekehrt, die Funktion kann nicht verlangen, ein Array zu bekommen und ist auch noch darauf angewiesen, dass es die korrekte Länge auch noch kriegt.
äh, ja.. Fällt aber in die selbe Kategorie, wie die Indexüberschreitungen. Wenn ich eine Funktion schreibe, gehe ich davon aus, dass die Argumente richtig übergeben wurden. Und wenn ich sie aufrufe achte ich darauf, das dem so ist.
Naja, ich will nicht gegen Typsicherheit argumentieren. Aber das sind echt keine Fehler die einem das Leben schwer machen. Und eine dicke VM hilft dagegen eh nicht.
Beispiel aus der Praxis:
D3DXVECTOR2 temp[5] = { D3DXVECTOR2(drawX, drawY), D3DXVECTOR2(drawX + width, drawY), D3DXVECTOR2(drawX + width, drawY + height), D3DXVECTOR2(drawX, drawY + height), D3DXVECTOR2(drawX, drawY) }; lpLine->Draw(temp, 5, 0xFFFFFFFF);Beispiel aus deiner Praxis... Kann ja keiner was für, wenn du so'ne Krückenlibs verwendest. In C++ gibts doch auch Klassen.
-
DrGreenthumb schrieb:
Wenn ich eine Funktion schreibe, gehe ich davon aus, dass die Argumente richtig übergeben wurden.
Sorry, aber das ist ein grober Fehler. Wenn du so argumentierst, dann braucht man asserts und Exceptions auch nicht.
DrGreenthumb schrieb:
Naja, ich will nicht gegen Typsicherheit argumentieren. Aber das sind echt keine Fehler die einem das Leben schwer machen.
Aber sowas macht einem das Leben leicht.
btw., diese "Krückenlib" nennt sich Direct3D und D3DXVECTOR2 ist auch eine Klasse, sowohl in C# als auch in C++. Aber das Array ist in C++ keine Klasse. Ich kann der Funktion jetzt aber kein std::vector übergeben.
Ok, wie auch immer, ich streite nicht ab, dass man mit C++ alles genauso sicher machen kann, wie mit C# oder Java. Aber diese Sprachen sind halt von Haus aus typensicher. Ich kann mir natürlich selber für jede DX-Funktion nochmal nen Wrapper schreiben, damit ich statt einem Pointer einen std::vector übergeben kann. -> Produktivität.
-
hab auch 'ne GTK Laufzeitumgebung

-
Optimizer schrieb:
DrGreenthumb schrieb:
Wenn ich eine Funktion schreibe, gehe ich davon aus, dass die Argumente richtig übergeben wurden.
Sorry, aber das ist ein grober Fehler. Wenn du so argumentierst, dann braucht man asserts und Exceptions auch nicht.
Exceptions sind für was ganz anderes da und asserts braucht man eigentlich wirklich nicht, stimmt.
DrGreenthumb schrieb:
Naja, ich will nicht gegen Typsicherheit argumentieren. Aber das sind echt keine Fehler die einem das Leben schwer machen.
Aber sowas macht einem das Leben leicht.
Naja, ich spreche immer nur von meiner Erfahrung und dort hab ich wirklich nie mit solchen Problemen zu tun. Wenn man sich dann wirklich mal irgendwo vertippt oder geistig nicht ganz anwesend ist, ist das Problem auch innerhalb kürzester Zeit lokalisiert.
btw., diese "Krückenlib" nennt sich Direct3D und D3DXVECTOR2 ist auch eine Klasse, sowohl in C# als auch in C++. Aber das Array ist in C++ keine Klasse. Ich kann der Funktion jetzt aber kein std::vector übergeben.
[...]
Ich kann mir natürlich selber für jede DX-Funktion nochmal nen Wrapper schreiben, damit ich statt einem Pointer einen std::vector übergeben kann. -> Produktivität.Ja, also Krückenlib. Sag ich ja.
Aber das sehe ich genauso und deshalb hab ich's auch vorläufig aufgegeben mit C++ zu programmieren, weils jedesmal darin ausgeartet ist, dass ich einen Wrapper nach dem anderen schreibe.Aber ist jetzt eher Offtopic. Wie schon gesagt, ich brauche kein VM für eine eingebaute Array-Klasse...
-
Wofür sind Exceptions deiner Meinung nach da?
Also meiner Meinung nach sind sie dafür da, wenn jemand (ein böser Mensch halt) deine Klasse falsch benutzt, ihn- keinen falschen/ungültigen/sinnlosen Wert (evtl. "Fluchtwert") zurückzugeben, was einen schwer auffindbaren logischen Fehler verursachen könnte, wenn dieser Wert einfach trotzdem verwendet wird oder nicht abgefragt wird
- dazu zu zwingen, sich mit der Situation auseinanderzusetzen
- das Problem an den eigentlichen Verursacher zurückzuwerfenEigentlich wollte ich dir nur sagen, dass ich es für unklug halte, davon auszugehen, dass eine Funktion immer richtig aufgerufen wird. Das kannst du vielleicht noch in deiner eigenen Klasse bei privaten Methoden annehmen.
Aber jetzt sind wir wirklich Offtopic.

P.S. Ich sag ja nicht, dass man ne VM wegen den Arrays braucht, aber z.B. garbage collecting möchte ich wirklich nicht mehr missen.
Zur Umfrage: Ich finde es doch interressant, dass .Net noch relativ wenig Unterstützung erfährt (halb so viel wie die JVM), obwohl doch M$ eigentlich in der weit günstigeren Position ist, sein Framework unter Windows durchzusetzen.