рдкрд░рд┐рдЪрдп
рд╕рднреА рд╣рдмреНрдмрд░рдЪрд┐рддреНрддреЗрд▓реА рдХреЛ рд╢реБрдн рджрд┐рди!
рдЗрд╕рд▓рд┐рдП, рд╢рд╛рдпрдж рдпрд╣ рдХрд╣рдиреЗ рд▓рд╛рдпрдХ рд╣реИ рдХрд┐ рдореЗрд░реЗ рдХрд╛рдо рдХрд╛ рд▓рдХреНрд╖реНрдп, рдЬрд┐рд╕рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдХрдИ рдкреНрд░рддрд┐рдорд╛рдПрдВ рд▓рд┐рдЦреА рдЬрд╛рдПрдВрдЧреА, рд╕рднреА рдХреЛ 0 рд╕реЗ рдЦреБрдж рдХреЛ рдкреВрд░реА рддрд░рд╣ рдХрд╛рд░реНрдпрд╛рддреНрдордХ рд╡рд╛рдИрдкреА рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рднреА рддрд░рд╣ рд╕реЗ рдЬрд╛рдирд╛ рдерд╛ рдФрд░ рдлрд┐рд░ рдореЗрд░реА рдЬрд╛рдирдХрд╛рд░реА, рд╕рд░реНрд╡реЛрддреНрддрдо рдкреНрд░рдерд╛рдУрдВ рдФрд░ рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд╕рд╛рде рдЕрдиреБрднрд╡ рд╕рд╛рдЭрд╛ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдЬреЛ рд░реБрдЪрд┐ рд░рдЦрддреЗ рд╣реИрдВред
рдореИрдВ
рдпрд╣рд╛рдБ рдкрд╣рд▓реЗ рдмрддрд╛рдИ рдЧрдИ рднрд╛рд╖рд╛ рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХрд╛ рд╡рд░реНрдгрди рдХрд░реВрдБрдЧрд╛ред
рдЙрдиреНрд╣реЛрдВрдиреЗ рдХрдИ рджрд┐рд▓рдЪрд╕реНрдкреА рд▓реА рдФрд░ рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдореЗрдВ рдПрдХ рдЧрд░реНрдо рдЪрд░реНрдЪрд╛ рдХреЛ рдЙрдХрд╕рд╛рдпрд╛ред рдЗрд╕рд▓рд┐рдП - рд╡рд┐рд╖рдп рдХрдИ рдХреЗ рд▓рд┐рдП рджрд┐рд▓рдЪрд╕реНрдк рд╣реИред
рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рддреБрд░рдВрдд рдЬрд╛рдирдХрд╛рд░реА рдкреЛрд╕реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд╛рдпрдХ рд╣реИ:
рд╕рд╛рдЗрдЯ (рдереЛрдбрд╝реА рджреЗрд░ рдмрд╛рдж рдкреНрд░рд▓реЗрдЦрди рд╕реЗ рднрд░ рдЬрд╛рдПрдЧреА)ред
рдХреЛрд╖рд╕реНрд╡рдпрдВ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЛ рдЫреВрдиреЗ рдФрд░ рдХрд╛рд░реНрд░рд╡рд╛рдИ рдореЗрдВ рд╕рдм рдХреБрдЫ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП, рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдиреЗ рдФрд░ рдмрд┐рди рдлрд╝реЛрд▓реНрдбрд░ рд╕реЗ рд╕рдм рдХреБрдЫ рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдмреЗрд╣рддрд░ рд╣реИред рд░рд┐рд▓реАрдЬ рдореЗрдВ, рдореБрдЭреЗ рднрд╛рд╖рд╛ рдФрд░ рд░рдирдЯрд╛рдЗрдо рдХреЗ рдирд╡реАрдирддрдо рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХреЛ рдЕрдкрд▓реЛрдб рдХрд░рдиреЗ рдХреА рдХреЛрдИ рдЬрд▓реНрджреА рдирд╣реАрдВ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдХрднреА-рдХрднреА рдпрд╣ рдХрд░рдирд╛ рдореЗрд░реЗ рд▓рд┐рдП рдмрд╣реБрдд рдЖрд▓рд╕реА рд╣реЛрддрд╛ рд╣реИред
рдореИрдВ C / C ++ рдФрд░ рдСрдмреНрдЬреЗрдХреНрдЯ рдкрд╛рд╕реНрдХрд▓ рдореЗрдВ рдХреЛрдб рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВред рдореИрдВрдиреЗ рддрдм рд╕реЗ FPC рдкрд░ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд▓рд┐рдЦрд╛ рдореЗрд░реА рд░рд╛рдп рдореЗрдВ рдпрд╣ рднрд╛рд╖рд╛ рдЙрд╕ рддрд░рд╣ рдХреЗ рд▓реЗрдЦрди рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рд╕рд░рд▓ рдФрд░ рдмреЗрд╣рддрд░ рд╣реИред рджреВрд╕рд░рд╛ рдирд┐рд░реНрдзрд╛рд░рдг рдХрд╛рд░рдХ рдпрд╣ рдерд╛ рдХрд┐ рдПрдлрдкреАрд╕реА рд▓рдХреНрд╖реНрдп рдкреНрд▓реЗрдЯрдлрд╛рд░реНрдореЛрдВ рдХреА рдПрдХ рдмрдбрд╝реА рд╕рдВрдЦреНрдпрд╛ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИ рдФрд░ рдиреНрдпреВрдирддрдо рдкрд░рд┐рд╡рд░реНрддрди рдХреЗ рд╕рд╛рде рд╡рд╛рдВрдЫрд┐рдд рдордВрдЪ рдХреЗ рд▓рд┐рдП рдПрдХ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХрд╛ рдкреБрдирд░реНрдирд┐рд░реНрдорд╛рдг рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИред рдпрджрд┐ рдХрд┐рд╕реА рдХрд╛рд░рдг рд╕реЗ рдореБрдЭреЗ рдСрдмреНрдЬреЗрдХреНрдЯ рдкрд╛рд╕реНрдХрд▓ рдкрд╕рдВрдж рдирд╣реАрдВ рд╣реИ, рддреЛ рдкреЛрд╕реНрдЯ рдХреЛ рдмрдВрдж рдХрд░рдиреЗ рдФрд░ рдЯрд┐рдкреНрдкрдгреА рдкрд░ рдкрддреНрдерд░ рдлреЗрдВрдХрдиреЗ рдХреЗ рд▓рд┐рдП рджреМрдбрд╝ рди рдХрд░реЗрдВред рдпрд╣ рднрд╛рд╖рд╛ рдмрд╣реБрдд рд╕реБрдВрджрд░ рдФрд░ рд╕рд╣рдЬ рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдВ рдЗрддрдирд╛ рдХреЛрдб рдкреНрд░рджрд╛рди рдирд╣реАрдВ рдХрд░реВрдВрдЧрд╛ред рдмрд╕ рдЖрдкрдХреЛ рдХреНрдпрд╛ рдЪрд╛рд╣рд┐рдПред
рдЗрд╕рд▓рд┐рдП, рд╢рд╛рдпрдж рдореИрдВ рдЕрдкрдиреА рдХрд╣рд╛рдиреА рд╢реБрд░реВ рдХрд░реВрдВрдЧрд╛ред
рд╣рдордиреЗ рд▓рдХреНрд╖реНрдп рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд┐рдП
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдХрд┐рд╕реА рднреА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЛ рдЕрдкрдиреЗ рд▓рдХреНрд╖реНрдпреЛрдВ рдФрд░ рдЯреАрдХреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдЬрд┐рд╕реЗ рднрд╡рд┐рд╖реНрдп рдореЗрдВ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдЕрдЧреНрд░рд┐рдо рдореЗрдВ рдпрд╣ рддрдп рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ рдХрд┐ рдЗрд╕рдХреЗ рд▓рд┐рдП рдкреНрд░рд╛рдердорд┐рдХ рд╡реАрдПрдо рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рд╕ рдкреНрд░рдХрд╛рд░ рдХреА рднрд╛рд╖рд╛ рдмрдирд╛рдИ рдЬрд╛рдПрдЧреАред
рдореЗрд░реЗ VM рдХреЗ рдЖрдЧреЗ рдХреЗ рд╡рд┐рдХрд╛рд╕ рдХреЛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдкреНрд░рдореБрдЦ рдмрд┐рдВрджреБ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИрдВ:
- рдбрд╛рдпрдирд╛рдорд┐рдХ рдЯрд╛рдЗрдкрд┐рдВрдЧ рдФрд░ рдЯрд╛рдЗрдк рдХрд╛рд╕реНрдЯрд┐рдВрдЧред рдореИрдВрдиреЗ рд╡реАрдПрдо рдХреЗ рд╡рд┐рдХрд╛рд╕ рдХреЗ рд╕реНрддрд░ рдкрд░ рдЙрд╕рдХреЗ рд╕рдорд░реНрдерди рдХреЛ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд░рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ред
- рдмрд╣реБрдкрд░рдд рд╕рдорд░реНрдердиред рдореИрдВрдиреЗ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЗрд╕ рдЖрдЗрдЯрдо рдХреЛ рдЗрд╕ рд╕реВрдЪреА рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдХрд┐рдпрд╛ рд╣реИ рддрд╛рдХрд┐ рд╡реАрдПрдо рдХреА рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ рдХреЛ рдареАрдХ рд╕реЗ рдбрд┐рдЬрд╛рдЗрди рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗ рдФрд░ рд╡реАрдПрдо рдХреЗ рдореБрдЦреНрдп рд╕реНрддрд░ рдкрд░ рдорд▓реНрдЯреАрдереНрд░реЗрдбрд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди рдХрд╛ рдЖрдпреЛрдЬрди рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗ, рди рдХрд┐ рдмрд╛рдж рдореЗрдВ рдмреИрд╕рд╛рдЦреА рдХреЗ рд╕рд╛рдеред
- рдмрд╛рд╣рд░реА рддрд░реАрдХреЛрдВ рдХрд╛ рдирд┐рд░реНрдпрд╛рддред рдЗрд╕рдХреЗ рдмрд┐рдирд╛ рднрд╛рд╖рд╛ рдмреЗрдХрд╛рд░ рд╣реЛ рдЬрд╛рдПрдЧреАред рдЬрдм рддрдХ рдХрд┐ рдЗрд╕реЗ рдХрд┐рд╕реА рднреА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рдПрдореНрдмреЗрдб рди рдХрд░реЗрдВред
- рднрд╛рд╖рд╛ рдХрд╛ рд╕рдВрдХрд▓рди (рдПрдХ рдПрдХрд▓ рдЕрдореВрд░реНрдд рдирд┐рд╖реНрдкрд╛рджрди рдпреЛрдЧреНрдп рдлрд╝рд╛рдЗрд▓ рдореЗрдВ)ред рдЖрдВрд╢рд┐рдХ рд░реВрдк рд╕реЗ рд╕рдВрдХрд▓рд┐рдд рдпрд╛ рд╡реНрдпрд╛рдЦреНрдпрд╛? рдмрд╣реБрдд рдХреБрдЫ рдЗрд╕ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИред
- рд╕рд╛рдорд╛рдиреНрдп рд╡реАрдПрдо рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ред рдХреНрдпрд╛ рд╕реНрдЯреИрдХ рдпрд╛ рд░рдЬрд┐рд╕реНрдЯрд░ рд╣рдорд╛рд░рд╛ рд╡реАрдПрдо рд╣реЛрдЧрд╛? рдореИрдВрдиреЗ рдЗрд╕ рдФрд░ рдЙрд╕ рджреЛрдиреЛрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреАред рдореИрдВрдиреЗ рд╕рдорд░реНрдерди рдХреЗ рд▓рд┐рдП рдПрдХ рдЦрдбрд╝реА рд╡реАрдПрдо рдХреЛ рдЪреБрдирд╛ред
- рдЖрдк рдЪрд░, рд╕рд░рдгрд┐рдпреЛрдВ, рд╕рдВрд░рдЪрдирд╛рдУрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХреИрд╕реЗ рджреЗрдЦрддреЗ рд╣реИрдВ? рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ, рдЙрд╕ рд╕рдордп рдореИрдВ рдПрдХ рдРрд╕реА рднрд╛рд╖рд╛ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛ рдЬрд┐рд╕рдореЗрдВ рд▓рдЧрднрдЧ рд╕рдм рдХреБрдЫ рдирд┐рд╣рд┐рдд рдмрд┐рдВрджреБрдУрдВ рд╕реЗ рдмрдВрдзрд╛ рд╣реЛ, рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕ рддрд░рд╣ рдХреЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╕реЗ рдореЗрдореЛрд░реА рдХреЛ рдмрдЪрд╛рдпрд╛ рдЬрд╛ рд╕рдХреЗрдЧрд╛ рдФрд░ рдбреЗрд╡рд▓рдкрд░ рдХреЗ рдЬреАрд╡рди рдХреЛ рд╕рд░рд▓ рдмрдирд╛рдпрд╛ рдЬрд╛ рд╕рдХреЗрдЧрд╛ред рдпрджрд┐ рд╣рдо рдХреБрдЫ рдмрдбрд╝реЗ рддрд░реАрдХреЛрдВ рдХреЛ рдкрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреЗ рд╣реИрдВ, рддреЛ рдХреЗрд╡рд▓ рдЙрд╕ рдмрдбрд╝реЗ рдХреЛ рдПрдХ рд╕реВрдЪрдХ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
рдЗрд╕рд▓рд┐рдП, рдореИрдВрдиреЗ рдЙрдкрд░реЛрдХреНрдд рдкреНрд░рд╛рдердорд┐рдХрддрд╛рдУрдВ рдХреЛ рдЪреБрдирд╛ рд╣реИ рдФрд░ рдореИрдВрдиреЗ рднрд╛рд╖рд╛ рд╡рд░реНрдЪреБрдЕрд▓ рдорд╢реАрди рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░ рджрд┐рдпрд╛ рд╣реИред рдпрд╣ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдЕрдЬреАрдм рд╣реИ, рдЖрдорддреМрд░ рдкрд░ рдХрд┐рд╕реА рднреА рдкрд╛рд░реНрд╕рд░ / рдЕрдиреБрд╡рд╛рджрдХ рдХреЛ рдкрд╣рд▓реЗ рд▓рд┐рдЦрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдлрд┐рд░ рд╡реАрдПрдоред рдЦреИрд░, рдореИрдВрдиреЗ рдЗрд╕ рдХреНрд░рдо рдореЗрдВ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЛ рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░ рджрд┐рдпрд╛ рдФрд░ рдореИрдВ рдЗрд╕реЗ рдЙрд╕ рдХреНрд░рдо рдореЗрдВ рдЖрдЧреЗ рд╡рд░реНрдгрд┐рдд рдХрд░реВрдВрдЧрд╛ рдЬрд┐рд╕рдореЗрдВ рдореИрдВрдиреЗ рдЗрд╕реЗ рд╡рд┐рдХрд╕рд┐рдд рдХрд┐рдпрд╛ рдерд╛ред
рдореБрдЭреЗ рддреБрд░рдВрдд рдпрд╣ рдХрд╣рдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рдореИрдВрдиреЗ VM рдХреЛ рдпрдерд╛рд╕рдВрднрд╡ рд╕реНрдкрд╖реНрдЯ рдХрд╣рд╛ - SVM (рд╕реНрдЯреИрдХ-рдЖрдзрд╛рд░рд┐рдд рд╡рд░реНрдЪреБрдЕрд▓ рдорд╢реАрди)ред
рдЪрд▓реЛ рдЪрд░ рд╡рд░реНрдЧ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ
рдкреНрд░рд╛рд░рдВрдн рдореЗрдВ, рдореИрдВрдиреЗ рдмрд╕ рдПрдХ рднрд┐рдиреНрди рдкреНрд░рдХрд╛рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рд╕рд░рд▓ рдФрд░ рддреЗрдЬ рд╣реИред рдпрд╣ рдПрдХ рдмреИрд╕рд╛рдЦреА рдереА, рд▓реЗрдХрд┐рди рдЗрд╕рдиреЗ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЛ рдЖрдЧреЗ рдмрдврд╝рд╛рдпрд╛ рдФрд░ рдореБрдЭреЗ рд╡реАрдПрдо рдФрд░ рднрд╛рд╖рд╛ рдХреЗ рдкрд╣рд▓реЗ рд╕рдВрд╕реНрдХрд░рдг рдХреЛ рдЬрд▓реНрджреА рд╕реЗ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреАред рдмрд╛рдж рдореЗрдВ рдореИрдВ рдХреЛрдб рдкрд░ рдмреИрда рдЧрдпрд╛ рдФрд░ рдореЗрд░реЗ "рд╕рдВрд╕реНрдХрд░рдг" рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ рд▓рд┐рдЦрд╛ред рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ, рдЖрдкрдХреЛ рдПрдХ рд╡рд░реНрдЧ рд▓рд┐рдЦрдиреЗ рдХреА рдЬрд╝рд░реВрд░рдд рд╣реИ рдЬреЛ рдПрдХ рдкреЙрдЗрдВрдЯрд░ рдХреЛ рдореЗрдореЛрд░реА рдореЗрдВ рдПрдХ рдореВрд▓реНрдп рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рддрд╛ рд╣реИ, рдореЗрд░реЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдореЗрдВ рдпрд╣
null/cardinal/int64/double/string/array
ред рдХреЛрдИ рдХреЗрд╕ рдЯрд╛рдЗрдкрд┐рдВрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд▓рдЧрд╛ рдХрд┐ рдореЗрд░реЗ рджреНрд╡рд╛рд░рд╛ рд▓рд╛рдЧреВ рдХрд┐рдП рдЧрдП рддрд░реАрдХреЗ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рдмреЗрд╣рддрд░ рд╣реЛрдЧрд╛ред
рдХреНрд▓рд╛рд╕ рдХреЛрдб рд▓рд┐рдЦрдирд╛ рд╢реБрд░реВ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рдореИрдВрдиреЗ рднрд╡рд┐рд╖реНрдп рдХреА рднрд╛рд╖рд╛ рдореЗрдВ рд╕реНрдЯреНрд░рд┐рдВрдЧреНрд╕ рдХреЗ рд▓рд┐рдП рдЕрдзрд┐рдХ рд▓рдЪреАрд▓реА рд╕рдорд░реНрдерди рдХреЗ рд▓рд┐рдП рдореЙрдбреНрдпреВрд▓ рд╣реЗрдбрд░ рдореЗрдВ {$ H +} рдирд┐рд░реНрджреЗрд╢ рдХреЛ рддреБрд░рдВрдд рдбрд╛рд▓рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ред
рдкреА.рдПрд╕. рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдЬреЛ H- рдФрд░ H + FPC рдореЛрдб рдХреЗ рдмреАрдЪ рдЕрдВрддрд░ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдирд╣реАрдВ рдЬрд╛рдирддреЗ рд╣реЛрдВрдЧреЗред
рдПрдЪ-рдореЛрдб рдореЗрдВ рдХреЛрдб рдЕрд╕реЗрдВрдмрд▓ рдХрд░рддреЗ рд╕рдордп, рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЛ рд╡рд░реНрдгреЛрдВ рдХреЗ рдПрдХ рд╕рд░рдгреА рдХреЗ рд░реВрдк рдореЗрдВ рдкреНрд░рд╕реНрддреБрдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдЬрдм H + - рд╕реНрдореГрддрд┐ рдХреЗ рдПрдХ рдЯреБрдХрдбрд╝реЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рдВрдХреЗрддрдХ рдХреЗ рд░реВрдк рдореЗрдВред рдкрд╣рд▓реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рд▓рд╛рдЗрдиреЛрдВ рдХреЛ рд╢реБрд░реВ рдореЗрдВ рд▓рдВрдмрд╛рдИ рдореЗрдВ рддрдп рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ рдФрд░ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ 256 рд╡рд░реНрдгреЛрдВ рддрдХ рд╕реАрдорд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рджреВрд╕рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рд▓рд╛рдЗрдиреЗрдВ рдЧрддрд┐рд╢реАрд▓ рд░реВрдк рд╕реЗ рд╡рд┐рд╕реНрддрд╛рд░ рдпреЛрдЧреНрдп рд╣реЛрдВрдЧреА рдФрд░ рдЙрдирдореЗрдВ рдмрд╣реБрдд рдЕрдзрд┐рдХ рд╡рд░реНрдгреЛрдВ рдХреЛ рд╕рдореЗрдЯрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рд╡реЗ рдереЛрдбрд╝рд╛ рдзреАрдорд╛ рдХрд╛рдо рдХрд░реЗрдВрдЧреЗ, рд▓реЗрдХрд┐рди рдЕрдзрд┐рдХ рдХрд╛рд░реНрдпрд╛рддреНрдордХ рд░реВрдк рд╕реЗред рдПрдЪ + рдХреЗ рд╕рд╛рде, рдЖрдк рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЛ рд╡рд░реНрдгреЛрдВ рдХреЗ рдПрдХ рд╕рд░рдгреА рдХреЗ рд░реВрдк рдореЗрдВ рднреА рдШреЛрд╖рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдЗрд╕ рддрд░рд╣ рд╕реЗ:
var s:string[256];
рдЗрд╕рд▓рд┐рдП, рд╢реБрд░реБрдЖрдд рдХреЗ рд▓рд┐рдП, рд╣рдо Enum рдХреЛ рдПрдХ рдкреНрд░рдХрд╛рд░ рдШреЛрд╖рд┐рдд рдХрд░реЗрдВрдЧреЗ, рдЬрд┐рд╕реЗ рд╣рдо рд╕реВрдЪрдХ рджреНрд╡рд╛рд░рд╛ рдбреЗрдЯрд╛ рдкреНрд░рдХрд╛рд░ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рдзреНрд╡рдЬ рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ:
type TSVMType = (svmtNull, svmtWord, svmtInt, svmtReal, svmtStr, svmtArr);
рдЕрдЧрд▓рд╛, рд╣рдо рдЕрдкрдиреЗ рдЪрд░ рдкреНрд░рдХрд╛рд░ рдФрд░ рдХреБрдЫ рд╡рд┐рдзрд┐рдпреЛрдВ рдХреА рдореВрд▓ рд╕рдВрд░рдЪрдирд╛ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддреЗ рд╣реИрдВ:
TSVMMem = class m_val: pointer; m_type: TSVMType; constructor Create; destructor Destroy; procedure Clear; end; ... constructor TSVMMem.Create; begin m_val := nil; m_type := svmtNull; end; destructor TSVMMem.Destroy; begin Clear; end; procedure TSVMMem.Clear; inline; begin case m_type of svmtNull: ; svmtWord: Dispose(PCardinal(m_val)); svmtInt: Dispose(PInt64(m_val)); svmtReal: Dispose(PDouble(m_val)); svmtStr: Dispose(PString(m_val)); svmtArr: begin SetLength(PMemArray(m_val)^, 0); Dispose(PMemArray(m_val)); end; else Error(reVarInvalidOp); end; end;
рд╡рд░реНрдЧ рдХреЛ рдХреБрдЫ рднреА рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдирд╣реАрдВ рдорд┐рд▓рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдирд┐рд░реНрдорд╛рдгрдХрд░реНрддрд╛ рдФрд░ рд╡рд┐рдзреНрд╡рдВрд╕рдХ рдореЗрдВ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдорд┐рд▓реА рдХреЙрд▓ рдХреЛ рдЫреЛрдбрд╝рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдореИрдВ рдЗрдирд▓рд╛рдЗрди рдирд┐рд░реНрджреЗрд╢ рдкрд░ рдзреНрдпрд╛рди рджреВрдВрдЧрд╛ред рдлрд╝рд╛рдЗрд▓ рд╣реЗрдбрд░ рдореЗрдВ {$ рдЗрдирд▓рд╛рдЗрди рдХреЛ рдЬреЛрдбрд╝рдирд╛ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдирд╛ рдмреЗрд╣рддрд░ рд╣реИред VMs рдореЗрдВ рдЗрд╕рдХреЗ рд╕рдХреНрд░рд┐рдп рдЙрдкрдпреЛрдЧ рдиреЗ рдЙрддреНрдкрд╛рджрдХрддрд╛ рдореЗрдВ рдХрд╛рдлреА рд╡реГрджреНрдзрд┐ рдХреА (рдХрд╣реАрдВ-рдХрд╣реАрдВ 15-20% рддрдХ рдПрдордмреА!)ред рд╡рд╣ рд╕рдВрдХрд▓рдХ рдХреЛ рдмрддрд╛рддреА рд╣реИ рдХрд┐ рд╡рд┐рдзрд┐ рдХрд╛ рд╢рд░реАрд░ рдЗрд╕рдХреЗ рдЖрд╣реНрд╡рд╛рди рдХреЗ рд╕реНрдерд╛рди рдкрд░ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рдПрдореНрдмреЗрдбреЗрдб рд╣реИред рдЖрдЙрдЯрдкреБрдЯ рдХреЛрдб рдЕрдВрдд рдореЗрдВ рдереЛрдбрд╝рд╛ рдмрдбрд╝рд╛ рд╣реЛрдЧрд╛, рд▓реЗрдХрд┐рди рддреЗрдЬреА рд╕реЗ рдХрд╛рдо рдХрд░реЗрдЧрд╛ред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдЗрдирд▓рд╛рдЗрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЙрдЪрд┐рдд рд╣реИред
рдареАрдХ рд╣реИ, рдЗрд╕ рд╕реНрддрд░ рдкрд░ рд╣рдордиреЗ рдЕрдкрдиреА рдХрдХреНрд╖рд╛ рдХреА рдиреАрдВрд╡ рдХреЛ рдзреЛ рджрд┐рдпрд╛ рд╣реИред рдЕрдм рд╣рдореЗрдВ рдЕрдкрдиреА рдХрдХреНрд╖рд╛ рдореЗрдВ рдХрдИ рд╕реЗрдЯрд░реЛрдВ рдФрд░ рдЧреЗрдЯрд░реНрд╕ (рд╕реЗрдЯрд░ рдПрдВрдб рдЧреЗрдЯреНрдЯрд░) рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
рдХрд╛рд░реНрдп рдХреБрдЫ рддрд░реАрдХреЛрдВ рдХреЛ рд▓рд┐рдЦрдирд╛ рд╣реИ рдЬреЛ рдЖрдкрдХреЛ рд░рдЯрдирд╛ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдЧрд╛ рдФрд░ рдмрд╛рдж рдореЗрдВ рд╣рдорд╛рд░реА рдХрдХреНрд╖рд╛ рд╕реЗ рдорд╛рди рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдЧрд╛ред
рдкрд╣рд▓реЗ, рдЖрдЗрдП рд╣рдорд╛рд░реА рдХрдХреНрд╖рд╛ рдХреЗ рд▓рд┐рдП рдПрдХ рдорд╛рди рдЕрд╕рд╛рдЗрди рдХрд░реЗрдВред рдкрд╣рд▓реЗ рдЖрдк рдПрдХ рд╕рд╛рдорд╛рдиреНрдпреАрдХреГрдд рд╕реЗрдЯрд░ рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдлрд┐рд░ рд╡реНрдпрдХреНрддрд┐рдЧрдд рдбреЗрдЯрд╛ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рд▓рд┐рдП:
procedure TSVMMem.SetV(const value; t:TSVMType); inline; begin if (m_val <> nil) and (m_type = t) then begin case t of svmtWord: PCardinal(m_val)^ := Cardinal(value); svmtInt: PInt64(m_val)^ := Int64(value); svmtReal: PDouble(m_val)^ := Double(value); svmtStr: PString(m_val)^ := String(value); end; end else begin if m_val <> nil then FreeMem(m_val); m_type := t; case t of svmtWord: begin New(PCardinal(m_val)); PCardinal(m_val)^ := Cardinal(value); end; svmtInt: begin New(PInt64(m_val)); PInt64(m_val)^ := Int64(value); end; svmtReal: begin New(PDouble(m_val)); PDouble(m_val)^ := Double(value); end; svmtStr: begin New(PString(m_val)); PString(m_val)^ := String(value); end; else Error(reVarTypeCast); end; end; end; ... procedure TSVMMem.SetW(value:cardinal); inline; begin if (m_val <> nil) and (m_type = svmtWord) then PCardinal(m_val)^ := value else begin if m_val <> nil then FreeMem(m_val); m_type := svmtWord; New(PCardinal(m_val)); PCardinal(m_val)^ := value; end; end;
рдЕрдм рдЖрдк рдПрдХ рдЬреЛрдбрд╝реЗ рдХреЗ рд▓рд┐рдП рдХреЛрдб рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВ:
function TSVMMem.GetW:cardinal; inline; begin Result := 0; case m_type of svmtWord: Result := PCardinal(m_val)^; svmtInt: Result := PInt64(m_val)^; svmtReal: Result := Trunc(PDouble(m_val)^); svmtStr: Result := StrToQWord(PString(m_val)^); else Error(reVarTypeCast); end; end;
рдареАрдХ рд╣реИ, рдорд╣рд╛рди, рдЕрдм рдЬрдм рдЖрдкрдиреЗ рдЖрдИрдбреАрдИ рдХреЛ рдШреВрд░рддреЗ рд╣реБрдП рдФрд░ рдмрд╕рдиреЗ рд╡рд╛рд▓реЛрдВ рдФрд░ рдЧреЗрдЯрд░реНрд╕ рдХреЗ рд▓рд┐рдП рдХреЛрдб рдЯрд╛рдЗрдк рдХрд░рддреЗ рд╣реБрдП рдмрд┐рддрд╛рдпрд╛ рд╣реИ, рддреЛ рд╣рдореЗрдВ рдЕрдкрдиреЗ рдкреНрд░рдХрд╛рд░ рдХреЗ рдЧрдгрд┐рддреАрдп рдФрд░ рддрд╛рд░реНрдХрд┐рдХ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рдХрд╛рд░реНрдп рдХреЗ рд╕рд╛рде рд╕рд╛рдордирд╛ рдХрд░рдирд╛ рдкрдбрд╝ рд░рд╣рд╛ рд╣реИред рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд░реВрдк рдореЗрдВ, рдореИрдВ рдЕрддрд┐рд░рд┐рдХреНрдд рдСрдкрд░реЗрд╢рди рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рджреВрдВрдЧрд╛:
procedure TSVMMem.OpAdd(m:TSVMMem); inline; begin case m_type of svmtWord: case m.m_type of svmtWord: SetW(GetW + m.GetW); svmtInt: SetI(GetW + m.GetI); svmtReal: SetD(GetW + m.GetD); svmtStr: SetD(GetW + StrToFloat(m.GetS)); else Error(reVarInvalidOp); end; svmtInt: case m.m_type of svmtWord: SetI(GetI + m.GetW); svmtInt: SetI(GetI + m.GetI); svmtReal: SetD(GetI + m.GetD); svmtStr: SetD(GetI + StrToFloat(m.GetS)); else Error(reVarInvalidOp); end; svmtReal: case m.m_type of svmtWord: SetD(GetD + m.GetW); svmtInt: SetD(GetD + m.GetI); svmtReal: SetD(GetD + m.GetD); svmtStr: SetD(GetD + StrToFloat(m.GetS)); else Error(reVarInvalidOp); end; svmtStr: case m.m_type of svmtWord: SetS(GetS + IntToStr(m.GetW)); svmtInt: SetS(GetS + IntToStr(m.GetI)); svmtReal: SetS(GetS + FloatToStr(m.GetD)); svmtStr: SetS(GetS + m.GetS); else Error(reVarInvalidOp); end; else Error(reVarInvalidOp); end; end;
рд╕рдм рдХреБрдЫ рд╕рд░рд▓ рд╣реИред рдЖрдЧреЗ рдХреЗ рд╕рдВрдЪрд╛рд▓рди рдХреЛ рдЗрд╕реА рддрд░рд╣ рд╕реЗ рд╡рд░реНрдгрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ рдЕрдм рд╣рдорд╛рд░реА рдХрдХреНрд╖рд╛ рддреИрдпрд╛рд░ рд╣реИред
рд╕рд░рдгрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП, рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, рдЖрдкрдХреЛ рдЕрднреА рднреА рдХреБрдЫ рддрд░реАрдХреЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рд╕реВрдЪрдХрд╛рдВрдХ рджреНрд╡рд╛рд░рд╛ рдПрдХ рддрддреНрд╡ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг:
function TSVMMem.ArrGet(index: cardinal; grabber:PGrabber): pointer; inline; begin Result := nil; case m_type of svmtArr: Result := PMemArray(m_val)^[index]; svmtStr: begin Result := TSVMMem.CreateFW(Ord(PString(m_val)^[index])); grabber^.AddTask(Result); end; else Error(reInvalidOp); end; end;
рд╕реБрдкрд░ред рдЕрдм рд╣рдо рдЖрдЧреЗ рдмрдврд╝ рд╕рдХрддреЗ рд╣реИрдВред
рд╣рдореЗрдВ рдПрдХ рд╕реНрдЯреИрдХ рдХрд╛ рдПрд╣рд╕рд╛рд╕ рд╣реЛрддрд╛ рд╣реИ
рдереЛрдбрд╝реА рджреЗрд░ рдмрд╛рдж рдореБрдЭреЗ рдРрд╕реЗ рд╡рд┐рдЪрд╛рд░ рдЖрдПред рд╕реНрдЯреИрдХ рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ рд╕реНрдерд┐рд░ (рдЧрддрд┐ рдХреЗ рд▓рд┐рдП) рдФрд░ рдЧрддрд┐рд╢реАрд▓ (рд▓рдЪреАрд▓реЗрдкрди рдХреЗ рд▓рд┐рдП) рджреЛрдиреЛрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред
рдЗрд╕рд▓рд┐рдП, рд╕реНрдЯреЙрдХреНрд╕ рдХреЛ рдмреНрд▓реЙрдХреЛрдВ рдореЗрдВ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╛рдиреА рдпрд╣ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП - рд╢реБрд░реВ рдореЗрдВ рд╕реНрдЯреИрдХ рдХреЗ рд╕рд░рдгреА рдХрд╛ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рдЖрдХрд╛рд░ рд╣реИ (рдореИрдВрдиреЗ рдмреНрд▓реЙрдХ рдЖрдХрд╛рд░ рдХреЛ 256 рддрддреНрд╡реЛрдВ рдкрд░ рд╕реЗрдЯ рдХрд░рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛ рддрд╛рдХрд┐ рдпрд╣ рд╕реБрдВрджрд░ рдФрд░ рдЫреЛрдЯрд╛ рди рд╣реЛ)ред рддрджрдиреБрд╕рд╛рд░, рдПрдХ рдХрд╛рдЙрдВрдЯрд░ рдХреЛ рд╕рд░рдгреА рдХреЗ рд╕рд╛рде рд╢рд╛рдорд┐рд▓ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЬреЛ рд╕реНрдЯреИрдХ рдХреЗ рд╡рд░реНрддрдорд╛рди рд╢реАрд░реНрд╖ рдХреЛ рджрд░реНрд╢рд╛рддрд╛ рд╣реИред рдореЗрдореЛрд░реА рд░рд┐рдпрд▓рд╛рдЗрдЬреЗрд╢рди рдПрдХ рдЕрддрд┐рд░рд┐рдХреНрдд рд▓рдВрдмрд╛ рдСрдкрд░реЗрд╢рди рд╣реИ, рдЬрд┐рд╕реЗ рдХрдо рдмрд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдпрджрд┐ рд╕реНрдЯреИрдХ рдкрд░ рдЕрдзрд┐рдХ рдорд╛рди рдзрдХреЗрд▓ рджрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ, рддреЛ рдЗрд╕рдХрд╛ рдЖрдХрд╛рд░ рд╣рдореЗрд╢рд╛ рджреВрд╕рд░реЗ рдмреНрд▓реЙрдХ рдХреЗ рдЖрдХрд╛рд░ рддрдХ рд╡рд┐рд╕реНрддрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рдореИрдВ рдкреВрд░реЗ рд╕реНрдЯреИрдХ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ рд▓рд╛рддрд╛ рд╣реВрдВ:
type TStack = object public items: array of pointer; size, i_pos: cardinal; parent_vm: pointer; procedure init(vm: pointer); procedure push(p: pointer); function peek: pointer; procedure pop; function popv: pointer; procedure swp; procedure drop; end; PStack = ^TStack; procedure TStack.init(vm: pointer); begin SetLength(items, StackBlockSize); i_pos := 0; size := StackBlockSize; parent_vm := vm; end; procedure TStack.push(p: pointer); inline; begin items[i_pos] := p; inc(i_pos); if i_pos >= size then begin size := size + StackBlockSize; SetLength(items, size) end; end; function TStack.peek: pointer; inline; begin Result := items[i_pos - 1]; end; procedure TStack.pop; inline; begin dec(i_pos); if size - i_pos > StackBlockSize then begin size := size - StackBlockSize; SetLength(items, size); end; end; function TStack.popv: pointer; inline; begin dec(i_pos); Result := items[i_pos]; if size - i_pos > StackBlockSize then begin size := size - StackBlockSize; SetLength(items, size); end; end; procedure TStack.swp; inline; var p: pointer; begin p := items[i_pos - 2]; items[i_pos - 2] := items[i_pos - 1]; items[i_pos - 1] := p; end; procedure TStack.drop; inline; begin SetLength(items, StackBlockSize); size := StackBlockSize; i_pos := 0; end;
рдмрд╛рд╣рд░реА рддрд░реАрдХреЛрдВ рдореЗрдВ, рд╡реАрдПрдо рд╕реНрдЯреИрдХ рдХреЛ рдПрдХ рдкреЙрдЗрдВрдЯрд░ рдкрд╛рд╕ рдХрд░реЗрдЧрд╛ рддрд╛рдХрд┐ рд╡реЗ рд╡рд╣рд╛рдВ рд╕реЗ рдЖрд╡рд╢реНрдпрдХ рддрд░реНрдХ рд▓реЗ рд╕рдХреЗрдВред VM рд╕реНрдЯреНрд░реАрдо рдореЗрдВ рдПрдХ рдкреЙрдЗрдВрдЯрд░ рдХреЛ рдмрд╛рдж рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛, рддрд╛рдХрд┐ рдмрд╛рд╣рд░реА рддрд░реАрдХреЛрдВ рд╕реЗ рдХреЙрд▓рдмреИрдХ рдХреЙрд▓ рдХреЛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗ рдФрд░ рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, VM рддрд░реАрдХреЛрдВ рдкрд░ рдЕрдзрд┐рдХ рд╢рдХреНрддрд┐ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХреА рдЬрд╛ рд╕рдХреЗред
рддреЛ, рдЖрдк рдЗрд╕ рдмрд╛рдд рд╕реЗ рдкрд░рд┐рдЪрд┐рдд рд╣реИрдВ рдХрд┐ рд╕реНрдЯреИрдХ рдХреА рд╡реНрдпрд╡рд╕реНрдерд╛ рдХреИрд╕реЗ рдХреА рдЬрд╛рддреА рд╣реИред рдХреЙрд▓рдмреИрдХ рд╕реНрдЯреИрдХ рдХреЛ рдЙрд╕реА рддрд░рд╣ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдХреЙрд▓ рдФрд░ рд░рд┐рдЯрд░реНрди рдСрдкрд░реЗрд╢рдВрд╕ рдХреА рд╕рд╛рджрдЧреА рдФрд░ рд╕реБрд╡рд┐рдзрд╛ рдФрд░ рдХрдЪрд░рд╛ рд╕рдВрдЧреНрд░рд╣рдХрд░реНрддрд╛ рд╕реНрдЯреИрдХ рд╣реЛрддрд╛ рд╣реИред рдХреЗрд╡рд▓ рдПрдХ рдЪреАрдЬ рдмреНрд▓реЙрдХ рдХреЗ рдЕрдиреНрдп рдЖрдХрд╛рд░ рд╣реИрдВред
рдХрдЪрд░рд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░реЗрдВ
рдпрд╣ рдЖрдорддреМрд░ рдкрд░ рдмрд╣реБрдд, рдмрд╣реБрдд рдХреБрдЫ рд╣реИред рдФрд░ рдЖрдкрдХреЛ рдЗрд╕рдХреЗ рд╕рд╛рде рдХреБрдЫ рдХрд░рдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИред
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдореИрдВ рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХрд┐ рдЕрдиреНрдп рднрд╛рд╖рд╛рдУрдВ рдореЗрдВ рдХрдЪрд░рд╛ рд╕рдВрдЧреНрд░рд╣рдХрд░реНрддрд╛ рдХреИрд╕реЗ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рд╣реЛрддреЗ рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд▓реБрдЖ, рд░реВрдмреА, рдЬрд╛рд╡рд╛, рдкрд░реНрд▓, рдкреАрдПрдЪрдкреА, рдЖрджрд┐ред рд╡реЗ рд╕реНрдореГрддрд┐ рдореЗрдВ рд╡рд╕реНрддреБрдУрдВ рдХреА рдУрд░ рд╕рдВрдХреЗрдд рдХрд░рдиреЗ рдХреЗ рд╕рд┐рджреНрдзрд╛рдВрдд рдкрд░ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВред
рдпрд╛рдиреА рдЗрд╕рд▓рд┐рдП рд╣рдордиреЗ рдХреБрдЫ рдХреЗ рд▓рд┐рдП рдореЗрдореЛрд░реА рдЖрд╡рдВрдЯрд┐рдд рдХреА, рдпрд╣ рддрд╛рд░реНрдХрд┐рдХ рд╣реИ - рд╕реВрдЪрдХ рдХреЛ рддреБрд░рдВрдд рдПрдХ рдЪрд░ / рд╕рд░рдгреА / рдХрд╣реАрдВ рдФрд░ рд░рдЦрд╛ рдЧрдпрд╛ рдерд╛ред рд░рдирдЯрд╛рдЗрдо рдХрдЪрд░рд╛ рд╕рдВрдЧреНрд░рд╛рд╣рдХ рддреБрд░рдВрдд рдЗрд╕ рдХрдЪрд░реЗ рдХреЛ рд╕рдВрднрд╛рд╡рд┐рдд рдХрдЪрд░рд╛ рд╡рд╕реНрддреБрдУрдВ рдХреА рд╕реВрдЪреА рдореЗрдВ рдЬреЛрдбрд╝рддрд╛ рд╣реИред рдкреГрд╖реНрдарднреВрдорд┐ рдореЗрдВ, рдХрдЪрд░рд╛ рдХрд▓реЗрдХреНрдЯрд░ рд╕рднреА рдЪрд░, рд╕рд░рдгрд┐рдпреЛрдВ рдЖрджрд┐ рдХреА рд▓рдЧрд╛рддрд╛рд░ рдирд┐рдЧрд░рд╛рдиреА рдХрд░рддрд╛ рд╣реИред рдпрджрд┐ рд╕рдВрднрд╛рд╡рд┐рдд рдХрдЪрд░реЗ рдХреА рд╕реВрдЪреА рд╕реЗ рдХрд┐рд╕реА рдЪреАрдЬ рдХрд╛ рдХреЛрдИ рд╕рдВрдХреЗрддрдХ рдирд╣реАрдВ рд╣реИ, рддреЛ рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдХрдЪрд░рд╛ рдФрд░ рдЙрд╕рдХреЗ рдиреАрдЪреЗ рд╕реЗ рд╕реНрдореГрддрд┐ рдХреЛ рд╣рдЯрд╛ рджрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред
рдореИрдВрдиреЗ рдЕрдкрдиреА рдмрд╛рдЗрдХ рдмреЗрдЪрдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ред рдореИрдВ рдЯрд╛рд░рд╕ рдмреБрд▓рдмрд╛ рдХреЗ рд╕рд┐рджреНрдзрд╛рдВрдд рдкрд░ рд╕реНрдореГрддрд┐ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХрд╛ рдЖрджреА рд╣реВрдВред рдореИрдВрдиреЗ рдЖрдкрдХреЛ рдЬрдиреНрдо рджрд┐рдпрд╛ рд╣реИ - рдореИрдВ рдЖрдкрдХреЛ рдорд╛рд░реВрдВрдЧрд╛, рдореЗрд░рд╛ рдорддрд▓рдм рд╣реИ, рдЬрдм рдореИрдВ рдЕрдЧрд▓реА рдХрдХреНрд╖рд╛ рдореЗрдВ рдЕрдЧрд▓реЗ рдирд┐: рд╢реБрд▓реНрдХ рдлреЛрди рдХрд░рддрд╛ рд╣реВрдВред рдЗрд╕рд▓рд┐рдП, рдореЗрд░реЗ рд╡реАрдПрдо рдХрд╛ рдХрдЪрд░рд╛ рдХрд▓реЗрдХреНрдЯрд░ рдЕрд░реНрдз-рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд╣реИред рдпрд╛рдиреА рдЗрд╕реЗ рдореИрдиреБрдЕрд▓ рдореЛрдб рдореЗрдВ рдмреБрд▓рд╛рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░ рдЙрд╕рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдХрд╛рдо рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рдЕрдкрдиреА рдмрд╛рд░реА рдореЗрдВ, рдШреЛрд╖рд┐рдд рдЕрд╕реНрдерд╛рдпреА рд╡рд╕реНрддреБрдУрдВ рдореЗрдВ рд╕рдВрдХреЗрдд рдЬреЛрдбрд╝реЗ рдЬрд╛рддреЗ рд╣реИрдВ (рдпрд╣ рднреВрдорд┐рдХрд╛ рдореБрдЦреНрдп рд░реВрдк рд╕реЗ рдЕрдиреБрд╡рд╛рджрдХ рдХреЗ рд╕рд╛рде рдФрд░ рдбреЗрд╡рд▓рдкрд░ рдХреЗ рд╕рд╛рде рдереЛрдбрд╝реА рд╕реА рдЯрд┐рдХреА рд╣реБрдИ рд╣реИ)ред рдЕрдиреНрдп рд╡рд╕реНрддреБрдУрдВ рдХреЗ рддрд╣рдд рдореЗрдореЛрд░реА рдХреЛ рдореБрдХреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдк рдПрдХ рдЕрд▓рдЧ рдУрдкрдХреЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдпрд╛рдиреА рдХреЙрд▓ рдХреЗ рд╕рдордп рдХрдЪрд░рд╛ рд╕рдВрдЧреНрд░рд╣рдХрд░реНрддрд╛ рдХреЗ рдкрд╛рд╕ рдмрд┐рдВрджреБрдУрдВ рдХреА рдПрдХ рддреИрдпрд╛рд░-рдирд┐рд░реНрдорд┐рдд рд╕реВрдЪреА рд╣реЛрддреА рд╣реИ, рдЬрд┐рд╕реЗ рдЖрдкрдХреЛ рдКрдкрд░ рдЬрд╛рдиреЗ рдФрд░ рдореЗрдореЛрд░реА рдХреЛ рдЦрд╛рд▓реА рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред
рддреЛ, рдЕрдм рд╣рдо рдПрдХ рд╕рд╛рд░ рдирд┐рд╖реНрдкрд╛рджрди рдпреЛрдЧреНрдп рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд╕рдВрдХрд▓рди рд╕реЗ рдирд┐рдкрдЯреЗрдВрдЧреЗ
рдореВрд▓ рд░реВрдк рд╕реЗ рдпрд╣ рд╡рд┐рдЪрд╛рд░ рдерд╛ рдХрд┐ рдореЗрд░реА рднрд╛рд╖рд╛ рдореЗрдВ рд▓рд┐рдЦреЗ рдЧрдП рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдмрд┐рдирд╛ рд╕реНрд░реЛрдд рдХреЗ рдЪрд▓ рд╕рдХрддреЗ рд╣реИрдВ, рдЬреИрд╕рд╛ рдХрд┐ рдХрдИ рд╕рдорд╛рди рднрд╛рд╖рд╛рдУрдВ рдХреЗ рд╕рд╛рде рд╣реИред рдпрд╛рдиреА рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рд╡реНрдпрд╛рд╡рд╕рд╛рдпрд┐рдХ рдЙрджреНрджреЗрд╢реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдирд┐рд╖реНрдкрд╛рджрди рдпреЛрдЧреНрдп рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рдкреНрд░рд╛рд░реВрдк рдХреЛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдореБрдЭреЗ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдорд┐рд▓рд╛:
- рд╣реЗрдбрд░, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП "SVMEXE_CNS"ред
- рдПрдХ рдЦрдВрдб рдЬрд┐рд╕рдореЗрдВ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреА рдПрдХ рд╕реВрдЪреА рд╣реИ рдЬрд┐рд╕рдореЗрдВ рд╕реЗ рддрд░реАрдХреЛрдВ рдХрд╛ рдЖрдпрд╛рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
- рдЖрд╡рд╢реНрдпрдХ рд╡рд┐рдзрд┐рдпреЛрдВ рдХрд╛ рдЖрдпрд╛рдд рдЕрдиреБрднрд╛рдЧ, рд╡реЗ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдЬрд┐рдирдореЗрдВ рд╕реЗ рд╡рд┐рдзрд┐ рдЖрдпрд╛рдд рдХреА рдЬрд╛рддреА рд╣реИ, рдЙрдкрд░реЛрдХреНрдд рдЕрдиреБрднрд╛рдЧ рдореЗрдВ рдЙрдирдХреА рд╕рдВрдЦреНрдпрд╛ рджреНрд╡рд╛рд░рд╛ рдЗрдВрдЧрд┐рдд рдХреА рдЬрд╛рддреА рд╣реИрдВред
- рд╕реНрдерд┐рд░рд╛рдВрдХ рдХреА рдзрд╛рд░рд╛ред
- рдХреЛрдб рдЕрдиреБрднрд╛рдЧ
рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдЗрди рд╡рд░реНрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдкрд╛рд░реНрд╕рд░реНрд╕ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд┐рд╕реНрддреГрдд рдЪрд░рдгреЛрдВ рдХреЛ рдкреВрд░рд╛ рдХрд░рдирд╛ рдЙрдЪрд┐рдд рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЖрдк рдореЗрд░реЗ рднрдВрдбрд╛рд░ рдореЗрдВ рдЕрдкрдиреЗ рд▓рд┐рдП рд╕рдм рдХреБрдЫ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВред
рдХреЛрдб рдирд┐рд╖реНрдкрд╛рджрди
рдЙрдкрд░реЛрдХреНрдд рдЕрдиреБрднрд╛рдЧреЛрдВ рдХреЛ рдкрд╛рд░реНрд╕ рдХрд░рдиреЗ рдФрд░ рд╡реАрдПрдо рдХреЛ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдХреЛрдб рдХреЗ рд╕рд╛рде рдПрдХ рд╕реЗрдХреНрд╢рди рд╣реИред рдореЗрд░реЗ рд╡реАрдПрдо рдореЗрдВ, рдПрдХ рдЕрд▓рд┐рдЦрд┐рдд рдмрд╛рдЗрдЯрдХреЛрдб рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЕрд░реНрдерд╛рддред рдирд┐рд░реНрджреЗрд╢ рдордирдорд╛рдиреА рд▓рдВрдмрд╛рдИ рдХреЗ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред
рдУрдкрдХреЛрдб рдХрд╛ рдПрдХ рд╕реЗрдЯ - рдПрдХ рдЫреЛрдЯреА рд╕реА рдЯрд┐рдкреНрдкрдгреА рдХреЗ рд╕рд╛рде рдПрдХ рдЖрднрд╛рд╕реА рдорд╢реАрди рдХреЗ рд▓рд┐рдП рдирд┐рд░реНрджреЗрд╢ рдЬреЛ рдореИрдВ рдкрд╣рд▓реЗ рд╕реЗ рджрд┐рдЦрд╛рддрд╛ рд╣реВрдВ:
type TComand = ( bcPH,
рддреЛ, рдЖрдк рдзрд╛рд░рд╛рдкреНрд░рд╡рд╛рд╣ рдкрд░рд┐рдЪрд┐рдд рд╣реИрдВ рдХрд┐ рдореЗрд░реЗ рджреНрд╡рд╛рд░рд╛ рд▓рд┐рдЦрд┐рдд рд╡реАрдПрдо рдХрд┐рди рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдЕрдВрдЬрд╛рдо рджреЗ рд╕рдХрддрд╛ рд╣реИред рдЕрдм рдореИрдВ рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХрд┐ рдпрд╣ рд╕рдм рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред
рдПрдХ рд╡реАрдПрдо рдХреЛ рдПрдХ рд╡рд╕реНрддреБ рдХреЗ рд░реВрдк рдореЗрдВ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕рд╕реЗ рдЖрдк рдЖрд╕рд╛рдиреА рд╕реЗ рдорд▓реНрдЯреАрдереНрд░реЗрдбрд┐рдВрдЧ рд╕рдорд░реНрдерди рдХреЛ рд▓рд╛рдЧреВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдЗрд╕рдореЗрдВ рдСрдкрдХреЛрдб рдХреЗ рд╕рд╛рде рдПрдХ рд╕рд░рдгреА рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рдВрдХреЗрддрдХ рд╣реИ, рдЖрдИрдкреА (рдЗрдВрд╕реНрдЯреНрд░рдХреНрд╢рди рдкреЙрдЗрдВрдЯрд░) - рдЕрдиреНрдп рд╡реАрдПрдо рд╕рдВрд░рдЪрдирд╛рдУрдВ рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдирд┐рд░реНрджреЗрд╢ рдФрд░ рд╕рдВрдХреЗрдд рдХреА рдСрдлрд╕реЗрдЯред
рдХреЛрдб рдирд┐рд╖реНрдкрд╛рджрди рдПрдХ рдмрдбрд╝рд╛ рд╕реНрд╡рд┐рдЪ-рдХреЗрд╕ рд╣реИред
рдмрд╕ VM рдХрд╛ рд╡рд┐рд╡рд░рдг рджреЗрдВ:
type TSVM = object public ip, end_ip: TInstructionPointer; mainclasspath: string; mem: PMemory; stack: TStack; cbstack: TCallBackStack; bytes: PByteArr; grabber: TGrabber; consts: PConstSection; extern_methods: PImportSection; try_blocks: TTRBlocks; procedure Run; procedure RunThread; procedure LoadByteCodeFromFile(fn: string); procedure LoadByteCodeFromArray(b: TByteArr); end;
рдЕрдкрд╡рд╛рдж рд╕реЗ рдирд┐рдкрдЯрдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдереЛрдбрд╝рд╛ рд╕рд╛
рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╡реАрдПрдо рдореЗрдВ рдЕрдкрд╡рд╛рдж рд╣реИрдВрдбрд▓рд░реНрд╕ рдХрд╛ рдПрдХ рдвреЗрд░ рд╣реЛрддрд╛ рд╣реИ рдФрд░ рдПрдХ рдмрдбрд╝реА рдХреЛрд╢рд┐рд╢ / рдХреИрдЪ рдмреНрд▓реЙрдХ рд╣реЛрддрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдХреЛрдб рдирд┐рд╖реНрдкрд╛рджрди рд▓рд┐рдкрдЯрд╛ рд╣реЛрддрд╛ рд╣реИред рд╕реНрдЯреИрдХ рд╕реЗ, рдЖрдк рдПрдХ рд╕рдВрд░рдЪрдирд╛ рдбрд╛рд▓ рд╕рдХрддреЗ рд╣реИрдВ рдЬрд┐рд╕рдореЗрдВ рдкреНрд░рд╡реЗрд╢ рдкрд░ рдПрдХ рдСрдлрд╕реЗрдЯ рдмрд┐рдВрджреБ рдСрдлрд╕реЗрдЯ рд╣реИ рдФрд░ рдЕрдВрдд рдореЗрдВ / рдЕрдВрдд рдЕрдкрд╡рд╛рдж рд╣реИрдВрдбрд▓рд┐рдВрдЧ рдмреНрд▓реЙрдХ рд╣реИред рдореИрдВрдиреЗ рдЯреНрд░реЙ рдУрдкреЛрдб рднреА рдкреНрд░рджрд╛рди рдХрд┐рдпрд╛, рдЬреЛ рдХрд┐ рдкрдХрдбрд╝рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рд░рдЦрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдХреЛрдб рдХреЛ рдЕрдВрдд рдореЗрдВ / рдЕрдВрдд рдореЗрдВ рдлреЗрдВрдХ рджреЗрддрд╛ рд╣реИ рдпрджрд┐ рдпрд╣ рд╕рдлрд▓ рд╣реЛрддрд╛ рд╣реИ, рд╕рд╛рде рд╣реА рд╕рд╛рде рд╕рдВрдмрдВрдзрд┐рдд рд╕реНрдЯреИрдХ рдХреЗ рд╢реАрд░реНрд╖ рд╕реЗ рдЕрдкрд╡рд╛рдж рд╣реИрдВрдбрд▓рд░ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рд╕рд╛рде рдмреНрд▓реЙрдХ рдХреЛ рд╣рдЯрд╛ рджреЗрддрд╛ рд╣реИред рдХреНрдпрд╛ рдпрд╣ рд╕рд░рд▓ рд╣реИ? рдмрд╕ред рдХреНрдпрд╛ рдпрд╣ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИ? рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХред
рдЪрд▓реЛ рдмрд╛рд╣рд░реА рддрд░реАрдХреЛрдВ рдФрд░ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░рддреЗ рд╣реИрдВ
рдореИрдВрдиреЗ рдкрд╣рд▓реЗ рд╣реА рдЙрдирдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ред рдЖрдпрд╛рдд, рдкреБрд╕реНрддрдХрд╛рд▓рдп ... рдЙрдирдХреЗ рдмрд┐рдирд╛, рднрд╛рд╖рд╛ рдореЗрдВ рд╡рд╛рдВрдЫрд┐рдд рд▓рдЪреАрд▓рд╛рдкрди рдФрд░ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдирд╣реАрдВ рд╣реЛрдЧреАред
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╡реАрдПрдо рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдореЗрдВ, рд╣рдо рдЗрд╕реЗ рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╛рд╣рд░реА рд╡рд┐рдзрд┐ рдХреЗ рдкреНрд░рдХрд╛рд░ рдФрд░ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХреА рдШреЛрд╖рдгрд╛ рдХрд░реЗрдВрдЧреЗред
type TExternalFunction = procedure(PStack: pointer); cdecl; PExternalFunction = ^TExternalFunction;
рдПрдХ рд╡реАрдПрдо рдЖрдпрд╛рдд рдХрд░рддреЗ рд╕рдордп, рдЖрдпрд╛рдд рдЕрдиреБрднрд╛рдЧ рдкрд╛рд░реНрд╕рд░ рдмрд┐рдВрджреБрдУрдВ рдХреА рдПрдХ рд╕рд░рдгреА рдХреЛ рдмрд╛рд╣рд░реА рддрд░реАрдХреЛрдВ рд╕реЗ рднрд░рддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП, рдкреНрд░рддреНрдпреЗрдХ рд╡рд┐рдзрд┐ рдХрд╛ рдПрдХ рд╕реНрдереИрддрд┐рдХ рдкрддрд╛ рд╣реЛрддрд╛ рд╣реИ, рдЬреЛ рдХрд┐ VM рдХреЗ рддрд╣рдд рдЖрд╡реЗрджрди рдХреЗ рдЕрд╕реЗрдВрдмрд▓реА рдХреЗ рдЪрд░рдг рдореЗрдВ рдЧрдгрдирд╛ рдХреА рдЬрд╛рддреА рд╣реИ рдФрд░ рдЬрд┐рд╕рдХреЗ рджреНрд╡рд╛рд░рд╛ рд╡рд╛рдВрдЫрд┐рдд рд╡рд┐рдзрд┐ рдХреЛ рдмреБрд▓рд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рдмрд╛рдж рдореЗрдВ рдХреЛрдб рдирд┐рд╖реНрдкрд╛рджрди рдХреЗ рджреМрд░рд╛рди рдХреЙрд▓ рдЗрд╕ рддрд░рд╣ рд╕реЗ рд╣реЛрддрд╛ рд╣реИ:
TExternalFunction(self.extern_methods^.GetFunc(TSVMMem(self.stack.popv).GetW))(@self.stack);
рдЖрдЗрдП рд╣рдорд╛рд░реЗ рд╡реАрдПрдо рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рд░рд▓ рдкреБрд╕реНрддрдХрд╛рд▓рдп рд▓рд┐рдЦреЗрдВ
рдФрд░ рдЙрд╕реЗ рдкрд╣рд▓реА рдиреАрдВрдж рд╡рд┐рдзрд┐ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рджреЗрдВ:
library bf; {$mode objfpc}{$H+} uses SysUtils, svm_api in '..\svm_api.pas'; procedure DSleep(Stack:PStack); cdecl; begin sleep(TSVMMem(Stack^.popv).GetW); end; exports DSleep name 'SLEEP'; end.
рдкрд░рд┐рдгрд╛рдо
рдЗрд╕ рдкрд░ рдореИрдВ рд╢рд╛рдпрдж рдПрдХ рдЪрдХреНрд░рд┐рдд рдЪрдХреНрд░ рд╕реЗ рдЕрдкрдирд╛ рдкрд╣рд▓рд╛ рд▓реЗрдЦ рд╕рдорд╛рдкреНрдд рдХрд░реВрдВрдЧрд╛ред
рдЖрдЬ рдореИрдВрдиреЗ рднрд╛рд╖рд╛ рд░рдирдЯрд╛рдЗрдо рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХрд╛ рдХреБрдЫ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рд╡рд░реНрдгрди рдХрд┐рдпрд╛ рд╣реИред рдореЗрд░рд╛ рдорд╛рдирдирд╛ тАЛтАЛрд╣реИ рдХрд┐ рдпрд╣ рд▓реЗрдЦ рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдЙрдкрдпреЛрдЧреА рд╣реЛрдЧрд╛ рдЬреЛ рдЕрдкрдиреА рднрд╛рд╖рд╛ рд▓рд┐рдЦрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рдиреЗ рдпрд╛ рдпрд╣ рд╕рдордЭрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдХреИрд╕реЗ рд╕рдорд╛рди рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛рдПрдВ рдХрд╛рдо рдХрд░рддреА рд╣реИрдВред
рдкреВрд░рд╛ VM рдХреЛрдб рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдореЗрдВ / рд░рдирдЯрд╛рдЗрдо / svm рдмреНрд░рд╛рдВрдЪ рдореЗрдВ рдЙрдкрд▓рдмреНрдз рд╣реИред
рдпрджрд┐ рдЖрдкрдХреЛ рдпрд╣ рд▓реЗрдЦ рдкрд╕рдВрдж рдЖрдпрд╛ рд╣реИ, рддреЛ рдХрд░реНрдо рдореЗрдВ рдкреНрд▓рд╕ рдлреЗрдВрдХрдиреЗ рдФрд░ рдЗрд╕реЗ рд╢реАрд░реНрд╖ рдореЗрдВ рдЙрдард╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд▓рд╕реА рдордд рдмрдиреЛ, рдореИрдВрдиреЗ рдХреЛрд╢рд┐рд╢ рдХреА рдФрд░ рдЖрдкрдХреЗ рд▓рд┐рдП рдкреНрд░рдпрд╛рд╕ рдХрд░реВрдВрдЧрд╛ред
рдпрджрд┐ рдЖрдкрдХреЗ рд▓рд┐рдП рдХреБрдЫ рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рд╣реИ, рддреЛ рдЯрд┐рдкреНрдкрдгреА рдпрд╛
рдордВрдЪ рдкрд░ рдЖрдкрдХрд╛ рд╕реНрд╡рд╛рдЧрдд рд╣реИред
рд╢рд╛рдпрдж рдЖрдкрдХреЗ рд╕рд╡рд╛рд▓ рдФрд░ рдЙрдирдХреЗ рдЬрд╡рд╛рдм рди рдХреЗрд╡рд▓ рдЖрдкрдХреЗ рд▓рд┐рдП рджрд┐рд▓рдЪрд╕реНрдк рд╣реЛрдВрдЧреЗред