Re[2]: Метатехнологии. Что есть? Что возможно?
От: limax Россия http://mem.ee
Дата: 03.03.03 12:11
Оценка:
Здравствуйте, Геннадий Васильев, Вы писали:

L>>==============8<===========================

L>>Цель: построить мета-язык описания любых процессов (в частности программирования, ввода-вывода), более сложные функции которого выражаются ТОЛЬКО через набор базовых.

ГВ>Язык программирования C++. Минимальная базовая семантика — даже операции ввода-вывода отсутствуют. Богатые средства комбинирования объектных семантик. Все сложные функции выражаются (кстати, не "выражаются", а создаются!) через набор базовых.


C++ несёт слишком много уточняющей информации, которая к программированию не относится, а относится к оптимизации. Я понимаю, можно конечно использовать сплошь и рядом огромные (и гибкие) объекты с метаструктурой на виртуальных функциях, но где взять компилятор, который всё это редуцирует? К тому же атомами там являются int-ы, char-ы и прочее, но не объекты. Я же хочу, чтобы МЕТАобъект был минимальной структурой, а int, char и прочая шалупонь являлись структурами построенными на основе атомов (включая свойства и операции).

L>>В UML такое отсутствует: сложные конструкции обрабатываются частным образом, а не с помощью базовых, отсюда — слишком много первоначальных определений (в машинном языке). К тому же чётко фиксированы мета-уровни: объект может быть экземпляром класса только соседнего уровня (3M->2M, 2M->Model, Model->Object).


ГВ>Дык! Потому-то и появляются разные "уровни", поскольку людям проще оперировать сложными семантиками, разбивая их на "уровни" или "срезы" или "схемы" и прочее. Реальные объекты вообще состоят из атомов и молекул с (обращаю твоё внимание) фиксированной семантикой. Кроме того, набор базовых символов UML — ИМХО, весьма перегруженная вещь и ты правильно заметил, что вместо цельных символов логично использовать именованные композиции. Ну так поди докажи это оболваненному COM-ом и прочей дребеденью миру?


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

L>>Т.е. атомарные конструкции должны быть способными описывать ЛЮБУЮ семантику, вплоть до квантовой.


ГВ>Ты поймал верную ниточку, а дальше размечтался и ушёл в неизвестность. Ну так выдели её из этого абзаца. Даю наводку — ты точно сформулировал её в последнем предложении.


Гы? И что же в этом предложении такого? Про глобальность или про кванты?

ГВ>А вот теперь прокомментирую твои мечтания. Мне они показались очень-очень интересными. И начну сразу с того, что ты ставишь исходную задачу весьма обобщённо, а посылки формулируешь в частных семантиках. Это — следствия.


L>>++(Features):


L>>* Время как координата? Лёгкая возможность добавления кода (захвата данных или подобного) в любое место уже написанного.


ГВ>Нет ничего проще! Текстовый редактор + шаловливые ручонки.


Текстовый редактор?! Ну добавил ты сохранение объекта в середину кода, чтобы использовать это значение потом. Затем изменил программу и использование значения стало не нужно. Появился неиспользуемый мусор, который нужно убирать вручную. Мне же нужнен "линк" в середину кода (и временной шкалы), который сам отваливается, когда больше не нужен.

Замечу, что я визуалист. Дальше объяснять?

L>>* Возможность вырождения в императивные, логические или чисто функциональные языки, путём ввода ограничений.


ГВ>В принципе, такая задача решаема, при выборе подходящего базиса, вопрос только в целесообразности её решения. Может быть, лучше сразу ассемблер генерировать и не кувыркаться?


Зачем ассемблер? Мне такое вырождение может и не пригодится, но люди не умеют пользоваться всем сразу, и обычно большие возможности становятся основным источником ошибок. Кстати, другого объяснения рождению новых, всё более убогих языков я не нахожу. Поэтому для ограждения программы от посягательств человека такие вырождения просто необходимы.

Простейший пример: чисто функциональный язык. Если разрешить изменение объектов после их создания, то весь замысел летит к чёрту.

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

L>>* ! Редукция алгоритмов! Пример: primes = filter prime [1..] редукция в решето Эратосфена.


ГВ>Угу, но прикинь себе нагруженность базовой системы базовыми же математическими аксиомами. А методы поиска по ним? Нет, в принципе можно перебирать всё-всё-всё в поисках наиболее подходящего, но критерии завершённости... с этим проблема...


Перебор — ну его к богу. Анализировать надо, а не перебирать. И анализировать не результат, а сам алгоритм. Не думаю, что это так уж невозможно, как принято считать.

L>>* Как следствие редукции алгоритмов: реоптимизация машинного кода переведённого в метасистему.


ГВ>Как там у Кнута — "Преждевременная оптимизация — источник..."


Это как раз не преждевременная. Реоптимизация готовых программ, не тобой написанных. Фактически: дизассемблирование -> анализ -> оптимизация -> компиляция. А вот любая программа на С++ — пример преждевременной (и неверной) оптимизации, т.к. чтобы вообще что-то написать, приходится описывать детали. Функциональные языки (в частности Haskell) мне тем и нравятся, что изначально описывается действие, а не его детали. Частично, конечно, но уже неплохо.

L>>* родная "компиляция" в ANSI С и ANSI С++, ну и во внутреннее представление (для метасистемы и симуляции)


ГВ>ИМХО, это — игрушки, поскольку C и C++ — инструментальные языки и никакой необходимости в генерации исходного кода на них — нет.


Я же сказал: компиляция! Не писать же компилятор для каждой системы отдельно? А так в С++ скомпилировал, а там пусть GCC мучается.

А не хочешь статически компилировать — есть внутреннее представление (или байт-код, если угодно), который используется интерпретатором/симулятором.

L>>* как можно более компактное (компактнее чем в тексте) и легко-понимаемое представление для человека, но при этом как можно более гибкое и мощное. Кстати, в UML наоборот, более громоздкое описание, по сравнению с текстом.


ГВ>Кстати, его более трудно сотоавлять, хотя и порой проще читать.


Угу. Вот и хочу, чтобы было легко "писать". Т.е. стоит подумать над интерфейсом вообще.

L>>* достойное представление динамики. В статической графике — опять ограничения и недостатки? В динамике — как это вообще может выглядеть? Источник: UML Action Semantics.


ГВ>UAS — это источник проблемы или чего?


Источник мысли. В UAS пока всё выглядит довольно убого. Интересно было бы взглянуть на будущий UML 2.0.

L>>* новые метатехнологии могут быть применены к существующим объектам. Пример: распараллеливание на кластерах для скорости, дублирование для надёжности и прочее, применительно к простому объекту, где ничего этого не планировалось. Источник: Oracle.


ГВ>Так, одна просьба убери слово "новые", оно уже у всем оскомину набило. Просто "новое" при нынешнем состоянии IT-отрасли часто ассоциируется с: "для идиотов, идидотичнее старых".


Новые не для нас, а для программы. Т.е. те, которые в данной программе/объекте не использовались и не подразумевались.

L>>* Изменяемая семантика. В других языках семантика фиксирована.

L>>NB! Можно ли сделать семантику тоже настраиваемую изнутри???? Получится полностью модифицируемый язык, способный вырождаться в обычные! Более того, получится система моделирования ЧЕГО УГОДНО. 8-)

ГВ>Которая никак абсолютно не будет работать.


Почему нет? С точки зрения семантики это будет выглядеть как цепочка семантик от версии №1 до N-ной, где каждая следующая использует предыдущую. Понятно, что на самом деле можно оставить всего одну базовую, но для внутреннего представления. Внешняя же будет изменяемой.

L>>* ? Объекты могут быть множественные, иметь несколько частей, т.е. связи могут образовываться с конкретной частью объекта, а не со всем объектом. Простейший пример: In-Out. В UML для этих целей используется тройка InputPin <- DataFlow -> OutputPin.


ГВ>Роковая ошибка. Я понимаю, хочется всего и сразу. Если объект имеет несколько частей, то зачем всё усложнять? Это же очень просто — объект состоит из нескольких объектов же. Вот и всё. Далее — см. агрегация, ассоциация и т.п.


Неважно. Я просто думал, с какой стороны ещё можно "превратить бетон в резину".

L>>* внутренняя файловая система — фактически объектная система.


ГВ>Так файловая или объектная? Термин "объект" может быть определён в рамках определения термина "файловая система", но вот наоборот...


А бог его знает. Объектная наверное. Для большей гибкости. Мне очень многого не хватает в сегодняшних файловых системах. Например: не древовидная, а графовидная структура каталогов;

L>>--(Features)


ГВ>А почему "--" ?


Это закрывающая скобка к ++()

L>>Цель: Каждый объект может изменять любой другой объект (любого мета-уровня!) или его связи. Как следствие — программа, ведущая себя как самомодифицирующаяся. После компиляции она может стать обычной статической, хотя умный компилятор должен уметь при необходимости делать и модифицирующуюся.


ГВ>Тогда этот компилятор практически ничего не должен делать, всё необходимое сделает сама программа.


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

L>>Наследование в С++ = безымянное включение члена класса.


ГВ>Обобщи эту посылку.


Т.е.? Просто пытался свести к минимуму различия между наследованием и включением, т.к. деление там не нужно. Предок в С++ — фактически член класса, только безымянный.

L>>Цель: в программировании (в частности) использовать структуры расширяющие, но не ограничивающие возможности дальнейшего использования. Ограничения должны вводится, когда они _НЕОБХОДИМЫ_.


ГВ>То есть, ограничение — это часть семантики структуры. А вернее — семантика структуры всегда автоматически обладает теми или иными ограничениями.


Угу. Но можно ведь подумать и над другими принципами? Развлекаюсь...
Эта мыслЯ у меня вытекла из идеи "программирование ограничениями". Т.е. описываешь что тебе нужно, а остальное — дело компа. Например сортировка состоит из одного постусловия: множество элементов такое же, но элементы распологаются в неубывающем порядке. Какой алгоритм применять, и применять ли вообще — пусть метасистема кумекает.

L>>Из физики: непрерывное число измерений — что это может быть? Объединение измерений? Аналогия с уровнями UML (3М, 2М, Модель, Объект) — уровни можно объединить, связи объектов оставить. Объект сможет стать экземпляром не соседнего (в оригинале), а любого уровня (3М -> Объект).


ГВ>А вот гонять с уровня на уровень, ИМХО, не стоит. Тогда уж проще вообще не вводить уровней абстракции как обязательной части системы. Не зацикливайся ты так на UML-ных структурах. На них свет клином не сошёлся. Пусть себе предлагает деления тем или иным способом.


Именно. Я уже рассказал про необязательное деление.

L>>Итого, изменяемые определения: синтаксис, семантика (!), передача управления (!!), строгость (!!!)


ГВ>Выглядит заманчиво, хотя на самом деле не всё так уж "золото на голубом".


Не забывай, что это не исследование, а случайные идеи.

L>>==============8<===========================


L>>Вот такие вот запросы, да?


ГВ>Нормальные запросы неиспорченного "индустриальым подходом" человека. Постарайся их логичнее изложить. Найдёшь и свои собственные противоречия и кучу бардака вокруг. И вообще — дерзай.


Сеньки.
Have fun: Win+M, Ctrl+A, Enter
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.