ืฉืคืช ืชื›ื ื•ืช ื—ื“ืฉื” Mash

ื‘ืžืฉืš ื›ืžื” ืฉื ื™ื ื ื™ืกื™ืชื™ ืืช ื›ื•ื—ื™ ื‘ืคื™ืชื•ื— ืฉืคืช ืชื›ื ื•ืช ืžืฉืœื™. ืจืฆื™ืชื™ ืœื™ืฆื•ืจ, ืœื“ืขืชื™, ืืช ื”ืฉืคื” ื”ื›ื™ ืคืฉื•ื˜ื”, ืคื•ื ืงืฆื™ื•ื ืœื™ืช ื•ื ื•ื—ื” ืฉืืคืฉืจ.

ื‘ืžืืžืจ ื–ื” ืื ื™ ืจื•ืฆื” ืœื”ื“ื’ื™ืฉ ืืช ื”ืฉืœื‘ื™ื ื”ืžืจื›ื–ื™ื™ื ื‘ืขื‘ื•ื“ืชื™ ื•ืœื›ืชื—ื™ืœื” ืœืชืืจ ืืช ืชืคื™ืกืช ื”ืฉืคื” ืฉื ื•ืฆืจื” ื•ื™ื™ืฉื•ืžื” ื”ืจืืฉื•ืŸ, ืขืœื™ื• ืื ื™ ืขื•ื‘ื“ ื›ืขืช.

ื”ืจืฉื• ืœื™ ืœื•ืžืจ ืžืจืืฉ ืฉื›ืชื‘ืชื™ ืืช ื›ืœ ื”ืคืจื•ื™ืงื˜ ื‘ืคืกืงืœ ื—ื•ืคืฉื™, ื›ื™... ื ื™ืชืŸ ืœื”ืจื›ื™ื‘ ืชื•ื›ื ื™ื•ืช ืขืœื™ื• ืœืžืกืคืจ ืขืฆื•ื ืฉืœ ืคืœื˜ืคื•ืจืžื•ืช, ื•ื”ืžื”ื“ืจ ืขืฆืžื• ืžื™ื™ืฆืจ ืงื‘ืฆื™ื ื‘ื™ื ืืจื™ื™ื ืื•ืคื˜ื™ืžืœื™ื™ื ืžืื•ื“ (ืื ื™ ืื•ืกืฃ ืืช ื›ืœ ืจื›ื™ื‘ื™ ื”ืคืจื•ื™ืงื˜ ืขื ื“ื’ืœ O2).

ื–ืžืŸ ืจื™ืฆื” ืฉืœ ืฉืคื”

ืงื•ื“ื ื›ืœ, ื›ื“ืื™ ืœื“ื‘ืจ ืขืœ ื”ืžื›ื•ื ื” ื”ื•ื™ืจื˜ื•ืืœื™ืช ืฉื”ื™ื™ืชื™ ืฆืจื™ืš ืœื›ืชื•ื‘ ื›ื“ื™ ืœื”ืคืขื™ืœ ื™ื™ืฉื•ืžื™ื ืขืชื™ื“ื™ื™ื ื‘ืฉืคื” ืฉืœื™. ื”ื—ืœื˜ืชื™ ืœื™ื™ืฉื ืืจื›ื™ื˜ืงื˜ื•ืจืช ืžื—ืกื ื™ืช, ืื•ืœื™, ื›ื™ ื–ื• ื”ื™ื™ืชื” ื”ื“ืจืš ื”ืงืœื” ื‘ื™ื•ืชืจ. ืœื ืžืฆืืชื™ ืžืืžืจ ื ื•ืจืžืœื™ ืื—ื“ ืขืœ ืื™ืš ืœืขืฉื•ืช ืืช ื–ื” ื‘ืจื•ืกื™ืช, ืื– ืœืื—ืจ ื”ื™ื›ืจื•ืช ืขื ื”ื—ื•ืžืจ ื‘ืฉืคื” ื”ืื ื’ืœื™ืช, ื™ืฉื‘ืชื™ ืœืขืฆื‘ ื•ืœื›ืชื•ื‘ ืืช ื”ืื•ืคื ื™ื™ื ืฉืœื™. ื‘ื”ืžืฉืš ืืฆื™ื’ ืืช ื”ืจืขื™ื•ื ื•ืช ื•ื”ืคื™ืชื•ื—ื™ื ื”"ืžืชืงื“ืžื™ื" ืฉืœื™ ื‘ืขื ื™ื™ืŸ ื–ื”.

ื™ื™ืฉื•ื ืžื—ืกื ื™ืช

ื‘ืจื•ืจ ืฉื‘ื—ืœืง ื”ืขืœื™ื•ืŸ ืฉืœ ื”-VM ื ืžืฆืืช ื”ืขืจื™ืžื”. ื‘ื™ื™ืฉื•ื ืฉืœื™ ื–ื” ืขื•ื‘ื“ ื‘ื‘ืœื•ืงื™ื. ื‘ืขื™ืงืจื• ืฉืœ ื“ื‘ืจ ื–ื”ื• ืžืขืจืš ืคืฉื•ื˜ ืฉืœ ืžืฆื‘ื™ืขื™ื ื•ืžืฉืชื ื” ืœืื—ืกื•ืŸ ื”ืื™ื ื“ืงืก ืฉืœ ื”ื—ืœืง ื”ืขืœื™ื•ืŸ ืฉืœ ื”ืขืจื™ืžื”.
ื›ืืฉืจ ื”ื•ื ืžืื•ืชื—ืœ, ื ื•ืฆืจ ืžืขืจืš ืฉืœ 256 ืืœืžื ื˜ื™ื. ืื ืžืฆื‘ื™ืขื™ื ื ื•ืกืคื™ื ื ื“ื—ืคื™ื ืืœ ื”ืขืจื™ืžื”, ื”ื’ื•ื“ืœ ืฉืœื” ื’ื“ืœ ื‘-256 ื”ืืœืžื ื˜ื™ื ื”ื‘ืื™ื. ื‘ื”ืชืื ืœื›ืš, ื‘ืขืช ื”ืกืจืช ืืœืžื ื˜ื™ื ืžื”ืขืจื™ืžื”, ื’ื•ื“ืœื• ืžื•ืชืื.

ื”-VM ืžืฉืชืžืฉ ื‘ืžืกืคืจ ืขืจื™ืžื•ืช:

  1. ืžื—ืกื ื™ืช ืจืืฉื™ืช.
  2. ืขืจื™ืžื” ืœืื—ืกื•ืŸ ื ืงื•ื“ื•ืช ื”ื—ื–ืจื”.
  3. ืขืจื™ืžืช ืืกืคื ื™ื.
  4. ื ืกื”/ืชืคื•ืก/ืœื‘ืกื•ืฃ ื—ืกื•ื ืืช ืขืจื™ืžืช ื”ืžื˜ืคืœ.

ืงื‘ื•ืขื™ื ื•ืžืฉืชื ื™ื

ื–ื” ืคืฉื•ื˜. ืงื‘ื•ืขื™ื ืžื˜ื•ืคืœื™ื ื‘ื—ืชื™ื›ืช ืงื•ื“ ืงื˜ื ื” ื ืคืจื“ืช ื•ื–ืžื™ื ื™ื ื‘ื™ื™ืฉื•ืžื™ื ืขืชื™ื“ื™ื™ื ื‘ืืžืฆืขื•ืช ื›ืชื•ื‘ื•ืช ืกื˜ื˜ื™ื•ืช. ืžืฉืชื ื™ื ื”ื ืžืขืจืš ืฉืœ ืžืฆื‘ื™ืขื™ื ื‘ื’ื•ื“ืœ ืžืกื•ื™ื, ื”ื’ื™ืฉื” ืœืชืื™ื ืฉืœื• ืžืชื‘ืฆืขืช ืขืœ ื™ื“ื™ ืื™ื ื“ืงืก - ื›ืœื•ืžืจ. ื›ืชื•ื‘ืช ืกื˜ื˜ื™ืช. ื ื™ืชืŸ ืœื“ื—ื•ืฃ ืžืฉืชื ื™ื ืœืจืืฉ ื”ืขืจื™ืžื” ืื• ืœืงืจื•ื ืžืฉื. ื‘ืขืฆื, ื›ื™ ื‘ืขื•ื“ ืฉื”ืžืฉืชื ื™ื ืฉืœื ื• ื‘ืขืฆื ืžืื—ืกื ื™ื ืžืฆื‘ื™ืขื™ื ืœืขืจื›ื™ื ื‘ื–ื™ื›ืจื•ืŸ VM, ื”ืฉืคื” ื ืฉืœื˜ืช ืขืœ ื™ื“ื™ ืขื‘ื•ื“ื” ืขื ืžืฆื‘ื™ืขื™ื ืžืจื•ืžื–ื™ื.

ืื•ืกืฃ ื–ื‘ืœ

ื‘-VM ืฉืœื™ ื–ื” ื—ืฆื™ ืื•ื˜ื•ืžื˜ื™. ื”ึธื”ึตืŸ. ื”ื™ื–ื ืขืฆืžื• ืžื—ืœื™ื˜ ืžืชื™ ืœื”ืชืงืฉืจ ืœืืกืคืŸ ื”ืืฉืคื”. ื–ื” ืœื ืขื•ื‘ื“ ื‘ืืžืฆืขื•ืช ืžื•ื ื” ืžืฆื‘ื™ืข ืจื’ื™ืœ, ื›ืžื• ื‘-Python, Perl, Ruby, Lua ื•ื›ื•'. ื–ื” ืžื™ื•ืฉื ื‘ืืžืฆืขื•ืช ืžืขืจื›ืช ืกืžื ื™ื. ื”ึธื”ึตืŸ. ื›ืืฉืจ ืžืฉืชื ื” ืžื™ื•ืขื“ ืœื”ืงืฆื•ืช ืขืจืš ื–ืžื ื™, ืžืฆื‘ื™ืข ืœืขืจืš ื–ื” ืžืชื•ื•ืกืฃ ืœืขืจื™ืžืช ืืกืคืŸ ื”ืืฉืคื”. ื‘ืขืชื™ื“, ื”ืืกืคืŸ ืขื•ื‘ืจ ื‘ืžื”ื™ืจื•ืช ืืช ืจืฉื™ืžืช ื”ืžืฆื‘ื™ืขื™ื ืฉื”ื•ื›ื ื” ื›ื‘ืจ.

ื˜ื™ืคื•ืœ ื‘ื ื™ืกื™ื•ืŸ/ืœืชืคื•ืก/ื‘ืกื•ืฃ ื‘ืœื•ืงื™ื

ื›ืžื• ื‘ื›ืœ ืฉืคื” ืžื•ื“ืจื ื™ืช, ื˜ื™ืคื•ืœ ื‘ื—ืจื™ื’ื™ื ื”ื•ื ืžืจื›ื™ื‘ ื—ืฉื•ื‘. ืœื™ื‘ืช ื”-VM ืขื˜ื•ืคื” ื‘ืœื•ืง try..catch, ืฉื™ื›ื•ืœ ืœื—ื–ื•ืจ ืœื‘ื™ืฆื•ืข ืงื•ื“ ืœืื—ืจ ืชืคื™ืกืช ื—ืจื™ื’ื” ืขืœ ื™ื“ื™ ื“ื—ื™ืคืช ืžื™ื“ืข ื›ืœืฉื”ื• ืœื’ื‘ื™ื• ืœืขืจื™ืžื”. ื‘ืงื•ื“ ื™ื™ืฉื•ื, ืืชื” ื™ื›ื•ืœ ืœื”ื’ื“ื™ืจ ื‘ืœื•ืงื™ื ืฉืœ ืงื•ื“ try/catch/finally, ืฆื™ื•ืŸ ื ืงื•ื“ื•ืช ื›ื ื™ืกื” ื‘-catch (ืžื˜ืคืœ ื‘ื—ืจื™ื’) ื•ืœื‘ืกื•ืฃ/ืกื•ืฃ (ืกื•ืฃ ื”ื‘ืœื•ืง).

ืจื™ื‘ื•ื™ ื”ืฉืจืฉื•ืจื™ื

ื–ื” ื ืชืžืš ื‘ืจืžืช VM. ื–ื” ืคืฉื•ื˜ ื•ื ื•ื— ืœืฉื™ืžื•ืฉ. ื–ื” ืขื•ื‘ื“ ืœืœื ืžืขืจื›ืช ืคืกื™ืงื”, ื›ืš ืฉื”ืงื•ื“ ืฆืจื™ืš ืœื”ืชื‘ืฆืข ื‘ืžืกืคืจ ืฉืจืฉื•ืจื™ื ืคื™ ื›ืžื” ืžื”ืจ ื™ื•ืชืจ, ื‘ื”ืชืืžื”.

ืกืคืจื™ื•ืช ื—ื™ืฆื•ื ื™ื•ืช ืขื‘ื•ืจ ืžื—ืฉื‘ื™ VM

ืื™ืŸ ื“ืจืš ืœืขืฉื•ืช ื‘ืœื™ ื–ื”. VM ืชื•ืžืš ื‘ื™ื™ื‘ื•ื, ื‘ื“ื•ืžื” ืœืื•ืคืŸ ืฉื‘ื• ื”ื•ื ืžื™ื•ืฉื ื‘ืฉืคื•ืช ืื—ืจื•ืช. ืืชื” ื™ื›ื•ืœ ืœื›ืชื•ื‘ ื—ืœืง ืžื”ืงื•ื“ ื‘-Mash ื•ื—ืœืง ืžื”ืงื•ื“ ื‘ืฉืคื•ืช ืžืงื•ืžื™ื•ืช, ื•ืื– ืœืงืฉืจ ืื•ืชื ืœืฉืคื•ืช ืื—ืช.

ืžืชืจื’ื ืžืฉืคืช Mash ื‘ืจืžื” ื’ื‘ื•ื”ื” ืœ-bytecode ืขื‘ื•ืจ ืžื—ืฉื‘ื™ VM

ืฉืคืช ื‘ื™ื ื™ื™ื

ื›ื“ื™ ืœื›ืชื•ื‘ ื‘ืžื”ื™ืจื•ืช ืžืชืจื’ื ืžืฉืคื” ืžื•ืจื›ื‘ืช ืœืงื•ื“ VM, ืคื™ืชื—ืชื™ ืชื—ื™ืœื” ืฉืคืช ื‘ื™ื ื™ื™ื. ื”ืชื•ืฆืื” ื”ื™ื™ืชื” ืžื—ื–ื” ื ื•ืจื ื›ืžื• ืืกืžื‘ืœืจ ืฉืื™ืŸ ื˜ืขื ืžื™ื•ื—ื“ ืœื”ืชื™ื™ื—ืก ืืœื™ื• ื›ืืŸ. ืื ื™ ืจืง ืื’ื™ื“ ืฉื‘ืจืžื” ื–ื• ื”ืžืชืจื’ื ืžืขื‘ื“ ืืช ืจื•ื‘ ื”ืงื‘ื•ืขื™ื ื•ื”ืžืฉืชื ื™ื, ืžื—ืฉื‘ ืืช ื”ื›ืชื•ื‘ื•ืช ื”ืกื˜ื˜ื™ื•ืช ืฉืœื”ื ื•ืืช ื”ื›ืชื•ื‘ื•ืช ืฉืœ ื ืงื•ื“ื•ืช ื”ื›ื ื™ืกื”.

ืืจื›ื™ื˜ืงื˜ื•ืจืช ืžืชืจื’ื

ืœื ื‘ื—ืจืชื™ ืืช ื”ืืจื›ื™ื˜ืงื˜ื•ืจื” ื”ื˜ื•ื‘ื” ื‘ื™ื•ืชืจ ืœื™ื™ืฉื•ื. ื”ืžืชืจื’ื ืื™ื ื• ื‘ื•ื ื” ืขืฅ ืงื•ื“, ื›ืคื™ ืฉืขื•ืฉื™ื ืžืชืจื’ืžื™ื ืื—ืจื™ื. ื”ื•ื ืžืกืชื›ืœ ืขืœ ืชื—ื™ืœืช ื”ืžื‘ื ื”. ื”ึธื”ึตืŸ. ืื ืงื˜ืข ื”ืงื•ื“ ืฉืžื ืชื— ื ืจืื” ื›ืžื• "while <condition>:", ืื– ื‘ืจื•ืจ ืฉื–ื•ื”ื™ ื‘ื ื™ื™ืช ืœื•ืœืืช while ื•ื™ืฉ ืœืขื‘ื“ ืื•ืชื” ื›ืžื‘ื ื” ืœื•ืœืืช while. ืžืฉื”ื• ื›ืžื• ืžืงืจื” ืžืชื’ ืžื•ืจื›ื‘.

ื”ื•ื“ื•ืช ืœืคืชืจื•ืŸ ื”ืืจื›ื™ื˜ืงื˜ื•ื ื™ ื”ื–ื”, ื”ืชื‘ืจืจ ืฉื”ืžืชืจื’ื ืœื ืžื”ื™ืจ ื‘ืžื™ื•ื—ื“. ืขื ื–ืืช, ืงืœื•ืช ื”ืฉื™ื ื•ื™ ืฉืœื• ื’ื“ืœื” ื‘ืื•ืคืŸ ืžืฉืžืขื•ืชื™. ื”ื•ืกืคืชื™ ืืช ื”ืžื‘ื ื™ื ื”ื“ืจื•ืฉื™ื ืžื”ืจ ื™ื•ืชืจ ืžืžื” ืฉื”ืงืคื” ืฉืœื™ ื™ื›ื•ืœ ืœื”ืชืงืจืจ. ืชืžื™ื›ืช OOP ืžืœืื” ื™ื•ืฉืžื” ืชื•ืš ืคื—ื•ืช ืžืฉื‘ื•ืข.

ืื•ืคื˜ื™ืžื™ื–ืฆื™ื” ืฉืœ ืงื•ื“

ื›ืืŸ, ื›ืžื•ื‘ืŸ, ืืคืฉืจ ื”ื™ื” ืœื™ื™ืฉื ืืช ื–ื” ื˜ื•ื‘ ื™ื•ืชืจ (ื•ื™ื™ื•ืฉื, ืื‘ืœ ืžืื•ื—ืจ ื™ื•ืชืจ, ื‘ืจื’ืข ืฉืžื’ื™ืขื™ื ืœื–ื”). ืขื“ ื›ื”, ื”ืื•ืคื˜ื™ืžื™ื–ืจ ื™ื•ื“ืข ืจืง ืœื ืชืง ืงื•ื“ ืœื ื‘ืฉื™ืžื•ืฉ, ืงื‘ื•ืขื™ื ื•ื™ื™ื‘ื•ื โ€‹โ€‹ืžื”ืžื›ืœื•ืœ. ื›ืžื• ื›ืŸ, ืžืกืคืจ ืงื‘ื•ืขื™ื ื‘ืขืœื™ ืื•ืชื• ืขืจืš ืžื•ื—ืœืคื™ื ื‘ืื—ื“. ื–ื” ื”ื›ืœ.

ืฉืคืช ืžืืฉ

ืžื•ืฉื’ ื‘ืกื™ืกื™ ืฉืœ ืฉืคื”

ื”ืจืขื™ื•ืŸ ื”ืžืจื›ื–ื™ ื”ื™ื” ืœืคืชื— ืืช ื”ืฉืคื” ื”ื›ื™ ืคื•ื ืงืฆื™ื•ื ืœื™ืช ื•ืคืฉื•ื˜ื” ืฉืืคืฉืจ. ืื ื™ ื—ื•ืฉื‘ ืฉื”ืคื™ืชื•ื— ืžืชืžื•ื“ื“ ืขื ื”ืžืฉื™ืžื” ืฉืœื• ื‘ืจืขืฉ ื’ื“ื•ืœ.

ื‘ืœื•ืงื™ ืงื•ื“, ื ื”ืœื™ื ื•ืคื•ื ืงืฆื™ื•ืช

ื›ืœ ื”ืงื•ื ืกื˜ืจื•ืงืฆื™ื•ืช ื‘ืฉืคื” ื ืคืชื—ื•ืช ืขื ื ืงื•ื“ืชื™ื™ื. : ื•ื ืกื’ืจื™ื ืขืœ ื™ื“ื™ ื”ืžืคืขื™ืœ ืกื•ืฃ.

ื ื”ืœื™ื ื•ืคื•ื ืงืฆื™ื•ืช ืžื•ื›ืจื–ื™ื ื›-proc ื•-func, ื‘ื”ืชืืžื”. ื”ืืจื’ื•ืžื ื˜ื™ื ืจืฉื•ืžื™ื ื‘ืกื•ื’ืจื™ื™ื. ื”ื›ืœ ื›ืžื• ืจื•ื‘ ื”ืฉืคื•ืช ื”ืื—ืจื•ืช.

ืžึทืคืขึดื™ืœ ืœึทื—ึฒื–ื•ึนืจ ืืชื” ื™ื›ื•ืœ ืœื”ื—ื–ื™ืจ ืขืจืš ืžืคื•ื ืงืฆื™ื”, ืื•ืคืจื˜ื•ืจ ืœืฉื‘ื•ืจ ืžืืคืฉืจ ืœืš ืœืฆืืช ืžื”ื”ืœื™ืš/ืคื•ื ืงืฆื™ื” (ืื ื–ื” ืžื—ื•ืฅ ืœืœื•ืœืื•ืช).

ืงื•ื“ ืœื“ื•ื’ืžื”:

...

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

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

ืขื™ืฆื•ื‘ื™ื ื ืชืžื›ื™ื

  • ืœื•ืœืื•ืช: for..end, while..end, to..end
  • ืชื ืื™ื: ืื..[ืื—ืจ..]ืกื™ื•ื, ื”ื—ืœืฃ..[ืžืงืจื”..ืกื•ืฃ..][else..]ืกื•ืฃ
  • ืฉื™ื˜ื•ืช: proc <name>():... end, func <name>():... end
  • Label & Goto: <name>:, jump <name>
  • ืžื ื” ืกืคื™ืจื•ืช ื•ืžืขืจื›ื™ื ืงื‘ื•ืขื™ื.

ืžืฉืชื ื™ื

ื”ืžืชืจื’ื ื™ื›ื•ืœ ืœืงื‘ื•ืข ืื•ืชื ื‘ืื•ืคืŸ ืื•ื˜ื•ืžื˜ื™, ืื• ืื ื”ืžืคืชื— ื›ื•ืชื‘ var ืœืคื ื™ ื”ื’ื“ืจืชื.

ื“ื•ื’ืžืื•ืช ืœืงื•ื“:

a ?= 10
b ?= a + 20

var a = 10, b = a + 20

ืžืฉืชื ื™ื ื’ืœื•ื‘ืœื™ื™ื ื•ืžืงื•ืžื™ื™ื ื ืชืžื›ื™ื.

ืื•ืค

ื•ื‘ื›ืŸ, ื”ื’ืขื ื• ืœื ื•ืฉื ื”ื›ื™ ื˜ืขื™ื. Mash ืชื•ืžืš ื‘ื›ืœ ื”ืคืจื“ื™ื’ืžื•ืช ืฉืœ ืชื›ื ื•ืช ืžื•ื ื—ื” ืขืฆืžื™ื. ื”ึธื”ึตืŸ. ืฉื™ืขื•ืจื™ื, ืชื•ืจืฉื”, ืคื•ืœื™ืžื•ืจืคื™ื–ื (ื›ื•ืœืœ ื“ื™ื ืžื™), ื”ืฉืชืงืคื•ืช ืื•ื˜ื•ืžื˜ื™ืช ื“ื™ื ืžื™ืช ื•ื”ืชื‘ื•ื ื ื•ืช ืคื ื™ืžื™ืช (ืžืœื).

ืœืœื ืขื™ื›ื•ื‘ื™ื ื ื•ืกืคื™ื, ืขื“ื™ืฃ ืคืฉื•ื˜ ืœืชืช ื“ื•ื’ืžืื•ืช ืงื•ื“.

ืฉื™ืขื•ืจ ืคืฉื•ื˜ ื•ืขื‘ื•ื“ื” ืื™ืชื•:

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.

ืชื•ืจืฉื” ื•ืคื•ืœื™ืžื•ืจืคื™ื–ื:

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.

ืžื” ืœื’ื‘ื™ ืคื•ืœื™ืžื•ืจืคื™ื–ื ื“ื™ื ืžื™? ื›ืŸ, ื–ื• ื”ืฉืชืงืคื•ืช!:

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.

ืขื›ืฉื™ื• ื‘ื•ืื• ื ื™ืงื— ืจื’ืข ืœื”ืชื‘ื•ื ื ื•ืช ืคื ื™ืžื™ืช ืขืœ ืขืจื›ื™ื ื•ืฉื™ืขื•ืจื™ื ืคืฉื•ื˜ื™ื:

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

ื”ืื ืคืœื˜: ื ื›ื•ืŸ, ื ื›ื•ืŸ.

ืขืœ ืžืคืขื™ืœื™ ืžื˜ืœื•ืช ื•ืžืฆื‘ื™ืขื™ื ืžืคื•ืจืฉื™ื

ื”ืื•ืคืจื˜ื•ืจ ?= ืžืฉืžืฉ ื›ื“ื™ ืœื”ืงืฆื•ืช ืœืžืฉืชื ื” ืžืฆื‘ื™ืข ืœืขืจืš ื‘ื–ื™ื›ืจื•ืŸ.
ื”ืื•ืคืจื˜ื•ืจ = ืžืฉื ื” ืขืจืš ื‘ื–ื™ื›ืจื•ืŸ ื‘ืืžืฆืขื•ืช ืžืฆื‘ื™ืข ืžืžืฉืชื ื”.
ื•ืขื›ืฉื™ื• ืงืฆืช ืขืœ ืžืฆื‘ื™ืขื™ื ืžืคื•ืจืฉื™ื. ื”ื•ืกืคืชื™ ืื•ืชื ืœืฉืคื” ื›ื“ื™ ืฉื™ืชืงื™ื™ืžื•.
@<ืžืฉืชื ื”> - ืงื— ืžืฆื‘ื™ืข ืžืคื•ืจืฉ ืœืžืฉืชื ื”.
?<ืžืฉืชื ื”> - ืงื‘ืœ ืžืฉืชื ื” ื‘ืืžืฆืขื•ืช ืžืฆื‘ื™ืข.
@= - ื”ืงืฆื” ืขืจืš ืœืžืฉืชื ื” ื‘ืืžืฆืขื•ืช ืžืฆื‘ื™ืข ืžืคื•ืจืฉ ืืœื™ื•.

ืงื•ื“ ืœื“ื•ื’ืžื”:

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. ื‘ืกื‘ื™ื‘ืช ื–ืžืŸ ื”ืจื™ืฆื” ืฉืœื™ ืื™ืŸ ืžื”ื“ืจ JIT, ืื– ืžื‘ื—ื™ื ืช ื‘ื™ืฆื•ืขื™ื ื”ื™ื ื›ืจื’ืข ืชื—ืจื•ืชื™ืช ืจืง ืขื Python. ืื ื™ ืžืงื•ื•ื” ืฉืื•ื›ืœ ืœื™ื™ืฉื ืงื•ืžืคื™ืœืฆื™ื” ืฉืœ JIT ืขืœ ื‘ืกื™ืก GraalVM ืื• LLVM.

ืžืื’ืจ

ืืชื” ื™ื›ื•ืœ ืœืฉื—ืง ืขื ื”ื”ืชืคืชื—ื•ื™ื•ืช ื•ืœืขืงื•ื‘ ืื—ืจ ื”ืคืจื•ื™ืงื˜ ื‘ืขืฆืžืš.

ืืชืจ
ืžืื’ืจ ื‘-GitHub

ืชื•ื“ื” ืฉืงืจืืช ืขื“ ื”ืกื•ืฃ ืื ืงืจืืช.

ืžืงื•ืจ: www.habr.com

ื”ื•ืกืคืช ืชื’ื•ื‘ื”