metaclass: (Default)
metaclass ([personal profile] metaclass) wrote2011-09-19 08:14 pm

О конкатенации строк

Дано: мутабельная переменная максимально длиной 3 символа. В ней записано этих самых три символа и некий интерпретатор пытается выполнить следующую операцию:
a=a+'c'
само собой, падая с рунтайм-ошибкой.

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

[identity profile] aamonster.livejournal.com 2011-09-19 05:53 pm (UTC)(link)
Для полноты картины предлагаю сообщение об ошибке тоже ограничить 3 символами.

[identity profile] w00dy.livejournal.com 2011-09-19 06:28 pm (UTC)(link)
> если сначала выполняется конкатенация строк

Сначала должна выполняться проверка на границы. len (a) == 3, sizeof (a) == 3. 3 + 1 > 3 - наступает рунтиме еггог.

[identity profile] frotmnenogi.livejournal.com 2011-09-19 06:53 pm (UTC)(link)
может просто запретить конкатенацию при onPlace операции (или тех, что деградируют до неё) для настолько строго-типизированных исходных значений? И ошибка тогда будет TypeError какая-нибудь.
wizzard: (Default)

[personal profile] wizzard 2011-09-19 07:25 pm (UTC)(link)
InvalidCast string -> LimitedString

etc.

[identity profile] permea-kra.livejournal.com 2011-09-21 11:48 am (UTC)(link)
Может сделать таки строки иммутабельными на манер джавы, а в переменной хранить на эту строку ссылку ?

[identity profile] zamotivator.livejournal.com 2011-09-28 11:03 am (UTC)(link)
Что значит "показать причину этой ошибки"?
Edited 2011-09-28 11:03 (UTC)