Ich habe etliche Sprachen durchprobiert, und bei Go bin ich hängengeblieben, weil ich eine Sprache suchte, die ohne VM arbeitet, und sich kompilieren läßt. Was ich aber mittlerweile mehr an Go schätze, ist die Nebenläufigkeit. Den Nachteil, den man sich erkauft, ist die Programmgröße des Kompilats. Das ist recht extrem. Mein Programm hat jetzt 300 Zeilen und das Binärfile ist jetzt schon über 3MB groß. Ein "Leer"-Programm hat über 1MB. (Bei Turbo-Pascal 3 war das mal 8 Kilobyte.) Was solls. Die Programme lassen sich leicht warten und die Kompilierung ist recht fix. Das Arbeiten mit Modulen erinnert mich an gute Tage mit Modula-2, heisst hier nur package. Das go-Tool ist auch klasse, erinnert mich an das Arbeiten mit luarocks. Zur aktiven Community kommt noch hinzu, dass man mit Google den besten Förderer hat, den man sich (für OSS) vorstellen kann. Welche Sprache bietet es einem schon, per Skript mal eben alles neu runterzuziehen und alle Bibliotheken innerhalb von 15 Minuten neu zu bauen.
#!/usr/bin/env bash if [ -z $1 ]; then P=/tmp else P=$1 fi echo $P if [ ! -e $P/golang/ ]; then mkdir -p $P/golang || exit fi cd $P/golang hg clone https://code.google.com/p/go cd go hg update -C tip cd src ./all.bash
Den Nachteil, den man sich erkauft, ist die Programmgröße des Kompilats. Das ist recht extrem. Mein Programm hat jetzt 300 Zeilen und das Binärfile ist jetzt schon über 3MB groß. Ein "Leer"-Programm hat über 1MB. (Bei Turbo-Pascal 3 war das mal 8 Kilobyte.)
Na ja, Go und Turbo Pascal kann man auch nur teilweise miteinander vergleichen (Bei einigen Dingen wie Syntax und Modularisierung hat man sich offenbar ein paar Inspirationen geholt). Im Gegensatz zu vielen anderen Programmiersprachen wird bei Go eben auch eine komplette Runtime mit GC, Go-Routine Scheduler, Reflection usw. mit in das Executable gelinkt, da leichte Verteilbarkeit von Go-Binaries ein wichtiges Designziel war. Meiner Erfahrung nach relativiert sich die Größe bei komplexeren Programmen recht schnell. Binärmonster von mehreren Megabyte hab ich auch schon mit C++ und einigen 10 000 Zeilen Quellcode hinbekommen.
Mal sehen was noch so kommt. Ich hoffe, dass man bald Android- und (P)NaCl-Anwendungen mit Go schreiben kann. Besser als Java wäre es allemal und man gewöhnt sich recht schnell an die flotten Code -> Compile -> Test Zyklen. Testgetriebene Entwicklung ist beispielsweise ein Graus mit C++.
Ich habe etliche Sprachen durchprobiert, und bei Go bin ich hängengeblieben, weil ich eine Sprache suchte, die ohne VM arbeitet, und sich kompilieren läßt. Was ich aber mittlerweile mehr an Go schätze, ist die Nebenläufigkeit. Den Nachteil, den man sich erkauft, ist die Programmgröße des Kompilats. Das ist recht extrem. Mein Programm hat jetzt 300 Zeilen und das Binärfile ist jetzt schon über 3MB groß. Ein "Leer"-Programm hat über 1MB. (Bei Turbo-Pascal 3 war das mal 8 Kilobyte.) Was solls. Die Programme lassen sich leicht warten und die Kompilierung ist recht fix. Das Arbeiten mit Modulen erinnert mich an gute Tage mit Modula-2, heisst hier nur package. Das go-Tool ist auch klasse, erinnert mich an das Arbeiten mit luarocks. Zur aktiven Community kommt noch hinzu, dass man mit Google den besten Förderer hat, den man sich (für OSS) vorstellen kann. Welche Sprache bietet es einem schon, per Skript mal eben alles neu runterzuziehen und alle Bibliotheken innerhalb von 15 Minuten neu zu bauen.
Wen es interessiert:
#!/usr/bin/env bash
if [ -z $1 ]; then
P=/tmp
else
P=$1
fi
echo $P
if [ ! -e $P/golang/ ]; then
mkdir -p $P/golang || exit
fi
cd $P/golang
hg clone https://code.google.com/p/go
cd go
hg update -C tip
cd src
./all.bash
Den Nachteil, den man sich erkauft, ist die Programmgröße des Kompilats. Das ist recht extrem. Mein Programm hat jetzt 300 Zeilen und das Binärfile ist jetzt schon über 3MB groß. Ein "Leer"-Programm hat über 1MB. (Bei Turbo-Pascal 3 war das mal 8 Kilobyte.)
Na ja, Go und Turbo Pascal kann man auch nur teilweise miteinander vergleichen (Bei einigen Dingen wie Syntax und Modularisierung hat man sich offenbar ein paar Inspirationen geholt). Im Gegensatz zu vielen anderen Programmiersprachen wird bei Go eben auch eine komplette Runtime mit GC, Go-Routine Scheduler, Reflection usw. mit in das Executable gelinkt, da leichte Verteilbarkeit von Go-Binaries ein wichtiges Designziel war.
Meiner Erfahrung nach relativiert sich die Größe bei komplexeren Programmen recht schnell. Binärmonster von mehreren Megabyte hab ich auch schon mit C++ und einigen 10 000 Zeilen Quellcode hinbekommen.
Mal sehen was noch so kommt. Ich hoffe, dass man bald Android- und (P)NaCl-Anwendungen mit Go schreiben kann. Besser als Java wäre es allemal und man gewöhnt sich recht schnell an die flotten Code -> Compile -> Test Zyklen. Testgetriebene Entwicklung ist beispielsweise ein Graus mit C++.