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

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

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

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

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

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

  1. Вот над этим только что сидели с коллегой минут 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
    }

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

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

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

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

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

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

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

    ОтветитьУдалить