Финансы без пpоблем: Пеpеговоpный Пункт II (http://hdru.com/cgi-bin/pp2/YaBB.cgi)
>> Пpедложения по усовеpшенствованию, сообщения об ошибках >> Вопрос по пpофилеpу
(Message started by: Tupitsin на 27.08.09 в 11:21:38)

Заголовок: Вопрос по пpофилеpу
Прислано пользователем Tupitsin на 27.08.09 в 11:21:38
В разделе "Расходы вpемени на выполнение команд в файлах-коэффициентах:" отчета профайлера  есть некоторые строки, значение которых не вполне понятно простому смертному.
В частности, меня интересуют команды:
push var
+
set var
push double
push string
Например, что имеется ввиду под операцией "+"? Сложение чего?
В моем конкретном варианте профиля эти команды лежат вверху списка. Но ведь возможны и другие варианты. Поэтому, есть предложение Аркадию, по возможности "огласить весь список".

Заголовок: Re: Вопрос по пpофилеpу
Прислано пользователем Arkady на 27.08.09 в 12:08:19

on 08/27/09 в 11:21:38, Tupitsin wrote:
В разделе "Расходы вpемени на выполнение команд в файлах-коэффициентах:" отчета профайлера  есть некоторые строки, значение которых не вполне понятно простому смертному.
В частности, меня интересуют команды:
push var
+
set var
push double
push string
Например, что имеется ввиду под операцией "+"? Сложение чего?
В моем конкретном варианте профиля эти команды лежат вверху списка. Но ведь возможны и другие варианты. Поэтому, есть предложение Аркадию, по возможности "огласить весь список".


ФБП компилирует выражения в команды своей виртуальной машины используя т н "польскую запись". Например:

x=(a+b)*(c-d)/5

будет преобразовано в

a b + c d - * 5 /  ->x

или, уже в командах:


Quote:
push var a     -- втолкнуть значение переменной а в стек
push var b     -- втолкнуть значение переменной b в стек
+                            -- сложить последние две ячейки стека, стек сжимается на ячейку, сумма в верхей ячейке
push var c     -- втолкнуть значение переменной c в стек
push var d     -- втолкнуть значение переменной d в стек
-                     -- вычислить разность последних двух ячеек стека, стек сжимается на ячейку, разность в верхей ячейке
*                     -- вычислить произведение последних двух ячеек стека, стек сжимается на ячейку, произведение в верхей ячейке
push double 5  -- втолкнуть число 5 в стек
/                       -- вычислить частное последних двух ячеек стека, стек сжимается на ячейку, частное в верхей ячейке
set var x         -- значение верхней ячейки отправляется в переменную x, стек сжимается на ячейку.


Если какие-то еще команды непонятны - спрашивайте. А то весь список большой :)

Заголовок: Re: Вопрос по пpофилеpу
Прислано пользователем Tupitsin на 27.08.09 в 13:09:21
Следовательно, все эти команды относятся только к вычислению арифметических выражений. Понял. Спасибо.

Заголовок: Re: Вопрос по пpофилеpу
Прислано пользователем Arkady на 27.08.09 в 15:54:24

on 08/27/09 в 13:09:21, Tupitsin wrote:
Следовательно, все эти команды относятся только к вычислению арифметических выражений. Понял. Спасибо.


И к строковым выражениям тоже. В зависимости от типов данных в ячейках стека выполняется, например, соотвeтствующая операция сложения - арифметического или конкатенации строк.



Powered by YaBB 1 Gold - SP 1.3.2!
Forum software copyright й 2000-2004 Yet another Bulletin Board