четверг, 19 ноября 2009 г.

[comp.prog] Краткий пересказ Effective Go на русском

В принципе, готов: http://eao197.narod.ru/desc/short_effective_go.html

За орфографические ошибки и очепятки не пинать, лучше сообщайте мне по почте, постараюсь устранить все найденное :)

Мое впечатление о языке чуть позже (так что stay tunned ;)

3 комментария:

Dmitry Vyukov комментирует...

Вот над этим только что сидели с коллегой минут 5. Сильно!

for try := 0; try < 2; try++ {
file, err = os.Open(filename, os.O_RDONLY, 0);
if err == nil {
return
}
if e, ok := err.(*os.PathError); ok && e.Error == os.ENOSPC {
deleteTempFiles(); // Освободить место на диске.
continue
}
return
}

Dmitry Vyukov комментирует...

Ку: Я так понимаю, что если писатель пишет в канал первый раз, то он не блокируется. Но если он пишет в канал, значение из которого еще не прочитано, то тогда писатель заблокируется

Я-то думал, что они полностю синхронные, т.е. реализуют рандеву если буферизация отключена.

eao197 комментирует...

>Я-то думал, что они полностю синхронные, т.е. реализуют рандеву если буферизация отключена.

Это, кстати, очень может быть. Я специально этот момент пометил своим комментарием, поскольку это мое мнение. Тут нужно проверять, а на моем буке сейчас Linux-а нет.

Я исходил из такого сценария: запускается сортировка в отдельной нити, после сортировки в канал пишется сигнал о том, что сортировка завершена. Тот, кто хочет узнать об этом читает из канала. Так вот, если небуферизированный канал -- это рандеву, то выделенная для сортировки нить может долго ждать своего читателя. А зачем, спрашивается?

Хотя, с другой стороны, если синхронный канал -- это не рандеву, то для рандеву нужно будет два канала делать? Как-то не правильно.

В общем, если у котого есть возможность развернуть Go под Linux-ом или MacOS, то можно проверить.