Рефлексия и рефлексивное программирование.
- 09.02.14 г. –


Эта статья обусловлена обсуждением одного из фундаментальных положений диалектики, так или иначе применяемых в диалектическом программировании – рефлексии, которая, к тому же, постоянно вызывает вопросы, связанные с рефлексивным программированием.
   Поэтому было решено дополнить статью «Фундаментальные и базовые положения диалектического программирования» некоторыми положениями, касающимися рефлексии.


1. Предметные положения.


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

Сразу же следует сказать о том, что рефлексия в диалектическом программировании понимается согласно диалектической философии, а не согласно философским наукам. Это очень важное положение, так как еще Гегель указал, что обычно (в науках) рефлексия понимается субъективно!
   А в философских науках некоторых стран так вообще еще силен стереотип марксова и энгельсова понимания рефлексии, которые к ней относились негативно, указывая на её принципиальную ограниченность, как рассудочной категории, и на её неспособность проникнуть в существо предмета (поэтому – в силу принципиальной ограниченности такого понимания – и диалектический материализм был методологически очень ограничен, и для наук существенна проблема вещи в себе). Поэтому для философских наук этих стран понятие рефлексии остается вне понимания и, тем более, вне практического использования.
    При этом следует сказать и о том, что даже И.Кант, как писал Гегель, противопоставлял рефлектирующую силу суждения определяющей, в результате чего понимал и применял рефлективные позиции разрозненно, т.е. несоответственно рефлексии, её природе. Чего уж там говорить о материалистичных науках!

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

Актуально соотношение рефлексии с понимаемым в её обычном представлении рефлексивным программированием.
    Рефлексивное программирование предоставляет возможности, позволяющее получать сведения о типе данных – метаданные типа. При этом сам термин «рефлексивное» означает отражение, когда создаваемый объект особого класса («Туре») отражает (идентифицирует) задаваемый тип и возвращает (отражает) касающуюся его информацию.
    Иными словами, в рефлексивном программировании, по сути, якобы независимо получается и заново используется информация об объекте или его членах. Но фактически обрабатывается информация об известном.
    При использовании ресурсов рефлексивного программирования заранее должно быть известно имя типа (члена), т.е. должен быть известен, по сути, он сам, и даже при получении сведений о сборке должно быть известно имя исполняемого файла (.ехе), сборки, т.е. она сама.
    При этом как бы красиво не смотрелась обработка получаемой информации о сборке, – когда выявляются типы и их параметры, а затем они используются с новыми данными, не обрабатываемыми (не получаемыми) исходным программным кодом, – все равно нужно знать функции типов или их членов. Например, надо знать, что делают методы – те самые, количество и типы параметров которых устанавливаются за счет рефлексивного программирования. Ведь конкретные данные в абы какой метод с подходящими параметрами не вставишь: надо заранее знать, что в данной сборке есть именно тот метод, который нужен, и с требуемыми параметрами. То есть выявить параметры и другие метаданные недостаточно: важен алгоритм метода, а не его параметры, и, по сути, заранее должно быть известно наличие требуемого метода … метаданные которого устанавливает рефлексивное программирование. А установить его параметры – это дело десятое.
   Рассмотренный казус объясняется на основе знания обстоятельств рефлексии, понимаемой, конечно же, не как самонаблюдение, не как размышление о собственном психическом состоянии и не как там еще определяют её науки: эти определения к программированию никак не приставишь. А вот гегелевские идеи, развитые в современной диалектической философии, очень даже органичны программированию и разъясняют указанный казус.
    Однако самым критичным является случай, когда за отраженное принимают рефлектированную непосредственность, которая, по определению Гегеля, есть не что иное, как пустое определение непосредственности.

А что касается рефлексивного программирования, то в обсуждаемом случае дело не в том, что оно не может опосредовать алгоритм типа или его члена, что представляет собою суть вопроса, об этом уже сказано, а в том, что в нём неявным образом заложена концептуальная ошибка понимания отражения, которая усугубляется формой построения некоторых программных платформ (об этом еще будет разговор на сайте).
    Но главное – это неверное понимание рефлексии, откуда и пошло непосредственное применение отражения.

В диалектическом познании и в диалектическом программировании использование рефлексии в интересующем представлении происходит не только на основе правильного, гегелевского определения рефлексии, но и в смысле её конкретного аспекта, что, с одной стороны, учитывает и исключает обычно игнорируемое, но имеющееся, пустое определение непосредственности, и, с другой стороны, использует бытие выделяемого аспекта, т.е. имеется возможность опосредствовать реальные определения, или получить метасмыслы данных.
    Можно сказать, что рассматриваются не непосредственные определения бытия, до чего скатилась обычно понимаемая рефлексия и вместе с нею обычное программирование, а рефлектированные определения, которые существенны.
    Таким образом, в диалектическом программировании происходит выявление не метаданных типа, задаваемых при его программировании, как в рефлексивном программировании, причем без учета алгоритма (именно который, собственно, важен!), а существенных определений.

Итак, различие использования рефлексии в обычном программировании и в диалектическом программировании очевидно: в первом используются известные данные, а во втором происходит выявление существенных определений, новых для задачи, решаемой исходным кодом.


См. «Фундаментальные и базовые положения диалектического программирования».


2. Дискуссионная часть
[в рамках проекта ДИАЛЕКТИКА].

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

б. Для предметных дискуссий в рамках Академии диалектики и диалектической философии предоставляются ссылки на дополнительные материалы.

в. Вопросы, предложения, сообщения и т.д. можно присылать на сайт через Контакты, а также на различные вспомогательные и дополнительные ресурсы сайта.

г. Для новых пользователей и для новых ветвей обсуждений могут быть созданы дополнительные дискуссионные площадки; заявки и предложения присылать через Контакты.


3. Другие обсуждения: http://all-discussions.livejournal.com/52815.html.