2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




Начать новую тему Ответить на тему На страницу Пред.  1, 2, 3, 4, 5  След.
 
 Re: Программирование только с помощью for
Сообщение26.07.2012, 18:13 


06/07/11
192
Дело в том, что Профессор запрещает использовать рекурсию в коде программы и в то же время, утверждает, что интерпретатор команд (соответственно, компилятор) не может быть написан на одних только «разрешенных» циклах:
Профессор Снэйп в сообщении #597893 писал(а):
Рекурсии не должно быть в исходной программе. А в программе, создаваемой из этой исходной программы, рекурсия допустима. Это нам никак не навредит, поскольку корректно работающий интерпритатор всё равно невозможно написать разрешёнными средствами.

Вообще-то исходной программой является не код на Delphi, С++ и т.д., а именно откомпилированный код, даже не ассемблер, а машинные коды процессора. Эти коды по определению используют «запрещенные» методы.
Соответственно, вопрос сводится к следующему: любой ли код на Delphi, С++ и т.д., с указанными ограничениями (без repeat,goto,while, рекурсии), всегда переводится в машинные коды «правильно», так, чтобы не образовывалось «запрещенных» циклов.
Т.е. это вопрос о «совершенстве» интерпретатора(компилятора).
Существует ли такой код, который при подаче на данный компилятор, так преобразуется в машинные коды, что их исполнение вызовет зависание программы (бесконечный цикл).
Мне очевидно, что такой код существует. Причина именно в том, что исходный машинный код всегда содержит в себе «запрещенные» команды. Если бы процессор не поддерживал такие «запрещенные» команды бесконечного цикла, его можно было бы выбрасывать после каждого «исполнения» какой-либо программы.
Т.е. в самом исходном понятии алгоритма уже заложена "запрещенная" бесконечная повторяемость.

Что касается рекурсии.
Зная, как компилятор преобразует код на Delphi в «исходный код» и по каким адресам размещает его в памяти, внутри самой процедуры можно получить доступ к определенной части собственного кода и изменить ее.
Утрированный пример (в предположении, что команды Delphi и есть машинные коды):
procedure Example;
var x,y:integer; str:string;
begin
x:=GetAddress (Example); получили абсолютный адрес кода процедуры Example;
str:=Read(x+8,3); прочитали восьмую строку кода, начиная с третьего символа ;
str:=IntToStr(StrToInt(str)+1); изменили восьмую строку кода с третьего символа;
Write (x+8,3); записали измененный код на место;
N:=0; - это и есть восьмая строка кода, а меняться будет 0 на 1, 1 на 2 и т.д.
Example; вызываем уже измененную процедуру Example, можно обозначить ее Example1.
End; конец.
Для тех, кто не в танке, ясно, что это не рекурсия, т.к. строго формально, рекурсия - это цикличный вызов той же самой процедуры.
А здесь, хоть исполняемая процедура и имеет то же имя, как и рекурсивная (кстати, можно и имя каждый раз менять), фактически это уже другая процедура, т.к. команды 'N:=0' в ней уже нет, а есть команда 'N:=1', а, как известно, процедуры содержащие разные команды, считаются разными.

 Профиль  
                  
 
 Re: Программирование только с помощью for
Сообщение26.07.2012, 18:58 
Заморожен
Аватара пользователя


18/12/07
8774
Новосибирск
Lukin в сообщении #599685 писал(а):
Вообще-то исходной программой является не код на Delphi, С++ и т.д., а именно откомпилированный код, даже не ассемблер, а машинные коды процессора.

Не, ну у меня под исходной программой понимался именно код на Дельфи, Си и т. п.

Почему это Вы опустились всего лишь до машинных кодов процессора? А дальше? На микрокоманды внутри самого процессора не хотите перейти? Или ещё дальше: рассматривать движение электронов в pnp-переходах в кристалле процессора? :-)

 Профиль  
                  
 
 Re: Программирование только с помощью for
Сообщение26.07.2012, 19:24 


06/07/11
192
Профессор Снэйп в сообщении #599709 писал(а):
Не, ну у меня под исходной программой понимался именно код на Дельфи, Си и т. п.
Почему это Вы опустились всего лишь до машинных кодов процессора? А дальше? На микрокоманды внутри самого процессора не хотите перейти? Или ещё дальше: рассматривать движение электронов в pnp-переходах в кристалле процессора? :-)

Если угодно, можно "опуститься" до "переходов" в чьей-то голове (не принимайте, как личное :-) )
Уверен, что они содержат "запрещенные" Вами команды.
Поэтому вопрос о "компиляции" упирается в принятые в этой голове аксиомы.

 Профиль  
                  
 
 Re: Программирование только с помощью for
Сообщение20.08.2012, 09:32 
Аватара пользователя


22/12/10
264
Тут статью подкинули на близкую тему: http://blog.sigfpe.com/2007/07/data-and-codata.html

 Профиль  
                  
 
 Re: Программирование только с помощью for
Сообщение20.08.2012, 11:11 


06/07/11
192
Oh...time for a quick rant. Over the years I've seen a few people argue that there's something fundamentally wrong with the notion of the algorithm because it doesn't apply to the kind of open-ended loop we see in operating systems and interactive applications. Some have even gone further to suggest that somehow mathematics and computer science are fundamentally different because mathematics can't seek to describe these kinds of open-ended phenomena. As I've tried to show above, not only are there nice ways to look at open-ended computations, but from a mathematical perspective they are precisely dual, in the category theoretical sense, to terminating computations. It may be true that mathematicians sometimes spend more time with things, and computer scientists with cothings. But this really isn't such a big difference and the same langiage can be used to talk about both.

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

 Профиль  
                  
 
 Re: Программирование только с помощью for
Сообщение20.08.2012, 13:39 


23/12/07
1763
Portnov
Спасибо, интересная заметка, проливающая некоторый свет на интересующий и меня вопрос о неспособности классического определения алгоритма охватить программы наподобие операционных систем.

 Профиль  
                  
 
 Re: Программирование только с помощью for
Сообщение21.08.2012, 14:21 
Заморожен
Аватара пользователя


18/12/07
8774
Новосибирск
_hum_ в сообщении #608037 писал(а):
Portnov
Спасибо, интересная заметка, проливающая некоторый свет на интересующий и меня вопрос о неспособности классического определения алгоритма охватить программы наподобие операционных систем.

А вот программа для машины Тьюринга, вычисляющая универсальную функцию, чем не операционная система?

 Профиль  
                  
 
 Re: Программирование только с помощью for
Сообщение22.08.2012, 15:31 


23/12/07
1763
Профессор Снэйп в сообщении #608547 писал(а):
_hum_ в сообщении #608037 писал(а):
Portnov
Спасибо, интересная заметка, проливающая некоторый свет на интересующий и меня вопрос о неспособности классического определения алгоритма охватить программы наподобие операционных систем.

А вот программа для машины Тьюринга, вычисляющая универсальную функцию, чем не операционная система?

Тем, что не может описать работу операционной системы, а именно, взаимодействие с внешним окружением в процессе своей работы. Чтобы это можно было сделать, надо было бы допустить возможность менять сторонним наблюдателем содержимого ленты в процессе работы машины.

А общая проблема такова. Как я уже указывал ранее, в самой теории алгоритмов (computability theory) нет понятия времени - алгоритм либо сразу вычисляет значение, либо никогда (является неприменимым к исходному данному). И с этой точки зрения операционная система - это скорее алгоритм, который неприменим ни к какому исходному данному, так как она никогда не заканчивает работу. Но понятно же, что это не полностью соответствует действительности, поскольку ОС все же дает результаты.
Вот и стоит вопрос, как же видоизменить представление об алгоритме, чтобы и работа ОС под него попала.

 Профиль  
                  
 
 Re: Программирование только с помощью for
Сообщение22.08.2012, 19:29 


22/01/11
309
_hum_ в сообщении #609055 писал(а):
Тем, что не может описать работу операционной системы, а именно, взаимодействие с внешним окружением в процессе своей работы. Чтобы это можно было сделать, надо было бы допустить возможность менять сторонним наблюдателем содержимого ленты в процессе работы машины.


Но на ленте уже все написано заранее.

_hum_ в сообщении #609055 писал(а):
А общая проблема такова. Как я уже указывал ранее, в самой теории алгоритмов (computability theory) нет понятия времени - алгоритм либо сразу вычисляет значение, либо никогда


Да что вы говорите :D :D :D Нет понятия ВРЕМЕНИ, в теории алгоритмов, о ужас. Вы ее изучали хорошо?

Цитата:
Вот и стоит вопрос, как же видоизменить представление об алгоритме, чтобы и работа ОС под него попала.


А зачем это нужно делать? Бритва Оккама режет такие построения :D

 Профиль  
                  
 
 Re: Программирование только с помощью for
Сообщение22.08.2012, 19:40 
Заморожен
Аватара пользователя


18/12/07
8774
Новосибирск
_hum_ в сообщении #609055 писал(а):
Как я уже указывал ранее, в самой теории алгоритмов (computability theory) нет понятия времени...

Я Вам уже писал, что Вы крайне безграмотны в теории вычислимости. И ещё раз напишу.

В чистой теории вычислимости есть много конструкций, в которых фигурируют фразы "вычисленное значение на шаге $t$", "множество перечисленных к шагу $t$ элементов" и т. п. Не говорите о том, чего не знаете!

 Профиль  
                  
 
 Re: Программирование только с помощью for
Сообщение22.08.2012, 21:13 


23/12/07
1763
Профессор Снэйп в сообщении #609183 писал(а):
_hum_ в сообщении #609055 писал(а):
Как я уже указывал ранее, в самой теории алгоритмов (computability theory) нет понятия времени...

Я Вам уже писал, что Вы крайне безграмотны в теории вычислимости. И ещё раз напишу.

В чистой теории вычислимости есть много конструкций, в которых фигурируют фразы "вычисленное значение на шаге $t$", "множество перечисленных к шагу $t$ элементов" и т. п. Не говорите о том, чего не знаете!

Давайте так: вы согласны с тем, что в computability theory рассматриваются результаты, которые не зависят от формы представления алгоритма? Если да, то рассмотрите представление алгоритма в виде рекурсивной функции и ответьте, где там задается схема пошагового выполнения? Правильно, нигде - вычисление такой функции может вестись разными способами. А если нет конкретной схемы, то значит и нет возможности однозначно определить понятие "время работы алгоритма" в рамках computability theory . Именно это я имел в виду под "отсутствием времени" в этой теории. (Вот в computational complexity theory, в которой уже интересуются конкретными схемами вычислений, это понятие уже можно ввести).

 Профиль  
                  
 
 Re: Программирование только с помощью for
Сообщение22.08.2012, 21:22 


22/01/11
309
_hum_ в сообщении #609235 писал(а):
Если да, то рассмотрите представление алгоритма в виде рекурсивной функции и ответьте, где там задается схема пошагового выполнения?


Но в операторе рекурсии она ЗАДАЕТСЯ волей не волей :D

_hum_

Вы говорите "есть проблема", можно узнать в чем она состоит? То что вы сравниваете значки на листе бумаги (рекурсивная функция) в отрыве от ее вычисления, да еще и в отрыве от времени с целой ОПЕРАЦИОННОЙ СИСТЕМОЙ - это по меньшей мере странно.

 Профиль  
                  
 
 Re: Программирование только с помощью for
Сообщение22.08.2012, 22:36 


23/12/07
1763
Esp_ в сообщении #609173 писал(а):
Но на ленте уже все написано заранее.

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

Esp_ в сообщении #609238 писал(а):
Но в операторе рекурсии она ЗАДАЕТСЯ волей не волей :D

Рекурсия не задает порядок вычисления. Она лишь описывает специфические соотношения ("самоподобия") между значениями функции на аргументах - фактически задается системой уравнений, которым должна удовлетворять функция. А уж как ее вычислитель будет решать - неважно (например, может разворачивать процесс решения "сверху вниз", а может и "итеративно" снизу вверх).
Esp_ в сообщении #609238 писал(а):
Вы говорите "есть проблема", можно узнать в чем она состоит? То что вы сравниваете значки на листе бумаги (рекурсивная функция) в отрыве от ее вычисления, да еще и в отрыве от времени с целой ОПЕРАЦИОННОЙ СИСТЕМОЙ - это по меньшей мере странно.

Я же уже пояснял выше.
Ссылки на доказательство того, что это не моя выдуманная софистика, привести не могу, ибо лень искать (косвенно об этом говорится в статье, на которую указывал Portnov ).

 Профиль  
                  
 
 Re: Программирование только с помощью for
Сообщение22.08.2012, 23:25 


22/01/11
309
_hum_ в сообщении #609270 писал(а):
Рекурсия не задает порядок вычисления. Она лишь описывает специфические соотношения ("самоподобия") между значениями функции на аргументах - фактически задается системой уравнений, которым должна удовлетворять функция. А уж как ее вычислитель будет решать - неважно (например, может разворачивать процесс решения "сверху вниз", а может и "итеративно" снизу вверх).


Ваши разворачивания процесса "сверху вниз" и "итеративно" как раз и означают, что время $t$ , о котором говорил Профессор Снэйп там есть :D

Цитата:
Если вы хорошо изучали машину Тьюринга, то должны знать, что на ленте допускается лишь конечный объем исходных данных.


В таком случае, в вашей операционной системе тоже допускается только конечный объем исходных данных :D

 Профиль  
                  
 
 Re: Программирование только с помощью for
Сообщение23.08.2012, 00:59 


09/05/10
122
Ростов-на-Дону
Профессор Снэйп в сообщении #608547 писал(а):
А вот программа для машины Тьюринга, вычисляющая универсальную функцию, чем не операционная система?

Каверзный вопрос. :-) Хотел сначала сказать "нет", потом "да" ... м-да. Думаю хоть какой-то вывод должен быть у этой программы, пусть не ввод, но вывод - обязательно. Тогда пожалуй - да, наверно может.

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 72 ]  На страницу Пред.  1, 2, 3, 4, 5  След.

Модераторы: Karan, Toucan, PAV, maxal, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group