В Идрисе один из базовых типов - String, внутри представленный как null-terminated C string. Знаете, как узнать длину такой строки? Сконвертить в список Char'ов, а потом посчитать его длину. А все потому, что хоть в рантайме идриса и есть нормальная функция вычисления длины (по-хорошему ее вообще стоило бы хранить, а не вычислять), в стандартную библиотеку ее забыли экспортнуть. У них там в академии своя атмосфера.
Page Summary
Style Credit
- Style: Neutral Good for Practicality by
Expand Cut Tags
No cut tags
no subject
Date: 2013-01-24 08:03 pm (UTC)А на длину потратить 1, 2, 4 или 8 байт?
Если бы тогда приняли решение хранить длину, то сейчас бы жили в мире, где поля ввода в програм ограничены 256-ю символами, и в JavaScript строки тоже были бы не длинее 256 символов. Так же как целочисленные числа по традиции ограничены 52-ю битами.
Возможно, что нам повезло с эффектом второго порядка - решение с null terminated было настолько ужасно, что слава богу сейчас не удержалось, а чуть менее ужасное с хранением длины в первом байте не завоевало мир.
no subject
Date: 2013-01-24 08:20 pm (UTC)И баснословно дорогим оно оказалось только в позднейшем контексте доминирования си в системном программировании.
Но вот авторам идриса все это было прекрасно известно и понять их решение невозможно.
"Возможно, что нам повезло с эффектом второго порядка - решение с null terminated было настолько ужасно, что слава богу сейчас не удержалось, а чуть менее ужасное с хранением длины в первом байте не завоевало мир."
Не удержалось? Си все еще на коне, самые распространенные ОС используют именно такие строки. Они еще нас переживут.
А хранение длины рулит не потому сколько байт, а потому что хранение. Да и с конвертацией проблем сущий мизер, ибо из строки с хранимой длиной длина отдельно и массив символов отдельно получаются за О(1).
no subject
Date: 2013-01-26 06:13 am (UTC)