strlen

Jan. 24th, 2013 09:23 pm
thedeemon: (office)
[personal profile] thedeemon
В Идрисе один из базовых типов - String, внутри представленный как null-terminated C string. Знаете, как узнать длину такой строки? Сконвертить в список Char'ов, а потом посчитать его длину. А все потому, что хоть в рантайме идриса и есть нормальная функция вычисления длины (по-хорошему ее вообще стоило бы хранить, а не вычислять), в стандартную библиотеку ее забыли экспортнуть. У них там в академии своя атмосфера.

Date: 2013-01-24 08:03 pm (UTC)
From: [identity profile] http://users.livejournal.com/_winnie/
А где хранить длину? Перед строкой или рядом с указателем?
А на длину потратить 1, 2, 4 или 8 байт?
Если бы тогда приняли решение хранить длину, то сейчас бы жили в мире, где поля ввода в програм ограничены 256-ю символами, и в JavaScript строки тоже были бы не длинее 256 символов. Так же как целочисленные числа по традиции ограничены 52-ю битами.

Возможно, что нам повезло с эффектом второго порядка - решение с null terminated было настолько ужасно, что слава богу сейчас не удержалось, а чуть менее ужасное с хранением длины в первом байте не завоевало мир.

Date: 2013-01-24 08:20 pm (UTC)
From: [identity profile] http://users.livejournal.com/leo_bonart_/
Так я не Кернигана с Ричи и Томпсоном ругаю - их решение не было ошибкой!
И баснословно дорогим оно оказалось только в позднейшем контексте доминирования си в системном программировании.
Но вот авторам идриса все это было прекрасно известно и понять их решение невозможно.
"Возможно, что нам повезло с эффектом второго порядка - решение с null terminated было настолько ужасно, что слава богу сейчас не удержалось, а чуть менее ужасное с хранением длины в первом байте не завоевало мир."
Не удержалось? Си все еще на коне, самые распространенные ОС используют именно такие строки. Они еще нас переживут.
А хранение длины рулит не потому сколько байт, а потому что хранение. Да и с конвертацией проблем сущий мизер, ибо из строки с хранимой длиной длина отдельно и массив символов отдельно получаются за О(1).

Date: 2013-01-26 06:13 am (UTC)
From: [identity profile] anatoly borodin (from livejournal.com)
Можно ж вместо длины хранить два указателя, begin и end. И хоть гигабайты между ними.

Profile

thedeemon: (Default)
Dmitry Popov

December 2025

S M T W T F S
 12 3456
789101112 13
14151617181920
21222324252627
28293031   

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Jan. 10th, 2026 06:32 am
Powered by Dreamwidth Studios