wtorek, maja 04, 2010

Język Go dla Windows :-)

No i jest już port języka Go dla Windows :-)
Jest już jakiś czas, ale wcześniej go jakoś kilkukrotnie przeoczyłem.
Sportowano jak na razie tylko wersję 32 bitową, czyli narzędzia 8g i 8l [oraz parę innych, których się zwykle z linii poleceń nie używa ;-) albo w dostępnej "paczce" jest tylko 32 bitowa wersja, aż tak daleko nie czytałem].
Tutaj krótka instrukcja pracy z Go na Windows [stworzona na podstawie filmu "szkoleniowego", ale w końcu każdy kto chciałby używać Go na Windows wie jak stworzyć zmienne środowiskowe :-)].
  1. idziemy na stronę do pobierania portu Go dla Windows i pobieramy najnowszy plik
  2. kopiujemy katalog go z archiwum w miejsce gdzie byśmy go chcieli mieć, np. do c:\go [u mnie d:\Software\go ;-)] [czyli plik 8g powinien być pod ścieżką c:\go\bin\8g.exe]
  3. tworzymy 4 zmienne środowiskowe:
    GOARCH=386GOBIN=c:\go\binGOOS=mingwGOROOT=c:\go
  4. modyfikujemy zmienną środowiskową PATH i dodajemy na jej końcu %GOBIN% [oczywiście po średniku ;-)]
No i tada! mamy Go zainstalowane :-) [tak btw. ilu ludzi wie skąd się wzięło "tada!"? ;-)]
Teraz przydałby się jakiś program, np. Hello World, czyli tworzymy plik HelloWorld.go takiej treści:
package main

import "fmt"

func main() {
fmt.Print("Hello World!!!");
}
[tu ostrzeżenie, kompilator dla Windows lubi gdy ostatnia linia programu jest pusta, inaczej wyrzuca błąd]
Po tym kompilujemy program:

8g HelloWorld.go

kompilator stworzył nam plik HelloWorld.8, który musimy zlinkować przy pomocy komendy:

8l -o HelloWorld.exe HelloWorld.8

I teraz już wystarczy uruchomić program wynikowy HelloWorld.exe.
Programy jak na razie szybkością nie porażają ;-) Dla przykładu mój ulubiony program do testowania "szybkości" języków programowania, czyli powtarzane tu już do znudzenia całkowanie numeryczne funkcji e-x2 od -10 do 10 w 10000 kroków, wymaga na moim laptopie mniej więcej 7-8 ms na jedną iterację [czyli jeśli dobrze pamiętam jakieś 10 razy więcej niż wersja w C czy C++ skompilowana w Visual Studio].
Tutaj program:
package main
import "fmt"
import "math"
import "time"

func calc() float {
var sum float=0.0;
var start=0.0;
var stop=10000.0;
var d float=20.0/stop;
for i:=start; i<stop; i++ {
var x float=d*i-10.0;
sum=float(sum+float(math.Exp(float64(-x*x)))*(20.0/stop));
}
return sum;
}

func test() {
start:=time.Nanoseconds();
for i:=0; i<1000; i++ {
calc();
}
stop:=time.Nanoseconds();
var time = float64(stop-start)/1000/1000;
fmt.Printf("%f\n",float64((time)/1000));
}

func main() {
test();
}
Wyniki wyglądały przed chwilą tak:
8.473252
7.443193
6.397191
7.565200
6.411192
7.491195
6.493197
7.519197
Programy wynikowe do małych nie należą ;-) mają w przypadku obu tu przytoczonych blisko 700KB.
Jak na razie nie jestem entuzjastą Go, ale fakt, że do jego używania nie potrzebuję już uruchamiać VMWare Playera dużo ułatwia i może się mu trochę poprzyglądam.


Podobne postybeta
Go wolniejsze od C i JavaScript, i ciut szybsze niż Java ;-) [a jednak od Java'y też wolniejsze]
Raspberry Pi to nie jest demon prędkości ;-)
Go dla Java'owca ;-) odcinek 1 "klasy"
C# miewa swoje plusy ;-)
Wysyłamy pliki do Google Docs przy pomocy Go :-)