ta strona http://golang.org/doc/go_faq.html pisze:
chociaż Go ma typy statyczne, język próbuje sprawić, że typy będą lżejsze niż w typowych językach OO
Więc moje pytanie brzmi: czy jest bezpiecznie wpisane za pomocą generycznych (jak C #), czy luźno (jak javascript), czy opcjonalnie (jak opcja ścisła w Vb.Net)
programming-languages
algorithms
google
go
type-safety
Pacerier
źródło
źródło
Odpowiedzi:
Bezpieczeństwo typu nie jest bezpieczne dla typu czarno-białego, czy nie. Jest to bardziej spektrum, a niektóre języki mogą być bardziej bezpieczne dla tekstu niż inne (i odwrotnie). Myślę jednak, że to, co myślisz o C # vs. JavaScript, to prawdopodobnie pisanie statyczne (gdzie sprawdzanie typów odbywa się w czasie kompilacji) vs. pisanie dynamiczne (gdzie sprawdzanie typów odbywa się w czasie wykonywania) - z pewnością to o czym mówi Go FAQ.
Google Go jest wpisywany statycznie, ale wiele funkcji sprawia, że „wydaje się” być (przynajmniej nieco) dynamicznie wpisywanym. Na przykład nie musisz jawnie oznaczać swojej klasy jako implementującej jakiekolwiek interfejsy. Jeśli sygnatury metod twojej klasy są zgodne z podpisami w interfejsie, twoja klasa automatycznie implementuje ten interfejs (rodzaj pisania kaczego). Jest to przydatne do rozszerzania wbudowanych klas i klas w bibliotekach stron trzecich, ponieważ możesz po prostu skonfigurować interfejs tak, aby pasował do metod w klasie innej firmy i automatycznie go zaimplementuje.
Bezpieczeństwo typu jest w rzeczywistości inną „osią” systemu typów. Na przykład C jest językiem o typie statycznym, który nie jest bezpieczny pod względem typu - wskaźniki pozwalają robić prawie wszystko, co lubisz, nawet rzeczy, które powodują awarię programu. JavaScript jest wpisywany dynamicznie, ale jest także bezpieczny pod względem typu: nie możesz wykonywać operacji, które spowodowałyby awarię programu. C # jest w większości bezpieczny dla typu, ale możesz jawnie oznaczyć obszary kodu, które są,
unsafe
i robić rzeczy, które nie są już bezpieczne dla typu.Google Go jest również bezpieczny pod względem typu, ponieważ nie można manipulować typami i zawieszać programu (brak bezpośredniego dostępu do wskaźników).
źródło
Jest bezpiecznie wpisany, że typ nigdy nie zostanie źle zinterpretowany, ale niepoprawny typ może spowodować, że program wpadnie w panikę.
źródło
Typ mapy Go nie jest bezpieczny dla wątków, jest wpisywany statycznie. Nie ma ona dziedziczenia typu, programowania ogólnego, asercji, przeciążania metod ani arytmetyki wskaźników i nie bez powodu.
Bezpieczeństwo typu i bezpieczeństwo pamięci są celami długoterminowymi, tu leży problem.
Typ bezpieczeństwa stanowi narzut, w kilobajtach i megabajtach, co jest dopuszczalne. Go jest zaprojektowany z MapReduce i „Big data”, egzobytuje petabajty danych, co przedstawia problemy z wydajnością związane z bezpieczeństwem typów, sprawdzanie typów (boxing / unboxing) powoduje koszty ogólne i zabiera cykle przetwarzania.
Bezpieczeństwo typów może być ograniczające w zakresie podtytułu i polimorfizmu oraz podczas pisania kaczego (rzutuj obiekt na obiekt), co stwarza zagrożenia, a także przestrzeń, w której języki takie jak Go są bardzo przydatne. C ++ i Java nie są zastępowane przez Go, jest to nowy język, który pomaga w rozproszonym programowaniu i masowo równoległym systemie.
Duża wypowiedź Bruce'a Eckela - „Go ma znacznie więcej sensu dla klasy problemów, które C ++ pierwotnie zamierzał rozwiązać”, jest dyskusyjna. C ++ jest bardzo wydajnym językiem, a implementacja Boost MapReduce jest bardzo wydajna.
Prymitywy współbieżności są przyszłością. Bezpieczeństwo typu zawsze było bardzo kontrowersyjnym tematem, a Go może być pierwszym językiem, który rozwiązuje ten problem od 20 lat lub od Algolu.
źródło