Обратный ход

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

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

Аватара пользователя
B4rr4cuda
энтузиаст
Сообщения: 693
Зарегистрирован: 28.12.2007 06:48:35

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

Сообщение B4rr4cuda »

Эх, люди.
Линкера нормального нет, дебагер тупит, IDE временами тупит дико, смартлинк пришибленый,
виджетсеты не добиты, а вы о бэктрейстинге....
Аватара пользователя
shade
энтузиаст
Сообщения: 879
Зарегистрирован: 21.02.2006 19:15:48
Откуда: http://shamangrad.net/
Контактная информация:

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

Сообщение shade »

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

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

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

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

У полёта мысли супремум бесконечен :lol:
utkin
новенький
Сообщения: 46
Зарегистрирован: 07.12.2008 12:03:20

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

Сообщение utkin »

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

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

Сообщение *vmr »

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

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

Сообщение bw »

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

Код: Выделить всё

begin
  Inc(x);
back
  Dec(x);
end;

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

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

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

..bw
utkin
новенький
Сообщения: 46
Зарегистрирован: 07.12.2008 12:03:20

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

Сообщение utkin »

Ваша точка зрения на проблему не решает вопрос условных переходов.
Как откатить назад:
if x>0 then
begin
write(x);
end
ELSE
begin
write(y);
end;
Аватара пользователя
bw
постоялец
Сообщения: 359
Зарегистрирован: 01.12.2005 10:36:23
Откуда: Усть-Илимск
Контактная информация:

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

Сообщение bw »

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

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

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

..bw
utkin
новенький
Сообщения: 46
Зарегистрирован: 07.12.2008 12:03:20

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

Сообщение utkin »

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

Какой у до выполнения?
Не подумайте, что я придираюсь. Просто меня заинтересовала Ваша идея. Если решить некторые тонкости, то такой механизм можно будет использовать для несложных языков программирования (на мой взгляд).
Alex2013
долгожитель
Сообщения: 3211
Зарегистрирован: 03.04.2013 11:59:44

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

Сообщение Alex2013 »

О легендарный анстрим ? В чистом виде идея практически не реализуема хотя можно наверное написать или специальный "полиндромный" компилятор генерирующий "обратимый код" или для ЯВУ особый интерпретатор позволяющий ограниченно запускать "обратный режим" . То есть грубо говоря поменять входящие и выходящие данные местами . (Ужасы функционального программирования лучше вообще не вспоминать потому что это на самом деле страшно ... как минимум для моей "крыши" )
Ildus
новенький
Сообщения: 40
Зарегистрирован: 12.10.2018 18:35:38

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

Сообщение Ildus »

Есть идея, можно используя 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;
Ответить