sup lorchan
На досуге я разрабатываю своя язык программирования. И вчера озадачился следующим вопросом.
У меня есть разные магические переменные: Self - текущий класс, _self - текущая функция и прочие. А вопрос вот какой. Эти мэджики сродни
my x {my x}
Моя цель исследовать насколько поддержка дополнительного контекста для мэджиков будет влиять на скорость понимания кода. Причем как в линейном ознакомительном чтении так и в более глубоком случайном чтении отдельных блоков. В линейном все проще потому что контекст меняется линейно. Выглядит как некий стек. Выход из блока - pop, вход - push. Вообще в мозге как я понимаю некое подобие ast кода. В более глубоком случайном чтении уже не все так просто. чтобы вспомнить что есть _self в конкретном месте надо подняться глазами до заголовка функции. Возможно в мозгу есть какой то короткоживущий ассоциативный кеш диапазона линий - значения _self но по своим ощущениям я понимаю что он достаточно маленький, на 1-3 слота.
Вот я и хочу понять насколько дорог это дополнительный процесс вспоминания/нахождения значений значений этих меджиков. Если я сэкономлю 10% времени работы мозга убрав эти мэджики то это уже результат. А может это и сущие копейки. Но нет у меня ни 2 подопытных групп кодеров чтобы замерить и не находил я литературы в интернете на эту тему а может и плохо искал. Но как я сказал уже убрав я лишусь удобного DRY хоть и временно.
К слову сказать явность тут возможно тоже плоха. Тут вступают обратные процессы. Теперь надо хранить 1 слот на текущую функцию и 1 на текущий класс но он уже явно назван. Те достаточно простого сравнения а не подъема глазами. И например я долго практиковал $ как первый агрумента для гуард функции
my guarded(#{ -> $ > 0 }) x
my guarded(#{ -> x > 0 }) x
Вобщем может мне кто посоветовать что почитать на эту тему, исследования какие, опыты, эксперементальные данные. Вдруг я и правда экономлю копейки.