![]() |
Модераторы: Daevaorn |
![]() ![]() ![]() |
|
Killerman |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 137 Регистрация: 26.10.2007 Репутация: нет Всего: нет |
Можно ли както в программе на С++ преобразовывать вводимые данные в код а не в данные?
тоесть к примеру получаем из файла или из потока строку данных, к примеру: char x1* cin>>x1; // здесь вводим к примеру a1 ==15 а после этого идет условие if(x1){...........} как то так. или иначе. тоесть сделать чтото вроде динамического выполнения кода. На сколько я понимаю вопрос, то нельзя. Но может както можна? Это сообщение отредактировал(а) Killerman - 27.3.2009, 12:35 |
|||
|
||||
Fazil6 |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1653 Регистрация: 3.5.2006 Где: Минск Репутация: 35 Всего: 60 |
||||
|
||||
Killerman |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 137 Регистрация: 26.10.2007 Репутация: нет Всего: нет |
Грамматику создавать конечно выход, но это реализовывать очень долго. К тому же, на сколько я понимаю - это уже будет мой язык программирования, и явно - не уровня С++. А я именно его хочу (хотел) использовать.
всетаки какой ограниченный этот С++. Это сообщение отредактировал(а) Killerman - 27.3.2009, 12:57 |
|||
|
||||
GoldFinch |
|
|||
![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2141 Регистрация: 30.11.2008 Репутация: 15 Всего: 26 |
Killerman, напиши свою функцию eval() и выложи здесь
|
|||
|
||||
mes |
|
|||
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
можно проще, прикрути компилятор ![]() Если хотите использовать скрипты, то, например, lua , насколько я знаю, неплохо прикручивается к cpp и не только она. ![]() Добавлено через 2 минуты и 8 секунд и для разбора математических выражений также полно разных библиотек, спроси у Гугля, думаю он не откажет помочь в поиске ![]() |
|||
|
||||
zim22 |
|
|||
![]() depict1 ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2682 Регистрация: 15.1.2009 Где: Украина Репутация: 24 Всего: 69 |
Killerman, используйте JavaScript. В нём можно динамически генерировать код. С++ отдыхает.
![]() |
|||
|
||||
Killerman |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 137 Регистрация: 26.10.2007 Репутация: нет Всего: нет |
Ясно, скрипты. А есть чтото конкретное, чтобы привинтить к Вижуал Студии?
Мне нада к примеру в окне вводить строку, и чтобы она обрабатывалась потом в моей программе на С++. Или то - же самое, из текстового файла. или массива какого то в том же коде программы. |
|||
|
||||
Killerman |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 137 Регистрация: 26.10.2007 Репутация: нет Всего: нет |
Я прочел о Lua - это интерпретатор. Тоесть при каждом изменении кода - он как бы перекомпилирует код снова.
Получается, что если у меня скомпилирован exe файл на С++ (Вижуал Студия), то я уже не могу использовать Скрипты для изменения этого exe файла. Я к примеру не смогу изменить код функции в классе, (если эта функция уже скомпилирована) - без перекомпиляции exe файла в Вижуал Студии. |
|||
|
||||
mes |
|
|||
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
Если нужно, чтоб каждая строчка программы была подвержена изменениям, то Вам надо смотреть в сторону интерпретаторов, если же нужно позволить программе позволить "настраивать себя" скриптами, то вполне подойдет связка cpp+lua. Вы же упрекаете сковородку , в том что в ней неудобно варить суп - не забывайте, что у каждого из инструментов своя область применения. И в добавок немножко перефразирую для многих известную подпись одного из форумчан : "Правильно поставленная задача - это наполовину готовое решение" ![]() Это сообщение отредактировал(а) mes - 27.3.2009, 15:36 |
|||
|
||||
Killerman |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 137 Регистрация: 26.10.2007 Репутация: нет Всего: нет |
ну у меня задача была чтобы программа сама изменяла свои функции и сохраняла их в файле после этого. А потом опять загружала и изменяла. как бы - самосовершенствование.
![]() Но похоже прийдется придумать чтото попроще по задумке и сложнее по способу реализации. |
|||
|
||||
Anikmar |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2513 Регистрация: 26.11.2006 Где: Санкт-Петербург Репутация: 9 Всего: 59 |
Терминатора создаете? ![]() |
|||
|
||||
adejneka |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 105 Регистрация: 8.7.2005 Где: Москва, Россия Репутация: нет Всего: 11 |
Создаёте текстовый файл с текстом функции на С++, напускаете на него компилятор с указанием собрать DLL, затем подгружаете созданную DLL и вызываете из неё нужную функцию. Когда функция больше не нужна - DLL выгружаете. Пример - Embeddable Common LIsp. |
|||
|
||||
Lazin |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3820 Регистрация: 11.12.2006 Где: paranoid oil empi re Репутация: 41 Всего: 154 |
сначала программа сортирует массив пузырьком, потом вставками, спустя еще какое-то время - слиянием, спустя год - получает контроль над ядерными ракетами и начинает войну против людей! ![]() |
|||
|
||||
Killerman |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 137 Регистрация: 26.10.2007 Репутация: нет Всего: нет |
Какие вы впечатлительные.
![]() На самом деле, да, появилась идея разработать программу для самообучения. Но это такое мозгодолбание оказалось, даже для реализации простейших идей. Я и не подозревал. adejneka Да, но это типа подключение ДЛЛ и использование ее функций. А я хотел по ходу использования потом изменять эти функции. И что это будет за ИИ, с чужим интерпритатором на хвосте? ![]() На самом деле я тоже задумывался, что лучшей средой для работы ИИ есть интерпретатор, так как хоть как то код изменяется, а не как с компилятором - скомпилировал жесткий еxe или dll, и логику уже менять нельзя, или можно, но с помощью кучи разветвлений (условий), уже заранее предусмотренных в тексте (или своей же грамматики, но это - тот же интерпретатор, только свой). Это сообщение отредактировал(а) Killerman - 27.3.2009, 20:36 |
|||
|
||||
adejneka |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 105 Регистрация: 8.7.2005 Где: Москва, Россия Репутация: нет Всего: 11 |
Выгрузили DLL - обновили исходник - перекомпилировали - загрузили обновлённую версию. В чём проблема? Естественно, в языках, ориентированных на динамическое обновление кода, типа Lisp или Smalltalk это проще, но в C++ тоже можно реализовать.
|
|||
|
||||
Killerman |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 137 Регистрация: 26.10.2007 Репутация: нет Всего: нет |
adejneka,
Хотя это интересно - запускаем программу code.exe, в ней создается файл какой то, типа first.срр, потом "как то" запускаем его компиляцию и создаем first.dll Потом подключаем ее и используем, потом создаем second.срр уже с усовершенствованными функциями и компилим в second.dll. Отключаем от code.exe - first.dll , подключаем second.dll и т.д. Токо как компилить файл сpp с помощью параметров? как запустить приложение (Студию) я знаю, а как скомпилить потом нужный файл? Это сообщение отредактировал(а) Killerman - 27.3.2009, 20:48 |
|||
|
||||
Anikmar |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2513 Регистрация: 26.11.2006 Где: Санкт-Петербург Репутация: 9 Всего: 59 |
||||
|
||||
Killerman |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 137 Регистрация: 26.10.2007 Репутация: нет Всего: нет |
Представляю, Т-1000 с Мелкософтной Студией внутри
![]() ![]() "Это мой CPU, он способен к самообучению, но тумблер блокирован специльно, так как Студия шароварная" 8-)))) Это сообщение отредактировал(а) Killerman - 27.3.2009, 21:03 |
|||
|
||||
Anikmar |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2513 Регистрация: 26.11.2006 Где: Санкт-Петербург Репутация: 9 Всего: 59 |
||||
|
||||
Killerman |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 137 Регистрация: 26.10.2007 Репутация: нет Всего: нет |
Он бы так развился, что создал бы свой собственный компилятор.
![]() Вот облом, придется делать другим способом. |
|||
|
||||
0xDX |
|
|||
Новичок Профиль Группа: Участник Сообщений: 44 Регистрация: 6.2.2009 Репутация: нет Всего: нет |
C++ и генерация кода, это дажет новичок сможет
генерируем функцию таким образом
__asm nop будем задавать размер функции(__asm nop количество байт) берем наш код(который был создан динамически) транслируем в байты(как переводить в байты если кто не знает читает книгу двойных слов) получаем адрес функции, и просто копируем байты, послу чего устанавливаем регистр eip() ну вот и все. об установки регистра, можно выполнять код в другом потоке, так что просто банально делаем установку контекста потока. Не ну конечно полный новичок не справится........... |
|||
|
||||
mes |
|
|||
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
ну и где в вашем рассказе генерация машинного кода из исходного ? |
|||
|
||||
Lazin |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3820 Регистрация: 11.12.2006 Где: paranoid oil empi re Репутация: 41 Всего: 154 |
в с++ возможна геренация кода, в compile time, с помощью шаблонов и препроцессора
![]() К.О. |
|||
|
||||
Master01 |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 89 Регистрация: 22.8.2007 Репутация: 2 Всего: 2 |
вообще мне кажется здесь дело не в С++. а в том, что подход к ИИ и обучению абсолютно не правильный. Я не притендую на сколь бы то ни было серьёзные знания в этой области,
![]() мне кажется правельней было б сначала почитать про AI - неоронные сети, генетические алгоитмы, fuzzy logic и т.д. если уж делать, то делать правильно! ![]() |
|||
|
||||
Killerman |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 137 Регистрация: 26.10.2007 Репутация: нет Всего: нет |
Master01
нейронные сети читал - это туфта, ну это мое мнение. ![]() fuzzy logic читал (еже мягкие вычисления, нечеткая логика) - ну оно не является ядром ИИ а скорее как вспомагательное, для усреднения значений грубо говоря (плавного перехода). генетически алгоритмы - книг не читал, но так, пару статей - идея похожа на мою, но смысл другой. ![]() Вопще весело все это. Но покачто никто ИИ не сделал. ![]() Это сообщение отредактировал(а) Killerman - 31.3.2009, 17:57 |
|||
|
||||
Anikmar |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2513 Регистрация: 26.11.2006 Где: Санкт-Петербург Репутация: 9 Всего: 59 |
![]() Программу ИИ можно считать завершенной, как только комп будет сваливать свои ошибки на соседний компьютер и шутить шутками босса. ![]() |
|||
|
||||
semibug |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 323 Регистрация: 27.3.2009 Репутация: нет Всего: нет |
Так как программы писаные на C++ процессорами x86 (и похоже большинством остальных) не выполняются непосредственно, имеем два варианта:
1. Интерпретировать модифицируемый кусок программы. Как вариант заюзать что-нибудь из готовых решений (когда то, лет 5 назад, сталкивался, что-то вроде Embedded C++ Interpretor). 2. Превратить сишный код в код процессора. Можно конечно и вручную написать компилятор. Но лучше использовать готовый. От студии например. Как верно заметил adejneka удобнее всего при каждом изменении текста программы компилить DLL и затем использовать её. Если задача стоит только в вычислении выражений, представленных строками, то про эти два способа лучше не думать, а использовать готовые реализации eval(); Ну и самый лучший на мой взгляд вариант - пересмотреть архитектуру с тем, чтобы не требовалось изменений на уровне исходного текста. Накопление информации реализуется более простыми путями. ЗЫ. Чуть более сложный способ (только для экспертов 70-го уровня). Разрабатываем процессор, способный исполнять сишный код. Проще всего на большой ПЛИС типа Vertex, которую можно прикупить в виде PCI-E платы. Дальше пишем устройство проца на VHDL, и запускаем самомодифицируемые проги на c++ без использования внешних компиляторов/интерпретаторов/dll. |
|||
|
||||
![]() ![]() ![]() |
Правила форума "С++:Общие вопросы" | |
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |