June 18, 2020

очевидные нахуй вещи

Прототипы в JS

  • абсолютно изоморфны с другими объектами
  • ничем кроме объектов не являются
  • наследование реализовано посредством обычного поля в наследующем объекте
  • отсутствие любой типизации

Мета/синглтонклассы (например, в рубях)

  • не изоморфны другим объектам (имеют свой тип)
  • являются классами от которых можно наследоваться (от обычных объектов нельзя)
  • наследование реализовано под капотом нативными средствами языка
  • типизация

Лукап в JS

object.foo:
- check if object has field "foo"
- if not check if object.proto has field "foo"
- etc until proto == null

  • есть поле в мешке с полями, просто в некоторых полях так случилось что лежат функции
  • есть поле под прототип в котором лежит или не лежит другой объект
  • семантика элементарная, вся object model представляет из себя кучу хешмап которые связаны между собой в произвольном порядке

Лукап в рубях

object.foo
- send message "foo" to the object's singleton class
- if not handled check in class
- superclass etc

  • вызов метода это сигнал который может быть перехвачен не только одноименным полем/методом но и хуками из которых может быть отправлен другой сигнал или ответ
  • можно реализовать "прототипы" реализовав такой же объект как в жс с полем "прото" и реализовав method_missing хук который будет потом отправлять метод не дальше по инхеританс чейну а в "прототип"
    • Не поверишь, но можно реализовать подобную структуру на любом языке программирования
    • Не значит что в языке программирования есть "прототипы"
  • можно даже сделать микс-ин который добавит такой функционал в любой класс, хоть в BasicObject
  • с помощью метапрограммирования можно и не такого нахуевертить но все это требует тащить за собой кучу семантики и под капотом будет происходить всякая дичь

Такой лукап можно реализовать где угодно и концепт поиска метода и там и там
базируется на схожих концептах поэтому можно сказать что они близки "up to isomorphism"

Но это не делает синее красным, чувак. Ты сейчас звучишь, как долбоеб, выучивший слово "прототип" как на пикрелейтеде. Прототипы это вполне конкретный способ наследования и семантика стоящая за ним, то, что ты можешь ее сам накостылять не добавляет эту семантику в язык.

справа ты блядь

Если ты думаешь, что суп из хешмап вместо обджектмодели и жесткая модель с типами, классами и хуками это одно и то же, то подумай вот о чем:

Что прототипно-ориентированное, что объектно-ориентированное программирование это надстройка над структурным и недалеко ушло от C.
Вся разница в том, как резолвить идентефикаторы и где проводить границы неймспейсов.

Но люди зачем-то придумали для сортов говна разные слова.

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