News .NET: Microsoft migriert weitere Projekte nach GitHub

VikingGe schrieb:
Der Vergleich zwischen einer Programmiersprache und einem Haufen Designfehler mit Syntax ist irgendwie unfair ;)

Made my day, der Spruch ist genial, danke dafür!!! :):)

Als C++ Programmierer kann ich nur leider nicht rausfinden, welche welche ist :evillol:
 
C# macht da weiter wo Java "aufgehört" hat, ohne die Altlasten mitzunehmen. C# wird schneller weiterentwickelt und die Designentscheidung von C# sind soweit ich weis insgesamt konsistenter. Daher denke ich mal mit "Designfehler mit Syntax" ist wohl Java gemeint :).
 
Naja, habe mir die C# API mal angesehen. Vieles scheint doppelt und dreifach gemoppelt zu sein.
Man erlaubt einfach alles. Z.b. was ist der Sinn von "structs" UND "Klassen", wo doch eine (innere) Klasse praktisch ein struct ist ? Dann werden Pointer unterstützt, wobei dies eigentlich überflüssig ist (zum Glück).

Der Code wird mit sowas nur wurstig da es offenbar keinen richtigen roten Faden gibt an den sich alle halten.
 
Structs verhalten sich anders als Klassen, und sind zur Datenhaltung/etc gedacht. beim zuweisen von Structs wird der Inhalt kopiert.

In C# ist afaik nichts doppelt. Könnte für jemand der sich damit nicht auskennt und von einer andren Sprache kommt so aussehen. Das Problem gibt's aber auch wo anders ( Stichwort "static" c -> c++ ).
Vermeintliche Dopplungen gibt's in den Framework-Libs. Aber besser doppelt als irgendwelche Superklassen oder Konzeptioneller mischbetrieb innerhalb einer Lib/Klasse/Namespace.

Pointer gibt's nur wenn man "unsafe" code anschaltet, das macht man normal nicht.
Das ist super zur Performance Optimierung und Interoperativilität mit Nativen Sprachen/Systemen. Wenn man weis was man tut.
Java ist an der Stelle eher unterversorgt.
Unter Android muss man deswegen sogar gleich die Programmiersprache(C++) und Compiler/SDK wechseln wenn man so etwas tun will (NDK)

dcc22 schrieb:
Der Code wird mit sowas nur wurstig da es offenbar keinen richtigen roten Faden gibt an den sich alle halten.

Das Problem haben alle Sprachen ab einer bestimmten Komplexität. Komplexere Sprachen erfordern mehr Wissen/Erfahrung und Disziplin. Deswegen sind C#/Java auch schlechte Wahl als erste Programmiersprache.

Java ist ja noch viel weniger restriktiv, da schießt man sich noch eher in den Fuß damit(Schwer find bare Fehler, Fehlpalzierte Restriktionen ("thrown exceptions", usw) . Man muss nur mal hier nach "bug" und "problem" suchen:

http://en.wikipedia.org/wiki/Comparison_of_C_Sharp_and_Java#Native_interoperability


Edit:
Noch mal zu Pointern: Die sind nicht überflüssig, sondern nur für viele so verwirrend das man ein Konzept darum gesucht hat. Die "pointer" gibtes immernoch, nur kümmert sich der Compiler darum, anhand der verwendeten Typen. Deswegen gibt es z.b. auch Structs und Klassen.

Edit2:
Wenn dir irgendwas unsinnig erscheint, gib "x vs y" ein und Google spuckt dir in 99% der fälle eine Begründung aus warum es beides gibt.
 
Zuletzt bearbeitet:
Wofür Structs gut sind, sagt Microsoft doch selbst:
A struct type is a value type that is typically used to encapsulate small groups of related variables, such as the coordinates of a rectangle

Quasi sowas wie POD-Typen in C++ (nur, dass die da keine spezielle Syntax oder sowas haben) oder Records in Pascal.
Das Beispiel mit dem Rechteck ist auch recht passend, denn Rechtecke - sagen wir, sie bestehen aus vier floats oder ints oder sowas - sind genau so ein Fall, wo Java einfach gnadenlos versagt.

Möglichkeit 1: Wir schreiben uns eine Klasse Rechteck. Prinzipiell ja erstmal eine schöne Lösung. Aber:
- Das Rechteck kann null sein. Was soll der Schwachsinn?
- Spätestens, wenn wir Rechtecke als Funktionsparameter übergeben, muss zumindest bei der ersten Verwendung in der jeweiligen Funktion überprüft werden, ob das Rechteck nicht zufällig null ist.
- Noch bescheuerter wird es, wenn wir ein Rechteck zur späteren Verwendung in einer Struktur speichern wollen, dann landet es zwangsläufig auf dem Heap - und dann wird es richtig ineffizient.
- Dieser ganze "wir schieben nur Referenzen hin und her"-Blödsinn sorgt nur dafür, dass wir von Hand einen Copy-Constructor schreiben müssen und im Code alles voller new Rechteck(someRect) ist. Die Klasse muss immutable sein, damit wir nicht versehentlich ein von jemand anderem verwendetes Rechteck verändern.

Möglichkeit 2: Wir interpretieren jeweils 4 Floats als Rechteck. Es ist zur Laufzeit garantiert effizienter, aber
- Wir verlieren sämtliche Vorteile von OOP.
- Entsprechend blöd sieht es aus, sowas dann an Funktionen zu übergeben - soetwas zu returnen ist unmöglich.

In C++ existiert die Problematik gar nicht erst, in C# schreibt man sich nen Struct und ist glücklich.


Edit:
Deswegen sind C#/Java auch schlechte Wahl als erste Programmiersprache.
Amen.
 
Zuletzt bearbeitet:
Ne, gibt es nicht. Würde sich auch irgendwo mit dem Generic-Konzept beißen, das bekanntlich nur mit Object-Pointern arbeitet und deswegen die Wrapper-Klassen für normale Datentypen braucht - und triviale Dinge wie

Code:
public <T> T createSomeT(int param) {
  return new T(param); // Fehler
}

nicht erlaubt. Letztenendes haben die Generics in Java nicht viel mehr mit Typensicherheit zu tun als die void-Pointer in C.

So, genug Java-Rants für heute, mir gehts wieder besser. :D
 
Zuletzt bearbeitet:
Es gibt "Datenklassen", also Klassen ohne Methoden, zur reinen Datenhaltung.
Aber stimmt schon, braucht man das struct nur innerhalb der Klasse ist es übersichtlicher als alles mit Klassen zuzumüllen. In C simuliert man damit ja eine Klasse ;)

Das mit dem unsafe mode zur optimierung hört sich schon interessanter an :)
Mal sehen , vielleicht schau ich es mir doch mal genauer an. Mir gefällt vor allem Visual Studio, gute all-in-one Lösung mit black Theme !
 
Zuletzt bearbeitet:
VikingGe schrieb:
... nur mit Object-Pointern arbeitet und deswegen die Wrapper-Klassen für normale Datentypen braucht ..
Klingt irgendwie seltsam. Wie läuft das denn dann mit der Parameterübergabe von Basisdatentypen an Funktionen ab ? Pointer auf Objektkopie der Basisdatentyp-Wrappers-Klasse oder wie :freak: ?

VikingGe schrieb:
So, genug Java-Rants für heute, mir gehts wieder besser.
Bei den ganzen Studenten-Klugscheißer-Hippies die aus reiner Willkür auf Java schwören muss man ja was dagegen halten :D
Ergänzung ()

dcc22 schrieb:
Mir gefällt vor allem Visual Studio, gute all-in-one Lösung mit black Theme !

Mir auch, man stößt nur immer wieder Auf seltsame blicke wenn man seine IDE auf ein Dunkles Theme einstellt, und alle gucken ungläubig wenn man ihnen erzählt das es angenehmer für die Augen ist
Ergänzung ()

dcc22 schrieb:
Es gibt "Datenklassen", also Klassen ohne Methoden, zur reinen Datenhaltung.
Aber stimmt schon, braucht man das struct nur innerhalb der Klasse ist es übersichtlicher als alles mit Klassen zuzumüllen. In C simuliert man damit ja eine Klasse ;)

Mal von der Ästhetik abgesehen, so ne volle Klasse hat ja auch nen Overhead, zb die vtable. Also ich kann mir vorstellen das der Compiler da ziemlich viel raten muss und im Zweifelsfall zugunsten korrekter funktionsweise entscheidet, sofern es hier bei Java überhaupt Optimierungspotenzial gibt oder was die VM dann letztendlich damit macht.
 
Zuletzt bearbeitet:
Pointer auf Objektkopie der Basisdatentyp-Wrappers-Klasse oder wie?

Exakt. Man schreibt zwar
Code:
int a = ...;
funktion<Integer>(a);

Effektiv passiert aber:
Code:
funktion<Integer>(new Integer(a));

Das implizite Casten von int nach Integer und zurück ist dann ein Sprachfeature. :evillol:

sofern es hier bei Java überhaupt Optimierungspotenzial gibt
Mir fällt kein Weg ein, den zwangsläufig virtuellen Destruktor oder zumindest etwas Ähnliches zu umgehen. Es erbt ja alles von Object, irgendwo wird auch immer mit Object-Referenzen gearbeitet, ergo sind alle Informationen zum eigentlichen Typen futsch - und irgendwer muss den von dem zu zerstörenden Objekt referenzierten anderen Objekten ja auch noch sagen, dass sie nicht mehr gebraucht werden.

und alle gucken ungläubig wenn man ihnen erzählt das es angenehmer für die Augen ist
Ich hab zumindest den Code-Bereich vom Texteditor dunkel eingestellt, alles andere macht einen ja krank auf Dauer...

Bei den ganzen Studenten-Klugscheißer-Hippies die aus reiner Willkür auf Java schwören
Ist ja auch das erste, was man im Informatik-Studium lernt. Erst Java und ein paar Semester später sind dann alle mit C überfordert und haben keine Ahnung, was ein Pointer ist und wofür free() gut ist.
 
Zuletzt bearbeitet:
Ja, ersten zwei Semester Java Crashkurs danach nie wieder im Studium gesehen :)
Nur die meisten Stellenanzeigen verlangen Java / JavaEE
 
Zuletzt bearbeitet:
Structs vs Klassen in C#: Klasseninstanzen werden auf den Heap erzeugt und sind somit Referenztypen, während Instanzen von Structs auf dem Stack erzeugt werden und somit Wertetypen sind.

Zum Thema Konsistenz: Dieses Thema hat Microsoft am Anfang sehr sorgfältig behandelt. Spätestens mit .net 3.0 hat Microsoft begonnen zu schlampen.

Greetz
​hroessler
 

Also irgendwie entbehrt das ja nicht einer gewissen Ironie. :evillol:

Ja, ersten zwei Semester Java Crashkurs danach nie wieder im Studium gesehen
Also bei uns werden Projektarbeiten grundsätzlich in Java verlangt (vor allem das wunderbare Software-Praktikum - 8 Leute in eine Gruppe stopfen, von denen 4 nie programmieren, 3 Java hassen und nur einer wirklich Ahnung von dem Kram hat), irgendwo taucht sowas fast immer auf.

Allerdings wurden bei uns in anderen Pflichtveranstaltungen auch C, Haskell und MIPS-Assembler (weil ja auch jeder nen MIPS-Rechner zu Hause hat...) eingeführt, wirklich interessieren tut sich dafür allerdings niemand.
 
Die Fehlermeldung ist ja der Hammer :D

Das Studium war/ist für mich auch ein wenig Haskell programmieren und Softwareprojekte in Java. Dafür Programmiere ich in meinem Job eigentlich fast ausschließlich C# und bin auch froh drum :)

Ich denke auch so bis MS mit C# Java aufgeholt hatte haben sie alles ziemlich sauber implementiert. Eben so wie man es in Java hätte machen sollen. Ansonsten wird's langsam immer krasser, da einfach extrem viel dazukommt und der Eindruck immer unübersichtlicher wird. Siehe z.B. die ganze async await Syntax. Wenn du als Anfänger z.B. ne simple App erstellen willst wirste damit schon direkt konfrontiert. Wenn mans kann ist es halt schick :P

Übrigens +1 für das helle Design von Visual Studio :D Ich finde ja dunkel für Photoshop oder so gut (für Farbkontrast usw.), aber in VS find ichs einfach komisch und die Farben des Syntax Highlighting find ich auch eher hässlich :D (wobei man das ja einstellen kann). Ich denk mal das ist einfach Gewöhnungssache.
 
Zuletzt bearbeitet:
Findest du? Ich programmiere nur noch mit dunklem Hintergrund, da wesentlich besser lesbar. Der Kontrast ist einfach wesentlich besser. Aber ist wohl Geschmacksache... :-)

Greetz
​hroessler
 
VikingGe schrieb:
Also bei uns werden Projektarbeiten grundsätzlich in Java verlangt (vor allem das wunderbare Software-Praktikum - 8 Leute in eine Gruppe stopfen, von denen 4 nie programmieren, 3 Java hassen und nur einer wirklich Ahnung von dem Kram hat), irgendwo taucht sowas fast immer auf.

Allerdings wurden bei uns in anderen Pflichtveranstaltungen auch C, Haskell und MIPS-Assembler (weil ja auch jeder nen MIPS-Rechner zu Hause hat...) eingeführt, wirklich interessieren tut sich dafür allerdings niemand.

C war bei uns die Sprache für alles ab dem 2. Semester.
Das ging schon bis OpenGL Programmierung ohne Editoren (*würg*), also per Koordinaten Sachen animieren, Shader schreiben usw.

Java wie gesagt nur in den ersten zwei Semestern. Aber hab ja Angewandte Info studiert, glaub die Medieninfos / Wirtschaftsinfos hatten auch nur Java. AI ist mehr Betriebssysteme / Rechnerarchitektur / Embedded Systems orientiert, also eher die praktische "nerd informatik". Zumindest wird da nichts designed, bestenfalls die GUI, die eh nicht bewertet wird :D Haskell, Ruby, Websprachen usw. waren Wahlmodule.

Hat man genug Module für die Bereiche Softwareentwicklung, Embedded usw. konnte man sich dies im Abschluss vermerken lassen.
 
Zuletzt bearbeitet:
@hroessler
Also bei Texten finde ich schon immer den weißen Hintergrund besser. Kommt aber glaube ich auch auf die Umgebung an. Wenn man nachts Programmiert ist entsprechend ein schwarzer Hintergrund für die Augen angenehmer. Da gibt's doch bestimmt ne Studie oder so ;)
 
Zurück
Oben