LG.BALUKATION's Weblog

Ничего, это тоже кое-что… А при желании из него можно сделать что угодно

про goto и память

Posted by LG.BALUKATION на 2011/03/06

Сижу потихонку разгребаю RSS’ы, вот докатился до той статьи на хабре, что про goto в сях. Хабр как-то не очень радует, но вот эта статья и соседняя весьма интересны.

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

Тут важно понимать, что всё следует применять в меру — вот например былиж специально придуманы всякие «годные» циклы и выборы, что бы не думать «а что за контекст у этого перехода и что там по метке…», а сразу понимать «аха, это у нас вариант такой-то». В этом и есть суть высокоуровневых языков — большая абстракция для облегчения понимания логики работы программы. GOTO при этом как бы шаг назад, возвращающий нас к «ручному управлению» и заставляющий порой заботится о множестве всяких тонкостей (переход кстати можно делать и не локальный, а скакнуть почти куда угодно — былаб потребность).

Сам я впрочем не припоминаю, что бы активно пользовал этот «хак» — вроде как-то не возникало нужны в нём. Помню, когда ещё был школоло и писали какой-то тестик на паскале, мой знакомый выстроил всё это дело на goto и потом вдруг оказалось, что ничего не работает. Ну знаете наверное, как любят некоторые люди сначала долго и упорно набивать стопицот строчек кода, потом уже типо готовое собрать-запустить и охренеть — ибо строчек немеряно и где именно был косяк часто понять не просто. Впрочем, мне не кажется, что goto подвело его — скорее он сам сфейлил таким способом работы, сразуж ведь ничего не проверял. Его кстати удивил тогда мой вариант на выборе — он оказался и по коду короче и работал как надо, да не было нужды мотаться по меткам туда-сюда.

Вторая статья порадовала меня куда больше, ибо сегодня я уже хоидил по ссылке с какого-то сайта глянуть упоминаемую там разработку. На сайт я ходил т. к. там IDE находится, а вот оказывается есть и соответствующий фреймворк, одну из идей которого и расписывают в статье. Тащем-то автор ратует за уменьшение динамического управления памятью в пользу статического. Потому как отслеживание всяких тонкостей с указателями дело не из лёгких — это можно в различной степени автоматизировать, но всё равно хочется этого избежать вообще.

Ссылки — статья про goto и статья про память.

Реклама

комментария 3 to “про goto и память”

  1. tchnts said

    Я активно goto юзаю. К примеру:
    int func(struct x_t *x){
    int ret;
    if( x->y ){
    // smth bad
    ret = -1;
    goto ret;
    }
    if( x->z ){
    // smth bad
    ret = -1;
    some_code();
    goto ret;
    }

    now_some_good_code();

    ret:
    free_all_malloced();
    return ret;
    }

  2. это известный сценарий, но в играх он не часто встречается — там же часто загрузка/выгрузка почти всей инфы отдельными состояниями идёт и при обработке просто считается, что всё уже есть да создавать/удалять ничего не надо. У тебя похоже более сишный и системный код :-)

  3. Igor said

    к счастью, в моём ынтерпрайзе за 5 лет гото ни разу не понадобился.. даже желания использовать не было… но это мне с языком повезло (;

Добавить комментарий

Заполните поля или щелкните по значку, чтобы оставить свой комментарий:

Логотип WordPress.com

Для комментария используется ваша учётная запись WordPress.com. Выход / Изменить )

Фотография Twitter

Для комментария используется ваша учётная запись Twitter. Выход / Изменить )

Фотография Facebook

Для комментария используется ваша учётная запись Facebook. Выход / Изменить )

Google+ photo

Для комментария используется ваша учётная запись Google+. Выход / Изменить )

Connecting to %s