2014-04-19

ufm: (Default)

func tt() (int, int) {
return 1,2
}

func cc(a...interface{}) {
for p, x := range a {
fmt.Printf("%d %#v \n", p, x)
}
return
}

Если написать так:
cc(tt()) — то всё нормально, оно скомпилируется и выведет две строчки.

А если вот так:

cc(1,tt()) — то оно даже не скомпилируется, с диагностикой multiple-value tt() in single-value context

Ну девочка, ну ёб твою мать.

Originally published at U.F.M's Homepage. You can comment here or there.

ufm: (Default)

Запускаем 100000 процессов, каждый из которых считает сумму чисел от 0 до 100000

Ну что… 52 секунды на эрланге супротив 2.2 на golang. Это, конечно, ожидаемо.

Но вот что в голанге «лёгкие процессы» — это они, конечно, гонят. Ибо попытка запустить на голанге 1 мульён проццессов привёл к выжиранию памяти и уходу машины в своп.

Ерланг, понятно дело, сделал этот мульён и особо не подавился. Причем 1000000 процессов считающих сумму от 0 до 10000 и 10 процессов, считающих сумму от 0 до 1000000000 колбасились примерно одно и тоже время. первый вариант 53 секунды, второй — 51.

Originally published at U.F.M's Homepage. You can comment here or there.

ufm: (Default)

Разработчики голанга утверждают, что такое поведение, это не бага а фича.
Мотивируют так:

But let’s say that you’re using someone else’s library, and you do

Foo(f1(), f2(), f3(), f4(), f5(), f6(), f7(), f8(), f9(), f10())

And the developer of f9() changes the number of values returned. Foo() now reports that you have too many or too few arguments, and you have to check 10 different places and remember how each of them are supposed to match Foo()’s parameters.

Or worse: the compiler doesn’t report an error (Foo() takes a variadic
argument) and your code silently breaks

Мотивировка, конечно, понятная, но как по мне — так это просто косяк при проектировании языка.

Originally published at U.F.M's Homepage. You can comment here or there.