Bartosz Wójcik Napisano Październik 9, 2015 Zgłoś Napisano Październik 9, 2015 Zastanawiam się czy od czasu http://www.secnews.pl/2014/09/05/technologiczna-bieda-kompilatora-go/ coś się zmieniło Cytuj
Piotr Rojek Napisano Październik 28, 2015 Zgłoś Napisano Październik 28, 2015 Podejrzewam, że mogło się troszkę zmienić, bo od wersji 1.5 kompilator Go jest napisany w czystym Go. Sam jestem ciekawy, ale assembler to nie jest moja mocna strona Cytuj
Bartosz Wójcik Napisano Październik 28, 2015 Autor Zgłoś Napisano Październik 28, 2015 Widać poprawę w generowanym kodzie, bo spojrzałem na najnowszą wersję, jednak zdarzają się kwiatki jak: 1. Bezsensowe wymiany rejestrów .text:0048B721 xchg ebx, esi .text:0048B723 neg ebx .text:0048B725 xchg ebx, esi 2. To jest dobre: .text:0048A617 mov [esp+0A8h+arg_8], esi .text:0048A61E mov [esp+0A8h+arg_C], edi .text:0048A625 mov [esp+0A8h+arg_10], 214h .text:0048A630 mov [esp+0A8h+arg_14], eax .text:0048A637 mov [esp+0A8h+arg_18], ecx .text:0048A63E add esp, 0A8h .text:0048A644 retn Zapisuje lokalne parametry na stosie funkcji po czym z niej wychodzi 3. Posługiwanie się 8 bitowymi rejestrami, gdy można skorzystać z 32 bitowych .text:0048A3F3 movzx ebx, [esp+0A8h+var_98] .text:0048A3F8 cmp bl, 0 .text:0048A3FB jz short loc_48A455 4. Jako jedyny kompilator na świecie sprawdza czy rejestr jest zerowy używając cmp zamiast test .text:0048A412 cmp ecx, 0 .text:0048A415 jz short loc_48A419 5. Używa niepotrzebnie instrukcji CLD oraz barier UD2 po wywołaniu wyjątku .text:00423350 mov ecx, large fs:14h .text:00423357 mov ecx, [ecx+0] .text:0042335D cmp esp, [ecx+8] .text:00423360 jbe short loc_423395 .text:00423362 sub esp, 10h .text:00423365 mov ebx, runtime_sliceError.tab .text:0042336B mov [esp+10h+i.tab], ebx ; i .text:0042336E mov ebx, runtime_sliceError.data .text:00423374 mov [esp+10h+i.data], ebx .text:00423378 call runtime_convI2E .text:0042337D lea ebx, [esp+10h+var_8] .text:00423381 cld .text:00423382 mov ecx, [ebx] .text:00423384 mov [esp+10h+i.tab], ecx ; e .text:00423387 mov ecx, [ebx+4] .text:0042338A mov [esp+10h+i.data], ecx .text:0042338E call runtime_gopanic .text:00423393 ud2 6. Nie potrafi wykorzystać wyników operacji logicznych do sprawdzania stanu rejestru (0 czy nie) .text:004020A9 mov ebx, ebp .text:004020AB and ebx, 20h .text:004020AE cmp bl, 0 .text:004020B1 jnz short loc_402116 Tutaj zbędna jest operacja cmp. Nie jest to kompilator najwyższych lotów i brakuje mu lata świetlne do LLVM i Intel-a. Cytuj
Piotr Rojek Napisano Październik 28, 2015 Zgłoś Napisano Październik 28, 2015 4 godziny temu, Bartosz Wójcik napisał: brakuje mu lata świetlne do LLVM i Intel-a. To akurat nie jest dziwne, Go to relatywnie młody język Wiele z rzeczy o których wspomniałeś jest w planach do poprawki w wersji 1.6 - link. Najważniejsze, że programy pisane w Go są wydajne, a samo pisanie w tym - niesamowicie przyjemne i proste :) Cytuj
Bartosz Wójcik Napisano Październik 28, 2015 Autor Zgłoś Napisano Październik 28, 2015 Programy, w których kompilator generuje niewydajny kod nie mogą być uznawane za wydajne, to wbrew logice , potwierdzi to każdy benchmark jeśli postawisz obok siebie ten sam algorytm skompilowany w Go i kompilatorach z VC++ i Intela. Cytuj
Piotr Rojek Napisano Październik 28, 2015 Zgłoś Napisano Październik 28, 2015 A jednak Go daje radę już teraz :) Miejmy nadzieję, że w przyszłości poprawią jakość kompilatora i będzie całkiem super. Cytuj
A.S.L Napisano Grudzień 23, 2015 Zgłoś Napisano Grudzień 23, 2015 pytanie za 100 punktów , jaki najmniejszy plik exe można wygenerować tym kompilatorem ? Cytuj
Bartosz Wójcik Napisano Grudzień 28, 2015 Autor Zgłoś Napisano Grudzień 28, 2015 Dnia 23.12.2015 at 23:11, A.S.L napisał: pytanie za 100 punktów , jaki najmniejszy plik exe można wygenerować tym kompilatorem ? Spróbuj, podziel się efektami Cytuj
A.S.L Napisano Styczeń 29, 2016 Zgłoś Napisano Styczeń 29, 2016 słabo to wygląda , po skompilowaniu tego : package main import "fmt" func main() { fmt.Println("Hello, World") } plik exe ma 1.5 MB :-) go version go1.4.2 windows/386 Cytuj
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.