(В заголовке - старинный каламбур про Ленина в ссылке.)
Короче говоря, дошёл до реализации сущностей, именуемых разными нехорошими словами - "указатели" самое безобидное из них. На сишные указатели лисповые похожи, но не совсем.
Вот, например, как мы делаем в Си, если хотим присвоить какой-то переменной какое-то значение:
int a = 2;Как это
(
Read more... )
чтобы получить адрес, надо еще применить операцию &
кроме массивов и функций где это необязательно
Reply
Reply
(в том смысле, что компилятору крайне желательно всё это знать и учитывать)
Reply
Reply
вот я об чем
а ты наверное об RTTI
Reply
Reply
Чтобы хранить runtime информацию надо как минимум ссылочку на инфу о переменной - то есть или просто адрес или индекс для поиска в неком контейнере.
Поэтому по-умолчанию память не расходуют. Но только по-умолчанию. Всегда можно включить - для того и существуют виртуальные методы класса. А также родное мелкомягкое RTTI.
Reply
Красиво и изящно пока не удалось.
Reply
Reply
вот даже и не знаю, почему не сделали - хотя б для тех переменных, для которых это константа
Reply
Reply
Ну или на каких-то кастомных, где мы можем выделить два бита под тэг к каждому указателю. Больше вроде не надо. Получается стройно и аккуратно, в теории: четыре типа указателей -- на "значение", на "список", на "символ" и просто "ссылка".
Значение хранит значение (спасибо, К.О.), список хранит список "чего-нибудь", символ хранит пару [ИМЯ."что-то"], "ссылка" косвенно указывает на "что-то".
Соотв., те сишные функции, которые должны работать с "чем-то", сначала извлекают тэг, и в соответствии с ним уже делают задуманное.
Reply
(SETF Z (CONS "A" "B"))
(SETF Z (CONS ( CDR Z ) (CAR Z) ) )
первая команда создаёт символ Z, в котором лежит пара ( "A" . "B" ), а второй вызов элегантно меняет местами элементы пары и записывает обратно. И оно работает!
Reply
Reply
Reply
Leave a comment