ObjectScript рдПрдХ рдирдпрд╛ рдУрдкрди рд╕реЛрд░реНрд╕ рдСрдмреНрдЬреЗрдХреНрдЯ-рдУрд░рд┐рдПрдВрдЯреЗрдб рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рд▓реИрдВрдЧреНрд╡реЗрдЬ рд╣реИред ObjectScript рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ, рд▓реБрдЖ рдФрд░ PHP рдЬреИрд╕реА рднрд╛рд╖рд╛рдУрдВ рдХреА рдХреНрд╖рдорддрд╛рдУрдВ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рддрд╛ рд╣реИред рдЙрдирдХреА рдкреНрд░рд╕реНрддреБрддрд┐
рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рдХреБрдЫ рд╕рдордп рдкрд╣рд▓реЗ рдПрдХ рд╣рдм рдкрд░ рд╣реБрдИ рдФрд░ рдкрд╛рдардХреЛрдВ рдХреЗ рдмреАрдЪ рд░реБрдЪрд┐ рдФрд░ рдЧрд░реНрдордЬреЛрд╢реА рд╕реЗ рдЪрд░реНрдЪрд╛ рд╣реБрдИред рдЗрд╕рд▓рд┐рдП, рдореИрдВрдиреЗ рдкреНрд░рд╕реНрддреБрддрд┐ рдкрд░ рдзреНрдпрд╛рди рди рджреЗрдиреЗ рдФрд░ рдСрдмреНрдЬреЗрдХреНрдЯрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдПрдкреАрдЖрдИ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛ред
рдореИрдВ рдПрдкреАрдЖрдИ рд╡рд┐рд╡рд░рдг рдХреЛ рдХрдИ рднрд╛рдЧреЛрдВ рдореЗрдВ рддреЛрдбрд╝рдХрд░ рд▓реЗрдЦреЛрдВ рдХреЛ рдпрдерд╛рд╕рдВрднрд╡ рдЫреЛрдЯрд╛ рдмрдирд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реВрдВрдЧрд╛ред
рднрд╛рдЧ 1: рд╕реНрдЯреИрдХ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛, C ++ рд╕реЗ OS рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд░рдирд╛
OS (ObjectScript) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рдПрдХ рдиреНрдпреВрдирддрдо рдХрд╛рд░реНрдпрдХреНрд░рдо рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИ:
#include "objectscript.h" using namespace ObjectScript; int main() { OS * os = OS::create();
рдпрд╛рдиреА рдПрдХ рдУрдПрд╕ рдЙрджрд╛рд╣рд░рдг рдмрдирд╛рдПрдВ, рдЗрд╕рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░реЗрдВ рдФрд░ рдЗрд╕реЗ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рд╣рдЯрд╛рдПрдВ, рд▓реЗрдХрд┐рди рди рдХреЗрд╡рд▓
delete
рдСрдкрд░реЗрдЯрд░ рдХреЗ рд╕рд╛рде, рдмрд▓реНрдХрд┐
release
рд╡рд┐рдзрд┐ рдХреЛ рдХреЙрд▓ рдХрд░рдХреЗред
рдУрдПрд╕ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЛ рдПрдХ рд╕рд╛рде рдХрдИ рд╡рд╛рдВрдЫрд┐рдд рдХреЗ рд░реВрдк рдореЗрдВ рдмрдирд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдпрджрд┐ рдЖрд╡рд╢реНрдпрдХ рд╣реЛ, рддреЛ рд╡реЗ рдПрдХ рджреВрд╕рд░реЗ рдХреЗ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕реНрд╡рддрдВрддреНрд░ рд░реВрдк рд╕реЗ рдХрд╛рдо рдХрд░реЗрдВрдЧреЗред
рдЖрдЧреЗ, рдореИрдВ рдХреЛрдб рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рджреВрдВрдЧрд╛ рдЬреЛ
TODO рдХреЗ рдмрдЬрд╛рдп рд╕реНрдерд┐рдд рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП
: рдпрд╣рд╛рдБ рдореБрдЦреНрдп рдХреЛрдб ред
рддреЛ, рдЪрд▓рд┐рдП C ++ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд OS рдХреЛрдб рдХрд╛ рдЕрдиреБрдХрд░рдг рдХрд░рддреЗ рд╣реИрдВ:
print("10 * (3+2) = ", 10 * (3+2))
рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдпрд╣рд╛рдВ рдХреНрдпрд╛ рд╣реИ: рджреЛ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рд╕рд╛рде рд╡реИрд╢реНрд╡рд┐рдХ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд▓рд┐рдП рдПрдХ рдХреЙрд▓, рдкрд╣рд▓рд╛ рдПрдХ рдирд┐рд░рдВрддрд░ рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╣реИ, рджреВрд╕рд░рд╛ рдЧрдгрд┐рддреАрдп рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рдкрд░рд┐рдгрд╛рдо рд╣реИред
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдХреЙрд▓ рддреИрдпрд╛рд░ рдХрд░рдирд╛ рд╣реИред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рд╕реНрдЯреИрдХ рдкрд░ рджреЛ рдорд╛рди рд░рдЦрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдкрд╣рд▓рд╛ рдлрд╝рдВрдХреНрд╢рди рдЦреБрдж рд╣реИ, рджреВрд╕рд░рд╛ рдЗрд╕ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд▓рд┐рдП рд╣реИред рдпрджрд┐ рдлрд╝рдВрдХреНрд╢рди рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рддреЛ рдареАрдХ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрдХ рд╕реНрдереИрддрд┐рдХ рдлрд╝рдВрдХреНрд╢рди, рддреЛ
null
рдХреЛ
this
рд░реВрдк рдореЗрдВ рд░рдЦрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рд╣рдо рдЗрд╕реЗ рдЗрд╕ рддрд░рд╣ рдХрд░рддреЗ рд╣реИрдВ:
os->getGlobal("print");
рдЕрдм рд╣рдо рд╕реНрдЯреИрдХ рдореЗрдВ рдЙрди рдорд╛рдкрджрдВрдбреЛрдВ рдХреЛ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ рдЬрд┐рдирдХреЗ рд╕рд╛рде рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдмреБрд▓рд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛:
os->pushString("10 * (3+2) = ");
рдЕрдм рд╣рдо рджреВрд╕рд░реЗ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд▓рд┐рдП рдЧрдгрд┐рддреАрдп рдХреНрд░рд┐рдпрд╛рдУрдВ рдХрд╛ рдЕрдиреБрдХрд░рдг рдХрд░рддреЗ рд╣реИрдВ:
os->pushNumber(10);
рд╣реЛ рдЧрдпрд╛!
runOp
рд╡рд┐рдзрд┐ рдУрдПрд╕ рдХрд░реНрдиреЗрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕реНрдЯреИрдХ рдореЗрдВ рдореВрд▓реНрдпреЛрдВ рдкрд░ рдЧрдгрд┐рддреАрдп, рддрд╛рд░реНрдХрд┐рдХ рдФрд░ рдмрд┐рдЯрд╡рд╛рдЗрдЬрд╝ рдСрдкрд░реЗрдЯрд░реЛрдВ рдХрд╛ рдкреНрд░рджрд░реНрд╢рди рдХрд░ рд╕рдХрддреА рд╣реИред рджреВрд╕рд░реЗ рд╢рдмреНрджреЛрдВ рдореЗрдВ, рдпрджрд┐ рдЖрд╡рд╢реНрдпрдХ рд╣реЛ, рддреЛ рдЯрд╛рдЗрдк рд░реВрдкрд╛рдВрддрд░рдг рд╣реЛрдЧрд╛, рдЖрджрд┐ ...
OP_ADD
рд╕реНрдЯреИрдХ рдХреЗ рд╢реАрд░реНрд╖ рдкрд░ рджреЛ рдорд╛рдиреЛрдВ рдкрд░ рдЕрддрд┐рд░рд┐рдХреНрдд рдСрдкрд░реЗрдЯрд░ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рддрд╛ рд╣реИ (рдЬреЛ рдХрд┐ рдкрд┐рдЫрд▓реЗ рджреЛ рдмрд╛рд░ рд╕реНрдЯреИрдХ рдкрд░ рд░рдЦрд╛ рдЧрдпрд╛ рдерд╛)ред рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ, рдкрд░рд┐рдгрд╛рдо рдЙрдиреНрд╣реЗрдВ рд╕реНрдЯреИрдХ рдкрд░ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдЧрд╛ (рдпрд╛рдиреА, рд╕реНрдЯреИрдХ рд╕реЗ рджреЛ рдорд╛рди рдирд┐рдХрд╛рд▓реЗ рдЬрд╛рдПрдВрдЧреЗ, рдФрд░ рдкрд░рд┐рдгрд╛рдо рдЬреЛрдбрд╝рд╛ рдЬрд╛рдПрдЧрд╛)ред
OP_MUL
- рдЧреБрдгрд╛ рдХреЗ рд╕рдорд╛рдиред
рдлрд┐рд▓рд╣рд╛рд▓, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд╕реНрдЯреИрдХ рдкрд░ 4 рдорд╛рди рд╣реЛрдВрдЧреЗ:
1 - рдлрд╝рдВрдХреНрд╢рди,
2 - рдирд▓,
3 - рд╕реНрдЯреНрд░рд┐рдВрдЧ,
4 - рд╕рдВрдЦреНрдпрд╛ред рдмрд╣реБрдд рдмрдврд╝рд┐рдпрд╛! рдЖрдк рдХреЙрд▓ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
os->call(2);
рдпрд╣реА рд╣реИ, рд╣рдо рдХрдВрд╕реЛрд▓ рдХреЛ рджреЗрдЦрддреЗ рд╣реИрдВ (рдХрдВрд╕реЛрд▓ рдкрд░ рдкрд░рд┐рдгрд╛рдо рдкреНрд░рд┐рдВрдЯ рдХрд░реЗрдВ), рдпрд╣ рдЗрд╕ рддрд░рд╣ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП:
10 * (3+2) = 50
рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╕реНрдЯреИрдХ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЦрд╛рд▓реА рд╣реЛ рдЬрд╛рдПрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд░рддреЗ рд╕рдордп рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ 4 рдорд╛рди рд╕реНрдЯреИрдХ рд╕реЗ рд╣рдЯрд╛ рджрд┐рдП рдЬрд╛рдПрдВрдЧреЗред
рдЙрджрд╛рд╣рд░рдг 2
рд╣рдо OS рдкрд░ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЛрдб рдХрд╛ рдЕрдиреБрдХрд░рдг рдХрд░реЗрдВрдЧреЗ:
bar = {firsname="James", lastname="Bond"} bar.profession = "actor" print bar
рд╕реНрдЯреИрдХ рдкрд░ рдПрдХ рдирдИ рд╡рд╕реНрддреБ рдмрдирд╛рдПрдВ:
os->newObject();
рдкрд╣рд▓рд╛ рдЧреБрдг
firsname="James"
рд╕реЗрдЯ рдХрд░реЗрдВ:
os->pushStackValue(-1);
-1, рд╕реНрдЯреИрдХ рдХреЗ рд╢реАрд░реНрд╖ рдкрд░ рдПрдХ рд╕рд╛рдкреЗрдХреНрд╖ рд╕реВрдЪрдХ рд╣реИ, рдЕрд░реНрдерд╛рддред рд╕реНрдЯреИрдХ рдХреЗ рд▓рд┐рдП рдПрдХ рдСрдмреНрдЬреЗрдХреНрдЯ рдЬреЛрдбрд╝реЗрдВ рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рд╣рдо рд╕рдВрдкрддреНрддрд┐ рд╕реЗрдЯ рдХрд░реЗрдВрдЧреЗ (рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рд╕рдВрджрд░реНрдн рджреНрд╡рд╛рд░рд╛ рд╕реНрдЯреИрдХ рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ рд╣реИ)ред
os->pushString("firsname");
setProperty
рд╡рд┐рдзрд┐ рд╕рдВрдкрддреНрддрд┐ рд╕реЗрдЯ рдХрд░рддреА рд╣реИ рдФрд░ рд╕реНрдЯреИрдХ рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЧрдП рдорд╛рдиреЛрдВ рдХреЛ рдирд┐рдХрд╛рд▓рддреА рд╣реИ (рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╕реНрдЯреИрдХ рдХреЗ рд╢реАрд░реНрд╖ рдкрд░ рддреАрди рдорд╛рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ: рдСрдмреНрдЬреЗрдХреНрдЯ, рд╕рдВрдкрддреНрддрд┐ рдХрд╛ рдирд╛рдо рдФрд░ рдореВрд▓реНрдп)ред
рд╣рдо рджреВрд╕рд░реА рд╕рдВрдкрддреНрддрд┐ рдХреЗ рд╕рд╛рде рднреА рдРрд╕рд╛ рд╣реА рдХрд░реЗрдВрдЧреЗ, рд▓реЗрдХрд┐рди рдЫреЛрдЯреЗ рддрд░реАрдХреЗ рд╕реЗ:
os->pushString("Bond");
-2, рд╕реНрдЯреИрдХ рдХреЗ рд╢реАрд░реНрд╖ рд╕реЗ рджреВрд╕рд░реЗ рдореВрд▓реНрдп рдХреЗ рд╕рд╛рдкреЗрдХреНрд╖ рд╕рдВрдХреЗрддрдХ рд╣реИ (рдпрд╣ рд╣рдорд╛рд░реА рд╡рд╕реНрддреБ рд╣реИ), рдФрд░ рд╕реНрдЯреНрд░рд┐рдВрдЧ
"Bond"
рдЕрдм рд╕реНрдЯреИрдХ рдХреЗ рд╢реАрд░реНрд╖ рдкрд░ рд╣реИред
рдЕрдм рд╣рдорд╛рд░реА рд╡рд╕реНрддреБ рдХреЛ рд╡реИрд╢реНрд╡рд┐рдХ рд╡реИрд░рд┐рдПрдмрд▓
рдмрд╛рд░ рдореЗрдВ рд╕рд╣реЗрдЬреЗрдВ:
os->setGlobal("bar");
рд╡рд░реНрддрдорд╛рди рдореЗрдВ рд╕реНрдЯреИрдХ рдореЗрдВ рдХреЛрдИ рдорд╛рди рдирд╣реАрдВ рд╣реИрдВред рдЕрдм рдХреЛрдб
bar.profession = "actor"
рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░реЗрдВред
bar.profession = "actor"
:
os->getGlobal("bar");
рд╣реЛ рдЧрдпрд╛, рдЕрдм
print bar
:
os->getGlobal("print");
рдФрд░ рдХрдВрд╕реЛрд▓ рдХреЛ рджреЗрдЦреЛ, рдпрд╣ рдЗрд╕ рддрд░рд╣ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП:
{"firsname":"James","lastname":"Bond","profession":"actor"}
рдЙрджрд╛рд╣рд░рдг 3
рд╣рдо OS рдкрд░ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЛрдб рдХрд╛ рдЕрдиреБрдХрд░рдг рдХрд░реЗрдВрдЧреЗ:
print(concat(5, " big differences"))
рд╣рдо рд╣рдореЗрд╢рд╛ рдХреА рддрд░рд╣ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ:
os->getGlobal("print");
рдЗрд╕ рд╕реНрддрд░ рдкрд░, рд╣рдордиреЗ 2 рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд┐рдпрд╛ рдФрд░ рдЖрдЙрдЯрдкреБрдЯ рдкрд░ 1 рдкрд░рд┐рдгрд╛рдо рдХрд╛ рдЕрдиреБрд░реЛрдз рдХрд┐рдпрд╛ (concat 1 рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдкрд░рд┐рдгрд╛рдо рджреЗрддрд╛ рд╣реИ, рдпрджрд┐ рд╣рдо 0 рдкрд░рд┐рдгрд╛рдореЛрдВ рдХрд╛ рдЕрдиреБрд░реЛрдз рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдлрд╝рдВрдХреНрд╢рди рдХреЙрд▓ рдХреЗ рдмрд╛рдж рдкрд░рд┐рдгрд╛рдо рдХреЗ рд╕рд╛рде рд╕реНрдЯреИрдХ рдореЗрдВ рдХреЛрдИ рдорд╛рди рдирд╣реАрдВ рд╣реЛрдЧрд╛, рдпрджрд┐ рд╣рдореЗрдВ 2 рдпрд╛ рдЕрдзрд┐рдХ рдорд╛рдиреЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рддреЛ) рдкрд╣рд▓рд╛ рдкрд░рд┐рдгрд╛рдо рдХреЙрдирдХрдЯ рдлрдВрдХреНрд╢рди рд╕реЗ рд╣реЛрдЧрд╛, рдФрд░ рдмрд╛рдХреА рдирд▓ рд╕реЗ рдкреВрд░рдХ рд╣реЛрдЧрд╛)ред
рдЕрдм рдХреЙрд▓
print
:
os->call(1);
рдХрдВрд╕реЛрд▓ рдЗрд╕ рддрд░рд╣ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП:
5 big differences
рдХрд╛рд░реНрдпрдХреНрд░рдо рдХрд╛ рдкреВрд░рд╛ рдкрд╛рда:
#include "objectscript.h" using namespace ObjectScript; int main() { OS * os = OS::create(); os->getGlobal("print");
рдЖрдк
рдЗрд╕ рд▓рд┐рдВрдХ рдкрд░ рдСрдмреНрдЬреЗрдХреНрдЯрд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╕реНрд░реЛрдд рдХреЛрдб рдФрд░ рдЗрд╕ рд▓реЗрдЦ рд╕реЗ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдбрд╛рдЙрдирд▓реЛрдб рдХрд░ рд╕рдХрддреЗ
рд╣реИрдВ ,
proj.win32 \ example.sln ,
stack_usage рдкреНрд░реЛрдЬреЗрдХреНрдЯ
рдЦреЛрд▓реЗрдВ ред