рдЬрдм C ++ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ рд╕реНрдХреНрд░рд┐рдкреНрдЯрд┐рдВрдЧ рднрд╛рд╖рд╛ рдХреЛ рдПрдореНрдмреЗрдб рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рддреЛ рд╕рдмрд╕реЗ рдкрд╣рд▓реА рдмрд╛рдд рдЬреЛ рд▓реЛрдЧ рдпрд╛рдж рдХрд░рддреЗ рд╣реИрдВ рд╡рд╣ рд╣реИ Luaред рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рдпрд╣ рдирд╣реАрдВ рд╣реЛрдЧрд╛, рдореИрдВ рджреВрд╕рд░реЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░реВрдВрдЧрд╛, рдХреЛрдИ рднреА рдХрдо рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдФрд░ рдЖрд╕рд╛рди рднрд╛рд╖рд╛ рд╕реАрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдирд╣реАрдВ рд╣реИ рдЬрд┐рд╕реЗ рдЪрд╛рдпрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред

рд╕рдВрдХреНрд╖рд┐рдкреНрдд рдкрд░рд┐рдЪрдп
рдЬрдм рдореИрдВрдиреЗ рдЬреЗрд╕рди рдЯрд░реНрдирд░
рдХреЗ рд╡реНрдпрд╛рдЦреНрдпрд╛рди рдореЗрдВ рд╕реЗ рдПрдХ рднрд╛рд╖рд╛ рдХреЗ рд░рдЪрдирд╛рдХрд╛рд░реЛрдВ рдХреЛ рджреЗрдЦрд╛ рддреЛ рдореИрдВрдиреЗ рд╕рдВрдпреЛрдЧ рд╕реЗ рдЪрд╛рдИрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдкрд░ рдареЛрдХрд░ рдЦрд╛рдИред рдЗрд╕рдиреЗ рдореБрдЭреЗ рджрд┐рд▓рдЪрд╕реНрдкреА рджреА, рдФрд░ рдЙрд╕ рдХреНрд╖рдг рдЬрдм рдЗрд╕ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рдПрдХ рд╕реНрдХреНрд░рд┐рдкреНрдЯрд┐рдВрдЧ рднрд╛рд╖рд╛ рдХрд╛ рдЪрдпрди рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рдерд╛, рдореИрдВрдиреЗ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ - рдХреНрдпреЛрдВ рдирд╣реАрдВ ChaiScript рдХреА рдХреЛрд╢рд┐рд╢ рдХреА? рдкрд░рд┐рдгрд╛рдо рдиреЗ рдореБрдЭреЗ рдЖрд╢реНрдЪрд░реНрдпрдЪрдХрд┐рдд рдХрд░ рджрд┐рдпрд╛ (рдореЗрд░рд╛ рд╡реНрдпрдХреНрддрд┐рдЧрдд рдЕрдиреБрднрд╡ рд▓реЗрдЦ рдХреЗ рдЕрдВрдд рдХреЗ рдХрд░реАрдм рд▓рд┐рдЦрд╛ рдЬрд╛рдПрдЧрд╛), рд╣рд╛рд▓рд╛рдВрдХрд┐, рдХреЛрдИ рдмрд╛рдд рдирд╣реАрдВ рдХрд┐рддрдиреА рдЕрдЬреАрдм рд▓рдЧ рд╕рдХрддреА рд╣реИ, рд╣рдм рдкрд░ рдПрдХ рднреА рд▓реЗрдЦ рдирд╣реАрдВ рдерд╛ рдЬрд┐рд╕рдиреЗ рдЗрд╕ рднрд╛рд╖рд╛ рдХрд╛ рдХрдо рд╕реЗ рдХрдо рдХрд┐рд╕реА рднреА рддрд░рд╣ рд╕реЗ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛, рдФрд░ рдореИрдВрдиреЗ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ рдХрд┐ рдЙрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд▓рд┐рдЦрдирд╛ рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ред рдмреЗрд╢рдХ, рднрд╛рд╖рд╛ рдореЗрдВ
рдкреНрд░рд▓реЗрдЦрди рдФрд░ рдПрдХ
рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рд╕рд╛рдЗрдЯ рд╣реИ , рд▓реЗрдХрд┐рди рд╣рд░ рдХреЛрдИ рдЗрд╕реЗ рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рд╕реЗ рдирд╣реАрдВ рдкрдврд╝реЗрдЧрд╛, рдФрд░ рд▓реЗрдЦ рдХрд╛ рдкреНрд░рд╛рд░реВрдк рдХрдИ (рдореЗрд░реЗ рд╕рд╣рд┐рдд) рдХреЗ рдХрд░реАрдм рд╣реИред
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╣рдо рднрд╛рд╖рд╛ рдХреЗ рд╡рд╛рдХреНрдп рд╡рд┐рдиреНрдпрд╛рд╕ рдФрд░ рдЙрд╕рдХреА рд╕рднреА рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░реЗрдВрдЧреЗ, рдлрд┐рд░ рдЕрдкрдиреЗ C ++ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ рдЗрд╕реЗ рдХреИрд╕реЗ рд▓рд╛рдЧреВ рдХрд░реЗрдВ, рдФрд░ рдЕрдВрдд рдореЗрдВ рдореИрдВ рдЕрдкрдиреЗ рдЕрдиреБрднрд╡ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдереЛрдбрд╝реА рдмрд╛рдд рдХрд░реВрдВрдЧрд╛ред рдпрджрд┐ рдЖрдк рдореЗрдВ рд╕реЗ рдХреБрдЫ рд╣рд┐рд╕реНрд╕рд╛ рджрд┐рд▓рдЪрд╕реНрдкреА рдирд╣реАрдВ рд╣реИ, рдпрд╛ рдЖрдк рдПрдХ рдЕрд▓рдЧ рдХреНрд░рдо рдореЗрдВ рд▓реЗрдЦ рдкрдврд╝рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рд╕рд╛рдордЧреНрд░реА рдХреА рддрд╛рд▓рд┐рдХрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
рднрд╛рд╖рд╛ рд╡рд╛рдХреНрдп рд░рдЪрдирд╛
ChaiScript рдЕрдкрдиреЗ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдореЗрдВ C ++ рдФрд░ JS рдХреЗ рд╕рдорд╛рди рд╣реИред рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдпрд╣, рд╕реНрдХреНрд░рд┐рдкреНрдЯрд┐рдВрдЧ рднрд╛рд╖рд╛рдУрдВ рдХреЗ рд╡рд┐рд╢рд╛рд▓ рдмрд╣реБрдордд рдХреА рддрд░рд╣, рдЧрддрд┐рд╢реАрд▓ рд░реВрдк рд╕реЗ рдЯрд╛рдЗрдк рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рд╡рд┐рдкрд░реАрдд, рдЗрд╕рдореЗрдВ рд╕рдЦреНрдд рдЯрдВрдХрдг (рдХреЛрдИ
1 + "2"
) рдирд╣реАрдВ рд╣реИред рдПрдХ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдХрдЪрд░рд╛ рдХрд▓реЗрдХреНрдЯрд░ рднреА рд╣реИ, рднрд╛рд╖рд╛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╡реНрдпрд╛рдЦреНрдпрд╛ рдпреЛрдЧреНрдп рд╣реИ, рдЬреЛ рдЖрдкрдХреЛ рдмрд╛рдпрдЯреЗрдХреЛрдб рдореЗрдВ рд╕рдВрдХрд▓рди рдХреЗ рдмрд┐рдирд╛, рд▓рд╛рдЗрди рджреНрд╡рд╛рд░рд╛ рдХреЛрдб рд▓рд╛рдЗрди рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдЗрд╕рдореЗрдВ рдЕрдкрд╡рд╛рджреЛрдВ рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди рд╣реИ (рдЕрддрд┐рд░рд┐рдХреНрдд, рд╕рдВрдпреБрдХреНрдд, рдЖрдкрдХреЛ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рдЕрдВрджрд░ рдФрд░ рд╕реА ++ рдореЗрдВ рджреЛрдиреЛрдВ рдХреЛ рдкрдХрдбрд╝рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ), рд▓реИрдореНрдмреНрдбрд╛ рдлрд╝рдВрдХреНрд╢рди, рдСрдкрд░реЗрдЯрд░ рдУрд╡рд░рд▓реЛрдбрд┐рдВрдЧред рдпрд╣ рд░рд┐рдХреНрдд рд╕реНрдерд╛рди рдХреЗ рдкреНрд░рддрд┐ рд╕рдВрд╡реЗрджрдирд╢реАрд▓ рдирд╣реАрдВ рд╣реИ, рдЬреЛ рдЖрдкрдХреЛ рдЕрд░реНрдзрд╡рд┐рд░рд╛рдо рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдПрдХ рдкрдВрдХреНрддрд┐ рдХреЗ рд░реВрдк рдореЗрдВ рд▓рд┐рдЦрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рдпрд╛ рдЕрдЬрдЧрд░ рд╢реИрд▓реА рдореЗрдВ, рдПрдХ рдирдИ рдкрдВрдХреНрддрд┐ рдХреЗ рд╕рд╛рде рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХреЛ рдЕрд▓рдЧ рдХрд░рддрд╛ рд╣реИред
рдЖрджрд┐рдо рдкреНрд░рдХрд╛рд░
рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдкреВрд░реНрдгрд╛рдВрдХ рд╕реНрдЯреЛрд░реЗрдЬ рд╡реИрд░рд┐рдПрдмрд▓ рдХреЗ рджреНрд╡рд╛рд░рд╛ ChaiScript рдЗрдВрдЯ, рдбрдмрд▓ рдХреЗ рд░реВрдк рдореЗрдВ рд╡рд╛рд╕реНрддрд╡рд┐рдХ, рдФрд░ std :: string рдХреЗ рд╕рд╛рде рд╕реНрдЯреНрд░рд┐рдВрдЧреНрд╕ред рдпрд╣ рдХреЙрд▓рд┐рдВрдЧ рдХреЛрдб рдХреЗ рд╕рд╛рде рд╕рдВрдЧрддрддрд╛ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдореБрдЦреНрдп рд░реВрдк рд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рднрд╛рд╖рд╛ рдореЗрдВ рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдкреНрд░рддреНрдпрдп рднреА рд╣реЛрддрд╛ рд╣реИ, рддрд╛рдХрд┐ рд╣рдо рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рд╕рдВрдХреЗрдд рдХрд░ рд╕рдХреЗрдВ рдХрд┐ рд╣рдорд╛рд░рд╛ рдЪрд░ рдХрд┐рд╕ рдкреНрд░рдХрд╛рд░ рдХрд╛ рд╣реИ:
var myInt = 1
рдЪрд░ рдХреЗ рдкреНрд░рдХрд╛рд░ рдХреЛ рдмрджрд▓рдиреЗ рд╕реЗ рдХрд╛рдо рдирд╣реАрдВ рдЪрд▓рддрд╛, рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ рдХрд┐ рдЖрдкрдХреЛ рдЗрди рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рд▓рд┐рдП рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ `=` рдСрдкрд░реЗрдЯрд░ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА, рдЕрдиреНрдпрдерд╛ рдЖрдк рдпрд╛ рддреЛ рдПрдХ рдЕрдкрд╡рд╛рдж рдХреЛ рдлреЗрдВрдХрдиреЗ рдХрд╛ рдЬреЛрдЦрд┐рдо рдЪрд▓рд╛рддреЗ рд╣реИрдВ (рд╣рдо рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдж рдореЗрдВ рдмрд╛рдд рдХрд░реЗрдВрдЧреЗ) рдпрд╛ рдЗрд╕ рддрд░рд╣ рдЪрдХреНрдХрд░ рдХрд╛ рд╢рд┐рдХрд╛рд░ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ:
var integer = 3 integer = 5.433 print(integer)
рд╣рд╛рд▓рд╛рдБрдХрд┐, рдЖрдк рдХрд┐рд╕реА рдорд╛рди рдХреЛ рдмрддрд╛рдП рдмрд┐рдирд╛ рдПрдХ рд╡реИрд░рд┐рдПрдмрд▓ рдХреА рдШреЛрд╖рдгрд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЙрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдЬрдм рддрдХ рдЗрд╕реЗ рдПрдХ рдорд╛рди рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддрдм рддрдХ рдпрд╣ рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рд░рд╣реЗрдЧрд╛ред
рдЗрдирд▓рд╛рдЗрди рдХрдВрдЯреЗрдирд░
рднрд╛рд╖рд╛ рдХреЗ рджреЛ рдХрдВрдЯреЗрдирд░ рд╣реИрдВ - рд╡реЗрдХреНрдЯрд░ рдФрд░ рдореИрдкред рд╡реЗ C ++ (std :: рд╡реЗрдХреНрдЯрд░ рдФрд░ std :: map, рдХреНрд░рдорд╢рдГ) рдореЗрдВ рдЕрдкрдиреЗ рд╕рдордХрдХреНрд╖реЛрдВ рдХреЗ рд╕рдорд╛рди рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЙрдиреНрд╣реЗрдВ рдХрд┐рд╕реА рдкреНрд░рдХрд╛рд░ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реЛрддреА рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╡реЗ рдХрд┐рд╕реА рднреА рд╕реНрдЯреЛрд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЕрдиреБрдХреНрд░рдордг рдХреЛ рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ рдХрд┐рд▓реЛрдВ рдХреЗ рд╕рд╛рде рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдорд╛рдирдЪрд┐рддреНрд░ рдХреЛ рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЗ рд╕рд╛рде рдПрдХ рдХреБрдВрдЬреА рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдЕрдЬрдЧрд░ рд╕реЗ рдкреНрд░реЗрд░рд┐рдд, рд▓реЗрдЦрдХреЛрдВ рдиреЗ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХреЛрдб рдореЗрдВ рдХрдВрдЯреЗрдирд░реЛрдВ рдХреЛ рдЬрд▓реНрджреА рд╕реЗ рдШреЛрд╖рд┐рдд рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рднреА рдЬреЛрдбрд╝реА:
var v = [ 1, 2, 3u, 4ll, "16", `+` ]
рдпреЗ рджреЛрдиреЛрдВ рд╡рд░реНрдЧ рд▓рдЧрднрдЧ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде C ++ рдореЗрдВ рдЕрдкрдиреЗ рд╕рдордХрдХреНрд╖реЛрдВ рдХреЛ рджреЛрд╣рд░рд╛рддреЗ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рдЙрдирдХреЗ рдмрдЬрд╛рдп рд╡рд┐рд╢реЗрд╖ рдХрдХреНрд╖рд╛рдПрдВ рд╣реИрдВ рд░реЗрдВрдЬ рдФрд░ рдХреЙрдиреНрд╕реНрдЯ_рд░рдВрдЧреЗред рд╡реИрд╕реЗ, рд╕рднреА рдХрдВрдЯреЗрдирд░реЛрдВ рдХреЛ рд╕рдВрджрд░реНрдн рджреНрд╡рд╛рд░рд╛ рдкрд╛рд╕ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рднрд▓реЗ рд╣реА рдЖрдк = рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЕрд╕рд╛рдЗрдирдореЗрдВрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ, рдЬреЛ рдореЗрд░реЗ рд▓рд┐рдП рдмрд╣реБрдд рд╣реА рдЕрдЬреАрдм рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдореВрд▓реНрдп рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдЕрдиреНрдп рд╕рднреА рдкреНрд░рдХрд╛рд░ рдХреА рдирдХрд▓ рдХреЗ рд▓рд┐рдПред
рд╕рд╢рд░реНрдд рдирд┐рд░реНрдорд╛рдг
рд╢рд░реНрддреЛрдВ рдФрд░ рдЪрдХреНрд░реЛрдВ рдХреЗ рд▓рдЧрднрдЧ рд╕рднреА рдирд┐рд░реНрдорд╛рдгреЛрдВ рдХрд╛ рд╢рд╛рдмреНрджрд┐рдХ рд░реВрдк рд╕реЗ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХреЛрдб рдореЗрдВ рд╡рд░реНрдгрди рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:
var a = 5 var b = -1
рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ C ++ рдХреЗ рдкрд░рд┐рдЪрд┐рдд рд▓реЛрдЧреЛрдВ рдХреЛ рдХреБрдЫ рднреА рдирдпрд╛ рдирд╣реАрдВ рдорд┐рд▓рд╛ред рдпрд╣ рдЖрд╢реНрдЪрд░реНрдп рдХреА рдмрд╛рдд рдирд╣реАрдВ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ ChaiScript рд╕реАрдЦрдиреЗ рдХреЗ рд▓рд┐рдП "рд╢рд┐рдХреНрд╖рд╛рд░реНрдерд┐рдпреЛрдВ" рдХреЗ рд▓рд┐рдП рдПрдХ рдЖрд╕рд╛рди рднрд╛рд╖рд╛ рдХреЗ рд░реВрдк рдореЗрдВ рддреИрдирд╛рдд рд╣реИ, рдФрд░ рдЗрд╕рд▓рд┐рдП рд╕рднреА рдкреНрд░рд╕рд┐рджреНрдз рд╢рд╛рд╕реНрддреНрд░реАрдп рдбрд┐рдЬрд╛рдЗрдиреЛрдВ рдХреЛ рдЙрдзрд╛рд░ рд▓реЗрддрд╛ рд╣реИред рдпрджрд┐ рдЖрдк рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдСрдЯреЛ рдХреЗ рд╕рд╛рде рдкреНрд▓рд╕рд╕ рдкрд╕рдВрдж рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд▓реЗрдЦрдХреЛрдВ рдиреЗ рдЪрд░ -
var
рдФрд░
auto
рдШреЛрд╖рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рджреЛ рдХреАрд╡рд░реНрдб рдХреЛ рдЙрдЬрд╛рдЧрд░ рдХрд░рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛ред
рдирд┐рд╖реНрдкрд╛рджрди рдХрд╛ рд╕рдВрджрд░реНрдн
ChaiScript рдХрд╛ рдПрдХ рд╕реНрдерд╛рдиреАрдп рдФрд░ рд╡реИрд╢реНрд╡рд┐рдХ рд╕рдВрджрд░реНрдн рд╣реИред рдХреЛрдб рдХреЛ рд▓рд╛рдЗрди рд╕реЗ рдКрдкрд░ рд╕реЗ рдиреАрдЪреЗ рдХреА рд░реЗрдЦрд╛ рд╕реЗ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдЗрд╕реЗ рдХрд╛рд░реНрдпреЛрдВ рдореЗрдВ рдирд┐рдХрд╛рд▓рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдмрд╛рдж рдореЗрдВ рдмреБрд▓рд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ (рд▓реЗрдХрд┐рди рдкрд╣рд▓реЗ рдирд╣реАрдВ)ред рдлрд╝рдВрдХреНрд╢рдВрд╕ рдпрд╛ рд╢рд░реНрддреЛрдВ / рд▓реВрдкреНрд╕ рдХреЗ рдЕрдВрджрд░ рдШреЛрд╖рд┐рдд рдЪрд░ рдмрд╛рд╣рд░ рд╕реЗ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рджрд┐рдЦрд╛рдИ рдирд╣реАрдВ рджреЗрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЖрдк
var
рдмрдЬрд╛рдп
global
рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЗрд╕ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рдмрджрд▓ рд╕рдХрддреЗ рд╣реИрдВред рд╡реИрд╢реНрд╡рд┐рдХ рдЪрд░ рд╕рд╛рдорд╛рдиреНрдп рд▓реЛрдЧреЛрдВ рд╕реЗ рднрд┐рдиреНрди рд╣реЛрддреЗ рд╣реИрдВ, рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╡реЗ рд╕реНрдерд╛рдиреАрдп рд╕рдВрджрд░реНрдн рдХреЗ рдмрд╛рд╣рд░ рджрд┐рдЦрд╛рдИ рджреЗрддреЗ рд╣реИрдВ, рдФрд░ рджреВрд╕рд░реА рдмрд╛рдд, рдЙрдиреНрд╣реЗрдВ рдлрд┐рд░ рд╕реЗ рдШреЛрд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ (рдпрджрд┐ рдкреБрди: рдШреЛрд╖рдгрд╛ рдХреЗ рджреМрд░рд╛рди рдореВрд▓реНрдп рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдпрд╣ рд╡рд╣реА рд░рд╣рддрд╛ рд╣реИ)
рд╡реИрд╕реЗ, рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдПрдХ рдЪрд░ рд╣реИ, рдФрд░ рдЖрдкрдХреЛ рдпрд╣ рдЬрд╛рдВрдЪрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдпрд╣ рдПрдХ рдорд╛рди рдЕрд╕рд╛рдЗрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рддреЛ
is_var_undef
рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ, рдЬреЛ рдХрд┐ рдЪрд░ рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рд╣реЛрдиреЗ рдкрд░ рд╕рдЪ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред
рд╕реНрдЯреНрд░рд┐рдВрдЧ рдЗрдВрдЯрд░рдкреЛрд▓реЗрд╢рди
рдЖрдзрд╛рд░ рдСрдмреНрдЬреЗрдХреНрдЯ рдпрд╛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдСрдмреНрдЬреЗрдХреНрдЯ рдЬрд┐рдирдХреЗ рдкрд╛рд╕ рдПрдХ
to_string()
рд╡рд┐рдзрд┐
to_string()
, рдХреЛ
${object}
рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдореЗрдВ рдбрд╛рд▓рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдпрд╣ рдЕрдирд╛рд╡рд╢реНрдпрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╕рдВрдШрдирди рд╕реЗ рдмрдЪрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдЖрдо рддреМрд░ рдкрд░ рдмрд╣реБрдд рдЕрдзрд┐рдХ рд╕рдЦреНрдд рджрд┐рдЦрддрд╛ рд╣реИ:
var x = 3 var y = 4
рд╡реЗрдХреНрдЯрд░, рдореИрдк, рдореИрдкрдкреЗрдпрд░ рдФрд░ рд╕рднреА рдкреНрд░рд╛рдЗрдорд┐рдЯрд┐рд╡ рднреА рдЗрд╕ рд╕реБрд╡рд┐рдзрд╛ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддреЗ рд╣реИрдВред рд╡реЗрдХреНрдЯрд░ рдХреЛ
[o1, o2, ...]
, рдорд╛рдирдЪрд┐рддреНрд░ рдореЗрдВ
[<key1, val1>, <key2, val2>, ...]
, рдФрд░ MapPair:
<key, val>
ред
рдХрд╛рд░реНрдп рдФрд░ рдЙрдирдХреА рдмрд╛рд░реАрдХрд┐рдпрд╛рдБ
ChaiScript рдлрд╝рдВрдХреНрд╢рдВрд╕ рд╣рд░ рдЪреАрдЬрд╝ рдХреА рддрд░рд╣ рдСрдмреНрдЬреЗрдХреНрдЯ рд╣реИрдВред рдЙрдиреНрд╣реЗрдВ рдкрдХрдбрд╝рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЪрд░ рдХреЛ рд╕реМрдВрдкрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЕрдиреНрдп рдХрд╛рд░реНрдпреЛрдВ рдореЗрдВ рдиреЗрд╕реНрдЯреЗрдб рдмрдирд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ рдПрдХ рддрд░реНрдХ рдХреЗ рд░реВрдк рдореЗрдВ рдкрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЖрдк рдЗрдирдкреБрдЯ рдорд╛рдиреЛрдВ рдХреЗ рдкреНрд░рдХрд╛рд░ рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ (рдЬреЛ рдХрд┐ рдЧрддрд┐рд╢реАрд▓ рд░реВрдк рд╕реЗ рдЯрд╛рдЗрдк рдХреА рдЧрдИ рднрд╛рд╖рд╛рдУрдВ рдХреА рдХрдореА рд╣реИ!), рдЗрд╕рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ рдлрд╝рдВрдХреНрд╢рди рдкреИрд░рд╛рдореАрдЯрд░ рдШреЛрд╖рд┐рдд рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдЯрд╛рдЗрдк рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдпрджрд┐ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдПрдХ рдореЗрдВ рдмрджрд▓рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдлрд┐рд░ рд╕реА ++ рдирд┐рдпрдореЛрдВ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рд░реВрдкрд╛рдВрддрд░рдг рд╣реЛрдЧрд╛, рдЕрдиреНрдпрдерд╛ рдПрдХ рдЕрдкрд╡рд╛рдж рдлреЗрдВрдХ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛:
def adder(int x, int y) { return x + y } def adder(bool x, bool y) { return x || y } adder(1, 2)
рднрд╛рд╖рд╛ рдореЗрдВ рдлрд╝рдВрдХреНрд╢рдВрд╕ рдХреЛ рдХреЙрд▓ рдХреА рд╕реНрдерд┐рддрд┐ (рдХреЙрд▓ рдЧрд╛рд░реНрдб) рднреА рд╕реЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдпрджрд┐ рдЗрд╕рдХрд╛ рд╕рдореНрдорд╛рди рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдПрдХ рдЕрдкрд╡рд╛рдж рдлреЗрдВрдХ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЕрдиреНрдпрдерд╛ рдХреЙрд▓ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдореИрдВ рдпрд╣ рднреА рдзреНрдпрд╛рди рджреЗрддрд╛ рд╣реВрдВ рдХрд┐ рдпрджрд┐ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдЕрдВрдд рдореЗрдВ рд░рд┐рдЯрд░реНрди рд╕реНрдЯреЗрдЯрдореЗрдВрдЯ рдирд╣реАрдВ рд╣реИ, рддреЛ рдЕрдВрддрд┐рдо рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рд╡рд╛рдкрд╕ рдЖ рдЬрд╛рдПрдЧреАред рдЫреЛрдЯреА рджрд┐рдирдЪрд░реНрдпрд╛ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ:
def div(x, y) : y != 0 { x / y }
рдХрдХреНрд╖рд╛рдПрдВ рдФрд░ рдбрд╛рдпрдиреЗрдорд┐рдХ_рдСрдмреНрдЬреЗрдХреНрдЯ
рдпрджрд┐ рдЖрдкрдХреЛ рдЬрдЯрд┐рд▓ рд╡рд╕реНрддреБрдУрдВ рдореЗрдВ рд╣реЗрд░рдлреЗрд░ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рддреЛ ChaiScript рдореЗрдВ OOP рдХреА рд░реБрдврд╝рд┐рдпрд╛рдВ рд╣реИрдВ, рдЬреЛ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рдкреНрд▓рд╕ рд╣реИред рднрд╛рд╖рд╛ рдХрд╛ рдПрдХ рд╡рд┐рд╢реЗрд╖ рдкреНрд░рдХрд╛рд░ рд╣реИ - рдбрд╛рдпрдирд╛рдорд┐рдХ_рдСрдмреНрдЬреЗрдХреНрдЯред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рд╡рд░реНрдЧреЛрдВ рдФрд░ рдирд╛рдорд╕реНрдерд╛рдиреЛрдВ рдХреЗ рд╕рднреА рдЙрджрд╛рд╣рд░рдг рдкреВрд░реНрд╡рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдЧреБрдгреЛрдВ рдХреЗ рд╕рд╛рде рдмрд┐рд▓реНрдХреБрд▓ Dynamic_Object рд╣реИрдВред рдПрдХ рдбрд╛рдпрдирд╛рдорд┐рдХ рдСрдмреНрдЬреЗрдХреНрдЯ рдЖрдкрдХреЛ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рдирд┐рд╖реНрдкрд╛рджрди рдХреЗ рджреМрд░рд╛рди рдлрд╝реАрд▓реНрдб рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рдФрд░ рдлрд┐рд░ рдЙрдиреНрд╣реЗрдВ рдПрдХреНрд╕реЗрд╕ рдХрд░рддрд╛ рд╣реИ:
var obj = Dynamic_Object(); obj.x = 3; obj.f = fun(arg) { print(this.x + arg); }
рдХрдХреНрд╖рд╛рдПрдВ рдХрд╛рдлреА рд╕рд░рд▓рддрд╛ рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХреА рдЬрд╛рддреА рд╣реИрдВред рдЙрдиреНрд╣реЗрдВ рдЦреЗрддреЛрдВ, рд╡рд┐рдзрд┐рдпреЛрдВ, рдирд┐рд░реНрдорд╛рдгрдХрд░реНрддрд╛рдУрдВ рдореЗрдВ рд╕реЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рджрд┐рд▓рдЪрд╕реНрдк
set_explicit(object, value)
рд╕реЗ, рд╡рд┐рд╢реЗрд╖ рдлрд╝рдВрдХреНрд╢рди
set_explicit(object, value)
рдЖрдк рдХрдХреНрд╖рд╛ рдШреЛрд╖рд┐рдд рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж рдирдП рддрд░реАрдХреЛрдВ рдпрд╛ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЗ рдЕрддрд┐рд░рд┐рдХреНрдд рдХреЛ рдкреНрд░рддрд┐рдмрдВрдзрд┐рдд рдХрд░рдХреЗ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рдХреНрд╖реЗрддреНрд░реЛрдВ рдХреЛ "рдареАрдХ" рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ (рдпрд╣ рдЖрдорддреМрд░ рдкрд░ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ):
class Widget { var id;
рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдмрд┐рдВрджреБ - рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рд╡рд░реНрдЧ рд╡рд┐рдзрд┐рдпрд╛рдВ рдХреЗрд╡рд▓ рдРрд╕реЗ рдХрд╛рд░реНрдп рд╣реИрдВ рдЬрд┐рдирдХрд╛ рдкрд╣рд▓рд╛ рддрд░реНрдХ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдкреНрд░рдХрд╛рд░ рдХреЗ рд╕рд╛рде рдПрдХ рд╡рд░реНрдЧ рдХреА рд╡рд╕реНрддреБ рд╣реИред рдЗрд╕рд▓рд┐рдП, рдирд┐рдореНрди рдХреЛрдб рдПрдХ рдореМрдЬреВрджрд╛ рд╡рд░реНрдЧ рдореЗрдВ рдПрдХ рд╡рд┐рдзрд┐ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рдмрд░рд╛рдмрд░ рд╣реИ:
def set_id(Widget w, id) { w.id = id } w.set_id(9)
C # рд╕реЗ рдкрд░рд┐рдЪрд┐рдд рдХреЛрдИ рднреА рд╡реНрдпрдХреНрддрд┐ рдЙрд╕ рджрд░реНрдж рдХреЛ рдмрджрд▓ рд╕рдХрддрд╛ рд╣реИ рдЬреЛ рдПрдХ рд╡рд┐рд╕реНрддрд╛рд░ рд╡рд┐рдзрд┐ рдХреА рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ, рдФрд░ рд╕рдЪреНрдЪрд╛рдИ рдХреЗ рдХрд░реАрдм рд╣реЛрдЧрд╛ред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рднрд╛рд╖рд╛ рдореЗрдВ рдЖрдк рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдХрдХреНрд╖рд╛рдУрдВ рдХреЗ рд▓рд┐рдП рднреА рдирдИ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдпрд╛ рдЗрдВрдЯ рдХреЗ рд▓рд┐рдПред рд▓реЗрдЦрдХреЛрдВ рдиреЗ рдСрдкрд░реЗрдЯрд░реЛрдВ рдХреЛ рдУрд╡рд░рд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдореБрд╢реНрдХрд┐рд▓ рддрд░реАрдХрд╛ рднреА рдкреЗрд╢ рдХрд┐рдпрд╛ рд╣реИ: рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдСрдкрд░реЗрдЯрд░ рдкреНрд░рддреАрдХ рдХреЛ рдПрдХ рдЯрд┐рд▓реНрдб (`) рдХреЗ рд╕рд╛рде рдШреЗрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдЬреИрд╕рд╛ рдХрд┐ рдиреАрдЪреЗ рджрд┐рдП рдЧрдП рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рд╣реИ:
рдирд╛рдорд╕реНрдерд╛рди
ChaiScript рдореЗрдВ рдирд╛рдо рд╕реНрдерд╛рди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмреЛрд▓рддреЗ рд╣реБрдП, рдпрд╣ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рдпреЗ рдЕрдирд┐рд╡рд╛рд░реНрдп рд░реВрдк рд╕реЗ рдРрд╕реА рдХрдХреНрд╖рд╛рдПрдВ рд╣реИрдВ рдЬреЛ рд╣рдореЗрд╢рд╛ рд╡реИрд╢реНрд╡рд┐рдХ рд╕рдВрджрд░реНрдн рдореЗрдВ рд╣реЛрддреА рд╣реИрдВред рдЖрдк рдЙрдиреНрд╣реЗрдВ
namespace(name)
рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдлрд┐рд░ рдЖрд╡рд╢реНрдпрдХ рдлрд╝рдВрдХреНрд╢рди рдФрд░ рдХрдХреНрд╖рд╛рдПрдВ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВред рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ, рднрд╛рд╖рд╛ рдореЗрдВ рдХреЛрдИ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдирд╣реАрдВ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдЖрдк рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЙрдиреНрд╣реЗрдВ рд╕реНрдерд╛рдкрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣рдо рдереЛрдбрд╝реА рджреЗрд░ рдмрд╛рдж рдмрд╛рдд рдХрд░реЗрдВрдЧреЗред рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдирд╛рдорд╕реНрдерд╛рди рдЖрд░рдВрднреАрдХрд░рдг рдЗрд╕ рддрд░рд╣ рд▓рдЧ рд╕рдХрддрд╛ рд╣реИ:
namespace("math")
рд▓реИрдореНрдмреНрдбрд╛ рднрд╛рд╡ рдФрд░ рдЕрдиреНрдп рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВ
рдЪрд┐рдпрд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рд▓реИрдореНрдмреНрдбрд╛ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐рдпрд╛рдБ рд╕реА + + рд╕реЗ рдЬреЛ рд╣рдо рдЬрд╛рдирддреЗ рд╣реИрдВ, рдЙрд╕рдХреЗ рд╕рдорд╛рди рд╣реИрдВред рдЙрдирдХреЗ рд▓рд┐рдП
рдордЬреЗрджрд╛рд░ рдХреАрд╡рд░реНрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдЙрдиреНрд╣реЗрдВ рдХреИрдкреНрдЪрд░ рдХрд┐рдП рдЧрдП рдЪрд░ рдХреЛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рд╡реЗ рд╣рдореЗрд╢рд╛ рд╕рдВрджрд░реНрдн рджреНрд╡рд╛рд░рд╛ рдРрд╕рд╛ рдХрд░рддреЗ рд╣реИрдВред рднрд╛рд╖рд╛ рдореЗрдВ рдПрдХ рдмрд╛рдЗрдВрдб рдлрд╝рдВрдХреНрд╢рди рднреА рд╣реЛрддрд╛ рд╣реИ рдЬреЛ рдЖрдкрдХреЛ рдлрд╝рдВрдХреНрд╢рди рдкреИрд░рд╛рдореАрдЯрд░ рдХреЛ рдорд╛рдиреЛрдВ рдХреЛ рдмрд╛рдЗрдВрдб рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ:
var func_object = fun(x) { x * x } func_object(9)
рдЕрдкрд╡рд╛рдж
рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдирд┐рд╖реНрдкрд╛рджрди рдХреЗ рджреМрд░рд╛рди рдЕрдкрд╡рд╛рдж рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред рдЙрдиреНрд╣реЗрдВ ChaiScript рдореЗрдВ рд╣реА рдЗрдВрдЯрд░рд╕реЗрдкреНрдЯ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ (рдЬреЛ рд╣рдо рдпрд╣рд╛рдВ рдЪрд░реНрдЪрд╛ рдХрд░реЗрдВрдЧреЗ) рдФрд░ C ++ рдореЗрдВред рд╕рд┐рдВрдЯреИрдХреНрд╕ рдкреНрд▓рд╕рд╕ рдХреЗ рд╕рд╛рде рдмрд┐рд▓реНрдХреБрд▓ рд╕рдорд╛рди рд╣реИ, рдЖрдк рдПрдХ рд╕рдВрдЦреНрдпрд╛ рдпрд╛ рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рднреА рдмрд╛рд╣рд░ рдлреЗрдВрдХ рд╕рдХрддреЗ рд╣реИрдВ:
try { eval(x + 1)
рдПрдХ рдЕрдЪреНрдЫреЗ рддрд░реАрдХреЗ рд╕реЗ, рдЖрдкрдХреЛ рдЕрдкрдиреЗ рдЕрдкрд╡рд╛рджреЛрдВ рдХреЗ рд╡рд░реНрдЧ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░ рдЗрд╕реЗ рдлреЗрдВрдХ рджреЗрдирд╛ рдЪрд╛рд╣рд┐рдПред рд╣рдо рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░реЗрдВрдЧреЗ рдХрд┐ рдЗрд╕реЗ рджреВрд╕рд░реЗ рдЦрдВрдб рдореЗрдВ C ++ рдореЗрдВ рдХреИрд╕реЗ рдЗрдВрдЯрд░рд╕реЗрдкреНрдЯ рдХрд┐рдпрд╛ рдЬрд╛рдПред рджреБрднрд╛рд╖рд┐рдпрд╛ рдЕрдкрд╡рд╛рджреЛрдВ рдХреЗ рд▓рд┐рдП, ChaScript рдЕрдкрдиреЗ рдЕрдкрд╡рд╛рджреЛрдВ рдХреЛ рдирд┐рдХрд╛рд▓рддрд╛ рд╣реИ, рдЬреИрд╕реЗ рдХрд┐ eval_error, bad_boxed_cast, рдЖрджрд┐ред
рджреБрднрд╛рд╖рд┐рдпрд╛ рд╕реНрдерд┐рд░рд╛рдВрдХ
рдореЗрд░реЗ рдЖрд╢реНрдЪрд░реНрдп рдХреЗ рд▓рд┐рдП, рднрд╛рд╖рд╛ рдХреБрдЫ рдкреНрд░рдХрд╛рд░ рдХреЗ рд╕рдВрдХрд▓рдХ рдореИрдХреНрд░реЛрдЬрд╝ рдмрди рдЧрдП - рдЙрдирдореЗрдВ рд╕реЗ рдХреЗрд╡рд▓ 4 рд╣реИрдВ рдФрд░ рд╡реЗ рд╕рднреА рд╕рдВрджрд░реНрдн рдХреА рдкрд╣рдЪрд╛рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЬреНрдпрд╛рджрд╛рддрд░ рддреНрд░реБрдЯрд┐ рд╕реЗ рдирд┐рдкрдЯрдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ:
рдлрдБрд╕рд╛рдиреЗ рдореЗрдВ рддреНрд░реБрдЯрд┐
рдпрджрд┐ рдЖрдк рдЬрд┐рд╕ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд░ рд░рд╣реЗ рд╣реИрдВ рд╡рд╣ рдШреЛрд╖рд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рддреЛ рдПрдХ рдЕрдкрд╡рд╛рдж рдлреЗрдВрдХ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдпрджрд┐ рдпрд╣ рдЖрдкрдХреЗ рд▓рд┐рдП рдЕрд╕реНрд╡реАрдХрд╛рд░реНрдп рд╣реИ, рддреЛ рдЖрдк рдПрдХ рд╡рд┐рд╢реЗрд╖ рдлрд╝рдВрдХреНрд╢рди -
method_missing(object, func_name, params)
рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЬрд┐рд╕реЗ рддреНрд░реБрдЯрд┐ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рд╕рдВрдмрдВрдзрд┐рдд рддрд░реНрдХреЛрдВ рдХреЗ рд╕рд╛рде рдХрд╣рд╛ рдЬрд╛рдПрдЧрд╛:
def method_missing(Widget w, string name, Vector v) { print("widget method ${name} with params {v} was not found") } w = Widget() w.invoke_error(1, 2, 3)
рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдХрд╛рд░реНрдп
ChaiScript рдХрдИ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддрд╛ рд╣реИ, рдФрд░ рд▓реЗрдЦ рдореЗрдВ рдореИрдВ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдЙрдкрдпреЛрдЧреА рд▓реЛрдЧреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред рдЙрдирдореЗрдВ рд╕реЗ:
eval(str)
,
eval_file(filename)
,
to_json(object)
,
from_json(str)
:
var x = 3 var y = 5 var res = eval("x * y")
C ++ рдореЗрдВ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди
рд╕реНрдерд╛рдкрдирд╛
ChaiScript рдПрдХ C ++ рдЯреЗрдореНрдкрд▓реЗрдЯ-рдЖрдзрд╛рд░рд┐рдд рд╣реЗрдбрд░-рдХреЗрд╡рд▓ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рд╣реИред рддрджрдиреБрд╕рд╛рд░, рд╕реНрдерд╛рдкрдирд╛ рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ рдмрд╕ рдПрдХ рдХреНрд▓реЛрди
рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдмрдирд╛рдиреЗ рдХреА рдЬрд░реВрд░рдд
рд╣реИ рдпрд╛ рдмрд╕
рдЗрд╕ рдлрд╝реЛрд▓реНрдбрд░ рд╕реЗ рд╕рднреА рдлрд╛рдЗрд▓реЛрдВ рдХреЛ рдЕрдкрдиреА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рдбрд╛рд▓реЗрдВред рдЪреВрдВрдХрд┐, IDE рдХреЗ рдЖрдзрд╛рд░ рдкрд░, рдпрд╣ рд╕рдм рдЕрд▓рдЧ-рдЕрд▓рдЧ рддрд░реАрдХреЗ рд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рд▓рдВрдмреЗ рд╕рдордп рддрдХ рдордВрдЪреЛрдВ рдкрд░ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рд╡рд░реНрдгрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рддреЛ рд╣рдо рдорд╛рди рд▓реЗрдВрдЧреЗ рдХрд┐ рдЖрдк рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдореЗрдВ рдХрд╛рдордпрд╛рдм рд░рд╣реЗ, рдФрд░ рдЗрд╕рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдХреЛрдб:
#include <chaiscript/chaiscript.hpp>
рд╕рдВрдХрд▓рд┐рдд рд╣реИред
C ++ рдХреЛрдб рдордВрдЧрд▓рд╛рдЪрд░рдг рдФрд░ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд▓реЛрдб рд╣реЛ рд░рд╣рд╛ рд╣реИ
ChaScript рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рд╕рдмрд╕реЗ рдЫреЛрдЯрд╛ рдирдореВрдирд╛ рдХреЛрдб рдиреАрдЪреЗ рджрд┐рдЦрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИред рд╣рдо C ++ рдореЗрдВ рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ std :: string рд▓реЗрддрд╛ рд╣реИ рдФрд░ рдмрджрд▓реЗ рд╣реБрдП рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЛ рд▓реМрдЯрд╛рддрд╛ рд╣реИ, рдФрд░ рдлрд┐рд░ рд╣рдо рдЗрд╕реЗ рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП ChaiScript рдСрдмреНрдЬреЗрдХреНрдЯ рдореЗрдВ рдПрдХ рд▓рд┐рдВрдХ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВред рд╕рдВрдХрд▓рди рдореЗрдВ рдХрд╛рдлреА рд╕рдордп рд▓рдЧ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдореБрдЦреНрдп рд░реВрдк рд╕реЗ рдЗрд╕ рддрдереНрдп рдХреЗ рдХрд╛рд░рдг рд╣реИ рдХрд┐ рд╕рдВрдХрд▓рдХ рдХреЗ рд▓рд┐рдП рдмрдбрд╝реА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рдЯреЗрдореНрдкрд▓реЗрдЯреНрд╕ рдХреЛ рддреНрд╡рд░рд┐рдд рдХрд░рдирд╛ рдЖрд╕рд╛рди рдирд╣реАрдВ рд╣реИ:
#include <string> #include <chaiscript/chaiscript.hpp> std::string greet_name(const std::string& name) { return "hello, " + name; } int main() { chaiscript::ChaiScript chai; // chaiscript chai.add(chaiscript::fun(&greet_name), "greet"); // greet // eval chai.eval(R"( print(greet("John")); )"); }
рдореБрдЭреЗ рдЖрд╢рд╛ рд╣реИ рдХрд┐ рдЖрдк рд╕рдлрд▓ рд╣реБрдП, рдФрд░ рдЖрдкрдиреЗ рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдкрд░рд┐рдгрд╛рдо рджреЗрдЦрд╛ред рдмрд╕ рдПрдХ рдмрд╛рд░реАрдХрд┐рдпреЛрдВ рдХреЛ рдиреЛрдЯ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ - рдпрджрд┐ рдЖрдк рдПрдХ ChaiScript рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рд╕реНрдерд┐рд░ рдХреЗ рд░реВрдк рдореЗрдВ рдШреЛрд╖рд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ рдПрдХ рдЕрдкреНрд░рд┐рдп рд░рдирдЯрд╛рдЗрдо рддреНрд░реБрдЯрд┐ рдорд┐рд▓рддреА рд╣реИред рдпрд╣ рдЗрд╕ рддрдереНрдп рдХреЗ рдХрд╛рд░рдг рд╣реИ рдХрд┐ рднрд╛рд╖рд╛ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдорд▓реНрдЯреАрдереНрд░реЗрдбрд┐рдВрдЧ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддреА рд╣реИ рдФрд░ рд╕реНрдерд╛рдиреАрдп рдкреНрд░рд╡рд╛рд╣ рдЪрд░ рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рддреА рд╣реИ рдЬреЛ рдЗрд╕рдХреЗ рд╡рд┐рдзреНрд╡рдВрд╕рдХ рдореЗрдВ рдПрдХреНрд╕реЗрд╕ рд╣реЛрддреА рд╣реИрдВред рд╣рд╛рд▓рд╛рдБрдХрд┐, рд╕реНрдереИрддрд┐рдХ рдЖрд╡реГрддреНрддрд┐ рдХреЗ рд╡рд┐рдзреНрд╡рдВрд╕рдХ рдХрд╣реЗ рдЬрд╛рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рд╡реЗ рдирд╖реНрдЯ рд╣реЛ рдЬрд╛рддреЗ рд╣реИрдВ, рдФрд░ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдкрд╣реБрдБрдЪ рдЙрд▓реНрд▓рдВрдШрди рдпрд╛ рд╡рд┐рднрд╛рдЬрди рджреЛрд╖ рддреНрд░реБрдЯрд┐ рд╣реЛрддреА рд╣реИред
#define CHAISCRIPT_NO_THREADS
рдкрд░
рд╕рдорд╕реНрдпрд╛ рдХреЗ рдЖрдзрд╛рд░ рдкрд░, рд╕рдмрд╕реЗ рд╕рд░рд▓ рд╕рдорд╛рдзрд╛рди рдпрд╣ рд╣реЛрдЧрд╛ рдХрд┐
#define CHAISCRIPT_NO_THREADS
рдХреЛ рдХрдВрдкрд╛рдЗрд▓рд░ рд╕реЗрдЯрд┐рдВрдЧ рдореЗрдВ рдпрд╛ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдлрд╝рд╛рдЗрд▓ рдХреЛ рд╢рд╛рдорд┐рд▓ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рдЬрд┐рд╕рд╕реЗ рдорд▓реНрдЯреАрдереНрд░реЗрдбрд┐рдВрдЧ рдЕрдХреНрд╖рдо рд╣реЛ рд╕рдХреЗред рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВрдиреЗ рдЗрд╕реЗ рд╕рдордЭрд╛, рдЗрд╕ рддреНрд░реБрдЯрд┐ рдХреЛ рдареАрдХ рдХрд░рдирд╛ рд╕рдВрднрд╡ рдирд╣реАрдВ рдерд╛ред
рдЕрдм рд╣рдо рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░реЗрдВрдЧреЗ рдХрд┐ C ++ рдФрд░ ChaiScript рдХреЗ рдмреАрдЪ рдмрд╛рддрдЪреАрдд рдХреИрд╕реЗ рд╣реЛрддреА рд╣реИред рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдПрдХ рд╡рд┐рд╢реЗрд╖ рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдлрдВрдХреНрд╢рди
fun
рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддреА рд╣реИ, рдЬреЛ рдПрдХ рдкреЙрдЗрдВрдЯрд░ рдХреЛ рдХрд┐рд╕реА рдлрдВрдХреНрд╢рди, рдлрдВрдЯрд░, рдпрд╛ рдкреЙрдЗрдВрдЯрд░ рдХреЛ рдХреНрд▓рд╛рд╕ рд╡реЗрд░рд┐рдПрдмрд▓ рдореЗрдВ рд▓реЗ рдЬрд╛ рд╕рдХрддреА рд╣реИ, рдФрд░ рдлрд┐рд░ рдПрдХ рд╡рд┐рд╢реЗрд╖ рдСрдмреНрдЬреЗрдХреНрдЯ рд▓реМрдЯрд╛рддреА рд╣реИ рдЬреЛ рд╕реНрдЯреЗрдЯ рдХреЛ рд╕реНрдЯреЛрд░ рдХрд░рддрд╛ рд╣реИред рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд░реВрдк рдореЗрдВ, рдЪрд▓реЛ C ++ рдХреЛрдб рдореЗрдВ рд╡рд┐рдЬреЗрдЯ рд╡рд░реНрдЧ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕реЗ рд╡рд┐рднрд┐рдиреНрди рддрд░реАрдХреЛрдВ рд╕реЗ ChaScript рдХреЗ рд╕рд╛рде рдЬреЛрдбрд╝рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВ:
class Widget { int Id; public: Widget(int id) : Id(id) { } int GetId() const { return this->Id; } }; std::string ToString(const Widget& w) { return "widget #" + std::to_string(w.GetId()); } int main() { chaiscript::ChaiScript chai; Widget w(2);
рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, ChaiScript рд╕реА + + рдХрдХреНрд╖рд╛рдУрдВ рдХреЗ рд╕рд╛рде рдмрд┐рд▓реНрдХреБрд▓ рд╢рд╛рдВрддрд┐ рд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдЗрд╕рдХреЗ рд▓рд┐рдП рдЕрдЬреНрдЮрд╛рдд рд╣реИ рдФрд░ рдЙрдирдХреЗ рддрд░реАрдХреЛрдВ рдХреЛ рдХреЙрд▓ рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдпрджрд┐ рдЖрдк рдХреЛрдб рдореЗрдВ рдХрд╣реАрдВ рдЧрд▓рддреА рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ рдХрд┐ рд╕реНрдХреНрд░рд┐рдкреНрдЯ
error in function dispatch
рдПрдХ рдкреНрд░рдХрд╛рд░ рдХреА
error in function dispatch
рдХрд╛ рдЕрдкрд╡рд╛рдж рдлреЗрдВрдХ рджреЗрдЧреА, рдЬреЛ рдХрд┐ рд╕рднреА рдХреЗ рд▓рд┐рдП рдорд╣рддреНрд╡рдкреВрд░реНрдг рдирд╣реАрдВ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, рди рдХреЗрд╡рд▓ рдлрд╝рдВрдХреНрд╢рди рдЖрдпрд╛рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЖрдЗрдП рджреЗрдЦреЗрдВ рдХрд┐ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рдПрдХ рдЪрд░ рдХреИрд╕реЗ рдЬреЛрдбрд╝рд╛ рдЬрд╛рдПред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдХрд╛рд░реНрдп рдХреЛ рдереЛрдбрд╝рд╛ рдХрдард┐рди рдЪреБрдиреЗрдВ - рдЖрдпрд╛рдд std :: рд╡реЗрдХреНрдЯрд░ <рд╡рд┐рдЬреЗрдЯ>ред
chaiscript::var
рдлрдВрдХреНрд╢рди рдФрд░
add_global
рд╡рд┐рдзрд┐ рд╣рдореЗрдВ рдЗрд╕рдореЗрдВ рдорджрдж рдХрд░реЗрдЧреАред рд╣рдо рдЕрдкрдиреЗ рд╡рд┐рдЬреЗрдЯ рдореЗрдВ
Data
рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдлрд╝реАрд▓реНрдб рдХреЛ рднреА рдЬреЛрдбрд╝реЗрдВрдЧреЗ, рдпрд╣ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдХреНрд▓рд╛рд╕ рдлрд╝реАрд▓реНрдб рдХреЛ рдХреИрд╕реЗ рдЖрдпрд╛рдд рдХрд┐рдпрд╛ рдЬрд╛рдП:
class Widget { int Id; public: int Data = 0; Widget(int id) noexcept : Id(id) { } int GetId() const { return this->Id; } }; std::string ToString(const Widget& w) { return "widget #" + std::to_string(w.GetId()) + " with data: " + std::to_string(w.Data); int main() { chaiscript::ChaiScript chai; std::vector<Widget> W;
рдЙрдкрд░реЛрдХреНрдд рдХреЛрдб рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддрд╛ рд╣реИ:
widget #1 with data: 0
, widget #2 with data: 2
, widget #3 with data: 4
ред рд╣рдордиреЗ ChaiScript рдореЗрдВ рдХреНрд▓рд╛рд╕ рдлрд╝реАрд▓реНрдб рдореЗрдВ рдПрдХ рдкреЙрдЗрдВрдЯрд░ рдЬреЛрдбрд╝рд╛, рдФрд░ рдЪреВрдВрдХрд┐ рдлрд╝реАрд▓реНрдб рдПрдХ рдЖрджрд┐рдо рдкреНрд░рдХрд╛рд░ рдирд┐рдХрд▓рд╛, рд╣рдо рдЗрд╕рдХреЗ рдореВрд▓реНрдп рдХреЛ рдмрджрд▓рддреЗ рд╣реИрдВред рд╕рд╛рде рд╣реА,
operator[]
рд╕рд╣рд┐рдд
std::vector
рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрдИ рддрд░реАрдХреЗ рдЬреЛрдбрд╝реЗ рдЧрдПред рдЬреЛ рд▓реЛрдЧ рдПрд╕рдЯреАрдПрд▓ рд╕реЗ рдкрд░рд┐рдЪрд┐рдд рд╣реИрдВ, рд╡реЗ рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐
std::vector
рджреЛ рдЕрдиреБрдХреНрд░рдордг рд╡рд┐рдзрд┐рдпрд╛рдВ рд╣реИрдВ - рдПрдХ рдирд┐рд░рдВрддрд░ рд▓рд┐рдВрдХ рджреЗрддрд╛ рд╣реИ, рджреВрд╕рд░рд╛ рдПрдХ рд╕рд░рд▓ рд▓рд┐рдВрдХред рдпрд╣реА рдХрд╛рд░рдг рд╣реИ рдХрд┐ рдЕрддрд┐рднрд╛рд░рд┐рдд рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдЙрдирдХреЗ рдкреНрд░рдХрд╛рд░ рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛ - рдЕрдиреНрдпрдерд╛ рдЕрд╕реНрдкрд╖реНрдЯрддрд╛ рдЙрддреНрдкрдиреНрди рд╣реЛрддреА рд╣реИ, рдФрд░ рд╕рдВрдХрд▓рдХ рдПрдХ рддреНрд░реБрдЯрд┐ рдлреЗрдВрдХ рджреЗрдЧрд╛ред
рдкреБрд╕реНрддрдХрд╛рд▓рдп рд╡рд╕реНрддреБрдУрдВ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдХрдИ рдФрд░ рддрд░реАрдХреЗ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╡реЗ рд╕рднреА рд▓рдЧрднрдЧ рд╕рдорд╛рди рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдореИрдВ рдЙрди рдкрд░ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рд╡рд┐рдЪрд╛рд░ рдХрд░рдиреЗ рдХрд╛ рдмрд┐рдВрджреБ рдирд╣реАрдВ рджреЗрдЦрддрд╛ рд╣реВрдВред рдПрдХ рдЫреЛрдЯреЗ рд╕рдВрдХреЗрдд рдХреЗ рд░реВрдк рдореЗрдВ, рдпрд╣рд╛рдВ рдиреАрдЪреЗ рджрд┐рдпрд╛ рдЧрдпрд╛ рдХреЛрдб рд╣реИ:
chai.add(chaiscript::var(x), "x");
рдПрд╕рдЯреАрдПрд▓ рдХрдВрдЯреЗрдирд░реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛
рдпрджрд┐ рдЖрдк ChaiScript рдХреЗ рд▓рд┐рдП
рдЖрджрд┐рдо рдкреНрд░рдХрд╛рд░ рдХреЗ рдПрд╕рдЯреАрдПрд▓ рдХрдВрдЯреЗрдирд░реЛрдВ рдХреЛ рдкрд╛рд╕ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рдЕрдкрдиреА рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рдПрдХ рдЯреЗрдореНрдкрд▓реЗрдЯ рдХрдВрдЯреЗрдирд░ рдЗрдВрд╕реНрдЯреЗрдВрдЯреЗрд╢рди рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ рддрд╛рдХрд┐ рдЖрдк рдкреНрд░рддреНрдпреЗрдХ рдкреНрд░рдХрд╛рд░ рдХреЗ рд▓рд┐рдП рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ рдЖрдпрд╛рдд рди рдХрд░реЗрдВред
using MyVector = std::vector<std::pair<int, std::string>>; MyVector V; V.emplace_back(1, "John"); V.emplace_back(3, "Bob");
ChaiScript, . , STL-, . c
std::vector<Widget>
, , , ChaiScript
vector_type
, Widget .
++ ChaiScript
ChaiScript, . , . Widget WindowWidget, , :
class Widget { int Id; public: Widget(int id) : Id(id) { } int GetId() const { return this->Id; } }; class WindowWidget : public Widget { std::pair<int, int> Size; public: WindowWidget(int id, int width, int height) : Widget(id), Size(width, height) { } int GetWidth() const { return this->Size.first; } int GetHeight() const { return this->Size.second; } }; int main() { chaiscript::ChaiScript chai;
ChaiScript , C++ , . - (, ), ,
std::vector<Widget>
.
. ChaiScript , , :
Widget w(3); w.Data = 4444;
┬л┬╗ C++ ChaiScript ( , vec3, complex, matrix) . ChaiScript
type_conversion
. Complex int double :
class Complex { public: float Re, Im; Complex(float re, float im = 0.0f) : Re(re), Im(im) { } }; int main() { chaiscript::ChaiScript chai;
рдЗрд╕ рдкреНрд░рдХрд╛рд░, C ++ рдореЗрдВ рд░реВрдкрд╛рдВрддрд░рдг рдлрд╝рдВрдХреНрд╢рди рд▓рд┐рдЦрдирд╛ рдЖрд╡рд╢реНрдпрдХ рдирд╣реАрдВ рд╣реИ, рдФрд░ рдХреЗрд╡рд▓ рддрдм рдЗрд╕реЗ ChaiScript рдХреЛ рдирд┐рд░реНрдпрд╛рдд рдХрд░реЗрдВред рдЖрдк рд░реВрдкрд╛рдВрддрд░рдг рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛрдб рдореЗрдВ рдирдИ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХрд╛ рд╡рд░реНрдгрди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдпрджрд┐ рджреЛ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рд▓рд┐рдП рд░реВрдкрд╛рдВрддрд░рдг nontrivial рд╣реИ, рддреЛ рдЖрдк рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рддрд░реНрдХ рдХреЗ рд░реВрдк рдореЗрдВ рд▓реИрдореНрдмреНрдбрд╛ рдкрд╛рд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ type_conversion
ред рдХрд╛рд╕реНрдЯрд┐рдВрдЧ рдХрд░рддреЗ рд╕рдордп рдЗрд╕реЗ рдХрд╣рд╛ рдЬрд╛рдПрдЧрд╛редрдЗрд╕реА рддрд░рд╣ рдХреЗ рд╕рд┐рджреНрдзрд╛рдВрдд рдХрд╛ рдЙрдкрдпреЛрдЧ рд╡реЗрдХреНрдЯрд░ рдпрд╛ рдореИрдк рдЪрд╛рдИрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рдЖрдкрдХреЗ рдХрд╕реНрдЯрдо рдкреНрд░рдХрд╛рд░ рдореЗрдВ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕рдХреЗ рд▓рд┐рдП, vector_conversion
рдФрд░ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рд╣реИрдВ map_conversion
редChaiScript рд░рд┐рдЯрд░реНрди рдорд╛рди рдХреЛ рдЕрдирдкреИрдХ рдХрд░рдирд╛
рд╡рд┐рдзрд┐рдпрд╛рдБ eval
рдФрд░ eval_file
рдПрдХ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рдЕрдВрддрд┐рдо рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХрд╛ рдорд╛рди рд▓реМрдЯрд╛рддреЗ рд╣реИрдВ Boxed_Value
ред рдЗрд╕реЗ рдЕрдирдкреИрдХ рдХрд░рдиреЗ рдФрд░ C ++ рдХреЛрдб рдореЗрдВ рдкрд░рд┐рдгрд╛рдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдк рд░рд┐рдЯрд░реНрди рдорд╛рди рдХреЗ рдкреНрд░рдХрд╛рд░ рдХреЛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдпрд╛ рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ boxed_cast<T>
ред рдпрджрд┐ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рдмреАрдЪ рд░реВрдкрд╛рдВрддрд░рдг рдореМрдЬреВрдж рд╣реИ, рддреЛ рдЗрд╕реЗ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдЕрдиреНрдпрдерд╛ рдПрдХ рдЕрдкрд╡рд╛рдж рдЙрдард╛рдпрд╛ рдЬрд╛рдПрдЧрд╛ bad_boxed_cast
:
рдЪрд╛рдИрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рдЕрдВрджрд░ рд╕рднреА рд╡рд╕реНрддреБрдУрдВ рдХреЛ рд╕рд╛рдЭрд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЖрдк рдЗрд╕рдХреЗ рд╕рд╛рде рдЖрдЧреЗ рдХреЗ рдХрд╛рдо рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реВрдЪрдХ рдХреЗ рд░реВрдк рдореЗрдВ рд╡рд╕реНрддреБ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╡рд╛рдкрд╕реА рдорд╛рди рдХреЛ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рддреЗ рд╕рдордп рд╢реЗрдЕрд░_рдкреНрдЯреНрд░ рдкреНрд░рдХрд╛рд░ рдХреЛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░реЗрдВ: auto x = chai.eval<std::shared_ptr<double>>("var x = 3.2");
, shared_ptr, access violation , .
, ChaiScript , ChaiScript. , Complex :
auto printComplex = chai.eval<std::function<void(Complex)>>(R"( fun(Complex c) { print("${c.re} + ${c.im}i"); } )");
ChaiScript
рд▓реЗрдЦрдХ рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рдЕрд▓рд╛рд╡рд╛ рддреАрди рдкреНрд░рдХрд╛рд░ рдХреЗ рдЕрдкрд╡рд╛рджреЛрдВ рдХреЛ рдкрдХрдбрд╝рдиреЗ рдХреА рд╕рд▓рд╛рд╣ рджреЗрддреЗ рд╣реИрдВ рдЬреЛ рдЖрдк рд╕реНрд╡рдпрдВ рдЙрддреНрдкрдиреНрди рдХрд░рддреЗ рд╣реИрдВред рдпрд╣ eval_error
рд░рдирдЯрд╛рдЗрдо рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рд╣реИ, bad_boxed_cast
рдпрд╣ рддрдм рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрдм рд░рд┐рдЯрд░реНрди рдорд╛рди рдЧрд▓рдд рддрд░реАрдХреЗ рд╕реЗ рдЕрдирдкреИрдХ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ рдФрд░ std::exception
рдмрд╛рдХреА рд╕рдм рдХреЗ рд▓рд┐рдПред рдпрджрд┐ рдЖрдк рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдЕрдкрд╡рд╛рджреЛрдВ рдХреЛ рдлреЗрдВрдХрдиреЗ рдХреА рдпреЛрдЬрдирд╛ рдмрдирд╛рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк C ++ рдкреНрд░рдХрд╛рд░реЛрдВ рдореЗрдВ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдкрд╛рдВрддрд░рдг рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ: class MyException : public std::exception { public: int Data; MyException(int data) : std::exception("MyException"), Data(data) { } }; int main() { chaiscript::ChaiScript chai;
рдКрдкрд░ рдХрд╛ рдЙрджрд╛рд╣рд░рдг рджрд┐рдЦрд╛рддрд╛ рд╣реИ рдХрд┐ C ++ рдореЗрдВ рдЕрдзрд┐рдХрд╛рдВрд╢ рдЕрдкрд╡рд╛рджреЛрдВ рдХреЛ рдХреИрд╕реЗ рдкрдХрдбрд╝рд╛ рдЬрд╛рдПред рд╡рд┐рдзрд┐ рдХреЗ рдЕрд▓рд╛рд╡рд╛ pretty_print
, eval_error
рдЕрднреА рднреА рдмрд╣реБрдд рд╕рд╛рд░реЗ рдЙрдкрдпреЛрдЧреА рдбреЗрдЯрд╛ рд╣реИрдВ, рдЬреИрд╕реЗ рдХреЙрд▓ рд╕реНрдЯреИрдХ, рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдирд╛рдо, рддреНрд░реБрдЯрд┐ рд╡рд┐рд╡рд░рдг, рд▓реЗрдХрд┐рди рд╣рдо рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рдЗрд╕ рд╡рд░реНрдЧ рдореЗрдВ рдирд╣реАрдВ рдЬрд╛рдПрдВрдЧреЗредChaiScript рд▓рд╛рдЗрдмреНрд░реЗрд░реА
рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ, ChaScript рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ рдЕрддрд┐рд░рд┐рдХреНрдд рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдкреНрд░рджрд╛рди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЗрд╕рдореЗрдВ рдЧрдгрд┐рддреАрдп рдлрд╝рдВрдХреНрд╢рди, рд╣реИрд╢ рдЯреЗрдмрд▓ рдФрд░ рдЕрдзрд┐рдХрд╛рдВрд╢ рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХрд╛ рдЕрднрд╛рд╡ рд╣реИред рдЖрдк рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рдЪрд╛рдИрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдПрдХреНрд╕реНрдЯреНрд░рд╛ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рд╕реЗ рдореЙрдбреНрдпреВрд▓ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдирдореЗрдВ рд╕реЗ рдХреБрдЫ рдХреЛ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ , рдФрд░ рдлрд┐рд░ рдЕрдкрдиреА рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рдЖрдпрд╛рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЧрдгрд┐рдд рдкреБрд╕реНрддрдХрд╛рд▓рдп рдФрд░ рдПрдХреЛ (x) рдлрд╝рдВрдХреНрд╢рди рдХреЛ рд▓реЗрдВ: #include <chaiscript/chaiscript.hpp> #include <chaiscript/extras/math.hpp> int main() { chaiscript::ChaiScript chai; // auto mathlib = chaiscript::extras::math::bootstrap(); chai.add(mathlib); std::cout << chai.eval<double>("acos(0.5)"); // ~1.047 }
рдЖрдк рдЕрдкрдиреА рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЛ рднрд╛рд╖рд╛ рдХреЗ рд▓рд┐рдП рднреА рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдлрд┐рд░ рдЖрдпрд╛рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣ рдХрд╛рдлреА рд╕рд░рд▓рддрд╛ рд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореИрдВ рдЖрдкрдХреЛ рд╕рд▓рд╛рд╣ рджреЗрддрд╛ рд╣реВрдВ рдХрд┐ рдЖрдк рдУрдкрди рд╕реЛрд░реНрд╕ рдЧрдгрд┐рдд рдпрд╛ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдореЗрдВ рдХрд┐рд╕реА рдЕрдиреНрдп рд╕реНрд░реЛрдд рд╕реЗ рдЦреБрдж рдХреЛ рдкрд░рд┐рдЪрд┐рдд рдХрд░реЗрдВред рд╕рд┐рджреНрдзрд╛рдВрдд рд░реВрдк рдореЗрдВ, рд╕реА ++ рдХреЗ рд╕рд╛рде рдПрдХреАрдХрд░рдг рдХреЗ рднрд╛рдЧ рдХреЗ рд░реВрдк рдореЗрдВ, рд╣рдордиреЗ рд▓рдЧрднрдЧ рд╣рд░ рдЪреАрдЬ рдХреА рдЬрд╛рдВрдЪ рдХреА, рдЗрд╕рд▓рд┐рдП рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕ рдкрд░ рдЕрдиреБрднрд╛рдЧ рдкреВрд░рд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИредрд╡реНрдпрдХреНрддрд┐рдЧрдд рдЕрдиреБрднрд╡
3D- OpenGL , , .
, , , ┬л ┬╗, .
, ChaiScript , Lua. , , : , C++ C, - C-style . , , .
, . ImGui, chaiscript. , :
рдЙрд╕реА рддрд░рд╣, рдХрдИ рдФрд░ рдХрдХреНрд╖рд╛рдПрдВ рдирд┐рд░реНрдпрд╛рдд рдХреА рдЬрд╛рддреА рд╣реИрдВ, рдФрд░ рдлрд┐рд░ рд╕рдм рдХреБрдЫ рдПрдХ рд╕рд╛рде рдЬреБрдбрд╝рд╛ рд╣реБрдЖ рд╣реИ рд▓реИрдореНрдмрдбрд╛ рдлрд╝рдВрдХреНрд╢рди рд╕реАрдзреЗ рдЖрд░рдВрднреАрдХрд░рдг рдХреЛрдб рдореЗрдВ рдШреЛрд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ред рдЖрдк рд╕реНрдХреНрд░реАрдирд╢реЙрдЯ рдореЗрдВ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрд╛ рдкрд░рд┐рдгрд╛рдо рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ:
рдЪреИрд╕рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╕реЗ рдЗрдордЧреБрдИ рддрдХ рдХрдВрд╕реЛрд▓: рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рдХрдорд╛рдВрдб рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдирд╛ рдФрд░ рдЗрдВрд╕реНрдЯреЙрд▓рдХрд░рдирд╛ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЗ рд╕рдордЧреНрд░ рд▓рдЪреАрд▓реЗрдкрди рдХреЛ рджреЗрдЦрддреЗ рд╣реБрдП, рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рдирд┐рд░реНрдпрд╛рдд рдХрд░рдиреЗ рд╡рд╛рд▓реА рдХрдХреНрд╖рд╛рдУрдВ рдХреЗ рд▓рд┐рдП рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЛ рдмрджрд▓рдирд╛ рд▓рдЧрднрдЧ рд╕реАрдзрд╛ рд╣реЛрдЧрд╛ред рдмреЗрд╢рдХ, рд▓реБрдЖ рдХреЗ рдкрд╛рд╕ рдЕрдзрд┐рдХ рд╡реНрдпрд╛рдкрдХ рдкреНрд░рд▓реЗрдЦрди рдФрд░ рдПрдХ рд╕рдореБрджрд╛рдп рд╣реИ, рдФрд░ рдпрд╣ рднрд╛рд╖рд╛ рдмреЗрд╣рддрд░ рд╣реЛрдЧреА рдпрджрд┐ рдЖрдкрдХреЛ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛрдб рд╕реЗ рдЕрдзрд┐рдХ рдкреНрд░рджрд░реНрд╢рди рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ (рдЬреЗрдЖрдИрдЯреА рдЕрднреА рднреА рдЕрдкрдирд╛ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ), рд▓реЗрдХрд┐рди рдЖрдкрдХреЛ рдЕрднреА рднреА ChaiScript рдирд╣реАрдВ рд▓рд┐рдЦрдирд╛ рдЪрд╛рд╣рд┐рдПред рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдПрдХ рдЫреЛрдЯрд╛ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд╣реИ рдЬрд┐рд╕реЗ рд╕реНрдХреНрд░рд┐рдкреНрдЯрд┐рдВрдЧ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рддреЛ рдЖрдк рдЙрдкрд▓рдмреНрдз рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХреЗ рд╕рд╛рде рд╕реБрд░рдХреНрд╖рд┐рдд рд░реВрдк рд╕реЗ рдкреНрд░рдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред. C++ ( Lua ), ChaiScript . . .