LINUX.ORG.RU
ФорумTalks

Прогеры, а вот что вы думаете.....?


0

0

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


Не прогер, но тем не менее: описание похоже на полиморфные вирусы.
Думаю, если бы были ещё области, где полиморфность необходима -
были бы и другие классы ПО с такими свойствами.

anonymous
()

На ассемблере таких много было. Особенно резидентных.

soomrack ★★★★★
()
Ответ на: комментарий от anonymous

Полиморфность вирусов (т.е самомодифицирование бинарного кода) нужна чтобы прятаться от антивирусов. А на практике... google -> генетические алгоритмы.

Deleted
()
Ответ на: комментарий от Deleted

Хм, а я причём? Вроде в курсе, зачем вирусам полиморфность.:-)

anonymous
()
Ответ на: комментарий от Deleted

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

Deleted
()
Ответ на: комментарий от Deleted

Насколько я понимаю, полиморфные вирусы никаких сбоев не вылавливают и своих узких мест не компенсируют. Полиморфный движок меняет программу, не изменяя её поведения, на уровне опкодов.

vsnb
()

реализемо. причём как правкой программой своего "тела", так и использование программой некоторого метаязыка, описывающего её поведение, которое очнь громко и пафосно можно назвать интеллектом.

asgard
()

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

Я так думаю -
Языки, на которых описываются алгоритмы, называются языками спецификации программ. А принципы языка - суть его синтаксис и семантика.
Т.е. тебе надо копать в сторону синтаксиса простых языков спецификаций.
Я год назад пробовал писать для исследования самомодифицирующихся программ систему команд виртуального процессора, но потом забросил это дело.

pacify ★★★★★
()

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

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

> программа должна вылавливать узкие места и компенсировать их...

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

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

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

bugmaker ★★★★☆
()
Ответ на: комментарий от bugmaker

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

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

alphex_kaanoken ★★★
()
Ответ на: комментарий от alphex_kaanoken

По-моему это легко делается на любом языке, где есть функция eval :)

Legioner ★★★★★
()

Это несложно сделать на любом языке, поддерживающим парадигму метапрограммирования (LISP, Tcl, Rebol, etc). Вопрос только ставить надо иначе : какую практическую задачу предполагается так решать ?

jtootf ★★★★★
()

>а вот что вы думаете.....?

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

robot12 ★★★★★
()
Ответ на: комментарий от alphex_kaanoken

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

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

фанатик, я в своём посте утверждал что-либо другое?

bugmaker ★★★★☆
()
Ответ на: комментарий от jtootf

Метопрограммирование тут мало поможет, нужны в первую очередь 1st class functions.

bugmaker ★★★★☆
()

>реализуемо ли в принципе

Реализуемо. Только выгоды мало - пока она себя оттестирует, эволюционирует и отладит.. Весь проц пожрет! И вааще, это скайнет какой-то, нафик терминаторов потом плодить.

>какие то базовые принципы работы....

самые базовые это прочесть файл, дождаться юзверьских телодвижений и модифицировать сей файл по какому-то принципу. То есть это мне так видится. Узкие места как оно будет искать? Переборкой алгоритмов? Если да, то это относительно просто. А если нет, то хрен его знает, стоит ли. Во всяком случае в живом мире для модификации нужна смерть и рождение. А для осуществления модификаций нужно хранилище информации о предыдущих мутациях, типа базы данных с разными версиями и их характеристиками. То есть если действительно самомодификация нужна. Или тогда научить программу программировать и компилить, и тестить. Киберджентушник?

manokur ★★
()

Если нужна fault tolerance система - то можно попытаться использовать Erlang. Сами принципы построения ПО на нём заставляют ориентировать архитектуру программы к разделению функционала на несколько независимых процессов, и при каком-либо сбое обрабатывается событие именно в этом процессе, заставляя его перезапуститься или сделать что-нибудь другое. Это некоторый аналог ексепшенов в других языках, но на мой взгляд, удобнее их.

Zmacs
()

Хотите перезаражать юниксы-линуксы? :) Тогда надо курить классический труд некого Alexander'a Bartolich'a. А дальше - генетические алгоритмы, фитнес-функции и уже прочую глубокую теорию, завещанную нам Профессором... И тогда Касперскому (точнее, жене Касперского, прийдется сворачивать свой бизнес)

Bioreactor ★★★★★
()

А что, твоя программа сильно глючит?

Глупости это. просто отказы тоже нужно планировать и правильно обрабатывать. Hint: программа "не знает" какое поведение считается правильным. Ей знать об этом нечем. Об этом знает пользователь, который делегирует своё знание программисту. И то, что проявляется как сбой - это сбой не программы, а сбой в системе пользователь-программист-реальный мир.

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

Про декларативные языки знаешь? Взять, скажем, язык prolog. Как всё красиво начинается - надо только описать зазавые понятия и связи между ними, а всё остальное сделается само... И чуть только непривиальная задача - оказывается необходимым представлять себе что делает с твоей программой runtime и привлекательный декларативный стиль превращается отягчённый синтаксисом prolog-а императивный, а работа по написанию, отладке и сопровождению - типа "гланды, автогеном, через ж?пу"

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

void main() { for(;;){} }

:)

anonymous
()
Ответ на: комментарий от anonymous

;))) Ухх..сколько мнений

На самом деле я не програмист...Так, для себя че то изучаю. Просто мне двано было интересно, почему программы до сих пор пишутся на основе четких алгоритмов и не используется нечеткая логика ( хотя бы:)....А то читаешь новость о выходе повой версии программы, а там на 1 новую фичу 10 багфиксов.

Sargan
() автор топика
Ответ на: комментарий от Sargan

> На самом деле я не програмист...Так, для себя че то изучаю.

А! тогда да. Тогда смотри внимательно - взгляд у тебя свежий, может что и найдёшь :)

> Просто мне двано было интересно, почему программы до сих пор пишутся на основе четких алгоритмов и не используется нечеткая логика ( хотя бы:)....

Где надо - используется и нечёткая логика. А так чтобы повсеместно - это ненужно. Вот учебное задание - написать программу решающую квадратное уравнение с применением нечёткой логики :)

> А то читаешь новость о выходе повой версии программы, а там на 1 новую фичу 10 багфиксов.

Да. "Программировать трудно. Программировать хорошо - очень трудно." Это цитата, книгу сам найдёшь :) Есть ещё такая шикарная тема для рассуждений, как доказательство правильности программ. Адептов почитать - так все наши беды от того что мы не доказываем программы когда их пишем. А как доходит до практики так оказывается что доказательство сложнее просто написания, и даже написание полной системы пред- и постусловий оказывается непростым делом. Не говоря уже о том, что человек равно может ошибится и при программировании, и при написании пред- и постусловий и при доказательстве.

anonymous
()

Ух!!! Хорошая идея - сделать аналог mspaint (хотя ладно, можно и bitmap), и подождать годик чтобы оно эволюционировало в фотошоп!

Orlangoor ★★★★★
()

а мне три закона робототехники вспомнились ...

cavia_porcellus ★★★★
()
Ответ на: комментарий от alphex_kaanoken

>с одной оговоркой - это не интеллект, а близкое к нему приближение.

Типа как у вендузятников?

Orlangoor ★★★★★
()
Ответ на: комментарий от anonymous

> Впрочем, если очень нужна программа, которая никогда не глючит и может годами работать без сбоев - на -

> void main() { for(;;){} }

Это плохая, глючная, негодная программа, не умеющая корректно обрабатывать SIGxxxx

anonymous
()
Ответ на: комментарий от anonymous

>> void main() { for(;;){} }

> Это плохая, глючная, негодная программа, не умеющая корректно обрабатывать SIGxxxx

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

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.