среда, 24 апреля 2013 г.

Новое в Go 1.1

    В Go версии 1.1 обещают такую клевую штуку как thread-sanitizer. Эта штуковина в автоматическом режиме определяет race conditions в вашей программе. Так как в Go потоки создаются "с легкостью необыкновенной"  то и проблема обнаружения таких ошибок стоит весьма остро. Хотя если следовать паттернам проектирования реализованным в самом языке то вероятность наступить на эти грабли минимальна.  
 Как эта штуковина работает ? 
 Она патчит компилятор и при любом доступе к памяти, который является потенциально опасным  проверяет этот участок памяти - на предмет а не пишет ли кто туда в этот момент ?
Если такие вещи обнаруживается то вам выдается лог с указанием какие именно потоки у вас не поделили данный участок памяти.  Более подробно об алгоритме можно прочитать тут - https://code.google.com/p/thread-sanitizer/wiki/Algorithm 
     Этот инструмент в принципе доступен уже сейчас - для C/C++ и для Go. Но придется самим прикручивать его к компилятору. Самая же хорошая новость - что в Go 1.1 этот инструмент будет доступен сразу в коробке.