Diese Seite http://golang.org/doc/go_faq.html schreibt:
Obwohl Go statische Typen hat, versucht die Sprache, dass sich die Typen leichter anfühlen als in typischen OO-Sprachen
Also meine Frage ist genau, ob es sicher mit Generika (wie C #) oder lose (wie Javascript) oder optional (wie Option streng in Vb.Net) getippt ist.
programming-languages
algorithms
google
go
type-safety
Pacerier
quelle
quelle
Antworten:
Typensicherheit ist kein schwarz-weißer Typensafe oder nicht. Es ist eher ein Spektrum und einige Sprachen können mehr Art sicher als andere (und umgekehrt). Ich denke jedoch, was Sie mit C # im Vergleich zu Javascript denken, ist wahrscheinlich statische Typisierung (bei der die Typprüfung zur Kompilierungszeit stattfindet) im Vergleich zu dynamischer Typisierung (bei der die Typprüfung zur Laufzeit stattfindet) Worüber die Go FAQ spricht.
Google Go ist statisch geschrieben, aber eine Reihe von Funktionen lassen es (zumindest etwas) dynamisch erscheinen. Beispielsweise müssen Sie Ihre Klasse nicht explizit als Implementierung von Schnittstellen kennzeichnen. Wenn die Methodensignaturen Ihrer Klasse mit denen auf der Schnittstelle übereinstimmen, implementiert Ihre Klasse diese Schnittstelle automatisch (eine Art Duck-Typing). Dies ist nützlich, um integrierte Klassen und Klassen in Bibliotheken von Drittanbietern zu erweitern, da Sie Ihre Schnittstelle einfach so einrichten können, dass sie mit den Methoden der Klasse von Drittanbietern übereinstimmt, und diese automatisch implementiert.
Die Typensicherheit ist eigentlich eine andere "Achse" des Typensystems. Zum Beispiel ist C eine statisch typisierte Sprache, die nicht typsicher ist. Mit Zeigern können Sie so ziemlich alles tun, was Sie wollen, auch Dinge, die Ihr Programm zum Absturz bringen. Javascript wird dynamisch eingegeben, ist aber auch typsicher: Sie können keine Vorgänge ausführen, die zum Absturz Ihres Programms führen. C # ist größtenteils typsicher, aber Sie können explizit Codebereiche markieren,
unsafe
die nicht mehr typsicher sind, und Aktionen ausführen, die nicht mehr typsicher sind.Google Go ist auch in dem Sinne typsicher, dass Sie nicht mit Typen herumspielen und das Programm zum Absturz bringen können (kein direkter Zugriff auf Zeiger).
quelle
Es ist sicher geschrieben, dass ein Typ niemals falsch interpretiert wird, aber ein falscher Typ kann das Programm in Panik versetzen.
quelle
Go's Kartentyp ist nicht threadsicher, sondern statisch typisiert. Es ist nicht Art Vererbung, generische Programmierung, Assertions, Methodenüberladung oder Pointer - Arithmetik haben entweder aus gutem Grund.
Typensicherheit und Speichersicherheit sind langfristige Ziele, hier liegt ein Problem.
Die Typensicherheit verursacht einen akzeptablen Overhead in Kilobyte und Megabyte. Go wurde mit MapReduce und "Big Data" entwickelt, exobytes und petabytes von Daten, die Leistungsprobleme in Bezug auf die Typensicherheit darstellen. Die Typenkontrolle (Ein- und Auspacken) verursacht Overheads und entlastet die Verarbeitung.
Die Schriftsicherheit kann beim Untertippen und beim Polymorphismus sowie beim Eingeben von Enten (von Objekt zu Objekt geworfen) einschränkend sein. Dies schafft Gefahren und schafft einen Raum, in dem Sprachen wie Go von großem Nutzen sind. C ++ und Java werden nicht durch Go ersetzt. Es handelt sich um eine neue Sprache zur Unterstützung der verteilten Programmierung und des massiv parallelen Systems.
Die große Aussage von Bruce Eckel - "Go ist viel sinnvoller für die Klasse von Problemen, die C ++ ursprünglich lösen sollte", ist umstritten. C ++ ist eine sehr effiziente Sprache und die Boost-Implementierung von MapReduce ist sehr effizient.
Nebenläufigkeitsprimitive sind die Zukunft. Typensicherheit war schon immer ein sehr umstrittenes Thema und Go ist möglicherweise die erste Sprache, die sich seit 20 Jahren oder seit Algol mit diesem Thema befasst.
quelle