เบžเบฒเบชเบฒเบเบฒเบ™เบ‚เบฝเบ™เป‚เบ›เบฅเปเบเบฅเบกเปƒเบซเบกเปˆ Mash

เป€เบ›เบฑเบ™โ€‹เป€เบงโ€‹เบฅเบฒโ€‹เบซเบผเบฒเบโ€‹เบ›เบตโ€‹เบ—เบตเปˆโ€‹เบ‚เป‰เบฒโ€‹เบžเบฐโ€‹เป€เบˆเบปเป‰เบฒโ€‹เป„เบ”เป‰โ€‹เบžเบฐโ€‹เบเบฒโ€‹เบเบฒเบกโ€‹เปƒเบ™โ€‹เบเบฒเบ™โ€‹เบžเบฑเบ”โ€‹เบ—เบฐโ€‹เบ™เบฒโ€‹เบžเบฒโ€‹เบชเบฒโ€‹เป‚เบ„เบ‡โ€‹เบเบฒเบ™โ€‹เบ‚เบญเบ‡โ€‹เบ•เบปเบ™โ€‹เป€เบญเบ‡โ€‹. เบ‚เป‰เบญเบเบขเบฒเบเบชเป‰เบฒเบ‡, เปƒเบ™เบ„เบงเบฒเบกเบ„เบดเบ”เป€เบซเบฑเบ™เบ‚เบญเบ‡เบ‚เป‰เบญเบ, เบžเบฒเบชเบฒเบ—เบตเปˆเบ‡เปˆเบฒเบเบ”เบฒเบเบ—เบตเปˆเบชเบธเบ”, เบกเบตเบ›เบฐเป‚เบซเบเบ”เบขเปˆเบฒเบ‡เป€เบ•เบฑเบกเบ—เบตเปˆเปเบฅเบฐเบชเบฐเบ”เบงเบเบ—เบตเปˆเป€เบ›เบฑเบ™เป„เบ›เป„เบ”เป‰.

เปƒเบ™เบšเบปเบ”เบ„เบงเบฒเบกเบ™เบตเป‰เบ‚เป‰เบญเบเบ•เป‰เบญเบ‡เบเบฒเบ™เป€เบ™เบฑเป‰เบ™เบซเบ™เบฑเบเป€เบ–เบดเบ‡เบ‚เบฑเป‰เบ™เบ•เบญเบ™เบ•เบปเป‰เบ™เบ•เปเบ‚เบญเบ‡เบเบฒเบ™เป€เบฎเบฑเบ”เบงเบฝเบเบ‚เบญเบ‡เบ‚เป‰เบญเบเปเบฅเบฐ, เป€เบžเบทเปˆเบญเป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™, เบญเบฐเบ—เบดเบšเบฒเบเปเบ™เบงเบ„เบงเบฒเบกเบ„เบดเบ”เบ—เบตเปˆเบชเป‰เบฒเบ‡เบ‚เบทเป‰เบ™เบ‚เบญเบ‡เบžเบฒเบชเบฒเปเบฅเบฐเบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เบ„เบฑเป‰เบ‡เบ—เปเบฒเบญเบดเบ”เบ‚เบญเบ‡เบกเบฑเบ™, เป€เบŠเบดเปˆเบ‡เบ‚เป‰เบญเบเบเปเบฒเบฅเบฑเบ‡เป€เบฎเบฑเบ”เบงเบฝเบเบขเบนเปˆ.

เปƒเบซเป‰เบ‚เป‰เบญเบเป€เบงเบปเป‰เบฒเบฅเปˆเบงเบ‡เบซเบ™เป‰เบฒเบงเปˆเบฒเบ‚เป‰เบญเบเบ‚เบฝเบ™เป‚เบ„เบ‡เบเบฒเบ™เบ—เบฑเบ‡เบซเบกเบปเบ”เปƒเบ™ Free Pascal, เป€เบžเบฒเบฐเบงเปˆเบฒ ... เป‚เบ›เบฅเปเบเบฅเบกเบ•เปˆเบฒเบ‡เป†เปƒเบ™เบกเบฑเบ™เบชเบฒเบกเบฒเบ”เบ–เบทเบเบฅเบงเบšเบฅเบงเบกเบชเปเบฒเบฅเบฑเบšเป€เบงเบ—เบตเบˆเปเบฒเบ™เบงเบ™เบซเบฅเบฒเบ, เปเบฅเบฐเบ•เบปเบงเบฅเบงเบšเบฅเบงเบกเบ•เบปเบงเบกเบฑเบ™เป€เบญเบ‡เบœเบฐเบฅเบดเบ” binaries เบ—เบตเปˆเบ”เบตเบ—เบตเปˆเบชเบธเบ” (เบ‚เป‰เบญเบเบฅเบงเบšเบฅเบงเบกเบญเบปเบ‡เบ›เบฐเบเบญเบšเบ—เบฑเบ‡เบซเบกเบปเบ”เบ‚เบญเบ‡เป‚เบ„เบ‡เบเบฒเบ™เบ”เป‰เบงเบเบ—เบธเบ‡ O2).

เป€เบงเบฅเบฒเปเบฅเปˆเบ™เบžเบฒเบชเบฒ

เบเปˆเบญเบ™เบญเบทเปˆเบ™ เปเบปเบ”, เบกเบฑเบ™เบ„เบธเป‰เบกเบ„เปˆเบฒเบ—เบตเปˆเบˆเบฐเป€เบงเบปเป‰เบฒเบเปˆเบฝเบงเบเบฑเบšเป€เบ„เบทเปˆเบญเบ‡ virtual เบ—เบตเปˆเบ‚เป‰เบญเบเบ•เป‰เบญเบ‡เบ‚เบฝเบ™เป€เบžเบทเปˆเบญเปƒเบŠเป‰เปเบญเบฑเบšเบžเบฅเบดเป€เบ„เบŠเบฑเบ™เปƒเบ™เบญเบฐเบ™เบฒเบ„เบปเบ”เปƒเบ™เบžเบฒเบชเบฒเบ‚เบญเบ‡เบ‚เป‰เบญเบ. เบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเป„เบ”เป‰เบ•เบฑเบ”เบชเบดเบ™เปƒเบˆเบ›เบฐเบ•เบดเบšเบฑเบ”เบชเบฐเบ–เบฒเบ›เบฑเบ”เบ•เบฐเบเบฐเบเปเบฒ stack, เบšเบฒเบ‡เบ—เบต, เป€เบžเบฒเบฐเบงเปˆเบฒเบกเบฑเบ™เป€เบ›เบฑเบ™เบงเบดเบ—เบตเบ—เบตเปˆเบ‡เปˆเบฒเบเบ—เบตเปˆเบชเบธเบ”. เบ‚เป‰เบญเบเบšเปเปˆเบžเบปเบšเบšเบปเบ”เบ„เบงเบฒเบกเบ›เบปเบเบเบฐเบ•เบดเบ”เบฝเบงเบเปˆเบฝเบงเบเบฑเบšเบงเบดเบ—เบตเบเบฒเบ™เป€เบฎเบฑเบ”เปเบšเบšเบ™เบตเป‰เปƒเบ™เบžเบฒเบชเบฒเบฅเบฑเบ”เป€เบŠเบ, เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™เบซเบผเบฑเบ‡เบˆเบฒเบเป€เบฎเบฑเบ”เบ„เบงเบฒเบกเบ„เบธเป‰เบ™เป€เบ„เบตเบเบเบฑเบšเป€เบญเบเบฐเบชเบฒเบ™เบžเบฒเบชเบฒเบญเบฑเบ‡เบเบดเบ”, เบ‚เป‰เบญเบเบ™เบฑเปˆเบ‡เบฅเบปเบ‡เป€เบžเบทเปˆเบญเบญเบญเบเปเบšเบšเปเบฅเบฐเบ‚เบฝเบ™เบฅเบปเบ”เบ–เบตเบšเบ‚เบญเบ‡เบ‚เป‰เบญเบเป€เบญเบ‡. เบ•เปเปˆเป„เบ›เบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเบˆเบฐเบ™เปเบฒเบชเบฐเป€เบซเบ™เบตเปเบ™เบงเบ„เบงเบฒเบกเบ„เบดเบ” "เบเป‰เบฒเบงเบซเบ™เป‰เบฒ" เบ‚เบญเบ‡เบ‚เป‰เบญเบเปเบฅเบฐเบเบฒเบ™เบžเบฑเบ”เบ—เบฐเบ™เบฒเปƒเบ™เป€เบฅเบทเปˆเบญเบ‡เบ™เบตเป‰.

เบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ” stack

เปเบ™เปˆเบ™เบญเบ™, เบขเบนเปˆเป€เบ—เบดเบ‡เบชเบธเบ”เบ‚เบญเบ‡ VM เปเบกเปˆเบ™ stack. เปƒเบ™เบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เบ‚เบญเบ‡เบ‚เป‰เบญเบเบกเบฑเบ™เป€เบฎเบฑเบ”เบงเบฝเบเบขเบนเปˆเปƒเบ™เบ•เบฑเบ™. เป‚เบ”เบเบžเบทเป‰เบ™เบ–เบฒเบ™เปเบฅเป‰เบง, เบ™เบตเป‰เปเบกเปˆเบ™เบ•เบปเบงเบŠเบตเป‰เบ—เบตเปˆเบ‡เปˆเบฒเบเบ”เบฒเบเปเบฅเบฐเบ•เบปเบงเปเบ›เบ—เบตเปˆเบˆเบฐเป€เบเบฑเบšเบฎเบฑเบเบชเบฒเบ”เบฑเบ”เบŠเบฐเบ™เบตเบ‚เบญเบ‡เบชเปˆเบงเบ™เป€เบ—เบดเบ‡เบ‚เบญเบ‡ stack.
เป€เบกเบทเปˆเบญเบกเบฑเบ™เบ–เบทเบเป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™, array เบ‚เบญเบ‡ 256 เบญเบปเบ‡เบ›เบฐเบเบญเบšเปเบกเปˆเบ™เบ–เบทเบเบชเป‰เบฒเบ‡เบ‚เบถเป‰เบ™. เบ–เป‰เบฒเบ•เบปเบงเบŠเบตเป‰เป€เบžเบตเปˆเบกเป€เบ•เบตเบกเบ–เบทเบเบเบปเบ”เปƒเบชเปˆ stack, เบ‚เบฐเบซเบ™เบฒเบ”เบ‚เบญเบ‡เบกเบฑเบ™เป€เบžเบตเปˆเบกเบ‚เบถเป‰เบ™ 256 เบญเบปเบ‡เบ›เบฐเบเบญเบšเบ•เปเปˆเป„เบ›. เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™, เป€เบกเบทเปˆเบญเป€เบญเบปเบฒเบญเบปเบ‡เบ›เบฐเบเบญเบšเบญเบญเบเบˆเบฒเบ stack, เบ‚เบฐเบซเบ™เบฒเบ”เบ‚เบญเบ‡เบกเบฑเบ™เบ–เบทเบเบ›เบฑเบš.

VM เปƒเบŠเป‰เบซเบผเบฒเบ stacks:

  1. stack เบซเบผเบฑเบ.
  2. stack เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เป€เบเบฑเบšเบฎเบฑเบเบชเบฒเบˆเบธเบ”เบเบฑเบšเบ„เบทเบ™.
  3. stack เป€เบเบฑเบšเบ‚เบตเป‰เป€เบซเบเบทเป‰เบญ.
  4. เบžเบฐเบเบฒเบเบฒเบก / เบˆเบฑเบš / เบชเบธเบ”เบ—เป‰เบฒเบเบชเบฐเบเบฑเบ” stack handler.

เบ„เบปเบ‡เบ—เบตเปˆ เปเบฅเบฐเบ•เบปเบงเปเบ›

เบญเบฑเบ™เบ™เบตเป‰เปเบกเปˆเบ™เบ‡เปˆเบฒเบเบ”เบฒเบ. เบ„เบปเบ‡เบ—เบตเปˆเบ–เบทเบเบˆเบฑเบ”เบเบฒเบ™เบขเบนเปˆเปƒเบ™เบฅเบฐเบซเบฑเบ”เบ‚เบฐเบซเบ™เบฒเบ”เบ™เป‰เบญเบเปเบเบเบ•เปˆเบฒเบ‡เบซเบฒเบเปเบฅเบฐเบกเบตเบขเบนเปˆเปƒเบ™เบ„เปเบฒเบฎเป‰เบญเบ‡เบชเบฐเบซเบกเบฑเบเปƒเบ™เบญเบฐเบ™เบฒเบ„เบปเบ”เบœเปˆเบฒเบ™เบ—เบตเปˆเบขเบนเปˆเบ„เบปเบ‡เบ—เบตเปˆ. เบ•เบปเบงเปเบ›เปเบกเปˆเบ™ array เบ‚เบญเบ‡เบ•เบปเบงเบŠเบตเป‰เบ‚เบญเบ‡เบ‚เบฐเบซเบ™เบฒเบ”เบ—เบตเปˆเปเบ™เปˆเบ™เบญเบ™, เบเบฒเบ™เป€เบ‚เบปเป‰เบฒเป€เบ–เบดเบ‡เบˆเบธเบฅเบฑเบ‡เบ‚เบญเบ‡เบกเบฑเบ™เบ–เบทเบเบ›เบฐเบ•เบดเบšเบฑเบ”เป‚เบ”เบเบ”เบฑเบ”เบชเบฐเบ™เบต - i.e. เบ—เบตเปˆเบขเบนเปˆ static. เบ•เบปเบงเปเบ›เบชเบฒเบกเบฒเบ”เบ–เบทเบเบเบนเป‰เป„เบ›เบ—เบฒเบ‡เป€เบ—เบดเบ‡เบ‚เบญเบ‡ stack เบซเบผเบทเบญเปˆเบฒเบ™เบˆเบฒเบเบšเปˆเบญเบ™เบ™เบฑเป‰เบ™. เปเบ—เป‰เบˆเบดเบ‡เปเบฅเป‰เบง, เป€เบžเบฒเบฐเบงเปˆเบฒ เปƒเบ™เบ‚เบฐเบ™เบฐเบ—เบตเปˆเบ•เบปเบงเปเบ›เบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒเป€เบเบฑเบšเบฎเบฑเบเบชเบฒเบ•เบปเบงเบŠเบตเป‰เป„เบ›เบซเบฒเบ„เปˆเบฒเปƒเบ™เบซเบ™เปˆเบงเบเบ„เบงเบฒเบกเบˆเปเบฒ VM, เบžเบฒเบชเบฒเป„เบ”เป‰เบ–เบทเบเบ„เบญเบšเบ‡เปเบฒเป‚เบ”เบเบเบฒเบ™เป€เบฎเบฑเบ”เบงเบฝเบเบเบฑเบšเบ•เบปเบงเบŠเบตเป‰ implicit.

เบ„เบปเบ™เป€เบเบฑเบšเบ‚เบตเป‰เป€เบซเบเบทเป‰เบญ

เปƒเบ™ VM เบ‚เบญเบ‡เบ‚เป‰เบญเบเบกเบฑเบ™เป€เบ›เบฑเบ™เป€เบ„เบดเปˆเบ‡เบญเบฑเบ”เบ•เบฐเป‚เบ™เบกเบฑเบ”. เป€เบซเบผเบปเปˆเบฒเบ™เบฑเป‰เบ™. เบ™เบฑเบเบžเบฑเบ”เบ—เบฐเบ™เบฒเป€เบญเบ‡เบ•เบฑเบ”เบชเบดเบ™เปƒเบˆเบงเปˆเบฒเบˆเบฐเป‚เบ—เบซเบฒเบœเบนเป‰เป€เบเบฑเบšเบ‚เบตเป‰เป€เบซเบเบทเป‰เบญ. เบกเบฑเบ™เบšเปเปˆเป„เบ”เป‰เป€เบฎเบฑเบ”เบงเบฝเบเป‚เบ”เบเปƒเบŠเป‰เบ•เบปเบงเบŠเบตเป‰เบ•เบปเบงเบŠเบตเป‰เบ›เบปเบเบเบฐเบ•เบด, เบ„เบทเบเบฑเบš Python, Perl, Ruby, Lua, เปเบฅเบฐเบญเบทเปˆเบ™เป†. เบกเบฑเบ™เป„เบ”เป‰เบ–เบทเบเบ›เบฐเบ•เบดเบšเบฑเบ”เป‚เบ”เบเบœเปˆเบฒเบ™เบฅเบฐเบšเบปเบšเป€เบ„เบทเปˆเบญเบ‡เบซเบกเบฒเบ. เป€เบซเบผเบปเปˆเบฒเบ™เบฑเป‰เบ™. เป€เบกเบทเปˆเบญเบ•เบปเบงเปเบ›เบ—เบตเปˆเบกเบตเบˆเบธเบ”เบ›เบฐเบชเบปเบ‡เป€เบžเบทเปˆเบญเบกเบญเบšเบ„เปˆเบฒเบŠเบปเปˆเบงเบ„เบฒเบง, เบ•เบปเบงเบŠเบตเป‰เป„เบ›เบซเบฒเบ„เปˆเบฒเบ™เบตเป‰เบˆเบฐเบ–เบทเบเป€เบžเบตเปˆเบกเปƒเบชเปˆ stack เบ‚เบญเบ‡เบœเบนเป‰เป€เบเบฑเบšเบ‚เบตเป‰เป€เบซเบเบทเป‰เบญ. เปƒเบ™เบญเบฐเบ™เบฒเบ„เบปเบ”, เบœเบนเป‰เป€เบเบฑเบšเบฅเบงเบšเบฅเบงเบกเบขเปˆเบฒเบ‡เป„เบงเบงเบฒเปเบฅเปˆเบ™เบœเปˆเบฒเบ™เบšเบฑเบ™เบŠเบตเบฅเบฒเบเบŠเบทเปˆเบ•เบปเบงเบŠเบตเป‰เบ—เบตเปˆเบเบฝเบกเป„เบงเป‰เปเบฅเป‰เบง.

เบเบฒเบ™เบˆเบฑเบ”เบเบฒเบ™เบžเบฐเบเบฒเบเบฒเบก / เบˆเบฑเบš / เบชเบธเบ”เบ—เป‰เบฒเบเบ‚เบฑเบ”เบ‚เบงเบฒเบ‡

เป€เบŠเบฑเปˆเบ™เบ”เบฝเบงเบเบฑเบ™เบเบฑเบšเบžเบฒเบชเบฒเบ—เบตเปˆเบ—เบฑเบ™เบชเบฐเป„เบซเบก, เบเบฒเบ™เบˆเบฑเบ”เบเบฒเบ™เบ‚เปเป‰เบเบปเบเป€เบงเบฑเป‰เบ™เปเบกเปˆเบ™เบญเบปเบ‡เบ›เบฐเบเบญเบšเบ—เบตเปˆเบชเปเบฒเบ„เบฑเบ™. เบซเบผเบฑเบ VM เบ–เบทเบเบซเปเปˆเบ”เป‰เบงเบ try..catch block, เป€เบŠเบดเปˆเบ‡เบชเบฒเบกเบฒเบ”เบเบฑเบšเบ„เบทเบ™เบชเบนเปˆเบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เบฅเบฐเบซเบฑเบ”เบซเบผเบฑเบ‡เบˆเบฒเบเบˆเบฑเบšเบ‚เปเป‰เบเบปเบเป€เบงเบฑเป‰เบ™เป‚เบ”เบเบเบฒเบ™เบเบปเบ”เบšเบฒเบ‡เบ‚เปเป‰เบกเบนเบ™เบเปˆเบฝเบงเบเบฑเบšเบกเบฑเบ™เปƒเบชเปˆ stack. เปƒเบ™เบฅเบฐเบซเบฑเบ”เบ„เปเบฒเบฎเป‰เบญเบ‡เบชเบฐเบซเบกเบฑเบ, เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบเปเบฒเบ™เบปเบ”เบเบฒเบ™เบžเบฐเบเบฒเบเบฒเบก / เบˆเบฑเบš / เบชเบธเบ”เบ—เป‰เบฒเบเบšเบฅเบฑเบญเบเบ‚เบญเบ‡เบฅเบฐเบซเบฑเบ”, เบฅเบฐเบšเบธเบˆเบธเบ”เป€เบ‚เบปเป‰เบฒเบ—เบตเปˆเบˆเบฑเบš (เบ•เบปเบงเบˆเบฑเบ”เบเบฒเบ™เบ‚เปเป‰เบเบปเบเป€เบงเบฑเป‰เบ™) เปเบฅเบฐเบชเบธเบ”เบ—เป‰เบฒเบ / เบชเบดเป‰เบ™เบชเบธเบ” (เบชเบดเป‰เบ™เบชเบธเบ”เบ‚เบญเบ‡เบšเบฅเบฑเบญเบ).

Multithreading

เบกเบฑเบ™เบชเบฐเบซเบ™เบฑเบšเบชเบฐเบซเบ™เบนเบ™เบขเบนเปˆเปƒเบ™เบฅเบฐเบ”เบฑเบš VM. เบกเบฑเบ™เบ‡เปˆเบฒเบเบ”เบฒเบเปเบฅเบฐเบชเบฐเบ”เบงเบเปƒเบ™เบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰. เบกเบฑเบ™เป€เบฎเบฑเบ”เบงเบฝเบเป‚เบ”เบเบšเปเปˆเบกเบตเบฅเบฐเบšเบปเบšเบ‚เบฑเบ”เบ‚เบงเบฒเบ‡, เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™เบฅเบฐเบซเบฑเบ”เบ„เบงเบ™เป„เบ”เป‰เบฎเบฑเบšเบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เปƒเบ™เบซเบผเบฒเบเบซเบปเบงเบ‚เปเป‰เบซเบผเบฒเบเบ„เบฑเป‰เบ‡เป„เบง, เบ•เบฒเบกเบฅเปเบฒเบ”เบฑเบš.

เบซเป‰เบญเบ‡เบชเบฐเบซเบกเบธเบ”เบžเบฒเบเบ™เบญเบเบชเปเบฒเบฅเบฑเบš VMs

เบšเปเปˆเบกเบตเบงเบดเบ—เบตเบ—เบตเปˆเบˆเบฐเป€เบฎเบฑเบ”เป‚เบ”เบเบšเปเปˆเบกเบตเบเบฒเบ™เบ™เบตเป‰. VM เบฎเบญเบ‡เบฎเบฑเบšเบเบฒเบ™เบ™เปเบฒเป€เบ‚เบปเป‰เบฒ, เบ„เป‰เบฒเบเบ„เบทเบเบฑเบšเบงเบดเบ—เบตเบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เปƒเบ™เบžเบฒเบชเบฒเบญเบทเปˆเบ™. เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบ‚เบฝเบ™เบšเบฒเบ‡เบชเปˆเบงเบ™เบ‚เบญเบ‡เบฅเบฐเบซเบฑเบ”เปƒเบ™ Mash เปเบฅเบฐเบšเบฒเบ‡เบชเปˆเบงเบ™เบ‚เบญเบ‡เบฅเบฐเบซเบฑเบ”เปƒเบ™เบžเบฒเบชเบฒเบเปเบฒเป€เบ™เบตเบ”, เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™เป€เบŠเบทเปˆเบญเบกเบ•เปเปˆเปƒเบซเป‰เป€เบ‚เบปเบฒเป€เบˆเบปเป‰เบฒเป€เบ‚เบปเป‰เบฒเป„เบ›เปƒเบ™เบซเบ™เบถเปˆเบ‡.

เบ™เบฑเบเปเบ›เบˆเบฒเบเบžเบฒเบชเบฒ Mash เบฅเบฐเบ”เบฑเบšเบชเบนเบ‡เป„เบ›เบซเบฒ bytecode เบชเปเบฒเบฅเบฑเบš VMs

เบžเบฒเบชเบฒเบฅเบฐเบ”เบฑเบšเบ›เบฒเบ™เบเบฒเบ‡

เป€เบžเบทเปˆเบญเบ‚เบฝเบ™เบ™เบฑเบเปเบ›เบขเปˆเบฒเบ‡เป„เบงเบงเบฒเบˆเบฒเบเบžเบฒเบชเบฒเบ—เบตเปˆเบชเบฑเบšเบชเบปเบ™เป€เบ‚เบปเป‰เบฒเป„เบ›เปƒเบ™เบฅเบฐเบซเบฑเบ” VM, เบ‚เป‰เบญเบเบ—เปเบฒเบญเบดเบ”เป„เบ”เป‰เบžเบฑเบ”เบ—เบฐเบ™เบฒเบžเบฒเบชเบฒเบฅเบฐเบ”เบฑเบšเบ›เบฒเบ™เบเบฒเบ‡. เบœเบปเบ™เป„เบ”เป‰เบฎเบฑเบšเปเบกเปˆเบ™เป€เบ›เบฑเบ™เบ•เบฒเบซเบ™เป‰เบฒเบขเป‰เบฒเบ™เบ—เบตเปˆเบ„เป‰เบฒเบเบ„เบท assembler เบ—เบตเปˆเบšเปเปˆเบกเบตเบˆเบธเบ”เบžเบดเป€เบชเบ”เปƒเบ™เบเบฒเบ™เบžเบดเบˆเบฒเบฅเบฐเบ™เบฒเบ—เบตเปˆเบ™เบตเป‰. เบ‚เป‰เบญเบเบˆเบฐเป€เบงเบปเป‰เบฒเบžเบฝเบ‡เปเบ•เปˆเบงเปˆเบฒเปƒเบ™เบฅเบฐเบ”เบฑเบšเบ™เบตเป‰เบ™เบฑเบเปเบ›เบˆเบฐเบ›เบฐเบกเบงเบ™เบœเบปเบ™เบ„เปˆเบฒเบ„เบปเบ‡เบ—เบตเปˆเปเบฅเบฐเบ•เบปเบงเปเบ›เบชเปˆเบงเบ™เปƒเบซเบเปˆ, เบ„เบดเบ”เป„เบฅเปˆเบ—เบตเปˆเบขเบนเปˆเบ„เบปเบ‡เบ—เบตเปˆเบ‚เบญเบ‡เบžเบงเบเป€เบ‚เบปเบฒเปเบฅเบฐเบ—เบตเปˆเบขเบนเปˆเบ‚เบญเบ‡เบˆเบธเบ”เป€เบ‚เบปเป‰เบฒ.

เบ–เบฒเบ›เบฑเบ”เบ•เบฐเบเบฐเบ™เบฑเบเปเบ›

เบ‚เป‰เบญเบเบšเปเปˆเป„เบ”เป‰เป€เบฅเบทเบญเบเบชเบฐเบ–เบฒเบ›เบฑเบ”เบ•เบฐเบเบฐเบเปเบฒเบ—เบตเปˆเบ”เบตเบ—เบตเปˆเบชเบธเบ”เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบˆเบฑเบ”เบ•เบฑเป‰เบ‡เบ›เบฐเบ•เบดเบšเบฑเบ”. เบ™เบฑเบเปเบ›เบšเปเปˆเป„เบ”เป‰เบชเป‰เบฒเบ‡เบ•เบปเป‰เบ™เป„เบกเป‰เบฅเบฐเบซเบฑเบ”, เบ”เบฑเปˆเบ‡เบ—เบตเปˆเบ™เบฑเบเปเบ›เบญเบทเปˆเบ™เป†เป€เบฎเบฑเบ”. เบฅเบฒเบงเป€เบšเบดเปˆเบ‡เปƒเบ™เบ•เบญเบ™เบ•เบปเป‰เบ™เบ‚เบญเบ‡เป‚เบ„เบ‡เบชเป‰เบฒเบ‡. เป€เบซเบผเบปเปˆเบฒเบ™เบฑเป‰เบ™. เบ–เป‰เบฒเบŠเบดเป‰เบ™เบชเปˆเบงเบ™เบ‚เบญเบ‡เบฅเบฐเบซเบฑเบ”เบ—เบตเปˆเบ–เบทเบเบงเบดเป€เบ„เบฒเบฐเป€เบšเบดเปˆเบ‡เบ„เบทเบงเปˆเบฒ "while :", เบกเบฑเบ™เบˆเบฐเป€เบซเบฑเบ™เป„เบ”เป‰เบŠเบฑเบ”เป€เบˆเบ™เบงเปˆเบฒเบ™เบตเป‰เปเบกเปˆเบ™เบเบฒเบ™เบชเป‰เบฒเบ‡ loop เปƒเบ™เบ‚เบฐเบ™เบฐเบ—เบตเปˆเปเบฅเบฐเบ•เป‰เบญเบ‡เป„เบ”เป‰เบฎเบฑเบšเบเบฒเบ™เบ›เบธเบ‡เปเบ•เปˆเบ‡เป€เบ›เบฑเบ™เปƒเบ™เบ‚เบฐเบ™เบฐเบ—เบตเปˆเบเบฒเบ™เบชเป‰เบฒเบ‡ loop. เบšเบฒเบ‡โ€‹เบชเบดเปˆเบ‡โ€‹เบšเบฒเบ‡โ€‹เบขเปˆเบฒเบ‡โ€‹เบ„เป‰เบฒเบโ€‹เบ„เบท switch-case เบ—เบตเปˆโ€‹เบŠเบฑเบšโ€‹เบŠเป‰เบญเบ™โ€‹.

เบ‚เปโ€‹เบ‚เบญเบšโ€‹เปƒเบˆโ€‹เบเบฑเบšโ€‹เบเบฒเบ™โ€‹เปเบเป‰โ€‹เป„เบ‚โ€‹เบชเบฐโ€‹เบ–เบฒโ€‹เบ›เบฑเบ”โ€‹เบ•เบฐโ€‹เบเบฐโ€‹เบ™เบตเป‰โ€‹, เบœเบนเป‰โ€‹เปเบ›โ€‹เป„เบ”เป‰โ€‹เบเบฒเบโ€‹เป€เบ›เบฑเบ™โ€‹เบšเปเปˆโ€‹เป„เบ”เป‰โ€‹เป„เบงโ€‹เบซเบผเบฒเบโ€‹. เบขเปˆเบฒเบ‡เปƒเบ”เบเปเปˆเบ•เบฒเบก, เบ„เบงเบฒเบกเบ‡เปˆเบฒเบเบ‚เบญเบ‡เบเบฒเบ™เบ”เบฑเบ”เปเบ›เบ‡เบ‚เบญเบ‡เบกเบฑเบ™เป„เบ”เป‰เป€เบžเบตเปˆเบกเบ‚เบถเป‰เบ™เบขเปˆเบฒเบ‡เบซเบผเบงเบ‡เบซเบผเบฒเบ. เบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเป„เบ”เป‰เป€เบžเบตเปˆเบกเป‚เบ„เบ‡เบชเป‰เบฒเบ‡เบ—เบตเปˆเบˆเปเบฒเป€เบ›เบฑเบ™เป„เบงเบเบงเปˆเบฒเบ—เบตเปˆเบเบฒเป€เบŸเบ‚เบญเบ‡เบ‚เป‰เบญเบเบชเบฒเบกเบฒเบ”เป€เบขเบฑเบ™เบฅเบปเบ‡. เบเบฒเบ™เบชเบฐเบซเบ™เบฑเบšเบชเบฐเบซเบ™เบนเบ™ OOP เบขเปˆเบฒเบ‡เป€เบ•เบฑเบกเบ—เบตเปˆเป„เบ”เป‰เบ–เบทเบเบ›เบฐเบ•เบดเบšเบฑเบ”เปƒเบ™เป€เบงเบฅเบฒเบซเบ™เป‰เบญเบเบเบงเปˆเบฒเบซเบ™เบถเปˆเบ‡เบญเบฒเบ—เบดเบ”.

เบเบฒเบ™เป€เบžเบตเปˆเบกเบ›เบฐเบชเบดเบ”เบ—เบดเบžเบฒเบšเบฅเบฐเบซเบฑเบ”

เปƒเบ™เบ—เบตเปˆเบ™เบตเป‰, เปเบ™เปˆเบ™เบญเบ™, เบกเบฑเบ™เบชเบฒเบกเบฒเบ”เบ–เบทเบเบ›เบฐเบ•เบดเบšเบฑเบ”เป„เบ”เป‰เบ”เบตเบเบงเปˆเบฒ (เปเบฅเบฐเบˆเบฐเบ–เบทเบเบ›เบฐเบ•เบดเบšเบฑเบ”, เปเบ•เปˆเบ•เปเปˆเบกเบฒ, เบ—เบฑเบ™เบ—เบตเบ—เบตเปˆเบ„เบปเบ™เบซเบ™เบถเปˆเบ‡เป€เบ‚เบปเป‰เบฒเปƒเบˆเบกเบฑเบ™). เบกเบฒเบฎเบญเบ”เบ›เบฐเบˆเบธ, optimizer เบžเบฝเบ‡เปเบ•เปˆเบฎเบนเป‰เบงเบดเบ—เบตเบเบฒเบ™เบ•เบฑเบ”เบฅเบฐเบซเบฑเบ”เบ—เบตเปˆเบšเปเปˆเป„เบ”เป‰เปƒเบŠเป‰, เบ„เบปเบ‡เบ—เบตเปˆเปเบฅเบฐเบเบฒเบ™เบ™เปเบฒเป€เบ‚เบปเป‰เบฒเบˆเบฒเบเบเบฒเบ™เบ›เบฐเบเบญเบš. เบ™เบญเบเบˆเบฒเบเบ™เบตเป‰, เบซเบผเบฒเบเป†เบ„เปˆเบฒเบ„เบปเบ‡เบ—เบตเปˆเบ—เบตเปˆเบกเบตเบ„เปˆเบฒเบ”เบฝเบงเบเบฑเบ™เบ–เบทเบเปเบ—เบ™เบ—เบตเปˆเบ”เป‰เบงเบเบญเบฑเบ™เบ”เบฝเบง. เบซเบกเบปเบ”โ€‹เป€เบ—เบปเปˆเบฒโ€‹เบ™เบตเป‰.

เบžเบฒเบชเบฒ Mash

เปเบ™เบงเบ„เบงเบฒเบกเบ„เบดเบ”เบžเบทเป‰เบ™เบ–เบฒเบ™เบ‚เบญเบ‡เบžเบฒเบชเบฒ

เปเบ™เบงเบ„เบงเบฒเบกเบ„เบดเบ”เบ•เบปเป‰เบ™เบ•เปเปเบกเปˆเบ™เป€เบžเบทเปˆเบญเบžเบฑเบ”เบ—เบฐเบ™เบฒเบžเบฒเบชเบฒเบ—เบตเปˆเป€เบ›เบฑเบ™เบ›เบฐเป‚เบซเบเบ”เปเบฅเบฐเบ‡เปˆเบฒเบเบ”เบฒเบเบ—เบตเปˆเบชเบธเบ”เบ—เบตเปˆเป€เบ›เบฑเบ™เป„เบ›เป„เบ”เป‰. เบ‚เป‰เบฒโ€‹เบžเบฐโ€‹เป€เบˆเบปเป‰เบฒโ€‹เบ„เบดเบ”โ€‹เบงเปˆเบฒโ€‹เบเบฒเบ™โ€‹เบžเบฑเบ”โ€‹เบ—เบฐโ€‹เบ™เบฒโ€‹เบฎเบฑเบšโ€‹เบกเบทโ€‹เบเบฑเบšโ€‹เบงเบฝเบโ€‹เบ‡เบฒเบ™โ€‹เบ‚เบญเบ‡โ€‹เบ•เบปเบ™โ€‹เบ”เป‰เบงเบโ€‹เบชเบฝเบ‡โ€‹เบ›เบฑเป‰เบ‡โ€‹.

เบ•เบฑเบ™เบฅเบฐเบซเบฑเบ”, เบ‚เบฑเป‰เบ™เบ•เบญเบ™เปเบฅเบฐเบซเบ™เป‰เบฒเบ—เบตเปˆ

เบเบฒเบ™เบเปเปˆเบชเป‰เบฒเบ‡เบ—เบฑเบ‡เบซเบกเบปเบ”เปƒเบ™เบžเบฒเบชเบฒเปเบกเปˆเบ™เป€เบ›เบตเบ”เบ”เป‰เบงเบเบˆเปเป‰เบฒเบชเบญเบ‡เป€เบกเบฑเบ”. : เปเบฅเบฐเบ–เบทเบเบ›เบดเบ”เป‚เบ”เบเบœเบนเป‰เบ›เบฐเบเบญเบšเบเบฒเบ™ เปƒเบ™เบ•เบญเบ™เบ—เป‰เบฒเบ.

เบ‚เบฑเป‰เบ™เบ•เบญเบ™เปเบฅเบฐเบซเบ™เป‰เบฒเบ—เบตเปˆเบ–เบทเบเบ›เบฐเบเบฒเบ”เบงเปˆเบฒเป€เบ›เบฑเบ™ proc เปเบฅเบฐ func, เบ•เบฒเบกเบฅเปเบฒเบ”เบฑเบš. arguments เป„เบ”เป‰เบ–เบทเบเบฅเบฐเบšเบธเป„เบงเป‰เปƒเบ™เบงเบปเบ‡เป€เบฅเบฑเบš. เบ—เบธเบเบชเบดเปˆเบ‡เบ—เบธเบเบขเปˆเบฒเบ‡เปเบกเปˆเบ™เบ„เบทเบเบฑเบ™เบเบฑเบšเบžเบฒเบชเบฒเบญเบทเปˆเบ™เป†.

เบœเบนเป‰เบ›เบฐเบเบญเบšเบเบฒเบ™ เบเบฒเบ™เบเบฑเบšเบ„เบทเบ™เบกเบฒ เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบชเบปเปˆเบ‡เบ„เบทเบ™เบ„เปˆเบฒเบˆเบฒเบเบŸเบฑเบ‡เบŠเบฑเบ™, เบ›เบฐเบ•เบดเบšเบฑเบ”เบเบฒเบ™ เบžเบฑเบเบœเปˆเบญเบ™ เบญเบฐเบ™เบธเบเบฒเบ”เปƒเบซเป‰เบ—เปˆเบฒเบ™เบญเบญเบเบˆเบฒเบเบ‚เบฑเป‰เบ™เบ•เบญเบ™ / เบซเบ™เป‰เบฒเบ—เบตเปˆ (เบ–เป‰เบฒเบกเบฑเบ™เบขเบนเปˆเบ™เบญเบ loops).

เบฅเบฐเบซเบฑเบ”เบ•เบปเบงเบขเปˆเบฒเบ‡:

...

func summ(a, b):
  return a + b
end

proc main():
  println(summ(inputln(), inputln()))
end

เบเบฒเบ™เบญเบญเบเปเบšเบšเบ—เบตเปˆเบฎเบญเบ‡เบฎเบฑเบš

  • Loops: for..end, while..end, เบˆเบปเบ™เบเปˆเบงเบฒ..end
  • เป€เบ‡เบทเปˆเบญเบ™เป„เบ‚: เบ–เป‰เบฒ..[else..]เบชเบดเป‰เบ™เบชเบธเบ”, เบ›เปˆเบฝเบ™.
  • เบงเบดเบ—เบตเบเบฒเบ™: proc ():... end, func ():... end
  • Label & goto: :, เป‚เบ”เบ”
  • Enumerations เปเบฅเบฐ array เบ„เบปเบ‡เบ—เบตเปˆ.

เบ•เบปเบงเปเบ›

เบ™เบฑเบเปเบ›เบชเบฒเบกเบฒเบ”เบเปเบฒเบ™เบปเบ”เบžเบงเบเบกเบฑเบ™เป‚เบ”เบเบญเบฑเบ”เบ•เบฐเป‚เบ™เบกเบฑเบ”, เบซเบผเบทเบ–เป‰เบฒเบ™เบฑเบเบžเบฑเบ”เบ—เบฐเบ™เบฒเบ‚เบฝเบ™ var เบเปˆเบญเบ™เบ—เบตเปˆเบˆเบฐเบเปเบฒเบ™เบปเบ”เบžเบงเบเบกเบฑเบ™.

เบ•เบปเบงเบขเปˆเบฒเบ‡เบฅเบฐเบซเบฑเบ”:

a ?= 10
b ?= a + 20

var a = 10, b = a + 20

เบฎเบญเบ‡เบฎเบฑเบšเบ•เบปเบงเปเบ›เบ—เบปเปˆเบงเป‚เบฅเบ เปเบฅเบฐเบ—เป‰เบญเบ‡เบ–เบดเปˆเบ™.

OOP

เปเบฅเป‰เบง, เบžเบงเบเป€เบฎเบปเบฒเบกเบฒเบฎเบญเบ”เบซเบปเบงเบ‚เปเป‰เบ—เบตเปˆเปเบŠเบšเบ—เบตเปˆเบชเบธเบ”. Mash เบฎเบญเบ‡เบฎเบฑเบšเบ—เบธเบเปเบšเบšเปเบœเบ™เบเบฒเบ™เบ‚เบฝเบ™เป‚เบ›เบฃเปเบเบฃเบกเปเบšเบšเบงเบฑเบ”เบ–เบธ. เป€เบซเบผเบปเปˆเบฒเบ™เบฑเป‰เบ™. เบซเป‰เบญเบ‡เบฎเบฝเบ™, เบกเปเบฅเบฐเบ”เบปเบ, polymorphism (เบฅเบงเบกเบ—เบฑเบ‡เปเบšเบšเป€เบ„เบทเปˆเบญเบ™เป„เบซเบง), เบเบฒเบ™เบชเบฐเบ—เป‰เบญเบ™เบญเบฑเบ”เบ•เบฐเป‚เบ™เบกเบฑเบ”เปเบšเบšเป€เบ„เบทเปˆเบญเบ™เป„เบซเบงเปเบฅเบฐ introspection (เป€เบ•เบฑเบก).

เป‚เบ”เบเบšเปเปˆเบกเบตเบเบฒเบ™เบเบฐเบ•เบธเป‰เบ™, เบกเบฑเบ™เบ”เบตเบเบงเปˆเบฒเบžเบฝเบ‡เปเบ•เปˆเปƒเบซเป‰เบ•เบปเบงเบขเปˆเบฒเบ‡เบฅเบฐเบซเบฑเบ”.

เบซเป‰เบญเบ‡เบฎเบฝเบ™เบ‡เปˆเบฒเบเบ”เบฒเบเปเบฅเบฐเป€เบฎเบฑเบ”เบงเบฝเบเบเบฑเบšเบกเบฑเบ™:

uses <bf>
uses <crt>

class MyClass:
  var a, b
  proc Create, Free
  func Summ
end

proc MyClass::Create(a, b):
  $a = new(a)
  $b = new(b)
end

proc MyClass::Free():
  Free($a, $b)
  $rem()
end

func MyClass::Summ():
  return $a + $b
end

proc main():
  x ?= new MyClass(10, 20)
  println(x->Summ())
  x->Free()
end

เบœเบปเบ™เบœเบฐเบฅเบดเบ”: 30.

เบกเปเบฅเบฐเบ”เบปเบเปเบฅเบฐ polymorphism:

uses <bf>
uses <crt>

class MyClass:
  var a, b
  proc Create, Free
  func Summ
end

proc MyClass::Create(a, b):
  $a = new(a)
  $b = new(b)
end

proc MyClass::Free():
  Free($a, $b)
  $rem()
end

func MyClass::Summ():
  return $a + $b
end

class MyNewClass(MyClass):
  func Summ
end

func MyNewClass::Summ():
  return ($a + $b) * 2
end

proc main():
  x ?= new MyNewClass(10, 20)
  println(x->Summ())
  x->Free()
end

เบœเบปเบ™เบœเบฐเบฅเบดเบ”: 60.

เบˆเบฐเป€เบ›เบฑเบ™เปเบ™เบงเปƒเบ”เบเปˆเบฝเบงเบเบฑเบš polymorphism เปเบšเบšเป€เบ„เบทเปˆเบญเบ™เป„เบซเบง? เปเบกเปˆเบ™เปเบฅเป‰เบง, เบ™เบตเป‰เปเบกเปˆเบ™เบเบฒเบ™เบชเบฐเบ—เป‰เบญเบ™!:

uses <bf>
uses <crt>

class MyClass:
  var a, b
  proc Create, Free
  func Summ
end

proc MyClass::Create(a, b):
  $a = new(a)
  $b = new(b)
end

proc MyClass::Free():
  Free($a, $b)
  $rem()
end

func MyClass::Summ():
  return $a + $b
end

class MyNewClass(MyClass):
  func Summ
end

func MyNewClass::Summ():
  return ($a + $b) * 2
end

proc main():
  x ?= new MyClass(10, 20)
  x->Summ ?= MyNewClass::Summ
  println(x->Summ())
  x->Free()
end

เบœเบปเบ™เบœเบฐเบฅเบดเบ”: 60.

เบ•เบญเบ™เบ™เบตเป‰เปƒเบซเป‰เป€เบฎเบปเบฒเปƒเบŠเป‰เป€เบงเบฅเบฒเบชเบฑเป‰เบ™เป†เป€เบžเบทเปˆเบญ introspect เบชเปเบฒเบฅเบฑเบšเบ„เบธเบ™เบ„เปˆเบฒเบ—เบตเปˆเบ‡เปˆเบฒเบเบ”เบฒเบเปเบฅเบฐเบซเป‰เบญเบ‡เบฎเบฝเบ™:

uses <bf>
uses <crt>

class MyClass:
  var a, b
end

proc main():
  x ?= new MyClass
  println(BoolToStr(x->type == MyClass))
  x->rem()
  println(BoolToStr(typeof(3.14) == typeReal))
end

เบœเบปเบ™เป„เบ”เป‰เบฎเบฑเบš: เบ„เบงเบฒเบกเบˆเบดเบ‡, เบ„เบงเบฒเบกเบˆเบดเบ‡.

เบเปˆเบฝเบงเบเบฑเบšเบœเบนเป‰เบ›เบฐเบ•เบดเบšเบฑเบ”เบเบฒเบ™เบกเบญเบšเบซเบกเบฒเบเปเบฅเบฐเบ•เบปเบงเบŠเบตเป‰เบขเปˆเบฒเบ‡เบŠเบฑเบ”เป€เบˆเบ™

เป‚เบ•เบ›เบฐเบ•เบดเบšเบฑเบ”เบเบฒเบ™ ?= เบ–เบทเบเปƒเบŠเป‰เป€เบžเบทเปˆเบญเบเบณเบ™เบปเบ”เบ•เบปเบงเบ›เปˆเบฝเบ™เบ•เบปเบงเบŠเบตเป‰เป„เบ›เบซเบฒเบ„เปˆเบฒเปƒเบ™เปœเปˆเบงเบเบ„เบงเบฒเบกเบˆเบณ.
The = operator เบ›เปˆเบฝเบ™เบ„เปˆเบฒเปƒเบ™เปœเปˆเบงเบเบ„เบงเบฒเบกเบˆเบณเป‚เบ”เบเปƒเบŠเป‰เบ•เบปเบงเบŠเบตเป‰เบˆเบฒเบเบ•เบปเบงเปเบ›.
เปเบฅเบฐเปƒเบ™เบ›เบฑเบ”เบˆเบธเบšเบฑเบ™เป€เบฅเบฑเบเบ™เป‰เบญเบเบเปˆเบฝเบงเบเบฑเบšเบ•เบปเบงเบŠเบตเป‰เบขเปˆเบฒเบ‡เบŠเบฑเบ”เป€เบˆเบ™. เบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเป„เบ”เป‰เป€เบžเบตเปˆเบกเบžเบงเบเบกเบฑเบ™เป€เบ‚เบปเป‰เบฒเปƒเบ™เบžเบฒเบชเบฒเป€เบžเบทเปˆเบญเปƒเบซเป‰เบžเบงเบเบกเบฑเบ™เบกเบตเบขเบนเปˆ.
@ โ€” เป€เบญเบปเบฒเบ•เบปเบงเบŠเบตเป‰เบ—เบตเปˆเบŠเบฑเบ”เป€เบˆเบ™เป„เบ›เบซเบฒเบ•เบปเบงเปเบ›.
? โ€” เป„เบ”เป‰โ€‹เบฎเบฑเบšโ€‹เบ•เบปเบงโ€‹เบ›เปˆเบฝเบ™โ€‹เป‚เบ”เบโ€‹เบ•เบปเบงโ€‹เบŠเบตเป‰.
@= โ€” เบเบณเบ™เบปเบ”เบ„เปˆเบฒเปƒเบซเป‰เบเบฑเบšเบ•เบปเบงเปเบ›เป‚เบ”เบเบ•เบปเบงเบŠเบตเป‰เบ—เบตเปˆเบŠเบฑเบ”เป€เบˆเบ™เปƒเบซเป‰เบเบฑเบšเบกเบฑเบ™.

เบฅเบฐเบซเบฑเบ”เบ•เบปเบงเบขเปˆเบฒเบ‡:

uses <bf>
uses <crt>

proc main():
  var a = 10, b
  b ?= @a
  PrintLn(b)
  b ?= ?b
  PrintLn(b)
  b++
  PrintLn(a)
  InputLn()
end

เบˆเบฐเบญเบญเบ: เบˆเปเบฒเบ™เบงเบ™เบˆเปเบฒเบ™เบงเบ™เบซเบ™เบถเปˆเบ‡, 10, 11.

เบžเบฐเบเบฒเบเบฒเบก..[เบˆเบฑเบš..][เบชเบธเบ”เบ—เป‰เบฒเบ..]เบˆเบปเบš

เบฅเบฐเบซเบฑเบ”เบ•เบปเบงเบขเปˆเบฒเบ‡:

uses <bf>
uses <crt>

proc main():
  println("Start")
  try:
    println("Trying to do something...")
    a ?= 10 / 0
  catch:
    println(getError())
  finally:
    println("Finally")
  end
  println("End")
  inputln()
end

เปเบœเบ™เบชเปเบฒเบฅเบฑเบšเบญเบฐเบ™เบฒเบ„เบปเบ”

เบ‚เป‰เบญเบเบชเบทเบšเบ•เปเปˆเบŠเบญเบเบซเบฒเปเบฅเบฐเป€เบšเบดเปˆเบ‡ GraalVM & Truffle. เบชเบฐเบžเบฒเบšเปเบงเบ”เบฅเป‰เบญเบก runtime เบ‚เบญเบ‡เบ‚เป‰เบญเบเบšเปเปˆเบกเบต JIT compiler, เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™เปƒเบ™เปเบ‡เปˆเบ‚เบญเบ‡เบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”, เบ›เบฐเบˆเบธเบšเบฑเบ™เบ™เบตเป‰เบžเบฝเบ‡เปเบ•เปˆเบชเบฒเบกเบฒเบ”เปเบ‚เปˆเบ‡เบ‚เบฑเบ™เบเบฑเบš Python เป€เบ—เบปเปˆเบฒเบ™เบฑเป‰เบ™. เบ‚เป‰เบญเบเบซเบงเบฑเบ‡เบงเปˆเบฒเบ‚เป‰เบญเบเบˆเบฐเบชเบฒเบกเบฒเบ”เบ›เบฐเบ•เบดเบšเบฑเบ”เบเบฒเบ™เบฅเบงเบšเบฅเบงเบก JIT เป‚เบ”เบเบญเบตเบ‡เปƒเบชเปˆ GraalVM เบซเบผเบท LLVM.

เบ„เบฑเบ‡เป€เบเบฑเบšเบกเป‰เบฝเบ™

เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบซเบผเบดเป‰เบ™เบเบฑเบšเบเบฒเบ™เบžเบฑเบ”เบ—เบฐเบ™เบฒเปเบฅเบฐเบ›เบฐเบ•เบดเบšเบฑเบ”เบ•เบฒเบกเป‚เบ„เบ‡เบเบฒเบ™เบ•เบปเบงเบ—เปˆเบฒเบ™เป€เบญเบ‡.

เป€เบงเบฑเบšเป„เบŠเบ—เปŒ
Repository เปƒเบ™ GitHub

เบ‚เบญเบšเปƒเบˆเบ—เบตเปˆเบญเปˆเบฒเบ™เบˆเบปเบ™เบˆเบปเบš เบ–เป‰เบฒเป€เบˆเบปเป‰เบฒเป€เบฎเบฑเบ”.

เปเบซเบผเปˆเบ‡เบ‚เปเป‰เบกเบนเบ™: www.habr.com

เป€เบžเบตเปˆเบกเบ„เบงเบฒเบกเบ„เบดเบ”เป€เบซเบฑเบ™