Войти в систему

Home
    - Создать дневник
    - Написать в дневник
       - Подробный режим

LJ.Rossia.org
    - Новости сайта
    - Общие настройки
    - Sitemap
    - Оплата
    - ljr-fif

Редактировать...
    - Настройки
    - Список друзей
    - Дневник
    - Картинки
    - Пароль
    - Вид дневника

Сообщества

Настроить S2

Помощь
    - Забыли пароль?
    - FAQ
    - Тех. поддержка



Пишет superhuman ([info]superhuman)
@ 2021-02-12 23:07:00


Previous Entry  Add to memories!  Tell a Friend!  Next Entry
0 - https://docs.racket-lang.org/reference/mzlib_class.html
1 - http://www.cs.utah.edu/plt/publications/aplas06-fff.pdf Scheme with Classes, Mixins, and Traits, 2006
2 - https://docs.racket-lang.org/guide/classes.html

Почитал доки про классы рэкета. Сравнил 2 источника: 1 и 2. Второе более свежее. Копипаста и пересечение процентов 90.

Только в первом: abstract, intro, Fig.1. Simplified PLT Scheme class system grammar, 2.7 Implementation of Classes, абзац в 3.3 Mixins, Augment, and Inner, переименован apply-trait в (trait->mixin), маленькие отличия в Fig.2. An example use of full-fledged traits, пара абзацев в конце 4.3 Inherit and Super in Traits, целиком 5 History and Experience и 6 Related Work on Classes in Scheme и 7 Related Work on Mixins and Traits.

Только во втором: заметка в начале 13.6 про define-member-name, 13.7.2 пример (mixin)-а, целиком 13.9 Class Contracts.

Мутновато написано про define-member-name, generate-member-key. Похоже на friend-стиль в си++, но используется и в (обобщённых) миксинах. Непонятно про бета-стиль наследования, нужно будет почитать по ссылке [19, 22].

Тяжело сравнивать плоский текст (скриббл) с pdf-ом. Дифф не переваривает пдф-ных ньюлайнов. Надо налабать тулзу, чтоб склеивать обратно абзацы в строку. Плюс переносы убирать. Плюс дефисы оставлять, NLP, однако.


(Добавить комментарий)


[info]iskramivpeople
2021-02-13 08:02 (ссылка)
> define-member-name
> generate-member-key

оно по не только для френд-стиля
может использоваться, а и для protected-стиля,
подробности тут
https://lists.racket-lang.org/users/archive/2008-February/023270.html

ну и вот этот метод тоже проясняет
(generate-member-key это враппер вокруг define-local-member-name):

https://docs.racket-lang.org/reference/createclass.html#%28form._%28%28lib._racket%2Fprivate%2Fclass-internal..rkt%29._define-local-member-name%29%29

Unless it appears as the top-level definition, binds each id so that, within the scope of the definition, each use of each id as an external name is resolved to a hidden name generated by the define-local-member-name declaration. Thus, methods, fields, and initialization arguments declared with such external-name ids are accessible only in the scope of the define-local-member-name declaration. As a top-level definition, define-local-member-name binds id to its symbolic form.

The binding introduced by define-local-member-name is a syntax binding that can be exported and imported with modules. Each evaluation of a define-local-member-name declaration generates a distinct hidden name (except as a top-level definition). The interface->method-names procedure does not expose hidden names.


типа как в джаваскрипте десять лет назад
писали var that = this; чтобы в замыкании нужного
предка отреференсить

все это, как водится, хаки для языков без
стройной концепции метапрограммирования

(Ответить) (Ветвь дискуссии)


[info]phantom
2021-02-13 21:33 (ссылка)
Ага, спасибо. В мейл-листе то же, что и по ссылкам. Вот, я материал изучил, но пока не совсем понимаю, как традиционный protected стиль сымитировать.

Ведь, если на основе лексического скопа, получается, всю иерархию классов придётся в один файл свалить?

В JS не разбираюсь, однако (и не хочу).

(Ответить) (Уровень выше)