LINUX.ORG.RU

Прототипы — это не классы?:)

 , ,


0

1

Часто можно встретить такую вот бодягу, типа, в прототипном ООП нет классов, только прототипы. Это дает повод для спекуляций на тему того, что прототипное ООП чем-то уступает по мощности «классовому». А чем, собственно прототипы не классы? О чем вообще речь то ведется? Другое дело, что прототипы ничем не отличаются от объектов, кроме того, что имеют наследников. Никакой иной разницы тут нет.

Другое дело, что классовое ООП тут сосет, классы и объекты не имеют единого интерфейса, не имеют, так сказать, единого протокола, и это ведет к избыточности и ограничениям(выразительности).

Предлагаю, все таки, разобраться, раз и навсегда, отсутствие классов(на уровне сахара яп) — это баг, или фича?



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

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

И практически всё на это заточено

И кстати, говорить, что все на это заточено — тоже не правильно. Возможно, кто-то хочет, чтобы мы думали, что все заточено на это, но это не так. Вся эта ахинея с new и прочим говном, включая instanseOf — это просто тупой закос под жабу, это лишняя искуственная прослойка, которая вообще не нужна, она не является ядром семантики языка, если ее выкинуть, язык только выиграет от этого.

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

LOL, это бессмысленный базворд

Нет, в нем есть смысл.

только всегда будет первый X который должен быть реализован на Y:)

Да, но Y суть не имеет значения, так как свойства X определены в терминах X. Для бустрапа CLOS (вроде) используется какая-то мелкая объектная система, а затем ее примитивы выражаются через саму CLOS и собственно все) Я AMOP еще не прочитал, если что.

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

Нет, в нем есть смысл.

Я думаю, настоящий смысл этого массоны скрывают:)

Настоящий смысл в том, что когда ты пишешь на *языке* язык тебя обманывает. На самом деле, у тебя есть всегда абстрактная машина, которая принимает на вход данные. и данные эти — это вовсе не эти_ваши_структуры, а весь исходник. И суть программа — это не исходник, а абстрактная сущность, процесс, который происходит, и который мы никогда не видим, на самом деле, то что мы пишем, и называем кодом — это входная строка для абстрактного исполнителя, не более того. Вот об этом метациклический интерпретатор. А также о том, что метауровень ничем не отличается от обычного уровня. Реализация не важна, важна абстракция (нпр, мы пишем код на лиспе, и нам абсолютно вс равно, что находится под капотом, там может быть хоть лисп, хоть хаскель, хоть асм) Как-то так.

Для бустрапа CLOS (вроде) используется какая-то мелкая объектная система, а затем ее примитивы выражаются через саму CLOS и собственно все

Это, тащемта тоже ниочем. Когда мы определяем, скажем, пользовательскую функцию, мы точно также расширяем наш исполнитель. Это тоже касается абстракции исполнения. Эта функция могда быть на уровне исполнителя, но она, вот у нас на пользовательском уровне, при этом разницы, семантической, нет, концептуально. То есть, это обычное дело.

fuckYankee
() автор топика
Ответ на: комментарий от loz

А вообще, говорить о современных лиспах как о *лиспах* смешно. Лисп отличался от нелиспов тем, что код был деревом, доступным для парсинга и модификации в рантайме. Сейчас от этого остались одни скобочки, по факту мы имеем дело со скобчатыми алголами.

fuckYankee
() автор топика
Ответ на: комментарий от loz

И, в конечном счете, мы могли бы написать метациклический интерпретатор, например, вот таким вот образом

(print (eval (read)))
это, вполне законный метациклический интерпретатор. В этом во всем есть что-то абсурдное:)

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

(print (lambda()())) ;--> yobanayanevedomayahuynya

Очень даже ведомая:

* (print (lambda()()))

#<FUNCTION (LAMBDA ()) {100595A66B}>

Или чего ты хотел?

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

язык тебя обманывает

На самом деле не. На самом деле просто кто-то неуч.

Debasher ★★★★★
()

Почему шизофреник не в бане?

anonymous
()
Ответ на: комментарий от x3al

«Конструктор» ничерта ничего не создаёт. Объект создан до него.

Это верно для ES5, но не для ES6. В случае с классами, объект создаётся в базовом конструкторе, поэтому теперь возможно наследовать стандартные классы (Array и т.д.). В стандарте искать по [[Construct]].

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