LINUX.ORG.RU

[мысли вслух][оптимизация]Чтение кода и мозговой контекст

 ,


0

2

sup lorchan
На досуге я разрабатываю своя язык программирования. И вчера озадачился следующим вопросом.
У меня есть разные магические переменные: Self - текущий класс, _self - текущая функция и прочие. А вопрос вот какой. Эти мэджики сродни

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

★★★★

Последнее исправление: bga_ (всего исправлений: 1)

Ответ на: комментарий от trashymichael

ну мэджикам быть и юзаться везде или не быть а юзать явные имена. Первое заодно уменьшает диффы

bga_ ★★★★
() автор топика
Ответ на: комментарий от schizoid

копипаст на уровне мелких лямбд для которых нет смысла выдумывать имена типа #{ -> $ > PI }. $ - всегда первый аргумет функции. В этом есть что то перловское

bga_ ★★★★
() автор топика
Ответ на: комментарий от trashymichael

ну у меня не должно быть серого. Или черное или белое. Я не хочу давать пользователю выбор. Пусть лучше думает больше о предметной области нежели юзать меджики или нет.

bga_ ★★★★
() автор топика

>я разрабатываю своя язык программирования

Я бы рекомендовал поизучать русский.

KRoN73 ★★★★★
()
Ответ на: комментарий от trashymichael

ну суровый компилятор будет закидывать тебя ворнингами что ты не используешь Self а должен чтобы не зависить от имени декларируемого класса. Полезная связность так сказать.

bga_ ★★★★
() автор топика
Ответ на: комментарий от trashymichael

>а может лучше php ?

Я не уверен, что PHP — годное средство для формирования чёткого мышления.

KRoN73 ★★★★★
()
Ответ на: комментарий от bga_

но ворнингами же. вообще я плохо представляю такую ситуацию как и однозначный ее анализ суровым компилятором. слишком высокие материи %

trashymichael ★★★
()
Ответ на: комментарий от KRoN73

Я бы рекомендовал поизучать русский.

Чем он лучше Java?

Xenesz ★★★★
()

my guarded(#{ -> $ > 0 }) x

фуу

#{ -> $ > PI }

фффууу

Уже глазу неприятно. Нечитабельно. Похоже на K(J).

По-теме: для имени текущего класса/объекта/функции меджики хороши, очень удобно.

vladimir-vg ★★
()

И например я долго практиковал $ как первый агрумента для гуард функции

De Bruijn indexes?

Ещё можно вспомнить unlambda — там копипастить можно вовсе любую часть программы, так как переменных просто нет.

quasimoto ★★★★
()
Ответ на: комментарий от bga_

конкретно # как шоткат функции не нравится или -> как шоткат return ?

Ничего из. Всё вместе. Стиль неприятный. Например

(fn (x) (> x pi))

Нравится гораздо больше. Ну и сходу путаешь (пару мгновений) какой из знаков > используется как оператор, а какой указывает на конец списка аргументов.

vladimir-vg ★★
()
Ответ на: комментарий от bga_

хм. а если было бы => ? оно пожирее визуально хотя выглядит как импликация

Не знаю. Пофиг. Никому не нужен язык, у которого нет ничего кроме синтаксиса. А если что-то есть, то придумывать его — последнее дело.

Вообще круто в Smalltalk:

[ x | x > pi ]

Ничего ни с чем не путается, скобок минимум, по-моему идеальный синтаксис для лямбд.

vladimir-vg ★★
()
Ответ на: комментарий от vladimir-vg

ну тут я согласен. синтаксис любой можно прикрутить. но надо учитывать при создании его 10 параметров
1) близость к литературному инглишу(именно по этому у меня my guarded(...) x)
2) ортогональность
3) чтобы контекст был меньше (топик)
4) оптимизировать под стандартную US клаву для людей пишущих 1 пальцем (например при написании ref руки меньше всего летают)
5) чтобы мозг тратил меньше сил парся это те как можно меньше всяких эскейпов(поэтому я отказался от С эскейпов)
6) чтобы выражал семантику языка
7) чтобы был экспретисным (не own a my)
8) чтобы кейворды были <= 5 букв (http://en.wikipedia.org/wiki/Reading_(process))
9) чтобы было удобно с убогими автокомпилами (например const часто бывает в конце автокомплита и его лучше заменть на fix который обычно всегда единственен в автокомпилите, имена пользовательских функций редко начинаются с fix )
10) чтобы кейворды были максимально визуальны различны при распостраненных шрифтах (антипример - val и var в скале)

bga_ ★★★★
() автор топика

если на лоре обматерили, значит все правильно делаешь, будет успех

Sonsee
()
Ответ на: комментарий от bga_

>6) чтобы выражал семантику языка

что такое операционная семантика языка?
(это ответ на все вопросы)

dimon555 ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.