Forum: PC-Programmierung go or nogo ;)


von prg (Gast)


Lesenswert?

http://tour.golang.org/#22

Auf RUN klicken! Alles OK!

Dann beim if

if x < 0 {

die Klammer mit Return in die nächste Zeile verfrachten

if x < 0
{

nochmal auf RUN klicken!

Schwach oder?!

;-)

von Wegstaben V. (wegstabenverbuchsler)


Lesenswert?

ja, oder.

oder was ist jetzt die Frage?

: Bearbeitet durch User
von D. V. (mazze69)


Lesenswert?

Wird Zeit, dass die Osterferien wieder zu Ende gehen.

von hauspapa (Gast)


Lesenswert?

Wenn ich die Sprachdefinition richtig verstanden habe greift dort:

When the input is broken into tokens, a semicolon is automatically 
inserted into the token stream at the end of a non-blank line if the 
line's final token is..., ..., an integer literal.

if x < 0

erfüllt das wohl.

Nich das ich das übersichtlich finde. Wenn man muss kan man sich da aber 
sicher dran gewöhnen. Zumal die Fehlermeldung einen da auch nicht im 
Regen stehen lässt.

viel Spass
Hauspapa

von prg (Gast)


Lesenswert?

hauspapa schrieb:

> Nich das ich das übersichtlich finde. Wenn man muss kan man sich da aber
> sicher dran gewöhnen. Zumal die Fehlermeldung einen da auch nicht im
> Regen stehen lässt.

Naja, die Fehlermeldung lautet

prog.go:9: missing condition in if statement
prog.go:9: x < 0 evaluated but not used
 [process exited with non-zero status]

Das man jetzt erst mal die Sprachdefinition heranziehen darf, damit man 
merkt, dass nicht mal ein Zeilenumbruch in einer Sprache möglich ist die 
sich anschickt das "bessere C" zu sein ...

Was soll ich davon halten?!

von prg (Gast)


Lesenswert?

Ebenso wozu eine nachgestellte Typinfo

 var zahl int

Welchen Vorteil soll das bringen?

von Berlin-Fanclub (Gast)


Lesenswert?

> Was soll ich davon halten?!
> Welchen Vorteil soll das bringen?
Diese Fragen solltest Du an den Schöpfer dieser Programmiersprache 
richten - vielleicht ist es auch nur der Versuch sich von C syntaktisch 
abzusetzen.
Ich würde mich nicht über syntaktische Eigentümlichkeiten aufregen ... 
die Frage ist welche Vorteile dieses Sprachprojekt jetzt genau bringen 
soll?
Ich könnte ja auch das hier verwenden:
http://openeuphoria.org/index.wc

Bringen diese neuen Sprachen jetzt was gegenüber den etablierten 
Sprachen?

von Johann L. (gjlayde) Benutzerseite


Lesenswert?

prg schrieb:
> Welchen Vorteil soll das bringen?

Da hat man dann was eigenes, wenn die Kinder aus dem Haus sind.

(Loriot)

von prg (Gast)


Lesenswert?

Am [Loriot] Jodeldiplom [/Loriot] soll's nicht scheitern und die 
Aufregung ist mehr Verwunderung. OK, 5 Minuten reichen wohl nicht um das 
Konzept hinter go zu verstehen. Im return mehrere Rückgabewerte und 
anderes hat meine Aufmerksamkeit erweckt ..

Wenn go aber tatsächlich so unflexibel in der Klammersetzung ist wäre 
das schade und ein nogo für mich.

von prg (Gast)


Lesenswert?

> Bringen diese neuen Sprachen jetzt was gegenüber den etablierten
> Sprachen?

Das ist die Frage die ich mir auch immer stelle. Nimrod z.B. ist auch so 
etwas. Sprachen die nicht allzu sehr von C abweichen schaue ich mir aber 
gelegentlich doch gerne mal an.

von Berlin-Fanclub (Gast)


Lesenswert?

> Wenn go aber tatsächlich so unflexibel in der Klammersetzung ist wäre
> das schade und ein nogo für mich.
es gibt ja genügend Alternativen ... ich sehe auch noch nicht den 
enormen Vorteil dieser Sprache.

von Arc N. (arc)


Lesenswert?

Berlin-Fanclub schrieb:
>> Wenn go aber tatsächlich so unflexibel in der Klammersetzung ist wäre
>> das schade und ein nogo für mich.
> es gibt ja genügend Alternativen ... ich sehe auch noch nicht den
> enormen Vorteil dieser Sprache.

Vorteile sehe ich auch nicht. Mir gefallen von den Neuentwicklungen der 
letzten Jahre z.Z. Rust und F# am besten. Sehe mir aber auch andere 
Entwicklungen wie Scala (auf Coursera läuft gerade ein Kurs zur Sprache 
von und mit deren Erfinder), Julia oder ATS an.
Rust wird bei Mozilla verwendet bzw. soll werden/ist dort die Basis der 
neuen Layout Engine, F# hat mittlerweile eine recht breite Basis.
Go ist dagegen Google und u.a. von Ken Thompson (Unix, B), Rob Pike 
(Plan 9, Inferno)...

von prg (Gast)


Lesenswert?

> Vorteile sehe ich auch nicht. Mir gefallen von den Neuentwicklungen der
> letzten Jahre z.Z. Rust und F# am besten.

Solche Vergleich wurden bereits gezogen. Zu Rust wurde da geschrieben

http://www.heise.de/developer/news/foren/S-Re-Rust-hoert-sich-vielversprechender-an/forum-255853/msg-23535291/read/

" Rust ist meiner Meinung nach ähnlich komplex wie C++. Rust hat statt
nur einem gleich vier verschiedene Zeigertypen, die dann in Form von
&, ~, @, *, &mut, ~str, ~"" und Co. überall im Code ihre
Krähenfußabdrücke hinterlassen ... "

go will gerade eine EINFACHE Sprache sein, die man leicht versteht und 
anwenden kann. Das imponiert mir mehr als wenn ich mal wieder noch eine 
Verkomplizierung von C++ vorgestellt bekomme.

> Go ist dagegen Google und u.a. von Ken Thompson (Unix, B), Rob Pike
> (Plan 9, Inferno)...

Zu Pike:
"Pike ist zusammen mit Brian Kernighan Autor von The Practice of 
Programming und The Unix Programming Environment (deutscher Titel: Der 
Unix Werkzeugkasten. Programmieren mit Unix). Zusammen mit Ken Thompson 
ist er auch noch Mitentwickler von UTF-8."

Zu Ken Thomson
"An der Universität von Kalifornien in Berkeley, Kalifornien absolvierte 
Thompson ein Studium der Elektrotechnik. 1969 implementierte er zusammen 
mit seinem Kollegen Dennis Ritchie in den Bell Labs die erste Version 
des Unix-Betriebssystems[1] in Assemblersprache."

Klingt nicht so schlecht, will ich meinen.

von Arc N. (arc)


Lesenswert?

prg schrieb:
>> Vorteile sehe ich auch nicht. Mir gefallen von den Neuentwicklungen der
>> letzten Jahre z.Z. Rust und F# am besten.
>
> Solche Vergleich wurden bereits gezogen. Zu Rust wurde da geschrieben
>
> 
http://www.heise.de/developer/news/foren/S-Re-Rust-hoert-sich-vielversprechender-an/forum-255853/msg-23535291/read/
>
> " Rust ist meiner Meinung nach ähnlich komplex wie C++. Rust hat statt
> nur einem gleich vier verschiedene Zeigertypen, die dann in Form von
> &, ~, @, *, &mut, ~str, ~"" und Co. überall im Code ihre
> Krähenfußabdrücke hinterlassen ... "

Rust macht dort nur das explizit, was in anderen Sprachen wie eben C 
oder C++ zu Problemen führen kann. Der Vorteil von Rust an dieser Stelle 
ist, dass schon der Compiler Fehler finden kann.

> go will gerade eine EINFACHE Sprache sein, die man leicht versteht und
> anwenden kann. Das imponiert mir mehr als wenn ich mal wieder noch eine
> Verkomplizierung von C++ vorgestellt bekomme.

Kompliziert empfinde ich das gegenüber C/C++ nicht. Siehe
http://static.rust-lang.org/doc/master/tutorial.html#more-on-boxes
und den folgenden Abschnit über Referenzen

> Klingt nicht so schlecht, will ich meinen.

Wer Google mag... Zudem hat Go so einige Macken, die da auch nicht mehr 
so einfach glattgebügelt werden können. Und obwohl beide Sprachen (Rust 
und Go) als Systemsprachen angetreten sind, fehlen beiden meiner Meinung 
nach noch so einige Features, damit sie C/C++ dort wirklich ersetzen 
können.

*) guter Artikel über einige Unterschiede und Ähnlichkeiten von Go und 
Rust http://lwn.net/Articles/548560/

von prg (Gast)


Lesenswert?

> Zudem hat Go so einige Macken

Das ist wohl wahr. Allein das Beharren auf der öffenden Klammer in der 
gleichen Zeile gefällt mir nicht. Hab's mal local probiert, Pfade 
gesetzt, ein paar Testsourcen compiliert. Ging zwar alles, aber gleiches 
Verhalten. War jetzt meinerseits auch gar nicht beabsichtigt die 
"Werbetrommel" für go zu rühren. Bin mehr zufällig darüber gestolpert, 
aufgrund der Heisenews

http://www.heise.de/developer/meldung/Was-bringt-Go-1-3-2175838.html

und dann war ich halt neugierig.

>> go will gerade eine EINFACHE Sprache sein, die man leicht versteht und
>> anwenden kann. Das imponiert mir mehr als wenn ich mal wieder noch eine
>> Verkomplizierung von C++ vorgestellt bekomme.

> Kompliziert empfinde ich das gegenüber C/C++ nicht. Siehe
> http://static.rust-lang.org/doc/master/tutorial.ht...
> und den folgenden Abschnit über Referenzen

Hmm .. was versteht Rust denn unter "owned_box"? Auf dem Heap erzeugte 
Ressourcen? Kennt das automatisches GC (Mülleinsammeln :)) wie C#/CLR?
Sieht auf den ersten Blick eigentlich auch recht "C-heimisch" aus mit 
Tendenz Richtung ++.

Gibt's eigentlich irgendwo eine Übersicht über all die vielen 
Programmierdialekte-Neuerscheinungen der letzten Jahren, deren 
Entwicklungsstand und Popularitätswert? Würde mich mal interessieren.

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

prg schrieb:
> Ebenso wozu eine nachgestellte Typinfo
>
>  var zahl int
>
> Welchen Vorteil soll das bringen?

Die ist sinnvoll, allerdings finde ich den trennenden Doppelpunkt von
Pascal optisch zweckmäßiger.

Bei C hast du nämlich das Problem bei Zeigern:
1
  char* foo, bar, mumble;

Auch, wenn es auf den ersten Blick anders aussieht: nur “foo” ist ein
Zeiger, “bar” und “mumble” dagegen nicht.

: Bearbeitet durch Moderator
von Jonas B. (jibi)


Lesenswert?

Der Tokenizer ist einfach buggy programmiert, das ist alles.

Gruß Jonas

von Berlin-Fanclub (Gast)


Lesenswert?

> char* foo, bar, mumble;
das geht, ist aber eine schlechte Schreibweise bzw. schlechter 
Programmierstil, sinnvoller ist:
char *foo, bar, mumble;

Damit ist dann auch alles klar.

von (prx) A. K. (prx)


Lesenswert?

prg schrieb:
> Welchen Vorteil soll das bringen?

Die Syntax von Deklarationen in C ist grauenhaft.
http://blog.golang.org/gos-declaration-syntax

Tragischerweise wurden die Pointer nicht gerade gebogen. Wie dort 
ebenfalls bedauert wird.

: Bearbeitet durch User
von TriHexagon (Gast)


Lesenswert?

prg schrieb:
> Rust ist meiner Meinung nach ähnlich komplex wie C++. Rust hat statt
> nur einem gleich vier verschiedene Zeigertypen, die dann in Form von
> &, ~, @, *, &mut, ~str, ~"" und Co. überall im Code ihre
> Krähenfußabdrücke hinterlassen ... "

Die Information ist doch auch schon veraltet, denn die verschiedenen 
Zeigertypen wurden in die stdlib verfrachtet. In der Sprache selbst gibt 
es nur noch den owned pointer. Der GC Zeiger ist nun gc:Gc und der 
SmartPointer rc:Rc. Nach meiner Meinung die richtige Entscheidung.

prg schrieb:
> Hmm .. was versteht Rust denn unter "owned_box"? Auf dem Heap erzeugte
> Ressourcen? Kennt das automatisches GC (Mülleinsammeln :)) wie C#/CLR?
> Sieht auf den ersten Blick eigentlich auch recht "C-heimisch" aus mit
> Tendenz Richtung ++.

Ja wird auf den Heap angelegt. GC gibt es mit dem gc:Gc Zeiger.

Bei Lowlevel und Realtime muss man sich halt mit sowas beschäftigen. Wer 
sich mit sowas nicht auseinander setzen will, für den ist Java/C#/Go 
besser geeignet. Rust soll kein Java 2.0 sein, sondern ein besseres 
sauberes C++.

von Patrick (Gast)


Lesenswert?

prg schrieb:
> Das man jetzt erst mal die Sprachdefinition heranziehen darf [...]

Das haben neue Sprachen so an sich.
Gut, heutzutage(TM) scheint es unter der heutigen Jugend(TM) eher üblich 
zu sein, sich via Trial and Error an eine Programmiersprache anzunähern 
(vgl. z. B. zahlreiche diesbzgl. Threads alleine in den letzten Tagen), 
als die zugehörige Dokumentation zu lesen. Naja, ist wohl auch ein 
Symptom von Facebook, Youtube et al., dass Jeder meint, Alles innerhalb 
von max. 30 Minuten perfekt beherrschen können zu müssen (d. h. auch 
alle nur erdenklichen Programmiersprachen); daher kann man da wohl nur 
bedingt einen Vorwurf machen.

> [...] eine(r) Sprache [...] die sich anschickt das "bessere C" zu sein ...

"Besser" ist Definitionssache. Wo ist das definiert - und vor allem wie?
Ansonsten gilt auch hier wieder der Verweis auf die Sprachdokumentation.

> Was soll ich davon halten?!

Da kannst Du davon halten, was Du willst - das ist von der 
Meinungsfreiheit abgedeckt.

D. V. schrieb:
> Wird Zeit, dass die Osterferien wieder zu Ende gehen.

Full ACK.

von prg (Gast)


Lesenswert?

Patrick (Gast) schrieb:

prg schrieb:
>> Das man jetzt erst mal die Sprachdefinition heranziehen darf [...]

> Das haben neue Sprachen so an sich.
> Gut, heutzutage(TM) scheint es unter der heutigen Jugend(TM) eher üblich
> zu sein, sich via Trial and Error an eine Programmiersprache anzunähern
> (vgl. z. B. zahlreiche diesbzgl. Threads alleine in den letzten Tagen),
> als die zugehörige Dokumentation zu lesen.

Zuerst einmal Danke für das Zuschreiben von "Jugend". Fühle mich jetzt 
wieder richtig jung nach solchen lieb gemeinten Äußerungen. :) Wenn du 
mir jetzt auch noch den Bären aufbinden möchtest, es genüge sich die 
Dokumentation einer neuen Programmiersprache EINMAL durchzulesen und 
dann wüsste man alles, dann entgegne ich dir, dass wohl so gut wie 
keiner dem bei Programmiersprachen wirklich folgt oder solchen 
Ansprüchen gerecht wird. Sonst hätten wir hier schon lange keine 
Diskussionen mehr über C/C++ mit seinen leidigen Sprachverwirrungen! 
Schhließlich steht ALLES irgendwo geschrieben. Man muss es nur finden. 
Folglich würde sich auch dieses Forum erübrigen. Man könnte bei nahezu 
jeder Frage dem Fragesteller schließlich den Vorhalt unterbreiten, er 
habe nur nicht lange genug nach der Lösung seiner Frage gegoogelt.

Trail&Error ist durchaus nichts abträgliches. Im Gegenteil, es bringt 
UNVOREINGENOMMENHEIT beim Ausprobieren mit sich, überwindet also die 
mentale Hürde etwas zu unternehmen, wovor andere aus falschem Respekt, 
Ängstlichkeit oder zuviel formalem Hintergrundwissen Abstand nehmen 
würden. Ich habe mir über die Jahre angewöhnt immer erstmal mir selber 
einen Eindruck zu verschaffen, bevor ich die Eindrücke anderer (auch die 
der Buchautoren) auf mich wirken lasse. Wahrscheinlich wäre mir aufgrund 
des Hinweises im Manual dieses bugbehaftete Verhalten des go Tokenizers 
gar nicht aufgefallen bzw. ich hätte es für "normal" gehalten, 
schließlich steht es so beschrieben. Das ist aber nicht "normal". Das 
ist einfach nur MIST und ich wette, in einer der künftigen Versionen 
wird man das erkennen und revidieren.

von (prx) A. K. (prx)


Lesenswert?

prg schrieb:
> Ich habe mir über die Jahre angewöhnt immer erstmal mir selber
> einen Eindruck zu verschaffen, bevor ich die Eindrücke anderer (auch die
> der Buchautoren) auf mich wirken lasse.

Klingt in diesem Zusammenhang leider wie eine a posteriori 
zurechtgelegte Begründung für notorische Lesefaulheit ;-). Denn 
Referenzhandbücher von Programmiersprachen dienen nicht der Verbreitung 
der Meinung von Autoren. Sondern sind eher als formale Dokumente zu 
betrachten und dienen eher der Grundlage des anschliessenden 
Ausprobierens, als dessen Vermeidung.

Ansonsten aber bin ich irgendwie deiner Meinung. Weil ich nämlich auch 
dazu neige, mir meinen Eindrücke abseits von TV, Youtube oder auch 
Schulungen zu bilden (*). Und zwar indem ich mich der verfügbaren 
sachlichen Literatur zuwende. Also gerade das zuerst lese, was du 
vorsorglich vermeidest. ;-)

*: Was aber im IT-Zusammenhang weniger mit der Vermeidung ausgetretener 
Pfade zusammenhängt, sondern weil ich sonst entweder bei dem Gelaber 
einschlafe, oder die Schulung in eine Diskussion zwischen mir und dem 
Schulungsleiter ausartet. ;-)

: Bearbeitet durch User
von prg (Gast)


Lesenswert?

Jörg Wunsch (dl8dtl) (Moderator) schrieb:
prg schrieb:
>> Ebenso wozu eine nachgestellte Typinfo
>>
>>  var zahl int
>>
>> Welchen Vorteil soll das bringen?

> Die ist sinnvoll, allerdings finde ich den trennenden Doppelpunkt von
> Pascal optisch zweckmäßiger.

> Bei C hast du nämlich das Problem bei Zeigern:

>  char* foo, bar, mumble;

Nicht wenn man sich an die Schreibweise des K&R (2. Ausgabe) hält.
Ich finde dort keine einzige Textstelle, die den Inhaltoperator (*) dem 
Variablentyp beistellen würde. Im K&R würde folglich stehen

char *foo, bar, mumble;

und dann wäre auch klar, hier wird ein
Zeiger auf eine char Variable
und zwei Variablen vom Typ char deklariert.

Entsprechend findet sich im K&R auch unter Deklararion von Zeigern auch 
Beispiele wie

int i, *pi, const cpi = &i

Da es hier nicht an der Reihenfolge der Variablen liegen kann, um was es 
sich handelt (Zeiger oder int-Wert) ist die Deklaration identisch mit

int *pi, i, const cpi = &i

Nach deinem Beispiel Jörg wäre das dann unglücklich geschrieben

int* pi, i, const cpi = &i

immer noch richtig, aber eher verwirrend. Jedoch nur, wenn man sich 
nicht an den K&R hält und solche Schreibweisen vermeidet.

von (prx) A. K. (prx)


Lesenswert?

prg schrieb:
> Nicht wenn man sich an die Schreibweise des K&R (2. Ausgabe) hält.
> Ich finde dort keine einzige Textstelle, die den Inhaltoperator (*) dem
> Variablentyp beistellen würde.

Bei K&R nicht. Aber in C++ findet sich die Schreibeweise "Typ& Var" 
ausgesprochen häufig. Direkt neben "Typ *Var". ;-)

von prg (Gast)


Lesenswert?

A. K. (prx) schrieb:

prg schrieb:
>> Ich habe mir über die Jahre angewöhnt immer erstmal mir selber
>> einen Eindruck zu verschaffen, bevor ich die Eindrücke anderer (auch die
>> der Buchautoren) auf mich wirken lasse.

> Klingt in diesem Zusammenhang leider wie eine a posteriori
> zurechtgelegte Begründung für notorische Lesefaulheit ;-).

Nö, es ist eher ein sondieren, in was es überhaupt lohnt Zeit, Mühe und 
Arbeitsaufwand zu stecken. Synonym dazu, bevor ich mich volltexten lasse 
vom Gebrauchtwagenverkäufer über die ach so tollen Vorzüge mache ich 
lieber mal eine Probefahrt. Dann merke ich das Elend schneller und der 
Tag ist gerettet. :)

> Denn
> Referenzhandbücher von Programmiersprachen dienen nicht der Verbreitung
> der Meinung von Autoren. Sondern sind eher als formale Dokumente zu
> betrachten und dienen eher der Grundlage des anschliessenden
> Ausprobierens, als dessen Vermeidung.

Erst wird die eigene Intuition bemüht. Wenn's dann wirklich nicht mehr 
weitergeht, dann wird in das Handbuch der neuen Waschmaschine oder das 
Pamphletmanual vom Smartphone hineingeschaut. Mach ich bei Software 
ebenso. Krude zu bedienende Software kann mir gestohlen bleiben. 
Zumindest solange es Alternativen gibt. Software auf die sich die 
Anwender einstellen muss, weil man sämtliche bekannten Bedienkonzepte 
und Konventionen bricht oder ignoriert lasse ich meistens links liegen. 
Für jede Regel gibt es natürlich wie immer auch Ausnahmen.

> Die Syntax von Deklarationen in C ist grauenhaft.
> http://blog.golang.org/gos-declaration-syntax

> Tragischerweise wurden die Pointer nicht gerade gebogen. Wie dort
> ebenfalls bedauert wird.

Danke, werde da mal reinschauen.

von prg (Gast)


Lesenswert?

A. K. (prx) schrieb:

prg schrieb:
>> Nicht wenn man sich an die Schreibweise des K&R (2. Ausgabe) hält.
>> Ich finde dort keine einzige Textstelle, die den Inhaltoperator (*) dem
>> Variablentyp beistellen würde.

> Bei K&R nicht. Aber in C++ findet sich die Schreibeweise "Typ& Var"
> ausgesprochen häufig. Direkt neben "Typ *Var". ;-)

Wie gut dass der Jörg "C" schrieb. ;-)

von Yalu X. (yalu) (Moderator)


Lesenswert?

prg schrieb:
> Das ist wohl wahr. Allein das Beharren auf der öffenden Klammer in der
> gleichen Zeile gefällt mir nicht.

Gefällt mir auch nicht, obwohl mir das noch nicht aufgefallen ist, da
ich die öffnende Klammer sowieso immer ans Ende der dem Block
vorangehenden Zeile schreibe ;-)

Das Weglassendürfen des Semikolons finde ich in Ordnung, aber die Regeln
dafür, wann es automatisch eingefügt wird, erzwingen IMHO zu sehr einen
bestimmten Schreibstil. Das kann zwar gewollt und von Vorteil sein, dann
hätten man aber auch konsequenterweise auch vorschreiben müssen, ob mit
Spaces oder Tabs eingerückt wird (und auch noch ein paar andere Dinge).

prg schrieb:
> Ebenso wozu eine nachgestellte Typinfo
>
>  var zahl int
>
> Welchen Vorteil soll das bringen?

Die Hintergründe dafür wurden schon genannt bzw.verlinkt:

  http://blog.golang.org/gos-declaration-syntax

Tatsächlich ist über die Deklarationssyntax von C schon viel gescholten
worden, vor allem von Pascal-Programmierern, die die Reihenfolge
andersherum gewohnt sind. Jeder muss für sich entscheiden, welche Form
er bevorzugt. Ich komme eigentlich mit beiden gut zurecht.

von (prx) A. K. (prx)


Lesenswert?

Yalu X. schrieb:
> Tatsächlich ist über die Deklarationssyntax von C schon viel gescholten
> worden, vor allem von Pascal-Programmierern, die die Reihenfolge
> andersherum gewohnt sind.

Das Problem ist nicht links-rechts vs rechts-links. Sondern dass C es 
mal so mal so hält. Die dadurch entstehende vorrangsbasierte 
Schachtelung hat in meiner Erfahrung noch jeden irritiert, der damit in 
Kontakt kam.

> Ich komme eigentlich mit beiden gut zurecht.

Man gewöhnt sich dran.

Man gewöhnt sich auch daran, in seiner Muttersprache im gleichen Text 
kunterbunt durcheinander 4 verschiedene Schriftsystemen zu verwenden. 
Nur macht das es nicht praktischer.

: Bearbeitet durch User
von prg (Gast)


Lesenswert?

TriHexagon (Gast) schrieb:

prg schrieb:
>> Rust ist meiner Meinung nach ähnlich komplex wie C++. Rust hat statt
>> nur einem gleich vier verschiedene Zeigertypen, die dann in Form von
>> &, ~, @, *, &mut, ~str, ~"" und Co. überall im Code ihre
>> Krähenfußabdrücke hinterlassen ... "

> Die Information ist doch auch schon veraltet, denn die verschiedenen
> Zeigertypen wurden in die stdlib verfrachtet. In der Sprache selbst gibt
> es nur noch den owned pointer. Der GC Zeiger ist nun gc:Gc und der
> SmartPointer rc:Rc. Nach meiner Meinung die richtige Entscheidung.

Kann sein, dass das bereits veraltet ist. Der Kommentar war von 2013. 
Dannke für den Hinweis.

prg schrieb:
>> Hmm .. was versteht Rust denn unter "owned_box"? Auf dem Heap erzeugte
>> Ressourcen? Kennt das automatisches GC (Mülleinsammeln :)) wie C#/CLR?
>> Sieht auf den ersten Blick eigentlich auch recht "C-heimisch" aus mit
>> Tendenz Richtung ++.

> Ja wird auf den Heap angelegt. GC gibt es mit dem gc:Gc Zeiger.

> Bei Lowlevel und Realtime muss man sich halt mit sowas beschäftigen. Wer
> sich mit sowas nicht auseinander setzen will, für den ist Java/C#/Go
> besser geeignet. Rust soll kein Java 2.0 sein, sondern ein besseres
> sauberes C++.

Ich habe Rust auch nicht zu Java, sondern eher zu sowas wie Nimrod (kam 
hier letztens im Forum vor) gerechnet. C# finde durchaus großartig. Wenn 
man mal die gesamte Entwicklung von C# betrachtet hat das einen 
beachtlichen Stellenwert sich erkämpft. In alten Forenkommentaren findet 
man noch oft Genöle, das C# Mono keine Forms kann usw. Kann es aber 
längst. Ich finde die sind weit gekommen mit der Entwicklung (bei MS ist 
mir das Voranprechen mit WPF usw. eher zu schnell, als das man da noch 
mithalten könnte). Ich sehe C# (.NET/Mono) auch grundsätzlich nicht als 
Gegensatz zu reinen Compilersprachen, sondern als gute Ergänzung. Was 
nutzt einem beispielsweise so ein go rein praktisch, wenn ich ein 
"echtes" ;) Windows-Programm (mit komfortabler Ein- und Ausgabe) und 
eben kein Konsolenprogramm haben möchte? Dann greift man letztlich doch 
eher wieder zu einem der großen Platzhirsche, mit den fetten (öhem, 
wollte natürlich sagen gut ausgebauten) Frameworks zurück und schaut, 
dass mans damit irgendwie hinbekommt. Also muss man das ganze Thema 
Rust, go, Nimrod usw. sowieso ein bisschen mit Abstand betrachten, 
zwischem reinem Interesse am Neuen und dem Zurückgreifen bekannter (weil 
eingeübter) Tools. Hinzu kommt, die Zeit die man in neue 
Programmiersprachen investiert fehlt einem auf der anderen Seite wieder 
beim pflegen der Sprachen die man halbwegs kann. Programmieren ist 
leider nicht wie Fahrrad fahren, nach dem Motto, einmal draufsetzen und 
dann läufts. Wäre schön, wenn' so wäre. ;)

von TriHexagon (Gast)


Lesenswert?

prg schrieb:
> Ich habe Rust auch nicht zu Java, sondern eher zu sowas wie Nimrod (kam
> hier letztens im Forum vor) gerechnet. C# finde durchaus großartig. Wenn
> man mal die gesamte Entwicklung von C# betrachtet hat das einen
> beachtlichen Stellenwert sich erkämpft. ...

Na da bin ich allerdings deiner Meinung. Habe selbst mit C# angefangen 
zu programmieren und mir hat es sicherlich nicht geschadet. Der Wechsel 
zu den nativen Sprachen war da auch kein Problem. Da habe ich dich wohl 
falsch eingeschätzt, dachte du wärst einer dieser "ich will nicht über 
den Tellerrand schauen" Java Anhänger. Sorry :).

von Rolf Magnus (Gast)


Lesenswert?

prg schrieb:
>> Bei C hast du nämlich das Problem bei Zeigern:
>
>>  char* foo, bar, mumble;
>
> Nicht wenn man sich an die Schreibweise des K&R (2. Ausgabe) hält.
> Ich finde dort keine einzige Textstelle, die den Inhaltoperator (*) dem
> Variablentyp beistellen würde.

Es ist an dieser Stelle genausowenig ein Inhaltsoperator wie es ein 
Multiplikationsoperator ist.

> Im K&R würde folglich stehen
>
> char *foo, bar, mumble;
>
> und dann wäre auch klar, hier wird ein
> Zeiger auf eine char Variable
> und zwei Variablen vom Typ char deklariert.

Naja... links steht char. Daß sich rechts irgendwo im Namen auf einmal 
noch ein wichtiger Teil des Typs versteckt, ist nicht gerade intuitiv. 
Aber darüber hab ich in dem Forum schon öfter diskutiert.

A. K. schrieb:
> Bei K&R nicht. Aber in C++ findet sich die Schreibeweise "Typ& Var"
> ausgesprochen häufig. Direkt neben "Typ *Var". ;-)

In C++ ist meiner Erfahung nach eher "Typ* Var" üblich, und wird auch 
von Stroustrup durchgängig so benutzt.

von prg (Gast)


Lesenswert?

Rolf Magnus (Gast) schrieb:

prg schrieb:
>>> Bei C hast du nämlich das Problem bei Zeigern:
>>
>>>  char* foo, bar, mumble;
>>
>> Nicht wenn man sich an die Schreibweise des K&R (2. Ausgabe) hält.
>> Ich finde dort keine einzige Textstelle, die den Inhaltoperator (*) dem
>> Variablentyp beistellen würde.

> Es ist an dieser Stelle genausowenig ein Inhaltsoperator wie es ein
> Multiplikationsoperator ist.

Natürlich ist es ein Inhaltsoperator, was sonst?! So ist nun mal die 
korrekte (eingedeutschte) Bezeichnung für das '*' Symbol im Zusammenhang 
mit Zeigern. Oder möchtest du es in ein "Pointeroperator" umtaufen?

Das Gegenstück dazu '&' heißt übrigens Adressoperator im Zusammenhang 
mit Zeigerarythmetik.

>> Im K&R würde folglich stehen
>>
>> char *foo, bar, mumble;
>>
>> und dann wäre auch klar, hier wird ein
>> Zeiger auf eine char Variable
>> und zwei Variablen vom Typ char deklariert.

> Naja... links steht char.

Richtig. Char und eben NICHT CharPOINTER! " Char*  " in C.

> Daß sich rechts irgendwo im Namen auf einmal
> noch ein wichtiger Teil des Typs versteckt, ist nicht gerade intuitiv.

Das ist kein Argument. An C/C++ ist vieles nicht intuitiv, sondern 
einfach definiert, dafür aber zweckmäßig und obendrein nützlich, wenn 
auch nicht immer schön.

> Aber darüber hab ich in dem Forum schon öfter diskutiert.

Und du fachst die Diskussion hier unnützerweise wieder an!

Halten wir uns doch einfach an den K&R. Dann braucht es solche 
Diskussionen nicht.

von TriHexagon (Gast)


Lesenswert?

prg schrieb:
> Natürlich ist es ein Inhaltsoperator, was sonst?! So ist nun mal die
> korrekte (eingedeutschte) Bezeichnung für das '*' Symbol im Zusammenhang
> mit Zeigern. Oder möchtest du es in ein "Pointeroperator" umtaufen?

Nein. Den Inhaltsoperator den du meinst, dereferenziert Zeiger. Also:
1
*num = 12;

Der unterscheidet sich aber von der Definition mit * völlig:
1
int *num;

von prg (Gast)


Lesenswert?

TriHexagon (Gast) schrieb:

> Nein. Den Inhaltsoperator den du meinst, dereferenziert Zeiger. Also:

> *num = 12;

> Der unterscheidet sich aber von der Definition mit * völlig:

> int *num;

Es ist und bleibt dennoch der Inhaltsoperator (solange wir über Zeiger 
reden). Ob man damit einen Zeiger deklariert oder dereferenziert ändert 
nichts daran. Es geht hier um den Sprachgebrauch des Symbols und dieser 
ist so determiniert.

von Yalu X. (yalu) (Moderator)


Lesenswert?

TriHexagon schrieb:
> Nein. Den Inhaltsoperator den du meinst, dereferenziert Zeiger.
>
> Also:
>
>  *num = 12;
>
> Der unterscheidet sich aber von der Definition mit * völlig:
>
>  int *num;

"Völlig" ist ein Bisschen übertrieben :)

Die Zeilen
1
int *num;
2
*num = 12;

können gelesen werden als

  "Der Inhalt des Zeigers num ist vom Typ int und
   dem Inhalt des Zeigers num wird 12 zugewiesen."

Du siehst, dass *num in beiden Fällen gleich in Prosatext übersetzt
wird. Die Idee dieser impliziten Schreibweise ist, für Deklaratoren die
gleiche Syntax wie für Ausdrücke zu verwenden.

von Rolf Magnus (Gast)


Lesenswert?

prg schrieb:
>>> und dann wäre auch klar, hier wird ein
>>> Zeiger auf eine char Variable
>>> und zwei Variablen vom Typ char deklariert.
>
>> Naja... links steht char.
>
> Richtig. Char und eben NICHT CharPOINTER! " Char*  " in C.

Genau das meine ich doch. Es ist ein charPOINTER, was da definiert wird, 
und eben nicht ein char. Links steht aber nur char, also fehlt dort ein 
wichtiger Teil des Typs.

>> Daß sich rechts irgendwo im Namen auf einmal
>> noch ein wichtiger Teil des Typs versteckt, ist nicht gerade intuitiv.
>
> Das ist kein Argument. An C/C++ ist vieles nicht intuitiv, sondern
> einfach definiert, dafür aber zweckmäßig und obendrein nützlich, wenn
> auch nicht immer schön.

Was soll daran zweckmäßig sein, wenn es nicht intuitiv ist? Das ist doch 
der einzige Zweck des Ganzen. Ich habe in den letzten fast 20 Jahren 
aber so viele Fragen in Newsgroups und Foren mit Verständnisproblemen zu 
dem Thema gelesen, daß ich es für wenig zweckmäßig halte. Auf den ersten 
Blick wirkt es nämlich intuitiv, aber für das Gesamtverständnis von 
Zeigern in C ist es eher hinderlich.

>> Aber darüber hab ich in dem Forum schon öfter diskutiert.
>
> Und du fachst die Diskussion hier unnützerweise wieder an!

Die Diskussion hast du losgetreten, nicht ich. Ich habe nur daran 
teilgenommen.

> Halten wir uns doch einfach an den K&R. Dann braucht es solche
> Diskussionen nicht.

Dann halten wir uns in C++ einfach an den Stroustrup. Da der es anders 
sieht, können wir ja dann darüber diskutieren, ob die C- oder die 
C++-Konvention besser ist. ;-)

Yalu X. schrieb:
> Die Zeilen
> int *num;
> *num = 12;
>
> können gelesen werden als
>
>   "Der Inhalt des Zeigers num ist vom Typ int und
>    dem Inhalt des Zeigers num wird 12 zugewiesen."
>
> Du siehst, dass *num in beiden Fällen gleich in Prosatext übersetzt
> wird.

Naja, die erste Zeile definiert was. Und was definiert sie? Etwas, das, 
wenn man es dereferenziert hätte, zu einem int gefüht hätte. Klingt für 
mich etwas umständlicher, als zu sagen: "Ich definieren einen Zeiger auf 
int".

von Yalu X. (yalu) (Moderator)


Lesenswert?

Rolf Magnus schrieb:
> Yalu X. schrieb:
>> Die Zeilen
>> int *num;
>> *num = 12;
>> ...
>
> Naja, die erste Zeile definiert was. Und was definiert sie? Etwas, das,
> wenn man es dereferenziert hätte, zu einem int gefüht hätte. Klingt für
> mich etwas umständlicher, als zu sagen: "Ich definieren einen Zeiger auf
> int".

Auf solche implizite Schreibweisen stößt es auch in anderen Sprachen, wo
sie wirklich nützliche Features darstellen. Sie werden üblicherweise
gelsesen als:

  " Wenn man mit V die Aktion A anwenden würde, käme E heraus."

Klar klingen solche Sätze umständlicher als die explizite Aussage

  "V ist A' auf E angewandt."

wobei A' die Aktion A anderherum ausgeführt ist. Trotzdem hat die
implizite Schreibweise oft Vorteile, auch wenn dieser bei den
C-Deklaration nicht arg in Erscheinung tritt.

Wenn man sich aber mit solchen Dingen einmal etwas beschäftigt hat,
empfindet man auch die C-Deklarationen nicht mehr als unnatürlich.

Ein Beispiel in Python:

Diese (noch wenig spektakuläre) Anweisung
1
x = [a, [b, c]]

weist der Variable x eine Liste mit zwei Elementen zu, von denen das
zweite Element wieder eine Liste ist.

Interessanterweise ist aber auch folgende Anweisung legal:
1
[a, [b, c]] = x

Das sieht zunächst danach aus, als ob auf der linken Seite eine Liste
aufgebaut wird, und dann dieser Liste (die ja, um im C-Jargon zu
sprechen, ein R-Value ist) der Wert x zugewiesen wird.

Tatsächlich ist das aber eine implizite Zuweisung und sagt aus:

  "Weise den Variablen a, b und c jeweils einen Wert solcherart zu,
  dass, wenn man aus diesen Variablen die verschachtelte Liste [a, [b,
  c]] bilden würde, diese gleich x ist."

Dieser Satz klingt ähnlich umständlich wie die in Prosa formulierten
Pointer-Deklarationen in C.

Dort liegt es daran, dass der Typ der definierten Variable nicht direkt
benannt wird, und hier sind es eben die den Variablen a, b und c
zugewiesenen Werte, die nicht direkt benannt werden.

So, wie der Stern in der C-Deklaration die rechts davon stehende
Variable nicht dereferenziert, erzeugen die eckigen Klammern in der
Python-Anweisung auch keine Liste. Vielmehr bilden in diesem Fall sowohl
der Stern als auch die eckigen Klammern zusammen mit den Variablennamen
eine Art Muster, das angibt, was mit den Variablen zu tun ist.

Der der obigen Anweisung (weitgehend) äquivalente Satz von expliziten
Zuweisungen würde so
1
a = x[0]
2
b = x[1][0]
3
c = x[1][1]

aussehen und ist auch für einen Python-Unkundigen sofort verständlich.

Trotzdem würde ich in diesem Fall ganz klar die implizite den expliziten
Zuweisungen vorziehen, weil sie nicht nur kürzer ist, sondern vor allem
auch visuell darstellt, wo die drei Werte aus der verschachtelten Liste
x herausgepickt werden.

Diese Schreibweise heißt in Python offiziell Iterable Unpacking und
ist in stark verallgemeinerter Form auch in funktionalen Sprachen als
Pattern Matching zu finden.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.