← All posts tagged GOlang

Взял с розеты два исходника. Один на Go (http://rosettacode.org/wiki/Atomic_updates#RWMutex) и один на D (http://rosettacode.org/wiki/Atomic_updates#D). Дополил до более-менее одтнакового алгоритма.

В результате вариант на D показывает в районе 6M операций в секунду, вариант на Go — в районе 8M.

Вот как они это делают?

Кстати, варианта на rust-е — нет. Может есть кто из фанатов раста — сделает?

Вариант на D: pastebin.com
Вариант на Go: pastebin.com

А вот то, что нет атомарной функции "отправить в канал или вернуть ошибку если он закрыт" — это они круто придумали, да. Вобще, поражает разнообразие и гибкость возможностей отслеживать состояние горутины. Особенно по сравнению с эрлангом.

Голанг не перестаёт удивлять.
Причем в плохом смысле этого слова.
Простенькая и неправильная программа: pastebin.com

Неправильная, потому что в summ ко окончанию будет черти что (почему, я надеюсь, объяснять не нужно).
Но странно не это. Странно другое.
Запускаем:
$ time ../../hello.go
summ == 2564618148

real 0m4.182s
user 0m15.373s
sys 0m0.340s

А теперь исправляем 18 строчку на summ += 1 (или summ++ — даёт такой-же эффект)
$ time ../../hello.go
summ == 2367670838

real 0m15.969s
user 1m2.116s
sys 0m0.428s

Причем ладно бы эти варианты были атомарными, в отличие от "summ = summ +1", тогда понятно было-бы тормозилово. Но так ведь нет.

не устаю радоваться за язык.
aa := make(map[string]struct{a int; b int},10)
После этого вот так: aa["ss"] = struct{a int; b int}{5,6} — можно.
а вот так: aa["ss"].a = 1 — нельзя.

Да! Они упоротые!
func cc(a...interface{}) {
for p, x := range a {
fmt.Printf("%d %#v \n", p, x)
}
return
}
Если её вызвать вот так:
cc(tt())
то оно работает. А если вот так:
cc(1, tt())
не компилируется.
Ну девочка, ну ёб-же твою мать!

d := [4] interface{} {1,'2',"3",a}
e := d[:]
e[0] = 0
e = append(e, 55)
e[0] = 22
fmt.Printf("%#v\n",d)
fmt.Printf("%#v\n",e)
----
[4]interface {}{0, 50, "3", 28}
[]interface {}{22, 50, "3", 28, 55}
----
Когда нибудь придумают язык, в котором не будет никаких странных вещей, которые "понять не возможно, нужно просто запомнить"?