Proč je Go tak pomalý?

.

Proč je Go tak pomalý?
« kdy: 30. 04. 2017, 18:53:33 »
Díval jsem se na testy výkonosti jazyka Go a oproti C je dost pomalý. Samozřejmě je i pomalejší než Java nebo C#.

Co na tom moc nechápu je, proč to tak je. Včem je výhodnější, aby měl Go svůj vlastní kompilátor? Syntaxe toho jazyka je dost podobná jazyku C. Proč prostě Go nefunguje tak, že se kód transformuje do jazyka C a potom se prostě zkompiluje pomocí gcc? Mělo by to přece samé výhody:

1. Výstupní kód by byl kompatibilní s C, toho se dá dost využít.
2. Nemuseli by řešit svůj vlastní překladač, použil by se prostě ten, který už si prošel někollika dekádami vývoje.
3. Bylo by to celé podstatně rychlejší.

Neznám Go nějak extra moc, ale co jsem tak viděl, jedná se o jazyk který je prostě takový syntax sugar nad C. Vždyť co je tak špatného na samotném C? Dá se v tom napsat úplně všechno, akorát je ten jazyk poněkud ukecaný.

No a když už jsme teda u toho, proč není Go transofrmovatelný do C, tak neexistuje nad Céčkem nějaká jazyková OOP nadstavba, která by přío generovala Céčkový kód a až ten by se pak kompiloval?



.

Re:Proč je Go tak pomalý?
« Odpověď #1 kdy: 30. 04. 2017, 18:56:03 »
Pokud jsou tady takoví, co neví, jak transformaci z jazyka A do B myslím, tak se podívejte, jak to umí Kotlin: (dole si můžete vybrat, jestli výstupní kód má být javaScript)

http://try.kotlinlang.org/#/Examples/Basic%20syntax%20walk-through/Use%20when/Use%20when.kt


Kit

Re:Proč je Go tak pomalý?
« Odpověď #2 kdy: 30. 04. 2017, 19:12:47 »
Jak jsi přišel na to, že je Go pomalé? Mám podezření, že jsi do něj přepsal kus programu z jazyka C a teď se divíš. Takhle to nefunguje, s tímto přístupem by C bylo nejrychlejším jazykem při každém porovnávání s jiným jazykem.

Peťa

Re:Proč je Go tak pomalý?
« Odpověď #3 kdy: 30. 04. 2017, 19:30:39 »
Jak jsi přišel na to, že je Go pomalé? Mám podezření, že jsi do něj přepsal kus programu z jazyka C a teď se divíš. Takhle to nefunguje, s tímto přístupem by C bylo nejrychlejším jazykem při každém porovnávání s jiným jazykem.

A jak ty na to, že je rychlé?

http://benchmarksgame.alioth.debian.org/u64q/compare.php?lang=go&lang2=gcc

Kit

Re:Proč je Go tak pomalý?
« Odpověď #4 kdy: 30. 04. 2017, 20:14:33 »
A jak ty na to, že je rychlé?
http://benchmarksgame.alioth.debian.org/u64q/compare.php?lang=go&lang2=gcc

To jsou typy úloh, ve kterých je už předem znám vítěz. Zkus si třeba tohle přepsat do C a pak porovnávej:
Kód: [Vybrat]
package main

import (
    "fmt"
    "net/http"
    "log"
)

func sayHello(w http.ResponseWriter, r *http.Request) {
    fmt.Fprintf(w, "Hello Kit!")
}

func main() {
    http.HandleFunc("/", sayHello) // set router
    err := http.ListenAndServe(":9090", nil)
    if err != nil {
        log.Fatal("ListenAndServe: ", err)
    }
}

Je to jen primitivní webserver, nic složitého.


Re:Proč je Go tak pomalý?
« Odpověď #5 kdy: 30. 04. 2017, 20:20:10 »
Citace
neexistuje nad Céčkem nějaká jazyková OOP nadstavba, která by přío generovala Céčkový kód a až ten by se pak kompiloval?

Nestačilo by prostě vzít C++ a použít z něho jen to, co je potřeba (tzn. třídy, virtuální metody, ale třeba ne šablony)?

Před lety jsem takový projekt implementující OOP do C viděl, bohužel si již nevzpomenu na jméno. Nezkoušel jsem, takže o něm nemohu nic moc říci. Tehdy byl v experimentálním stavu a přišlo mi zbytečné použít jej místo použití malé podmnožiny C++.

vnarek

Re:Proč je Go tak pomalý?
« Odpověď #6 kdy: 30. 04. 2017, 20:31:00 »
Jaký máte vůbec názor na Golang? Teď na něj budu v práci přecházet a na netu neslyším zrovna chválu. 

.

Re:Proč je Go tak pomalý?
« Odpověď #7 kdy: 30. 04. 2017, 20:50:14 »
A jak ty na to, že je rychlé?
http://benchmarksgame.alioth.debian.org/u64q/compare.php?lang=go&lang2=gcc

To jsou typy úloh, ve kterých je už předem znám vítěz. Zkus si třeba tohle přepsat do C a pak porovnávej:
Kód: [Vybrat]
package main

import (
    "fmt"
    "net/http"
    "log"
)

func sayHello(w http.ResponseWriter, r *http.Request) {
    fmt.Fprintf(w, "Hello Kit!")
}

func main() {
    http.HandleFunc("/", sayHello) // set router
    err := http.ListenAndServe(":9090", nil)
    if err != nil {
        log.Fatal("ListenAndServe: ", err)
    }
}

Je to jen primitivní webserver, nic složitého.

Tady není řeč o rychlosti vývoje, ale úplně o něčem jiném, jestli sis nevšiml. Tak si to laskavě nech a vyjadřuj se k tématu. Mezi performance testy je i binární strom a to mi opravdu nepřijde jako nějaké nefér srovnání výkonu.

.

Re:Proč je Go tak pomalý?
« Odpověď #8 kdy: 30. 04. 2017, 20:53:43 »
Jaký máte vůbec názor na Golang? Teď na něj budu v práci přecházet a na netu neslyším zrovna chválu.

Že aktuálně neznám ekvivalent. C je moc low level, v C++ je překomplikovaný relikt, Python je pomalý a nic jiného, co by se kompilovalo přímo do strojového kódy, mělo to GC a bylo to populární, tu není, jen Go.

lopata

Re:Proč je Go tak pomalý?
« Odpověď #9 kdy: 30. 04. 2017, 20:55:47 »
Jaký máte vůbec názor na Golang? Teď na něj budu v práci přecházet a na netu neslyším zrovna chválu.

Každý jazyk má svůj use case, je potřeba uvědomit si, z jakého důvodu golang vznikl a proč ho vyvíjí a tlačí zrovna google. Historicky má google spoustu kódu v pythonu (i v produkci), což není zrovna ideální stav, python je pomalý a na velké projekty se moc nehodí. Google chce nahradit python něčím lepším a na to si vyvinul golang.

Když potřebuješ nějakou service, která paralelně zpracovává requesty, je golang výborná volba. Je kosmicky rychlejší než python, mnohem bezpečnější (kompilovaný, staticky typovaný...) a stejně jako v pythonu v něm může během pár dní začít programovat každý průměrný programátor.

S C nebo C++ dosáhneš lepších výsledků, ale je otázka, jestli ti to za to stojí. Potřebuješ lepší programátory, protože v C(++) je mnohem jednodušší střelit se do nohy a křivka učení je u golangu mnohem strmější než u C(++).

gll

Re:Proč je Go tak pomalý?
« Odpověď #10 kdy: 30. 04. 2017, 20:58:32 »
Díval jsem se na testy výkonosti jazyka Go a oproti C je dost pomalý. Samozřejmě je i pomalejší než Java nebo C#.

Co na tom moc nechápu je, proč to tak je. Včem je výhodnější, aby měl Go svůj vlastní kompilátor? Syntaxe toho jazyka je dost podobná jazyku C. Proč prostě Go nefunguje tak, že se kód transformuje do jazyka C a potom se prostě zkompiluje pomocí gcc? Mělo by to přece samé výhody:

1. Výstupní kód by byl kompatibilní s C, toho se dá dost využít.
2. Nemuseli by řešit svůj vlastní překladač, použil by se prostě ten, který už si prošel někollika dekádami vývoje.
3. Bylo by to celé podstatně rychlejší.

Neznám Go nějak extra moc, ale co jsem tak viděl, jedná se o jazyk který je prostě takový syntax sugar nad C. Vždyť co je tak špatného na samotném C? Dá se v tom napsat úplně všechno, akorát je ten jazyk poněkud ukecaný.

No a když už jsme teda u toho, proč není Go transofrmovatelný do C, tak neexistuje nad Céčkem nějaká jazyková OOP nadstavba, která by přío generovala Céčkový kód a až ten by se pak kompiloval?

Rychlejší by to nejspíš nebylo. I ten C kód by musel dělat automatickou správu paměti, scheduling a pracovat s interface v čase běhu.

Frs

Re:Proč je Go tak pomalý?
« Odpověď #11 kdy: 30. 04. 2017, 21:00:31 »
a nic jiného, co by se kompilovalo přímo do strojového kódy, mělo to GC a bylo to populární, tu není

Jasne ze je, JavaScript, az na tu kompilaci, to je minule tisicileti, interpretovane jazyky jsou just fine.

.

Re:Proč je Go tak pomalý?
« Odpověď #12 kdy: 30. 04. 2017, 21:01:00 »
Moje představa ideálního jazyka by bylo něco na způsob C++:

1. Bez GC
2. OOP bez podpory pro procedurální programování - tzn. žádné multiparadigmatické kraviny
3. Nedalo by se přímo pracovat s pointry, jen s jistými highlevel pointry, které by v sobě zároveň obsahovaly délku alokované paměti (to by mělo dalekosáhlé následky ve prospěch komfortu při programování)
4. Polymorfismus by se dal realizovat pomocí statické alokce, tzn. nebyly by tam takov pitominy, jako je v C++ Object slicing
5. Zabudovaná podpora pro správu verzí, něco jako je Maven

Ještě existuje jakýsik Rust, prý C++ gona right, ale ten jsem nezkoušel.

Ivan Nový

Re:Proč je Go tak pomalý?
« Odpověď #13 kdy: 30. 04. 2017, 21:02:12 »
Díval jsem se na testy výkonosti jazyka Go a oproti C je dost pomalý. Samozřejmě je i pomalejší než Java nebo C#.

Co na tom moc nechápu je, proč to tak je. Včem je výhodnější, aby měl Go svůj vlastní kompilátor? Syntaxe toho jazyka je dost podobná jazyku C. Proč prostě Go nefunguje tak, že se kód transformuje do jazyka C a potom se prostě zkompiluje pomocí gcc? Mělo by to přece samé výhody:

1. Výstupní kód by byl kompatibilní s C, toho se dá dost využít.
2. Nemuseli by řešit svůj vlastní překladač, použil by se prostě ten, který už si prošel někollika dekádami vývoje.
3. Bylo by to celé podstatně rychlejší.

Neznám Go nějak extra moc, ale co jsem tak viděl, jedná se o jazyk který je prostě takový syntax sugar nad C. Vždyť co je tak špatného na samotném C? Dá se v tom napsat úplně všechno, akorát je ten jazyk poněkud ukecaný.

No a když už jsme teda u toho, proč není Go transofrmovatelný do C, tak neexistuje nad Céčkem nějaká jazyková OOP nadstavba, která by přío generovala Céčkový kód a až ten by se pak kompiloval?

CPython :-)

Ivan Nový

Re:Proč je Go tak pomalý?
« Odpověď #14 kdy: 30. 04. 2017, 21:06:15 »
Moje představa ideálního jazyka by bylo něco na způsob C++:

1. Bez GC
2. OOP bez podpory pro procedurální programování - tzn. žádné multiparadigmatické kraviny
3. Nedalo by se přímo pracovat s pointry, jen s jistými highlevel pointry, které by v sobě zároveň obsahovaly délku alokované paměti (to by mělo dalekosáhlé následky ve prospěch komfortu při programování)
4. Polymorfismus by se dal realizovat pomocí statické alokce, tzn. nebyly by tam takov pitominy, jako je v C++ Object slicing
5. Zabudovaná podpora pro správu verzí, něco jako je Maven

Ještě existuje jakýsik Rust, prý C++ gona right, ale ten jsem nezkoušel.

Na to je už 50 let Smalltalk, zkuste Pharo :-)))