вторник, 26 января 2010 г.

09.01.2003 - 09.01.2003 Page 17

Иван FXS 9 января, 19:37
Андрей Finder Плахов 9 января, 18:45
мы можем взять одну-единственную функцию и "воспитывать " только ее.
" " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " "
Как только мы изменили объект (например, "функцию "), - у нас сразу появляется ДВА его варианта: предыдущий и нынешний ...
И от того, что предыдущий мы сразу уничтожили, - ничего тут не меняется: значит он нам больше не нужен (например, мы просто НЕ УМЕЕМ извлекать "пользу " из его "повтороного " использования).
В любом случае: раз МЕНЯЕМ, значит работаем с (потенциально/конструктивно заданным) МНОЖЕСТВОМ реализаций ...
Да, генетика отличается от "просто " оптимизации тем, что в генетике СУЩЕСТВЕННО использование РАЗНЫХ предыдущих экземпляров.
(Например - скрещивание, но не только ... я бы даже сказал, что скрещивание - это БАНАЛЬНО!)
" " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " "
различные методики генетического программирования удобно и просто выражаются на таком языке
" " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " "
Андрей, к сожалению, я пока не понял, в чем заключается "такОвость ", революционная новизна предлагаемого Вами подхода.
НП, Иван FXS

--------------------------------------------------------------------------------
smollett 9 января, 19:40
2Андрей Finder Плахов
>а оперировать в основном функциями и операциями над ними (функторами).

Набор функции - суть интерфейс класса, в С++ абстрактный класс (в джаве встроен в язык я говорил Джава лучше - ща это шутка). Фиг с ними данные в классе все одно для ф-ии класса нужны. Будем классами оперировать через темплейты.

--------------------------------------------------------------------------------
Иван FXS < <что дальше, панымаэшь!> 9 января, 19:44
ZeNoN 9 января, 19:32
... в данном случае непонятно, с чего начать. Проблема не в самой модификации кода.
...
Но что дальше?
" " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " "
Да не "что дальше ", а "что СНАЧАЛА? "!
Сначала - задача должна быть ОСМЫСЛЕННАЯ (и представляющая ПРАКТИЧЕСКИЙ интерес), чтобы все обсуждаемое не было пустым эстетством!
НП, Иван FXS

--------------------------------------------------------------------------------
Андрей Finder Плахов 9 января, 19:49
Какие проблемы возникли?

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

А проблем вижу несколько. Во-первых, проблемы синтаксические. Прежде всего с описанием оператора (). Ведь нужно уметь не только вернуть выход при применении оператора () к вектору входа, но и также вернуть объект-функцию, если оператор () применяют к функции. Понятно, что template operator, но как ограничить множество допустимых аргументов этого шаблона только функциями и объектами-функциями с нужным return value size? С другими операторами проблем поменьше, но возни все равно много.

Хотя начинать, конечно, можно даже с такого "тупого " способа:
template class IFunc
{
float * operator()( float *entry );
template
IFunc * operator()( IFunc *entry )
{
...
}
}

Теперь дальше, мне все же больше нравится идея, что функтор(ы), по крайней мере простые, такие как сложение двух функций или применение одной к другой непосредственно оперируют с байт-кодом функций. Итоговая функа намного быстрее будет работать, чем создание кучи объектов, применение виртуальных функций, ля-ля-тополя...

--------------------------------------------------------------------------------
Андрей Finder Плахов 9 января, 19:58
>Андрей, к сожалению, я пока не понял, в
>чем заключается "такОвость ",
>революционная новизна предлагаемого Вами
>подхода.
>НП, Иван FXS

Хм, я, в отличие от многих не претендую на революционную новизну. Если это уже реализовано - замечательно. Если вы докажете мне, что это не нужно - я не буду обижаться или бить себя в грудь.

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

Как я бы сформулировал сверхзадачу: создание языка, на котором существующие удачные методики (различные виды ген.алгоритмов, нейронных сетей, ?...) могут быть сформулированы достаточно обобщенно и кратко. Тогда есть "ненулевая вероятность " того, что данный язык послужит созданию существенно более сложных конструкций.

--------------------------------------------------------------------------------
ZeNoN <2 Иван FXS> 9 января, 20:00
Ну да, ну да, идеи есть :)?

--------------------------------------------------------------------------------
Иван FXS < <что дальше, панымаэшь!> 9 января, 20:07
Мои "идеи " - в шапке.

--------------------------------------------------------------------------------
Андрей Finder Плахов 9 января, 20:09
2Иван FXS
В какой такой шапке? Бр-бр.

Еще, интересно было бы послушать Ваши комментарии на тему идеи "функторного языка ".

--------------------------------------------------------------------------------
Иван FXS < < <что дальше, панымаэшь!> 9 января, 20:21
Андрей Finder Плахов 9 января, 19:58
Сам подход: для создания интеллектуальных систем необходим язык, который позволял бы просто, синтаксически чисто и типобезопасно оперировать функциями и функторами приведенным выше способом.
" " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " "
Не могу сказать, насколько он (такой язык) "необходим " ... Возможно, он будет НЕСКОЛЬКО более удобен (эффективен?) ...

Но я бы сказал, что более важна РЕФЛЕКСИВНОСТЬ программ, - в том смысле, который заявлен в 6-м постере ленты http://bbs.vbstreets.ru/topic.asp?TOPIC_ID=5814
НП, Иван FXS

--------------------------------------------------------------------------------
Иван FXS <для тех, кто в танке: это - шапка! http://sourceforge.net/docman/?group_id=44107> 9 января, 20:24
^^^^^^^^^^^^^^^^^^^^^^^^

--------------------------------------------------------------------------------
Андрей Finder Плахов 9 января, 20:29
>Не могу сказать, насколько он (такой язык) "необходим "

А это, собственно, и есть самый спорный момент идеи. Поэтому предлагаю Вам написать побольше о том, как Вы видите развитие идей рефлексии. Рефлексия в том виде, как она понимается в dotnet, по-моему, слишком сильно привязана к понятию классов и объектов. Вообще, этот термин пока еще слишком расплывчатый.

Чем поможет знание программой своего кода? В каких целях Вы собираетесь его использовать? И т.п.

--------------------------------------------------------------------------------
smollett 9 января, 20:32
>Нет хорошего способа сделать функцию на C++, которой можно было бы сказать: "а ну-ка вот тебе другая функция, замени в ней циклы 'for' на while с итераторами ".

Ну типа по поводу хорошо плохо я не знаю. Но циклы менять дело пустое с функциональной точки зрения есть просто цикл. Усе воды иклов выражаются через базовый.

Есть еще одна очевидная проблема С++, это компилируемый язык а нам нужон интерпретируемый. Иначе принципиально невозможно менять ф-ии рантайм, ну разве что как вирус.
Вот джаваскрипт :) прелесть что такое.
Вопервых функция рассматривается как данные а во вторых есть прелестная операция eval - такого наворотить можна:)

--------------------------------------------------------------------------------
Андрей Finder Плахов 9 января, 20:37
Со своей стороны, могу пояснить, что отстаиваемые мной идеи могут быть релизованы при помощи рефлексии части кода с возможностью его динамического изменения.

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

--------------------------------------------------------------------------------
Иван FXS 9 января, 20:37
И еще - про "новые языки ": я ведь чайник, программист-любитель. Для меня МЕЧТАТЬ о НОВЫХ языках - абсолютно НЕАКТУАЛЬНО.
Выжимаю все, что можно (а также - что нельзя) из того, что имею:
http://bbs.vbstreets.ru//topic.asp?TOPIC_ID=3869
http://www.sql.ru/forum/actualthread.aspx?bid=22&tid=13069
(когда мне что-то надо - жму сразу на все "кнопки " ;-))

--------------------------------------------------------------------------------
ZeNoN <2 smollet> 9 января, 20:38
ну я об этом и говорил
eval в Java
exec в Paradox
ну и так далее
только не очень то удобно "воротить " программы в таком формате, в каком они сейчас

--------------------------------------------------------------------------------
Андрей Finder Плахов 9 января, 20:43
smollett
>Вот джаваскрипт :) прелесть что такое.

Мне платформа .Net все-таки больше нравится, т.к. не ограничиваешься одним языком. Но они обе не совсем то, чего нам хотелось бы: команды вирт. машины, и все средства работы с кодом (eval и т.п.) оперируют объектами. А eval к тому же ведь еще и парсит. Ну зачем нам динамически парсить-то? Оперировать надо байт-кодом, а не строками. Иначе смерть через торможение.

--------------------------------------------------------------------------------
smollett 9 января, 20:48
2ZeNoN

>только не очень то удобно "воротить " программы в таком формате, в каком они сейчас

Так неудобно или невозможно?

Ежели неудобно то можно потерпеть, оно ведь при удачном исходе шнобелевка светит :).

А ежели невозможно то в чем камень предкновени?

P.S. Правы были Шарден и Егоров (чет пропал) коллективный разум это огого.
А еще интереснонайти параметр от которогозависит активность этого форума.

--------------------------------------------------------------------------------
ZeNoN <2 smollet> 9 января, 20:53
о! неудобно, естественно. но в принципе возможно. или, если хотите, настолько неудобно, что в приемлемые сроки невозможно :)

--------------------------------------------------------------------------------
smollett 9 января, 20:55
2ZeNoN

>О!
Можете сформулировать вчем неудобство?
(конкретно, которое столько времени отбирает)

--------------------------------------------------------------------------------
Андрей Finder Плахов 9 января, 20:57
Так неудобно или невозможно?

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

С байт-кодом или intermediate language интереснее - его воротить можно (собственно, все оптимизации с ним и работают). Но это все пока какие-то очень простые операции. И обязательно только эквивалентные преобразования.

> еще интересно найти параметр от
> которого зависит активность этого форума

Предлагаю его сносную модель: random :))

--------------------------------------------------------------------------------
Иван FXS 9 января, 20:58
Э-эээх: "оперировать надо байт-кодом " - для этого ТОЧНО нужен ИИ!
А у нас, в деревне, - вместо этого ДОМОРОЩЕНЫЙ скрипт.
(((Ежели кто особо склонен к мазохизму, -образчик приведен в ветке
https://sourceforge.net/forum/forum.php? thread_id=727461&forum_id=207877 ,
на него выводит поиск по странице по ключевому "слову " On_iiType_GoTo )))
НП, Иван FXS
PS. К-ххх-ммм, что-то я сегодня нескромен ... слишком много линков надавал :-(

--------------------------------------------------------------------------------
Андрей Finder Плахов 9 января, 21:02
>Э-эээх: "оперировать надо байт-кодом " -
>для этого ТОЧНО нужен ИИ

Неет! Для этого нужен байт-код, специально для этого предназначенный! Т.е. байт код, в котором кроме информации о том, как его исполнять, содержится еще и информация о том, что в нем можно поменять. Звучит фантастично, но (как оказывается все круто-то!) концепция работы с обобщенными функциями и функторами это допускает. Только байт-код для такого языка будет довольно сильно отличаться от байт-кодов существующих.

--------------------------------------------------------------------------------
Nemo 9 января, 21:21
Вырисовывается вот какая реализация.

СОСТАВНЫЕ ЧАСТИ
Вот составные части "программы " на таком языке, как во время ее написания, так и во время выполнения: набор функций, функторов, и правил применения функторов.

ФУНКЦИЯ
Функция - это 1) байт-код, 2) список "заменяемых участков " (подмножеств кода), с указанием их типов, 3) указание, каков входной

ФУНКТОР
Функтор - операция над функциями, могущая сделать из них новую функцию. менять какие-то из "заменяемых участков "

ГЛАВНАЯ ФУНКЦИЯ
Одна из функций (главная) занимается тем, что переводит вход в выход. Она, точно так же, как и все остальные, может быть изменена функторами во время выполнения по заданным правилам.

ПРАВИЛА
Вообще говоря, правила также могут являться функциями и быть подвержены изменению. Однако, в принципе, правила могут быть и внешними event'ами, позволяющими человеку влиять на то, как устроены функции. Например, можно, обнаружив уже при выполнении программы, что ее выход иногда "зашкаливает " за допустимый порог, можно приказать программе отныне "применять " функции "приведения к значению внутри отрезка ".

--------------------------------------------------------------------------------
smollett 9 января, 21:22
Иван FXS
>что-то я сегодня нескромен ... слишком много линков надавал

Всегда бы так, все бы так.

2Андрей Finder Плахов
>Неет! Для этого нужен байт-код, специально для этого предназначенный! Т.е. байт код, в котором кроме информации о том, как его исполнять, содержится еще и информация о том, что в нем можно поменять.

Ага и еще как можно :), чуйствуете какой сложный синтаксис нужно в байткод впихнуть.

>intermediate language интереснее
что да то да

--------------------------------------------------------------------------------
Андрей Finder Плахов 9 января, 21:22
Так, во-первых, я не Nemo. Во-вторых, я не в точности такое сообщение посылал, тут половина съедена. Глюк форумной машины, что ли?

--------------------------------------------------------------------------------
Андрей Finder Плахов 9 января, 21:22
Я по новой, пожалуй, запостить попробую

--------------------------------------------------------------------------------
smollett 9 января, 21:25
Андрей Finder Плахов
>Так, во-первых, я не Nemo.

По стилю железно узнаваем :)))

--------------------------------------------------------------------------------
Андрей Finder Плахов 9 января, 21:27
Вырисовывается вот какая реализация.

СОСТАВНЫЕ ЧАСТИ
Вот составные части "программы " на таком языке, как во время ее написания, так и во время выполнения: набор функций, функторов, и правил применения функторов.

ФУНКЦИЯ
Функция - это 1) байт-код, 2) список "заменяемых участков " (подмножеств кода), с указанием их типов, 3) указание, каковы типы входа и выхода функции.

ФУНКТОР
Функтор - операция над функциями, могущая сделать из них новую функцию. Использует из функций информацию в пунктах 2) и 3), а информацию 1) (т.е. собственно байт-код) - только из "заменяемых участков " (как именно использует - будет понятно на примерах). Может "склеивать код " функций (как функторы "сложение С = А + В ", или "применение С = А(В) " ), менять какие-то из "заменяемых участков " и т.п.
Кроме того, функтор, конечно, меняет и информацию в 2) и 3) тоже. Например, функтор freeze может очистить 2).

ГЛАВНАЯ ФУНКЦИЯ
Одна из функций (главная) занимается тем, что переводит вход в выход. Она, точно так же, как и все остальные, может быть изменена функторами во время выполнения по заданным правилам.

ПРАВИЛА
Вообще говоря, правила также могут являться функциями и быть подвержены изменению. Однако, в принципе, правила могут быть и внешними event'ами, позволяющими человеку влиять на то, как устроены функции. Например, можно, обнаружив уже при выполнении программы, что ее выход иногда "зашкаливает " за допустимый порог, можно приказать программе отныне "применять " функции "приведения к значению внутри отрезка ".

--------------------------------------------------------------------------------
Андрей Finder Плахов 9 января, 21:36
ПРИМЕРЫ типов заменяемых участков:
1. "Я - число-параметр. Меняйте меня как хотите ".
2. "Я - число-параметр. Чтобы узнать, какова производная исходной функции по мне, запустите вот этот байт-код ".
3. "Я - на самом деле вызов одной из вот такого списка функций: ... "

ПРИМЕРЫ СТАНДАРТНЫХ ФУНКТОРОВ
1. Функтор A(B), где А, В - функции. Работает, грубо говоря, тупым слиянием байт-кодов: сначала код В, потом код А (конечно, не совсем так, но очень близко). Инфу о заменяемых участках сливает вместе. Для применения требует, чтобы тип, возвращаемый B, совпадал с входным для А. Тип преобразует понятно как.
2. Функтор freeze. Очищает информацию о заменяемых участках.

и т.п.

--------------------------------------------------------------------------------
Андрей Finder Плахов 9 января, 21:37
Эгей, я тут один остался?
Все убежали... Плохо.

:`-(

--------------------------------------------------------------------------------
Андрей Finder Плахов 9 января, 21:39
:``-(

Все, впал в депрессию и ушел.

--------------------------------------------------------------------------------
smollett 9 января, 21:42
Ну зря обиделся на самом деле мои посты не проходят

--------------------------------------------------------------------------------
smollett 9 января, 21:44
Что такое ФУНКТОР физически и кто его бежит?

--------------------------------------------------------------------------------
Андрей Finder Плахов 9 января, 21:58
Функтор - цельная операция над функциями и (возможно) дополнительными параметрами.

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

Физически это могут быть довольно разные вещи, например, стандартные функторы будут, скорее всего, С-функциями, или объектами с методом "применить меня к... ". Функторы, создаваемые пользователем языка, будут компилироваться в байт-код, но с некоторым бОльшим набором инструкций, некоторые из которых принципиально отсутствуют в байт-коде функций.

Что такое функтор физически, в общем, не так интересно. Вот что интересно, так это то, как синтаксически можно будет описывать user-defined functors? Без такой возможности все это останется игрушками.

--------------------------------------------------------------------------------
Андрей Finder Плахов 9 января, 22:02
>Кто его бежит?

Его запускает среда выполнения, согласно правилам применения функторов, описанным в программе. В принципе, не исключено, что применение функтора может быть вызвано и внутри какой-то функции.

Пойду я спать, наверное. Всем до завтра!

--------------------------------------------------------------------------------
Иван FXS 9 января, 22:13
Сорри, у меня закралось подозрение, что я не понимаю термина "байт-код " ... Что это такое?
Сначала я думал, что речь о содержимом тех ячеек оперативной памяти, в которых находится откомпилированная программа ...
Исполняемые коды (в отличие от данных, обрабатываемых программой) ...
Но теперь - что-то сомневаюсь ...
Растолкуйте, Андрей, - о чем именно речь?
НП, Иван FXS

--------------------------------------------------------------------------------
DrDrew 2 Andrei 9 января, 22:14
Что то вы, Sir, повадились рано лоgиться спать... а встаете когда...? У Ем.Jaroslavskogo несколко лет был заскок с буддизмом, живой водой и т.д. Ложился в 9 а вставал в 4 утра... и работал, работал, работал - а весь результат - книжечка в сто страниц

--------------------------------------------------------------------------------
smollett 9 января, 22:19
2Иван FXS
>Но теперь - что-то сомневаюсь ...

А че вас смутило?
И выще шо скажите за идею, мне пока нравится, хотя последние постинги Андрея я не совсем впитал.

--------------------------------------------------------------------------------
DrDrew 2 Smollett 9 января, 22:21
как вам ем.Ярославский - могучий старец?

--------------------------------------------------------------------------------
ZeNoN <2 smollet> 9 января, 22:28
да приводил я уже пример, чуть выше

--------------------------------------------------------------------------------
smollett 9 января, 22:32
2DrDrew
Не дочитал еще, но чем дальше тем интереснее, уже взял-бы свои прежни слова обратно :)

Мене сегодняшняя дискуссия оченно понравилась. Жаль ZeNoN отключился на самом интересном месте и Андрей заснул

--------------------------------------------------------------------------------
smollett 9 января, 22:36
2ZeNoN
Ищу пример, и не нахожу, че про идею Андрея думаете. Понятно что жутко продуктивно работать через байт код, но в принципе оно может работать?

--------------------------------------------------------------------------------
NO <контакт> 9 января, 22:37
Есть такое понятие - рефакторинг, это работа с исходником, когда меняется структура объектов, функциональность перераспределяется по функциям и т.п. И вроде как для ее автоматизации есть системы которые выполняют программу, ведут лог исполнения, затем специализированным датамайнигном в логе находят разные инварианты, правда очень примитивные и сами предлагают как программу переделать чтобы исходник яснее отражал то что реально происходит.

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

--------------------------------------------------------------------------------
DrDrew 2 Smollett 9 января, 22:38
в сказках про сп.красавицу - Елисей должон обьявиться...
А о чем вы как-бы жалеете - я что-то пропустил...
У меня на одном форуме шахид-смертник обьявился,на другом типа референт пути на, на третем не-земная красавица... совсем спать не с кем

--------------------------------------------------------------------------------
Иван FXS 9 января, 22:40
smollett 9 января, 22:19
А че вас смутило?
" " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " "
Дык, не знаю: ощущаю смутное смущение ощущений ;-)

" " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " "
выще шо скажите за идею
" " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " "
Которую именно: откомпилированый бинарный код runtime править? Это выше моего понимания!
Ведь код создает КОМПИЛЯТОР, который находится ЗА ПРЕДЕЛАМИ языка (и - среды) программирования ... Разве мы можем - сидя внутри этой среды программирования подготовить себя (= программу) к такому "святотатству "???
НП, Иван FXS

--------------------------------------------------------------------------------
smollett 9 января, 22:42
2DrDrew
>А о чем вы как-бы жалеете
А я высказался относительно вашего протеже: типа не ведает что творит.

--------------------------------------------------------------------------------
smollett 9 января, 22:47
2Иван FXS
>Ведь код создает КОМПИЛЯТОР, который находится ЗА ПРЕДЕЛАМИ языка (и - среды) программирования ... Разве мы можем - сидя внутри этой среды программирования подготовить себя (= программу) к такому "святотатству "???

Вот и я не въехал потому и спрашивал кто кого бежит, а еще Вы наверно знаете, направление довольно очевидное, должны быть наиболее известные разработки/исследования в этой области (не байт кода а динамической генерации поведения ) типа того что NO <контакт > запостил.

--------------------------------------------------------------------------------
Иван FXS 9 января, 22:49
NO 9 января, 22:37
... выполняют программу, ведут лог исполнения
" " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " "
Сорри, что такое "лог исполнения " полная запись последовательности изменения всех БИТОВ оперативной памяти?
Типа:
бит 1172612561256152 уставлен в 0
бит 3647364783647836 уставлен в 1
бит 2634627462376293 уставлен в 1
и т.д.?
НП, Иван FXS

--------------------------------------------------------------------------------
Иван FXS 9 января, 22:53
smollett 9 января, 22:47
а еще Вы наверно знаете, ..., должны быть наиболее известные разработки/исследования в этой области ...
" " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " "
Коллега, smollett, предполагать, что я что-либо знаю из "разработок/исследований " - очень опрометчиво! ;-)
Я все больше - по изобретению велосипедов специализируюсь ... ;-)))

--------------------------------------------------------------------------------
smollett 9 января, 23:02
>Я все больше - по изобретению велосипедов специализируюсь ... ;-)))

Дык я по их ходовым испытаниям спец :))

Комментариев нет:

Отправить комментарий