Leitfaden: Welche Programmiersprache ist für mich die Richtige?

08/24/2014 17:00 Schlüsselbein#16
Mal so nebenbei sei mal angemerkt, dass stark/schwack und dynamisch/statisch typisiert zwei verschiedene Eigenschaften sind.
Beispielsweise C (statisch, aber dennoch eher schwach typisiert) und Python (dynamisch, aber stark typisiert).
08/24/2014 17:12 MrSm!th#17
Quote:
Originally Posted by Mostey View Post
???

Was meinst du mit solche Keywords und wo soll hier der Unterschied liegen?
Solche, die reiner syntaktischer Zucker sind, wie ich später erwähnt habe. Der Typ wird vom Compiler erkannt und statisch an der Stelle eingesetzt. Im Binary sieht es nicht anders aus, als hättest du den Typen explizit angegeben. dynamic hingegen sorgt für eine Änderung des Laufzeitverhaltens, davon muss die VM Bescheid wissen (und damit wäre es prinzipiell in allen .NET Sprachen möglich.

Quote:
Gut, da habe ich jetzt nicht weiter nachgeschaut. Dieses Keyword scheint es wirklich nur bei C# zu geben - dafür gibt es diese Funktionalität aber auch teilweise in den anderen Sprache. Da erfordert es bei VB.Net beispielsweise kein Keyword, die Funktion ist aber da:

Code:
Dim foo = "foo"
[Only registered and activated users can see links. Click Here To Register...]



Verstehe ich nicht, wieso wundert dich das nun? Ich bezog mich eben auf das Zitat und die Aussage, das die Benutzung unsauber wäre.
Weil schwache Typisierung ein anderer Sachverhalt ist. Ich kenne mich nicht genug mit VB aus, um zu wissen, ob es sich dabei ebenfalls nur um Typinferenz (Typ wird automatisch erkannt) oder tatsächlich um fehlende/schwache Typisierung handelt, wie es der TE nannte (wobei es auch gut sein kann, dass er da lediglich die falsche Begrifflichkeit gewählt hat).
Insofern wunderte es mich, dass du var als Antwort zu (vermeintlich) schwacher Typisierung bringst, obwohl du weißt, dass es darauf gar nicht zutrifft.

Quote:
Und mit den zeigern, die zeiger sind da ja, aber man benutzt sie nicht mehr als zeiger, jemand könnte jahrelang in vb oder c# programmieren ohne einmal das wort zeiger gehört zu haben, und es tut programmiertechnisch nix zur sache (da in c# und VB jede variable ein zeiger ist, und man sich keine gedanken mehr um unterschiede machen muss)
Das ist so nicht korrekt, weil dort Objekte von Klassen Referenzsemantik haben, während Structs und primitive Typen Wertesemantik haben.
Wer nicht schon einmal Zeiger gehört hat, hat zumindest schon einmal Referenz gehört, ansonsten kann er die Sprache nicht besonders gut, erst recht, wenn er den Unterschied der beiden Typklassen nicht kennt.
Das einzige, was tatsächlich wegfällt, ist Zeigerarithmetik.

Quote:
Mal so nebenbei sei mal angemerkt, dass stark/schwack und dynamisch/statisch typisiert zwei verschiedene Eigenschaften sind.
Beispielsweise C (statisch, aber dennoch eher schwach typisiert) und Python (dynamisch, aber stark typisiert).
Und wenn ich richtig informiert bin, bietet VB die Möglichkeit zur schwachen, dynamischen Typisierung, was unter erfahreneren Entwicklern aber verständlicherweise verpöhnt ist.

Quote:
Doch genau das ist es was ich deutlich machen will, C++ hat im gegensatz zu delphi, java, vb oder C# kein Patent, und so sind alle standards nur "normen", und daher kann man tuen was mann will, da der name C++ in keinster weise geschützt ist.
Juristisch vielleicht nicht, aber das tut nichts zur Sache. Es geht hier nicht um Patente, es geht um Standards. Baust du einen absolut nicht standardkonformen Compiler, kickt dich die Konkurrenz einfach aus dem Geschäft. Niemand mag Non-Standardkonformität.
Außerdem ist der C++ Standard durchaus durch die ISO geregelt und wird von einem Komitee verabschiedet. Der einzige Unterschied zu Sprachen wie C# ist, dass C++ nicht proprietär ist.
08/24/2014 18:12 warfley#18
Quote:
Das ist so nicht korrekt, weil dort Objekte von Klassen Referenzsemantik haben, während Structs und primitive Typen Wertesemantik haben.
Wer nicht schon einmal Zeiger gehört hat, hat zumindest schon einmal Referenz gehört, ansonsten kann er die Sprache nicht besonders gut, erst recht, wenn er den Unterschied der beiden Typklassen nicht kennt.
Das einzige, was tatsächlich wegfällt, ist Zeigerarithmetik.
klar aber zeiger sind ja noch viel mehr als referenzen, sachen wie z.b.
Code:
var
  x: Integer;
  i: PInteger;
  tmp: Integer;
begin
  new(i);
  tmp:=0;
  for x := 0 to 10 do
  begin
    i^:=Random(100);
    inc(i);
  end;
  for x := 0 to 10 do
  begin
    tmp:=i^+tmp;
    dec(i);
  end;
  Dispose(i);
  ShowMessage(IntToStr(tmp));
end;
dinge mit denen man sich in VB nie auseinandersetzten muss.

Diese gesammte zeiger rechnung,die funktionsweise von zeigern, das wird für z.b. VB oder C# komplett irrelevant, das einzige was man wissen muss ist: Klassen muss man initialisieren, und klassen werden nicht kopiert wenn man eine wertzuweisung macht.
Wenn man das gelernt hat kann man mit VB schon sogut wie jedes programm umsetzten. und das ist alles worauf ich hinaus will, Man muss um gute ergebnisse zu erziehlen nicht so weit hinter die materie blicken wie in z.b. C++

Dass man es dennoch kann schließ ich nicht aus, doch wenn man C++ oder z.b. Delphi lernt ist Zeiger schon sehr früh ein großes kapitel, bei VB oder C# wird es zwischenzeitlich mal angestreift, und es reicht beileufig das mal durchzugehen

Quote:
Originally Posted by MrSm!th View Post
Juristisch vielleicht nicht, aber das tut nichts zur Sache. Es geht hier nicht um Patente, es geht um Standards. Baust du einen absolut nicht standardkonformen Compiler, kickt dich die Konkurrenz einfach aus dem Geschäft. Niemand mag Non-Standardkonformität.
Außerdem ist der C++ Standard durchaus durch die ISO geregelt und wird von einem Komitee verabschiedet. Der einzige Unterschied zu Sprachen wie C# ist, dass C++ nicht proprietär ist.
Mir ist das schon alles bewust, und man wird wohl kaum einen seriösen nicht normkonformen compiler finden, das bsp ist auch sehr hoch gesteckt und eine unglaubliche übertreibung, doch hatte ich schonmal den fall, dass ein un der selbe source code in 2 compilern unterschiedlich funktionierte, und genau diese thematik will ich drauf aufmerksam machen, jeder Compiler ist anders, jeder hat seine eigenheiten, und d.h. ist das einzige worauf man sich verlassen kann, das, sofern es ein iso konformer compiler ist, er sich an die iso normen hält, und wenn man normkonform entwickelt, auch alles normkonform rauskommt.

sowie bei pcs z.b. der netzanschluss genormt ist gibt es immer noch unternehmen (z.b. apple) die sich nicht daran halten.

ich kann auch sagen für mich hatt c++ keine semikolone, und wenn ich einen compiler dafür benutze der das unterstützt funktioniert das auch wunderbar, ich muss mir halt bewust sein das ich dann kein iso c++ nutze

Und ja die bekannten compiler sind alle iso norm konform, aber es gibt auch kleinere, die zum teil noch auf alten normen basieren, etc.

Man muss halt drauf achten, welche normen unterstützt der compiler, wie aktuell ist er etc

Aber wenn das nicht so offensichtlich ist werde ich da einen anderen vergleich aufführen, morgen oder so versuche ich mal die stellen die nicht so klar oder eindeutig sind zu überarbeiten

(bei dem bsp source hatte en kumpel von mir bei nem case das break; vergessen, eigentlich nicht sonderlich tragisch sollte man meinen, aber es wird von der norm nicht beschrieben was passiert wenn man das break vergisst, bei visual C++ ist auch nix großes passiert, beim gcc ist die ganze rechnung komplett falsch gewesen)
08/24/2014 18:56 MrSm!th#19
Quote:
doch hatte ich schonmal den fall, dass ein un der selbe source code in 2 compilern unterschiedlich funktionierte, und genau diese thematik will ich drauf aufmerksam machen,
Sofern er auf undefiniertem Verhalten aufgebaut hat, ist es das gute Recht der Compiler-Hersteller, es zu implementieren, wie sie wollen. Das ist auch bei anderen Sprachen nicht anders.
Ohne zu wissen, um was es da ging, ist das wenig aussagekräftig.

Quote:
ich kann auch sagen für mich hatt c++ keine semikolone, und wenn ich einen compiler dafür benutze der das unterstützt funktioniert das auch wunderbar, ich muss mir halt bewust sein das ich dann kein iso c++ nutze
Dann nutzt du gar kein C++. Ich sprach von Implementierungsdetails. Die Syntax der Sprache ist eindeutig definiert und vorausgesetzt, zwei Compiler implementieren dieselbe Version (sind also auf demselben zeitlichen Stand) und enthalten diesbezüglich keine Bugs, dann funktioniert der Code auch syntaktisch überall gleich (wenn du eben keine proprietären Extras des einen Compilers nutzt), ansonsten sind das de facto keine C++ Compiler.
Ein Compiler, der fehlende Semikoli akzeptiert, ist kein C++ Compiler, ganz einfach.

In C++ kann man auch ohne Zeigerarithmetik auskommen und mit Referenzen sogar an vielen Stellen ganz ohne Zeiger. Natürlich ist es sinnvoll, alle Hintergründe zu kennen, aber man kann auch Anwendungen auf einem sehr hohen Abstraktionsniveau (eben so Busiess-Kram, für den C# oft verwendet wird) schreiben, ohne sich je intensiv mit Zeigern beschäftigt zu haben. Dass jedes gute Buch darauf eingeht, liegt einfach daran, dass es eben von Vorteil ist, zu wissen, wie der Computer arbeitet (und für gute und performante Programme in C# brauchst du da genau so viel Hintergrundwissen über die .NET VM).

Naja, so langsam driftet es vom eigentlichen Thema ab.
08/25/2014 21:59 warfley#20
So hab jetzt das ganze mal ein wenig überarbeitet, Fremdwortindex hinzugefügt, und die bemängelten stellen ausgebessert