
تستخدم آلات التكديس في مجموعة متنوعة من لغات البرمجة الحديثة. من السهل فهمها وفي نفس الوقت فعالة للغاية. هل تريد تجربة مثل هذا في العمل؟
ربما سمعتم جميعًا أن الأسماء المستعارة لـ 1C تشكو من نظامهم ، مع الأخذ في الاعتبار أن لغة 1C ليست منخفضة بما يكفي ، ومملة ، وما إلى ذلك. كلهم ينظرون بشوق نحو لغات البرمجة "الحقيقية". لذا ، أيها السادة ، إنهم مخطئون. في نظام 1C ، هناك أماكن يمكنك فيها تمديد عقل المبرمج والاستمتاع بالتكنولوجيا منخفضة المستوى. أقترح عليك الغوص في أحشاء الجهاز الظاهري 1C وفهم كيفية عملها. لديها "مجمّع" خاص بها ، واليوم سنكتب رمز عمل لـ 1C. تعال تحت القص ، سيكون ممتعا!
مكائن افتراضية مكدسة
لغات البرمجة الديناميكية تجتذب العالم بشكل متزايد. من اللغات الأصلية "الصادقة" في الرتب ، ربما ، بقي C فقط (مع الإيجابيات وبدون). هذا إذا أخذنا التيار الصناعي. تحتوي جميع اللغات الشائعة ، بطريقة أو بأخرى ، على طبقة في شكل "بيئة وقت التشغيل" أو "آلة افتراضية" ، والتي تضمن تنفيذ التعليمات البرمجية على بنية معينة من الحديد. والغالبية العظمى من هذه "الأجهزة الافتراضية" مكدسة ، أي تنفيذ عمليات المعالجة باستخدام مثل هذه البنية المعروفة في عالم الكمبيوتر باسم "المكدس".
(Stack) "". (, ) - , . . .. . "LIFO" — last in/first out. ( ). — .
Java, Python, C# 1 — . , node.js — , , . 95% , . JIT , , ? :)
, , . , — , -, . , . , — , . Java — . , . , , Java JVM — . ( ) Dalvik. , , . — , . , , , ( ) , , .
1 . — 1, — , 1Script. , .
. 2014 , .
, = 1 + 1; ?
PushConst 1
PushConst 1
Add
LoadVar A
- 1 (2 ), Add.
Add
(2 ) . . LoadVar
, ( — ).
. , = 1+1+2 :
PushConst 1 ;
PushConst 1 ;
Add ; 2 (1 1), ,
PushConst 2 ;
Add ; 2 (2 2), ,
LoadVar A ; , (4) .
, , , : - - .
, , "-". "" .
- 1
, 1 - , , , . , , - - — . , 1 - . , , epf . v8unpack.
1. , .
epf. , chocolatey
choco install v8unpack --version 3.0.41 --source https://www.myget.org/F/onescript/api/v2
, chocolatey (, , ?) https://github.com/e8tools/v8unpack/releases/download/v.3.0.40/v8unpack.exe exe PATH, .
, 1, , .
v8unpack -P .epf content
content, 1 ( — : https://infostart.ru/public/250142/)
, "<--GUID>.0", "info" "text". "text" , , . content . "" " ". , .

, ? , content
v8unpack -P .epf content
GUID.0 , image, text — - . , , - , ? 1 - image. :

— 1. , . , ? , ! ? , !
?
, -, , , . .
-, , - 1 , . 1-, , . " 1" , . , , , 1. . , ?
. , , , .. . . , 1 . , , ( ) " ", " 1" — , .
, . , . - -, 1 . , .
: , ( , ), , , .
, ?
- 1, . - .
, v8unpack "" "image", .

, , , 1.
""
(). — . (OpCode), . , . . , , . ( ). , , — : .
? 1 128, , . .
""
. - , — , — . " ", . .. - , , / . , / . , .
. , , "". " = 2" 1 . . " - ".
""
1 ( ) . - ( ). , . . "", ( ) , .

-?
. — , — , . 2 1.
2. 0 .
2 2 :
LdConst 0
LdConst 0
Add 0
! : , - , Ld "Load". , .
LdConst , ( , 0 ). , . — .
, 2 ( — )
— . , , , Add 0. 2 1 ( ).
, "" .
, , .
, !
, "Hello World".
"" "" :

" " "" , .
, " "

, "" :
LdConst 0
ArgNum 1
CallLoc 0
End 0
"". , -

?
"" " " v8unpack . 1- . " " "". .
. .
= 8;
= + 2;
= - ;
: -, 8 2 "" . 0, — 1. , , . .
LdVar. , . , :
LineNum 1 ;
LdVar 0 ; 0 ()
LdConst 0 ; 0 ( 8)
Assign ; - , .
LineNum 2 ;
LdVar 1 ; 1 ()
LdVar 0 ; 0 ()
LdConst 1 ; 1 ( 2)
Add ; 2 , (+2)
Assign ; - , ( = (+2)).
LineNum 3 ;
LdVar 2 ; 2 ()
LdVar 1 ; 1 ()
LdVar 0 ; 0 ()
Sub; . 2 ,
Assign; = (-)
End;
, , , , . , LineNum? , , , . . , , " , " . , LineNum. , , , .
. -, , . ( ) . :
. "" . 0.
, LineNum. "" 1 .
LdConst 0; -
ArgNum 1;
CallLoc 0; 0.
, ArgNum. — . , . , .
, ( ), , — - . Assign, . 2 . . LdRet. , , . , Ret, . LdRet — . , . . 1Script "" .
, , . . , . Jmp. , Jmp . . , , 1. - — , .
, , 1 . , " " , — . = , " " . :
() = ("") . = 2
2 : . 1 . , , . , " " .
, . , . 2 — And Or . , , .
, "" , , , .. , .. . ( ). , , , .. , ).
2 : JmpTrue JmpFalse. ( ), , , . , JmpTrue 1 . .. , JmpTrue, , .. 1 (trollface) , 1Script JmpTrue .
? 0 1, 0 1
0: LdVar 0 ;
1: LdConst 0 ; 1
2: Cmp ; ( )
3: JmpFalse 6 ; 6,
4: IF ;
5: IF ;
6: … ;
— . — .
3 : "", "… " " … ". "" , .
"… " " ", , . , , . Gte (--) JmpFalse . , "".
" "
. — , Next()
Iter, Next , . , … , , 1 , , .
. , , :
()
.();
;
, "" 0, "" 1. , , "0", . , ? , :)
? , :
PutTmp ;
LdTmp ;
( 0)
LdLoc 0 ;
, , .
Iter ; -.
Assign ; Tmp
, :
5. Assign, 2 — . .
:
LdLoc 2 ; 0
LdTmp 0 ;
Assign; 0
LdLoc 2; 0
Next;
JmpFalse 26 ; - .
Next. , (0), , , , , . JmpFalse .
, JmpFalse 0
, . 0
, 0
— .
…
- . 19-23 . 25 — Jmp , 26 — .
27- 32-. 0
, - 2 . ,
, … , +3 , 0
. , , …
, 1Script :
0 :(LineNum 3)
1 :(PushLoc 0)
2 :(PushIterator 0)
3 :(LineNum 3)
4 :(IteratorNext 0)
5 :(JmpFalse 12)
6 :(LoadLoc 1)
7 :(LineNum 4)
8 :(PushLoc 1)
9 :(ArgNum 0)
10 :(ResolveMethodProc 0)
11 :(Jmp 3)
12 :(StopIterator 0)
13 :(PushConst 1)
14 :(Return 0)
15 37. , .. , . , 1Script 1. .
, , , . ? , , . , .
? , , , "" "".
- , 1 . BlckEnd Jmp . , BlckEnd — - . BlckEnd 0.
. "" BlckEnd, .
2;
.. "" — BlckEnd 0, "" — BlckEnd < >. , " " ,
, .. "" " ".
-
BeginTry, . .. . , , BlckEnd <> Jmp ;
:
()
;
;
;
0: BeginTry 4 ; Cmd
1: LineNum 6 ;
2:BlckEnd 1 ; 1
3:Jmp 6 ;
4:LineNum 6 ; :
5:EndTry 0 ; ( )
6:LineNum 7 ; :
7:End 0 ; (, )
8:End 0 ; (, )
9:End 0 ; (, )
. BeginTry , , ( ).
( ), BlckEnd ( 2-3). EndTry.
, , . .
? , ? , "" "". image -, , v8unpack epf.
, .
: . , . , (-) , ? , " " :
= .();
.()
(.);
;
, , " " "-()". 1 , 1 , !
. "" "" . , "" — . :
"". "". ? , "(())" "". - -. ? — !
(dmpas), , :)
Disclaimer
, , . , , 1 . , . "" . , . . , "" , .
1C هو نظام معقد ومتعدد الطبقات ومن المثير للاهتمام دراسته. وكلما زادت معرفتك بكيفية عمل نظامك ، زادت كفاءة استخدامه. قمنا اليوم بدراسة كيفية عمل الآلة الافتراضية 1C ، ونأمل أن نوسع آفاقنا التقنية. حسنًا ، علاوة على ذلك ، حصلنا على لعبة بناء ، لأن اللعب مع المجمّع ممتع جدًا!
أتمنى لك النجاح الإبداعي!