Re[2]: Вот подумалось
От: mrozov  
Дата: 24.11.05 12:00
Оценка:
Здравствуйте, Сергей Губанов, Вы писали:

СГ>Здравствуйте, srggal, Вы писали:


S>>

S>>Сколько return должно быть в функции? Один или несколько ?
S>>


СГ>А что здесь есть кто-то утверждающий полезность единственности точки выхода из процедуры?


Ну кто-то утверждающий бесполезность exception-ов же нашелся
А вообще-то множественные точки выхода — это оверхед + мешает некоторым приемам нормально работать.
Re[2]: Вот подумалось
От: srggal Украина  
Дата: 24.11.05 12:00
Оценка:
Здравствуйте, Сергей Губанов, Вы писали:

S>>

S>>Сколько return должно быть в функции? Один или несколько ?
S>>


СГ>А что здесь есть кто-то утверждающий полезность единственности точки выхода из процедуры?


Речь идет о том, что

полезность единственности точки выхода из процедуры


Впрос еще более философский чем принятие/непринятие исключений
... << RSDN@Home 1.1.4 stable rev. 510>>
Re[23]: Что вы предлагаете на замену эксепшенов?
От: Sinclair Россия https://github.com/evilguest/
Дата: 24.11.05 12:00
Оценка: +1
Здравствуйте, Сергей Губанов, Вы писали:

СГ>Необычно то, что:

СГ>1) Zero-overhead;
это маркетинг булшит. Никаким зеро там и не пахнет. Во-первых, для работы используются метаданные, которые конечно зеро по сравнению с "обычным обероном", т.к. встроены намертво, но вовсе не зеро по сравнению с полным отсутствием метаданных. Во-вторых, приведенные цифры по скорости раскрутки стека мягко говоря, далеки от зеро. Интуитивно мне кажется, что легендарно медленная раскрутка в плюсах порвет этот код как тузик грелку — потому что reflection да еще и с анализом стека на халяву не дается.
СГ>2) не требуется вносить изменения в синтаксис языка Оберон.
Это да. Удачное совпадение.
Кстати, нельзя ли поподробнее рассказать о том, каким именно способом эта библиотека подправляет stack pointer? Это основная фича данной техники, которая, к слову, никакого отношения к метапрограммированию не имеет — скорее к хакерству, а стало быть, под большим вопросом в средах, ориентированных на надежность.
1.1.4 stable rev. 510
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[22]: Что вы предлагаете на замену эксепшенов?
От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
Дата: 24.11.05 12:01
Оценка:
Здравствуйте, Sergey J. A., Вы писали:

SJA>Не совсем понял, system это что ? Операционная стистема ? Значит ли это, что операционная система должна знать о каждой библиотечной схеме исключений, что-бы вызвать соответствующий Rise ?


Имеется в виду run-time system. Скажем, run-time system-а языка Java или run-time system-а .Net или run-time system-а Oberon... Run-time system может работать как поверх операционной системы так и наоборот.
Re[2]: Вот подумалось
От: reductor  
Дата: 24.11.05 12:03
Оценка: 1 (1) +1
Здравствуйте, Сергей Губанов, Вы писали:

СГ>Здравствуйте, srggal, Вы писали:


S>>

S>>Сколько return должно быть в функции? Один или несколько ?
S>>


СГ>А что здесь есть кто-то утверждающий полезность единственности точки выхода из процедуры?


Ничего не хочу сказать ни про кого плохого, но я возьмусь утверждать, что несколько точек выхода — это хуже, чем один.
Во всех случаях, когда этого можно избежать.
Re[11]: Что вы предлагаете на замену эксепшенов?
От: Privalov  
Дата: 24.11.05 12:16
Оценка:
Здравствуйте, Сергей Губанов, Вы писали:

P>>Тогда вопрос: сколько процентов головного мозга приходится напрягать физику-теоретику в повседневной деятельности? В каком угодно смысле. Просто для сравнения.


СГ> кандидату: 100% от нормы обычного человека, доктору: 500% — 1000% от нормы обычного человека академику, ну скажем, 20'000% от нормы....


Отлично. А сколько программисту от нормы обычного человека? А, кстати, обычному человеку?
Re[23]: Что вы предлагаете на замену эксепшенов?
От: Sergey J. A. Беларусь  
Дата: 24.11.05 12:16
Оценка:
Здравствуйте, Сергей Губанов, Вы писали:

SJA>>Не совсем понял, system это что ? Операционная стистема ? Значит ли это, что операционная система должна знать о каждой библиотечной схеме исключений, что-бы вызвать соответствующий Rise ?


СГ>Имеется в виду run-time system. Скажем, run-time system-а языка Java или run-time system-а .Net или run-time system-а Oberon... Run-time system может работать как поверх операционной системы так и наоборот.


Ну значит обработка исключений должна быть встроена в рантайм (чтоб он знал как транслировать системные исключения), не в отдельную библиотеку ? Я так понял ?
... << RSDN@Home 1.2.0 alpha rev. 619>>
Re[19]: Что вы предлагаете на замену эксепшенов?
От: Mamut Швеция http://dmitriid.com
Дата: 24.11.05 13:38
Оценка:
S>Дык и зачем сразу использовать исключения ????
S>Все гараздо проще

[поскипано]

S>И тогда все свалится в каком-то другом месте, неважно в каком потому как информация о месте и характере ошибки не важна Автору топика.


S>Кстати, подобный подход, исходя из предпосылок ГОРАЗДО эффективней исключений, функция без них будет работать быстрей и что немаловажно, в 98% случаев — правильно.


S>


Это тоже мысля. Просто у меня метод execute должон был возвращать код ошибки (кстати, в приведенном коде у меня ошибка — возвращается не код, а true/false ) если что не так — требование общего интерфейса iqCommand.

А так — да, можно было

S> Ещё одна мысль здесь
Автор: srggal
Дата: 24.11.05


ыыыы Хотя, по Дейкстре, выход должен быть только один. "Из любой ситуации есть выход. В крайнем случае, можно выйти из себя" (с) не помню кто
... << RSDN@Home 1.2.0 alpha rev. 619>>


dmitriid.comGitHubLinkedIn
Re[24]: Что вы предлагаете на замену эксепшенов?
От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
Дата: 24.11.05 14:54
Оценка:
Здравствуйте, Sergey J. A., Вы писали:

SJA>Ну значит обработка исключений должна быть встроена в рантайм (чтоб он знал как транслировать системные исключения), не в отдельную библиотеку ? Я так понял ?


Предлагаемая в статье библиотека ловли исключений расширяет среду времени исполнения. Так что, новая (расширенная) среда исполнения теперь умеет вызывать пользовательские обработчики исключений. Вообще, среда времени исполнения по любому умеет ловить системные (на машинном уровне) исключения не зависимо от того предоставляет ли она эту услугу тем программам которые поверх неё работают. То есть раньше она поймав исключение обрабатывала его сама, а теперь, благодаря библиотеке, вызывает пользовательские обработчики.
Re[12]: Что вы предлагаете на замену эксепшенов?
От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
Дата: 24.11.05 15:14
Оценка: -1 :)))
Здравствуйте, Privalov, Вы писали:

СГ>> кандидату: 100% от нормы обычного человека, доктору: 500% — 1000% от нормы обычного человека академику, ну скажем, 20'000% от нормы....


P>Отлично. А сколько программисту от нормы обычного человека? А, кстати, обычному человеку?


Вы такие вопросы сложные задаёте, едва ли моих личных процентов от нормы хватит чтобы сообразить как ответить.
Хотя попробую. Дело в том что есть количественные (приблизительные) соотношения: на каждого 1 доктора приходится по 10 кандидатов, а на 1 академика приходится 10-20 докторов. Поскольку любой кандидат хочет стать доктором, и любой доктор хочет стать академиком, то отсюда заключаем, что докторами становятся люди которые в 10 раз умнее чем усреднённый кандидат; а академиками становятся люди которые в 10-20 раз умнее чем усреднённый доктор. Соотношения сильности умов между кандидатами и программистами на основании только лишь их количественных соотношений получить нельзя так не все программисты всенепременно хотят стать кандидатами.
Re[13]: Что вы предлагаете на замену эксепшенов?
От: Bigger Российская Империя  
Дата: 24.11.05 15:46
Оценка: :)))
Здравствуйте, Сергей Губанов, Вы писали:

СГ>Здравствуйте, Privalov, Вы писали:


СГ>>> кандидату: 100% от нормы обычного человека, доктору: 500% — 1000% от нормы обычного человека академику, ну скажем, 20'000% от нормы....


P>>Отлично. А сколько программисту от нормы обычного человека? А, кстати, обычному человеку?


СГ>Вы такие вопросы сложные задаёте, едва ли моих личных процентов от нормы хватит чтобы сообразить как ответить.

СГ>Хотя попробую. Дело в том что есть количественные (приблизительные) соотношения: на каждого 1 доктора приходится по 10 кандидатов, а на 1 академика приходится 10-20 докторов. Поскольку любой кандидат хочет стать доктором, и любой доктор хочет стать академиком, то отсюда заключаем, что докторами становятся люди которые в 10 раз умнее чем усреднённый кандидат; а академиками становятся люди которые в 10-20 раз умнее чем усреднённый доктор. Соотношения сильности умов между кандидатами и программистами на основании только лишь их количественных соотношений получить нельзя так не все программисты всенепременно хотят стать кандидатами.

Так и не все кандидаты могут стать программистами, ничего личного

Программист — это шаман..., подарите бубен!
Re[25]: Что вы предлагаете на замену эксепшенов?
От: Sergey J. A. Беларусь  
Дата: 24.11.05 16:01
Оценка:
Здравствуйте, Сергей Губанов, Вы писали:

СГ>Предлагаемая в статье библиотека ловли исключений расширяет среду времени исполнения. Так что, новая (расширенная) среда исполнения теперь умеет вызывать пользовательские обработчики исключений. Вообще, среда времени исполнения по любому умеет ловить системные (на машинном уровне) исключения не зависимо от того предоставляет ли она эту услугу тем программам которые поверх неё работают. То есть раньше она поймав исключение обрабатывала его сама, а теперь, благодаря библиотеке, вызывает пользовательские обработчики.


Ну вот и отлично. В рантайме поддержка исключений, а в язык введём синтаксические конструкции для удобства и что бы не было (подумайте только !!!) синтаксического оверхеда.

По сути, чем различается использование ф-ий рантайма и синтаксических конструкция языка ?
... << RSDN@Home 1.2.0 alpha rev. 619>>
Re[14]: Что вы предлагаете на замену эксепшенов?
От: Sergey J. A. Беларусь  
Дата: 24.11.05 16:06
Оценка: :)
Здравствуйте, Bigger, Вы писали:

B>Так и не все кандидаты могут стать программистами, ничего личного

Эт потому, что у мозгов кроме количественной характеристики есть ещё и тип. Тут приведение с трудом работает.
... << RSDN@Home 1.2.0 alpha rev. 619>>
Re[11]: А вот и нет
От: akrysan  
Дата: 24.11.05 16:25
Оценка: -1 :)
Здравствуйте, Сергей Губанов, Вы писали:

СГ>Здравствуйте, akasoft, Вы писали:


СГ>>>А то ведь, можно и так:
СГ>>>PROCEDURE Move (VAR src, dst, sum: REAL): BOOLEAN;
СГ>>>BEGIN
СГ>>>  IF src >= sum THEN
СГ>>>    src := src - sum;
СГ>>>    dst := dst + sum;
СГ>>>...
СГ>>>


A>>Ага! И полюбому зачисляем на счёт-приёмник сумму. Здорово. Все бы так уже богачами были.


СГ>Напоминаю синтаксис инструкции IF языков Modula/Oberon/Component Pascal:


СГ>IF ... THEN ... END

СГ>IF ... THEN ... ELSE ... END
СГ>IF ... THEN ... ELSIF ... THEN ... END
СГ>IF ... THEN ... ELSIF ... THEN ... ELSIF ... THEN ... END
СГ>...

СГ>т.е. в конце инструкции стоит END


А вот и нет в паскале только 1 оператор в модуле тоже
нужно писать BEGIN END
ві наверное на VB перепрограммировали.
Re[12]: А вот и нет
От: Курилка Россия http://kirya.narod.ru/
Дата: 24.11.05 16:36
Оценка: :)))
Здравствуйте, akrysan, Вы писали:

A>А вот и нет в паскале только 1 оператор в модуле тоже

A>нужно писать BEGIN END
A>ві наверное на VB перепрограммировали.

Ты не прав, паскаль и компонент паскаль — вещи разные, у Вирта целый зоопарк зверушек, каждая с похожей, но чуть другой мордочкой
Re[18]: Что вы предлагаете на замену эксепшенов?
От: eao197 Беларусь http://eao197.blogspot.com
Дата: 25.11.05 10:49
Оценка:
Здравствуйте, Mamut, Вы писали:

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


E>>Причем не важно, сигнализирует ли исключение об ошибке, исключительной ситуации или же исключения используются для реализации логики (бывают и такие ситуации, когда исключения удобнее чем if/elseif/else или switch/case).


M>Яркий пример — разбор ХМЛя многими библиотеками. Обычно достаточно знать, что ХМЛ невалидный и сразу завершить работу

M>В процессе эксплуатации оказалось, что ХМЛ в 99% случаев приходит валидный (так как я сам его и отсылаю ). Вопрос. Нафига мне там столько if-ов? Когда документ начинает расти, код читать становится неприятно.

Так то же можно, но я подразумевал другой вариант.
Вот попробую пофантазировать. Пусть, к примеру, есть функция для лексического анализа, которая возвращает токены CHAR, INTEGER, REAL, STRING и т.д. С некоторыми токенами должны быть связаны данные. Скажем, с CHAR -- символ, с INTEGER и REAL -- числовое значение, с STRING -- значение строки и т.д. Можно сделать это без исключений с помощью полиморфных классов:
class Token { public: int token() const = 0; ... };
class Char_Token : public Token { ... };
class Integer_Token : public Token { ... };
...

std::auto_ptr< Token >
get_token() { ... }

void
process()
    {
        while( true )
            {
                std::auto_ptr< Token > t = get_token();
                if( Char_Token::id == t->token() )
                    process_char( dynamic_cast< const Char_Token & >( *t ) );
                else if( Integer_Token::id == t->token() )
                    process_integer( dynamic_cast< const Integer_Token & >( *t ) );
                ...
            }
    }


А можно сделать так, чтобы get_token порождал исключения, где тип исключения был бы типом токена:
class Token : public std::exception { ... };
class Char_Token : public Token { ... };
class Integer_Token : public Token { ... };
...

void
get_token() { ... }

void
process()
    {
        while( true )
            {
                try { get_token(); }
                catch( const Char_Token & t ) { process_char( t ); }
                catch( const Integer_Token & t ) { process_integer( t ); }
                ...
            }
    }


Disclaimer. Сам именно таких приемов никогда не применял, но по жизни пару раз сталкивался с моментами, когда исключение выбрасывалось для изменения логики работы программы.
... << RSDN@Home 1.1.4 stable rev. 510>>


SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Re[19]: Что вы предлагаете на замену эксепшенов?
От: Bigger Российская Империя  
Дата: 25.11.05 11:54
Оценка:
Здравствуйте, eao197, Вы писали:
skip

E>Disclaimer. Сам именно таких приемов никогда не применял, но по жизни пару раз сталкивался с моментами, когда исключение выбрасывалось для изменения логики работы программы.


А вот это не есть хорошо, мухи от котлет должны быть отдельно, логика работы и логика обработки ошибок не одно и тоже.

Программист — это шаман..., подарите бубен!
Re[20]: Что вы предлагаете на замену эксепшенов?
От: eao197 Беларусь http://eao197.blogspot.com
Дата: 25.11.05 12:07
Оценка: +1
Здравствуйте, Bigger, Вы писали:

E>>Disclaimer. Сам именно таких приемов никогда не применял, но по жизни пару раз сталкивался с моментами, когда исключение выбрасывалось для изменения логики работы программы.


B>А вот это не есть хорошо, мухи от котлет должны быть отдельно, логика работы и логика обработки ошибок не одно и тоже.


"Исключение == ошибка" -- это догма, иногда вредная. Исключение -- это факт того, что что-то в программе идет не так, как ожидалось, но не обязательно из-за ошибки. Например, есть обработка транзакций от клиента. Одновременно может обрабатываться не более N транзакций, причем N довольно большое число и поросто так его не достичь (это возможно, например, в "часы пик" или когда транзакции начинают валиться после восстановления разрыва связи). Поэтому N+1 транзакции нужно корректно отказать со специфическим кодом возврата. Так же возможна ситуация, когда клиент повторяет транзакцию, не дождавшись от нас результата (не выдержал тайм-аут на своей стороне). Это так же не ошибка и повторый запрос нужно просто проигнорировать. И делается это приблизительно так:
try
    {
        // Нормальная обработка транзакции, расчитанная на обычные условия.
        ...
    }
catch( const too_much_trx_t & x )
    {
        // Обработка N+1 транзакции.
        ...
    }
catch( const repeated_trx_t & x )
    {
        // Обработка повторной транзакции.
        ...
    }
catch( const std::exception & x )
    {
        // А вот это уже действительно плохо!
        cleanup();
        initiate_shutdown();
    }


Ситуации, когда порождаются too_much_trx_t и repeated_trx_t -- это не ошибки, просто это исключительные ситуации для обычной обработки транзакций. Случаются они редко. А писать из-за них код в виде вложенных if-ов (как в первоначальном примере Mamut-а) -- получается плохочитабельно.
... << RSDN@Home 1.1.4 stable rev. 510>>


SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Re[17]: Что вы предлагаете на замену эксепшенов?
От: Nickolay Ch  
Дата: 25.11.05 12:17
Оценка: 1 (1) +1
К Вашему сведению, забор из if только усложняет чтение программы, возникает мешанина кода обрабатывающего ошибки, и кода логики.
Уже наверное писали(тут писали много и правильно), что исключения кроме всего прочего, позволяют локализовать обработку ошибок в одном месте.
Re[18]: Что вы предлагаете на замену эксепшенов?
От: eao197 Беларусь http://eao197.blogspot.com
Дата: 25.11.05 12:22
Оценка:
Здравствуйте, Nickolay Ch, Вы писали:

NC>К Вашему сведению, забор из if только усложняет чтение программы, возникает мешанина кода обрабатывающего ошибки, и кода логики.

NC>Уже наверное писали(тут писали много и правильно), что исключения кроме всего прочего, позволяют локализовать обработку ошибок в одном месте.

Более того, за счет использования иерархий классов исключений можно делать обработку сразу большой группы исключений (просто указав в catch имя базового класса исключения).
... << RSDN@Home 1.1.4 stable rev. 510>>


SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.