Napisałem mały silnik w Go dla OSX (używając OpenGl do okna graficznego). Mam pewne doświadczenie z silnikami gier C ++ ( http://morganjeff.weebly.com/ ) i postanowiłem wypróbować Go po przeczytaniu o niektórych jego funkcjach.
Począwszy od wersji Go 1.1, Go obsługuje większość funkcji potrzebnych do napisania silnika gry (tak naprawdę rdzeń gry, ponieważ silnik sugeruje edytorom, a co nie), w tym:
- Powiązanie funkcji członka (dla systemu przesyłania wiadomości)
- Odbicie jest wbudowane (przydatne do serializacji, obsługi zewnętrznych narzędzi itp.)
- Interfejsy (do implementacji zachowania polimorficznego w systemach, komponentach itp.)
Niektóre zalety korzystania z Go (w przypadku dużego projektu):
- Testowanie jest wbudowane w język (obejmuje to testy porównawcze i niektóre stwierdzenia)
- Przykłady można łatwo dodać do języka (i są one kompilowane pod kątem poprawności)
- Kod specyficzny dla architektury jest łatwy do dodania (poprzez konwencje nazewnictwa plików)
- Profilowanie jest wbudowane w język
- wbudowana wersja importu (pozwala na dodawanie dużych plików binarnych do oddzielnego repozytorium od źródła, przy zachowaniu wersji i aktualności)
Niektóre zalety korzystania z Go w ogóle:
- Łatwy do refaktoryzacji kod
- Go obsługuje wątki (w przeciwieństwie do C ++, które nakładały go warstwami na wierzch)
- super szybka prędkość kompilacji zmniejsza potrzebę obsługi języka skryptowego
- system typowania statycznego (interfejsy są spełnione poprzez typowanie kaczych aka niejawnie)
- wiele zwracanych wartości, nazwanych parametrów, otagowanych atrybutów struktury
- świetne wbudowane narzędzia i dokumentacja
- zarządzany język
Niektóre wady korzystania z Go:
- Brak makr i szablonów
- Nie obsługuje bibliotek bardziej dojrzałych języków
- język zarządzany (celowo wymieniony dwukrotnie)
- BEZ IDE
Są sposoby na uzyskanie surowej pamięci w go (importowanie „niebezpieczne”), a link do artykułu, który pokazuje, jak program go może być profilowany pod kątem pamięci i szybkości. Podsumowując, twierdzenie Go, że jest to nowoczesne C, wydaje się bardzo prawdziwe. Myślę, że jest „elegancko” zaprojektowany (z wielu powodów, o których wspominałem) i, co ważniejsze, jest dobrze udokumentowany. Silnik zaprojektowany w Go będzie trochę inny niż silnik zaprojektowany w C ++ (coś, do czego wciąż się przyzwyczajam), ale silnik Go rozwiązuje wiele problemów, które tak naprawdę nie są rozwiązane w C ++ (mianowicie równoległość, złożoność języka C ++ i niewłaściwe użycie dziedziczenia).
Oto obiecany artykuł:
http://blog.golang.org/2011/06/profiling-go-programs.html
-Jeff