Re[9]: Нужны ли метаклассы????
От: Serginio1 СССР https://habrahabr.ru/users/serginio1/topics/
Дата: 12.03.04 10:41
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Дело в том, что он начитался споров о важности "виртуальных статических методов" (которые есть в Дельфи) и не может понять как рефлекшон в дотнете (да и не только) может жить без них.


VD>Ну, и естествнно, что при таком подходе в понятие "мета" вкладывается только матаданные в рантайме. Про то, что их можно исползовать и в других стадиях (дизайнтайм, компайлтайм) он просто не задумывлася.

Ты не прав в том, что рефлекшон как раз и устроен на метаклассе, но его не достаточные возможности в том, что он не использует наследование, а только переопределяет виртуальные методы Type.
В том числе и энную часть атирибутов можно выносить в метаклассы, если они будут использоваться во всей иерархии классов.
... << RSDN@Home 1.1.0 stable >>
и солнце б утром не вставало, когда бы не было меня
Re[5]: Нужны ли метаклассы????
От: Кодт Россия  
Дата: 14.03.04 23:19
Оценка:
Здравствуйте, Serginio1, Вы писали:

S>При введении понятия метакласса можно ввести директиву metaclass для полей и методов в том числе и для конструктора метакласса по умолчанию без параметров. И конструирование метакласса неотемлемо от типа как и объекта

S> Сам же метакласс наследуется от метакласса предка итд. А общим предком может быть Type.
S>Но у него не может быть метакласса что бы не было рекурсивности поэтому он необычный класс, в том числе и ссылка на него должна хранится в VMT для быстрого доступа к нему из объекта. И по всем вышеописанным причинам должен быть синглтоном.

В рекурсивной системе (например, Smalltalk) это выглядит так.

Пусть на вершине иерархии объектов находится класс Object.
Параллельно иерархии объектов существует иерархия метаклассов, возглавляемая классом Class. (Class — это метакласс Object).
Поскольку система рекурсивная, то Class имеет своё место в иерархии объектов. И, попросту, он является потомком Object.

Язык (C++, Delphi, Smalltalk) позволяет писать пользовательские классы — т.е. изменять структуру экземпляра.
Также можно писать пользовательские метаклассы (определять методы класса) (в С++ нет динамического полиморфизма в метаклассах).
Но метаклассы второго порядка уже недоступны для рукоделия.

Поэтому метакласс любого метакласса — это Class.
... << RSDN@Home 1.1.2 stable >>
Перекуём баги на фичи!
Re[6]: Нужны ли метаклассы????
От: Serginio1 СССР https://habrahabr.ru/users/serginio1/topics/
Дата: 15.03.04 11:53
Оценка:
Здравствуйте, Кодт, Вы писали:

К>Здравствуйте, Serginio1, Вы писали:


S>>При введении понятия метакласса можно ввести директиву metaclass для полей и методов в том числе и для конструктора метакласса по умолчанию без параметров. И конструирование метакласса неотемлемо от типа как и объекта

S>> Сам же метакласс наследуется от метакласса предка итд. А общим предком может быть Type.
S>>Но у него не может быть метакласса что бы не было рекурсивности поэтому он необычный класс, в том числе и ссылка на него должна хранится в VMT для быстрого доступа к нему из объекта. И по всем вышеописанным причинам должен быть синглтоном.

К>В рекурсивной системе (например, Smalltalk) это выглядит так.


К>Пусть на вершине иерархии объектов находится класс Object.

К>Параллельно иерархии объектов существует иерархия метаклассов, возглавляемая классом Class. (Class — это метакласс Object).
К>Поскольку система рекурсивная, то Class имеет своё место в иерархии объектов. И, попросту, он является потомком Object.

К>Язык (C++, Delphi, Smalltalk) позволяет писать пользовательские классы — т.е. изменять структуру экземпляра.

К>Также можно писать пользовательские метаклассы (определять методы класса) (в С++ нет динамического полиморфизма в метаклассах).
К>Но метаклассы второго порядка уже недоступны для рукоделия.

К>Поэтому метакласс любого метакласса — это Class.


Мы все об одном и том же только разными словами. Раз есть наследование метаклассов, то должна быть возможность и определения полей ,данных метакласса, т.к. он ничем не отличается от обычного объекта. И введение их в Net лично я считаю необходимо, поэтому и задал этот вопрос. Большинство отвечает: "зачем т.к. Type и рефлексии вполне хватает", я не согласен.
... << RSDN@Home 1.1.0 stable >>
и солнце б утром не вставало, когда бы не было меня
Re[7]: Нужны ли метаклассы????
От: _vovin http://www.pragmatic-architect.com
Дата: 15.03.04 12:28
Оценка:
Здравствуйте, Serginio1, Вы писали:

S>Здравствуйте, Кодт, Вы писали:


К>>В рекурсивной системе (например, Smalltalk) это выглядит так.


К>>Пусть на вершине иерархии объектов находится класс Object.

К>>Параллельно иерархии объектов существует иерархия метаклассов, возглавляемая классом Class. (Class — это метакласс Object).
К>>Поскольку система рекурсивная, то Class имеет своё место в иерархии объектов. И, попросту, он является потомком Object.

К>>Язык (C++, Delphi, Smalltalk) позволяет писать пользовательские классы — т.е. изменять структуру экземпляра.

К>>Также можно писать пользовательские метаклассы (определять методы класса) (в С++ нет динамического полиморфизма в метаклассах).
К>>Но метаклассы второго порядка уже недоступны для рукоделия.

К>>Поэтому метакласс любого метакласса — это Class.


S> Мы все об одном и том же только разными словами. Раз есть наследование метаклассов, то должна быть возможность и определения полей ,данных метакласса, т.к. он ничем не отличается от обычного объекта. И введение их в Net лично я считаю необходимо, поэтому и задал этот вопрос. Большинство отвечает: "зачем т.к. Type и рефлексии вполне хватает", я не согласен.


Ты правильно рассуждаешь.
Но такая логика действует, если действительно задаться целью создать целостную законченную объектную систему.
А .NET по всем признакам создавалась прежде всего как прагматичная система. Т.е. нужна фича — добавим фичу.
В итоге нет особых бонусов, возникающих как при использовании, например, системы с описанным рекурсивным дизайном.
Если угодно это "Фичиризм vs Полнота концепции".

--

Владимир.
Re[8]: Нужны ли метаклассы????
От: Serginio1 СССР https://habrahabr.ru/users/serginio1/topics/
Дата: 15.03.04 13:06
Оценка:
Здравствуйте, _vovin, Вы писали:

_>Здравствуйте, Serginio1, Вы писали:


S>>Здравствуйте, Кодт, Вы писали:


К>>>В рекурсивной системе (например, Smalltalk) это выглядит так.


К>>>Пусть на вершине иерархии объектов находится класс Object.

К>>>Параллельно иерархии объектов существует иерархия метаклассов, возглавляемая классом Class. (Class — это метакласс Object).
К>>>Поскольку система рекурсивная, то Class имеет своё место в иерархии объектов. И, попросту, он является потомком Object.

К>>>Язык (C++, Delphi, Smalltalk) позволяет писать пользовательские классы — т.е. изменять структуру экземпляра.

К>>>Также можно писать пользовательские метаклассы (определять методы класса) (в С++ нет динамического полиморфизма в метаклассах).
К>>>Но метаклассы второго порядка уже недоступны для рукоделия.

К>>>Поэтому метакласс любого метакласса — это Class.


S>> Мы все об одном и том же только разными словами. Раз есть наследование метаклассов, то должна быть возможность и определения полей ,данных метакласса, т.к. он ничем не отличается от обычного объекта. И введение их в Net лично я считаю необходимо, поэтому и задал этот вопрос. Большинство отвечает: "зачем т.к. Type и рефлексии вполне хватает", я не согласен.


_>Ты правильно рассуждаешь.

_>Но такая логика действует, если действительно задаться целью создать целостную законченную объектную систему.
_>А .NET по всем признакам создавалась прежде всего как прагматичная система. Т.е. нужна фича — добавим фичу.
_>В итоге нет особых бонусов, возникающих как при использовании, например, системы с описанным рекурсивным дизайном.
_>Если угодно это "Фичиризм vs Полнота концепции".

Интересно, что в Net одним из ее создателей считается Хэйлсберг, но в он же и создатель Delphi, а метаклассы в Delphi играют огромную роль и практически все завязано на них. Кроме того Net считается многоязыковой платформой и многие языки используют метаклассы.
Кстати раз видел проект помоему на Smalltalk for Net интересно было бы покапаться в Smalltalk коде через рефлектор. Может у тебя где нибудь есть ссылочка????
... << RSDN@Home 1.1.0 stable >>
и солнце б утром не вставало, когда бы не было меня
Re[9]: Нужны ли метаклассы????
От: _vovin http://www.pragmatic-architect.com
Дата: 15.03.04 13:42
Оценка:
Здравствуйте, Serginio1, Вы писали:

S> Интересно, что в Net одним из ее создателей считается Хэйлсберг, но в он же и создатель Delphi, а метаклассы в Delphi играют огромную роль и практически все завязано на них. Кроме того Net считается многоязыковой платформой и многие языки используют метаклассы.

S> Кстати раз видел проект помоему на Smalltalk for Net интересно было бы покапаться в Smalltalk коде через рефлектор. Может у тебя где нибудь есть ссылочка????

http://www.refactory.com/Software/SharpSmalltalk/
Думаю ничего особенно интересного ты там не увидишь.
На выходе все равно все тот же MSIL получается.

--

Владимир.
Re[9]: Нужны ли метаклассы????
От: INTP_mihoshi Россия  
Дата: 15.03.04 13:49
Оценка:
У меня складывается ощущение, что сейчас приходиться выбирать из двух крайностей.
Основная польза от классов ИМХО — возможность задания ограничений, т.е. программно декларировать методы работы с куском кода(класса), при выполнении которого он не рухнет.
И нам приходится выбирать из
1. "ОО" языки с ограничениями. Но там их слишком много и менять их нельзя.
2. "Не ОО" и "Истинно ОО" языки, что примерно одно и то же, — без ограничений. Smalltalk, Lua, прочие скриптовые языки. Другая крайность — можно все. Приходится проверять условия в Runtime, и т.д. и т.п.
Неужели не может быть языка с гибкостью на уровне smalltalk и с системой ограничений уровня c++/Java/Eiffel?
Re[10]: Нужны ли метаклассы????
От: Serginio1 СССР https://habrahabr.ru/users/serginio1/topics/
Дата: 15.03.04 14:32
Оценка:
Здравствуйте, _vovin, Вы писали:

_>Здравствуйте, Serginio1, Вы писали:


S>> Интересно, что в Net одним из ее создателей считается Хэйлсберг, но в он же и создатель Delphi, а метаклассы в Delphi играют огромную роль и практически все завязано на них. Кроме того Net считается многоязыковой платформой и многие языки используют метаклассы.

S>> Кстати раз видел проект помоему на Smalltalk for Net интересно было бы покапаться в Smalltalk коде через рефлектор. Может у тебя где нибудь есть ссылочка????

_>http://www.refactory.com/Software/SharpSmalltalk/

_>Думаю ничего особенно интересного ты там не увидишь.
_>На выходе все равно все тот же MSIL получается.
Ну не скажи достаточно сложная иерархия
например
public class Object class : Class
public class Class : Object
public class Object : Root$
public class Root$



public static Root$ DNU 1(Root$, Root$, MethodBase);

.maxstack 7
L_0000: ldarg.0
L_0001: ldsfld Smalltalk.Message
L_0006: ldarg.2
L_0007: callvirt MemberInfo.get_Name
L_000c: newobj String..ctor
L_0011: callvirt String.asSymbol
L_0016: ldc.i4.1
L_0017: newarr Root$
L_001c: dup
L_001d: ldc.i4.0
L_001e: ldarg.1
L_001f: stelem.ref
L_0020: newobj Array..ctor
L_0025: callvirt Root$.selector:arguments:
L_002a: callvirt Root$.doesNotUnderstand:
L_002f: ret
... << RSDN@Home 1.1.0 stable >>
и солнце б утром не вставало, когда бы не было меня
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.