Обратный ход

Проектирование и разработка идеального средства программирования.

Модератор: Модераторы

Re: Обратный ход

Сообщение B4rr4cuda » 19.09.2008 22:04:46

Эх, люди.
Линкера нормального нет, дебагер тупит, IDE временами тупит дико, смартлинк пришибленый,
виджетсеты не добиты, а вы о бэктрейстинге....
Аватара пользователя
B4rr4cuda
энтузиаст
 
Сообщения: 693
Зарегистрирован: 28.12.2007 07:48:35

Re: Обратный ход

Сообщение shade » 19.09.2008 22:10:41

alexs писал(а):всю трассу исполнения программы писать несколько накладно - ты не находиш?

А всю и не надо, хватит от бряка до бряка :) Ведь всегда можно с той или иной степенью локализовать проблему.

Повторное проигрывание, типа откатились и снова пошли исполнять - не всегда возможно. Ведь кроме того, что контролирует наш код, есть еще и библиотеки и системные вызовы. А вот записать кусок трассы и просматривать её назад/вперед вполне можно.

Добавлено спустя 1 минуту 18 секунд:
B4rr4cuda писал(а):Эх, люди. Линкера нормального нет, дебагер тупит, IDE временами тупит дико, смартлинк пришибленый, виджетсеты не добиты, а вы о бэктрейстинге....

У полёта мысли супремум бесконечен :lol:
Аватара пользователя
shade
энтузиаст
 
Сообщения: 879
Зарегистрирован: 21.02.2006 20:15:48
Откуда: http://shamangrad.net/

Re: Обратный ход

Сообщение utkin » 19.01.2009 19:37:03

А как быть с условными переходами?
utkin
новенький
 
Сообщения: 46
Зарегистрирован: 07.12.2008 13:03:20

Re: Обратный ход

Сообщение *vmr » 20.01.2009 00:20:43

А можно ли со стоящим на борту жедезом работать в обратном направлении?
Аватара пользователя
*vmr
постоялец
 
Сообщения: 168
Зарегистрирован: 08.01.2007 01:46:07
Откуда: Киев

Re: Обратный ход

Сообщение bw » 20.01.2009 03:06:15

При чем здесь железо?
Я никогда не говорил об обратной трассировке машинного кода. Вы же не воспринимаете программу на Pascal как набор машинных кодов, наверное для вас это всё же код на Pascal. Почему, когда речь идет об обратном разборе этого кода, вы воспринимаете эту операцию буквально и пытаете представить обратный разбор инструкций с непонятной обработкой стека и регистров. Просто представьте, что тот же код на Pascal перевернут с ног на голову (не машинные инструкции, а операторы Pascal), хотя это упрощенное представление. Можно даже добавить такие вещи:
Код: Выделить всё
begin
  Inc(x);
back
  Dec(x);
end;

Где Inc(x) выполняется при прямом проходе, а Dec(x) - при обратном.

Вопрос состоит в том, как это можно использовать? Фактически я предложил инструмент, осталось найти ему применение :-).

Что касается переходов, надеюсь речь не о goto. В любом случае, есть два варианта; (1) это запомнить точку, откуда совершен переход и, при достижении метки, вернуться к этой точке, в момент обратного прохода, или (2) "по всем правилам", пройти мимо метки (как и при прямом проходе).

..bw
Аватара пользователя
bw
постоялец
 
Сообщения: 359
Зарегистрирован: 01.12.2005 11:36:23
Откуда: Усть-Илимск

Re: Обратный ход

Сообщение utkin » 21.01.2009 14:41:56

Ваша точка зрения на проблему не решает вопрос условных переходов.
Как откатить назад:
if x>0 then
begin
write(x);
end
ELSE
begin
write(y);
end;
utkin
новенький
 
Сообщения: 46
Зарегистрирован: 07.12.2008 13:03:20

Re: Обратный ход

Сообщение bw » 21.01.2009 22:04:31

Один из вариантов должен подойти:

1. Условие игнорируется. Будут выполняться операторы в обратном порядке из блока, который выполнялся при прямом проходе.
2. Условие игнорируется. Будут выполняться операторы в прямом порядке из блока, который выполнялся при прямом проходе.
3. Выполняется условие. Операторы в блоке выполняются в прямом порядке.

Мне кажется, это должен быть третий.

..bw
Аватара пользователя
bw
постоялец
 
Сообщения: 359
Зарегистрирован: 01.12.2005 11:36:23
Откуда: Усть-Илимск

Re: Обратный ход

Сообщение utkin » 22.01.2009 09:41:51

Все равно непонятно. Усложним пример.
If x>0 then
begin
y:=y*7-8;
end
Else
begin
y:=8*y-7;
end;

Какой у до выполнения?
Не подумайте, что я придираюсь. Просто меня заинтересовала Ваша идея. Если решить некторые тонкости, то такой механизм можно будет использовать для несложных языков программирования (на мой взгляд).
utkin
новенький
 
Сообщения: 46
Зарегистрирован: 07.12.2008 13:03:20

Re: Обратный ход

Сообщение Alex2013 » 26.04.2013 18:50:51

О легендарный анстрим ? В чистом виде идея практически не реализуема хотя можно наверное написать или специальный "полиндромный" компилятор генерирующий "обратимый код" или для ЯВУ особый интерпретатор позволяющий ограниченно запускать "обратный режим" . То есть грубо говоря поменять входящие и выходящие данные местами . (Ужасы функционального программирования лучше вообще не вспоминать потому что это на самом деле страшно ... как минимум для моей "крыши" )
Alex2013
долгожитель
 
Сообщения: 2922
Зарегистрирован: 03.04.2013 11:59:44

Re: Обратный ход

Сообщение Ildus » 01.07.2019 21:46:00

Есть идея, можно используя goto и label, создать обратный порядок прохода по коду.
Это будет выглядеть примерно так:
Код: Выделить всё
program BackCompile;
label goback1,goback2;
var
y,x:integer;
back1:boolean;

procedure back;
begin
back1:=true;
goto goback2;
end;

begin
goback1;
y:=4+x;
if back1=false then
begin
goback2;
x:=y+5*2;
if back1 then goto goback1;
x:=5+y;
back;
end;
end.


Но при большом коде, это будет довольно муторно, но можно в самом Lazarus сделать так, что бы все это не было видно, кроме функции back.
(Честно, никогда не пользовался goto и label)

Добавлено спустя 2 минуты 12 секунд:
Также есть еще одна идея для улучшения IDE: добавить возможность присваивания нескольким переменным одно значение, если такой нет конечно.

Пример:
Код: Выделить всё
var
x,y:integer;
begin
x,y:=0;
end.

Или так:
Код: Выделить всё
(x,y):=0;
Ildus
новенький
 
Сообщения: 40
Зарегистрирован: 12.10.2018 19:35:38

Пред.

Вернуться в Компилятор / язык программирования

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

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

Рейтинг@Mail.ru