Pull to refresh

Comments 14

Выкат C++ исключений и деструкторов вручную. Большой прогресс по сравнению с чистым Си, но всё же плюсовики будут кривиться.
Отложенное освобождение ресурсов хорошее. panic и recover как-то удивительно сделали, я не совсем понимаю преимущества относительно работающей во многих языках идиомы try / catch.
Роб Пайк недолюбливает эту идиому как раз из-за того, что наличие управляющей структуры try/catch/finally приводит к злоупотреблению исключениями и смешению с ошибками.
Поэтому чтобы уменьшить это злоупотребление повышена гранулярность: с блока до функции.
Есть много споров на тему, нужно ли обязывать пользователя контролировать исключения try-catch блоком, или же делать это по усмотрению. Преимущество первых даже не в том, что обязует пользователя сразу писать безопасный код, а в том, что пользователь видит сразу все типы исключений, выбрасываемых всей цепочкой функций.
Не знаю как для Пайка, но для меня try-catch-finally блок имеет гораздо более понятную и логичную структуру, чем defer: код, который идет ниже, выполняется всегда позже; тогда как выполнение defer скачет. Вообще в Go создает впечатление некоего компилируемого скриптового языка, нежели современногоязыка программирования.
Интерестный подход.

Вопрос: в Go есть RAII? Т.е. defer сделан в дополнение к нему (как scope в D) или он компенсирует его отсутствие?
Go — язык со сборкой мусора. Поэтому деструкторов (а значит и RAII) в нем нет.
И да, мне одному кажется что «гопроцедура» неудачный термин для русского языка? Я постоянно читаю это слово не правильно.
Лучше поменять на «go-рутина». Так будет ближе к оригиналу, и понятнее.
UFO just landed and posted this here
можно писать го-программа, так будет легче прочитать правильно.
У меня друг так говорит. Но это как-то не по-русски. Есть, кстати, очень похожий русский термин — волокно (поток, переключаемый приложением, у волокон в одном потоке общий TLS). Так что можно называть их go-волокнами.
Мне показалось или в примере после пункта 3 ошибка и функция должна возвращать I вместо 1? Иначе я вообще не понимаю что там происходит…
Я не совсем понял вопрос, потому отвечу в рамках своего разумения:
у функции одно возвращаемое значение, оно именованное.
Когда пишем return 1; компилятор догадывается, что мы возвращаем именованный возврат в i;
И при выходе из функции значение с именем i равно 1;
Sign up to leave a comment.

Articles