ืืืฉื ืืื ืฉื ืื ื ืืกืืชื ืืช ืืืื ืืคืืชืื ืฉืคืช ืชืื ืืช ืืฉืื. ืจืฆืืชื ืืืฆืืจ, ืืืขืชื, ืืช ืืฉืคื ืืื ืคืฉืืื, ืคืื ืงืฆืืื ืืืช ืื ืืื ืฉืืคืฉืจ.
ืืืืืจ ืื ืื ื ืจืืฆื ืืืืืืฉ ืืช ืืฉืืืื ืืืจืืืืื ืืขืืืืชื ืืืืชืืืื ืืชืืจ ืืช ืชืคืืกืช ืืฉืคื ืฉื ืืฆืจื ืืืืฉืืื ืืจืืฉืื, ืขืืื ืื ื ืขืืื ืืขืช.
ืืจืฉื ืื ืืืืจ ืืจืืฉ ืฉืืชืืชื ืืช ืื ืืคืจืืืงื ืืคืกืงื ืืืคืฉื, ืื... ื ืืชื ืืืจืืื ืชืืื ืืืช ืขืืื ืืืกืคืจ ืขืฆืื ืฉื ืคืืืคืืจืืืช, ืืืืืืจ ืขืฆืื ืืืืฆืจ ืงืืฆืื ืืื ืืจืืื ืืืคืืืืืืื ืืืื (ืื ื ืืืกืฃ ืืช ืื ืจืืืื ืืคืจืืืงื ืขื ืืื O2).
ืืื ืจืืฆื ืฉื ืฉืคื
ืงืืื ืื, ืืืื ืืืืจ ืขื ืืืืื ื ืืืืจืืืืืืช ืฉืืืืชื ืฆืจืื ืืืชืื ืืื ืืืคืขืื ืืืฉืืืื ืขืชืืืืื ืืฉืคื ืฉืื. ืืืืืชื ืืืืฉื ืืจืืืืงืืืจืช ืืืกื ืืช, ืืืื, ืื ืื ืืืืชื ืืืจื ืืงืื ืืืืชืจ. ืื ืืฆืืชื ืืืืจ ื ืืจืืื ืืื ืขื ืืื ืืขืฉืืช ืืช ืื ืืจืืกืืช, ืื ืืืืจ ืืืืจืืช ืขื ืืืืืจ ืืฉืคื ืืื ืืืืช, ืืฉืืชื ืืขืฆื ืืืืชืื ืืช ืืืืคื ืืื ืฉืื. ืืืืฉื ืืฆืื ืืช ืืจืขืืื ืืช ืืืคืืชืืืื ื"ืืชืงืืืื" ืฉืื ืืขื ืืื ืื.
ืืืฉืื ืืืกื ืืช
ืืจืืจ ืฉืืืืง ืืขืืืื ืฉื ื-VM ื ืืฆืืช ืืขืจืืื. ืืืืฉืื ืฉืื ืื ืขืืื ืืืืืงืื. ืืขืืงืจื ืฉื ืืืจ ืืื ืืขืจื ืคืฉืื ืฉื ืืฆืืืขืื ืืืฉืชื ื ืืืืกืื ืืืื ืืงืก ืฉื ืืืืง ืืขืืืื ืฉื ืืขืจืืื.
ืืืฉืจ ืืื ืืืืชืื, ื ืืฆืจ ืืขืจื ืฉื 256 ืืืื ืืื. ืื ืืฆืืืขืื ื ืืกืคืื ื ืืืคืื ืื ืืขืจืืื, ืืืืื ืฉืื ืืื ื-256 ืืืืื ืืื ืืืืื. ืืืชืื ืืื, ืืขืช ืืกืจืช ืืืื ืืื ืืืขืจืืื, ืืืืื ืืืชืื.
ื-VM ืืฉืชืืฉ ืืืกืคืจ ืขืจืืืืช:
- ืืืกื ืืช ืจืืฉืืช.
- ืขืจืืื ืืืืกืื ื ืงืืืืช ืืืืจื.
- ืขืจืืืช ืืกืคื ืื.
- ื ืกื/ืชืคืืก/ืืืกืืฃ ืืกืื ืืช ืขืจืืืช ืืืืคื.
ืงืืืขืื ืืืฉืชื ืื
ืื ืคืฉืื. ืงืืืขืื ืืืืคืืื ืืืชืืืช ืงืื ืงืื ื ื ืคืจืืช ืืืืื ืื ืืืืฉืืืื ืขืชืืืืื ืืืืฆืขืืช ืืชืืืืช ืกืืืืืช. ืืฉืชื ืื ืื ืืขืจื ืฉื ืืฆืืืขืื ืืืืื ืืกืืื, ืืืืฉื ืืชืืื ืฉืื ืืชืืฆืขืช ืขื ืืื ืืื ืืงืก - ืืืืืจ. ืืชืืืช ืกืืืืช. ื ืืชื ืืืืืฃ ืืฉืชื ืื ืืจืืฉ ืืขืจืืื ืื ืืงืจืื ืืฉื. ืืขืฆื, ืื ืืขืื ืฉืืืฉืชื ืื ืฉืื ื ืืขืฆื ืืืืกื ืื ืืฆืืืขืื ืืขืจืืื ืืืืืจืื 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.
ืืืืจ
ืืชื ืืืื ืืฉืืง ืขื ืืืชืคืชืืืืืช ืืืขืงืื ืืืจ ืืคืจืืืงื ืืขืฆืื.
ืชืืื ืฉืงืจืืช ืขื ืืกืืฃ ืื ืงืจืืช.
ืืงืืจ: www.habr.com