← All posts tagged Go

ufm

Взял с розеты два исходника. Один на 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

ufm

Голанг не перестаёт удивлять.
Причем в плохом смысле этого слова.
Простенькая и неправильная программа: 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", тогда понятно было-бы тормозилово. Но так ведь нет.

ufm

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}
----
Когда нибудь придумают язык, в котором не будет никаких странных вещей, которые "понять не возможно, нужно просто запомнить"?