Здравствуйте, VladD2, Вы писали:
VD>Дело в том, что он начитался споров о важности "виртуальных статических методов" (которые есть в Дельфи) и не может понять как рефлекшон в дотнете (да и не только) может жить без них.
VD>Ну, и естествнно, что при таком подходе в понятие "мета" вкладывается только матаданные в рантайме. Про то, что их можно исползовать и в других стадиях (дизайнтайм, компайлтайм) он просто не задумывлася.
Ты не прав в том, что рефлекшон как раз и устроен на метаклассе, но его не достаточные возможности в том, что он не использует наследование, а только переопределяет виртуальные методы Type.
В том числе и энную часть атирибутов можно выносить в метаклассы, если они будут использоваться во всей иерархии классов.
... << RSDN@Home 1.1.0 stable >>
и солнце б утром не вставало, когда бы не было меня
Здравствуйте, Serginio1, Вы писали:
S>При введении понятия метакласса можно ввести директиву metaclass для полей и методов в том числе и для конструктора метакласса по умолчанию без параметров. И конструирование метакласса неотемлемо от типа как и объекта S> Сам же метакласс наследуется от метакласса предка итд. А общим предком может быть Type. S>Но у него не может быть метакласса что бы не было рекурсивности поэтому он необычный класс, в том числе и ссылка на него должна хранится в VMT для быстрого доступа к нему из объекта. И по всем вышеописанным причинам должен быть синглтоном.
В рекурсивной системе (например, Smalltalk) это выглядит так.
Пусть на вершине иерархии объектов находится класс Object.
Параллельно иерархии объектов существует иерархия метаклассов, возглавляемая классом Class. (Class — это метакласс Object).
Поскольку система рекурсивная, то Class имеет своё место в иерархии объектов. И, попросту, он является потомком Object.
Язык (C++, Delphi, Smalltalk) позволяет писать пользовательские классы — т.е. изменять структуру экземпляра.
Также можно писать пользовательские метаклассы (определять методы класса) (в С++ нет динамического полиморфизма в метаклассах).
Но метаклассы второго порядка уже недоступны для рукоделия.
Здравствуйте, Кодт, Вы писали:
К>Здравствуйте, 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 >>
и солнце б утром не вставало, когда бы не было меня
Здравствуйте, Serginio1, Вы писали:
S>Здравствуйте, Кодт, Вы писали:
К>>В рекурсивной системе (например, Smalltalk) это выглядит так.
К>>Пусть на вершине иерархии объектов находится класс Object. К>>Параллельно иерархии объектов существует иерархия метаклассов, возглавляемая классом Class. (Class — это метакласс Object). К>>Поскольку система рекурсивная, то Class имеет своё место в иерархии объектов. И, попросту, он является потомком Object.
К>>Язык (C++, Delphi, Smalltalk) позволяет писать пользовательские классы — т.е. изменять структуру экземпляра. К>>Также можно писать пользовательские метаклассы (определять методы класса) (в С++ нет динамического полиморфизма в метаклассах). К>>Но метаклассы второго порядка уже недоступны для рукоделия.
К>>Поэтому метакласс любого метакласса — это Class.
S> Мы все об одном и том же только разными словами. Раз есть наследование метаклассов, то должна быть возможность и определения полей ,данных метакласса, т.к. он ничем не отличается от обычного объекта. И введение их в Net лично я считаю необходимо, поэтому и задал этот вопрос. Большинство отвечает: "зачем т.к. Type и рефлексии вполне хватает", я не согласен.
Ты правильно рассуждаешь.
Но такая логика действует, если действительно задаться целью создать целостную законченную объектную систему.
А .NET по всем признакам создавалась прежде всего как прагматичная система. Т.е. нужна фича — добавим фичу.
В итоге нет особых бонусов, возникающих как при использовании, например, системы с описанным рекурсивным дизайном.
Если угодно это "Фичиризм vs Полнота концепции".
Здравствуйте, _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 >>
и солнце б утром не вставало, когда бы не было меня
Здравствуйте, Serginio1, Вы писали:
S> Интересно, что в Net одним из ее создателей считается Хэйлсберг, но в он же и создатель Delphi, а метаклассы в Delphi играют огромную роль и практически все завязано на них. Кроме того Net считается многоязыковой платформой и многие языки используют метаклассы. S> Кстати раз видел проект помоему на Smalltalk for Net интересно было бы покапаться в Smalltalk коде через рефлектор. Может у тебя где нибудь есть ссылочка????
У меня складывается ощущение, что сейчас приходиться выбирать из двух крайностей.
Основная польза от классов ИМХО — возможность задания ограничений, т.е. программно декларировать методы работы с куском кода(класса), при выполнении которого он не рухнет.
И нам приходится выбирать из
1. "ОО" языки с ограничениями. Но там их слишком много и менять их нельзя.
2. "Не ОО" и "Истинно ОО" языки, что примерно одно и то же, — без ограничений. Smalltalk, Lua, прочие скриптовые языки. Другая крайность — можно все. Приходится проверять условия в Runtime, и т.д. и т.п.
Неужели не может быть языка с гибкостью на уровне smalltalk и с системой ограничений уровня c++/Java/Eiffel?
Здравствуйте, _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);