α’ααααααααααΆα αααΎαααααΆααααα»αααΆαααααΆααΆααααααααααα»ααααα»αααΆαα’αα·ααααααΆααΆααααααααααα·ααΈααααΆαααααα½ααααααααα»αα ααΆααααα·ααααααααα»α αααα»αα αααααααΎαααΆααΆααΆαααααααα»α αα»αααΆααααααα αα·αααΆααααα½ααααα»ααααα’αΆα ααααΎαα ααΆαα
αα
αααα»αα’αααααααα αααα»αα
αααααα αΆαααΈααααΆααααΆαααααΆααααααΆαααΆααααααααα»α α αΎαααΎααααΈα
αΆααααααΎαααΆαα½αααΉα ααΆααα·αααααΆα’αααΈαααα·ααααααΆααααααΎαααααΆααΆ αα·αααΆαα’αα»ααααααααΌαααααααΆ ααααααα»ααααα»αααααΎααΆαααΆααααα
αα
α»αααααααααα
αααα»αααΌααα·ααΆαααΆαα»αααΆαααα»αααΆααααααααααααααΆααααΌααα
αααα»α Free Pascal ααΈααααα ... αααααα·ααΈαα
ααΎααΆα’αΆα
ααααΌαααΆααααα»αα‘αΎααααααΆαααααα·ααΆαα½αα
ααα½ααα α αΎαα’αααα
ααααααααα½αα―αααα·ααααααααααααααΈααααααΆααααααα’αααΆαααααΆαα (αααα»ααααααΌααααΆαααΆαα»ααΆααα’ααααααααααααΆαα½αααΉαααα O2) α
αααααααααΆααΆ
ααΆααααΌαααΆααΆαααααααα·ααΆαα’αααΈαααΆαααΈααα·αααα·αααααααα»αααααΌααααααααΎααααΈααααΎαααΆααααααα·ααΈααΆαααα’ααΆααααΆααΆααΆαααααααα»αα αααα»αααΆααααααα α α·αααα’αα»ααααααααΆααααααααααα αααα ααααΆαααααααΆααΆαααααααΆαααΆααααα½ααααα»αα αααα»ααα·αααΆαααααΎαα’αααααααααααΆαα½αα’αααΈααααααααΎααΆααΆααΆααΆαα»ααααΈαα ααΌα αααααααααΆααααΈααααΆαααααα½αα―αααΆαα½αααΉααααααΆααααΆααΆααΆα’ααααααα αααα»αααΆαα’αααα»αα α»αααΎααααΈαα ααΆ αα·αααααααααααααΆαααααα½ααααααααα»αα αααααΆαααααα»αααΉααααα αΆααααα·α αα·αααΆαα’αα·αααααα "ααααα·αααααα" αααααααα»ααα αααα»ααααα αΆαααα
ααΆαα’αα»ααααααα
ααΆααααααααα
αααααααΆαααΎαα VM ααΊααΆαααα αα
αααα»αααΆαα’αα»αααααααααααα»αααΆααααΎαααΆαααΆαααα»αα ααααΆαααααααΊααΆα’αΆααααΆααααααααααα·α
αα·αα’ααααααααΆαααααααΆαα»ααααααααααααααααΌααααααα
αα
ααααααααΆααααΌαααΆαα
αΆααααααΎα α’αΆααααααΆαα» 256 ααααΌαααΆααααααΎαα ααααα·αααΎααααα·α
α
αααΎαααααΌαααΆααα»αααΎααα ααα αααααααΆααΎαα‘αΎααααααΆαα» 256 αααααΆααα ααΌα
ααααα αΎααα
αααααααΆαα»α
ααααΈαααααα αααααααΆααααΌαααΆααααααααΌαα
VM ααααΎαααααΆα αααΎαα
- αααα ααααα
- ααααααααΆαααααααΆαα»ααα·αααα»αααα‘ααα
- αααα’ααααααααΌαααααΆαα
- ααΆααααα/α αΆαα/α α»αααααα ααΆααΆαααααα’ααααααααααΆαα
α’ααα αα·αα’ααα
αα½ααααααΊααΆααααα Constants ααααΌαααΆαααααααααααααα»ααααααααΌα αα½αααΆα ααααα‘ααααααΌα α αΎαααΆααα αααα»ααααααα·ααΈααΆαααα’ααΆααααΆααααα’αΆααααααΆααα·αα·ααααα α’αααααΊααΆα’αΆααααααααα·α ααααα αααΆααααΆαααα½α ααΆαα αΌααα ααΆαααααα‘αΆααααααΆααααΌαααΆαα’αα»ααααααααα·αα·αααα - i.e. α’αΆααααααΆααα·αα·ααααα α’αααα’αΆα ααααΌαααΆααα»ααα ααααΌααααααα¬α’αΆαααΈααΈαααα ααΆααα·ααααααΆααα αααααααααα’αααααααααΎααααααΆαα»αααααα·α αα ααααααα αααα»αα’αααα αα αΆα VM ααΆααΆααααΌαααΆααααααααααααααααααΎααΆαααΆαα½αααααα·α ααααααααααααα
α’αααβαααααΌαβααααΆα
αα αααα»α VM αααααααα»α ααΆααΊααΆαααααααΆαααααααααααααα·α ααΆαααααα α’αααα’αα·αααααααααα½αα―ααααααα α α·αααααΆαααααΆααααΌαα α α’ααααααααΌαααααΆαα ααΆαα·αααααΎαααΆααααααααΎααααα·α ααααα·α ααααααΆααΌα αα αααα»α Python, Perl, Ruby, Lua ααΆααΎαα ααΆααααΌαααΆαα’αα»ααααααΆαααααααααααααααααΆααα ααΆαααααα αα ααααααα’αααααααΌαααΆαααααα»ααα»ααααααΆααααααααααααααααααα’αΆαααα ααααα·α αα ααααααααααααΌαααΆααααααααα αααααααα’ααααααααΌαααααΆαα αα αααα’ααΆαα α’ααααααααΌαααΆαααααΎαααΆααααΆαααΏαααΆαααααααααΈα ααα’α»ααααααΆααααα ααα½α α αΎαα
αααααααΆαααΆαααΆααααα/α αΆαα/α α»ααααααααΆααΆαα
ααΌα αα αααα»αααΆααΆααααΎαααΆαα½α ααΆααααααααΆαααααΈααΎααααααΊααΆαααΆαααΆαα»ααααΆαααα½αα ααααΌα VM ααααΌαααΆααα»ααα αααα»ααααα»α try..catch αααα’αΆα αααα‘αααα ααααΎαααΆαααΌααα·α αααααΆααααΈα αΆααααΆαααααΈααΎααααααααα»αααααααΆααα½αα ααα½αα’αααΈααΆαα ααΎαααα αα αααα»αααΌααααααα·ααΈ α’αααα’αΆα ααααα try/catch/finally blocks αα code αααααΆααα ααα»α α αΌααα catch (exception handler) αα·αα α»αααααα/end (end of block)α
αα α»αααα
ααΆααααΌαααΆαααΆαααααα ααααα·α VM α ααΆααΆαααα αα·αααΆααααα½αααααΎα ααΆααααΎαααΆααααααααΆαααααααααααααΆα ααΌα ααααααΌααα½αααααααΌαααΆαααααα·ααααα·αααα»ααααααααα‘αΆαααΆα αααΎαααααΏαααΆααα»ααααααααα½αα
αααααΆαααααΆααααα αααααΆαα VMs
ααααΆααα·ααΈααααΎαααααααΆαααΏααααααα VM ααΆααααααΆαααΆαα αΌα ααααααααΉααααααααααΆααααΌαααΆαα’αα»ααααααΆααΆααΆααααααααα α’αααα’αΆα ααααααααααααααΌαααΆ Mash αα·ααααααααααΌαααΆααΆααΆααααΎα αααααΆααααααααΆαααα½αααΆαα ααΆαα½αα
α’αααααααααααΈααΆααΆ Mash ααααα·αααααααα ααΆ bytecode αααααΆαα VMs
ααΆααΆααααα·αααααα
ααΎααααΈβαααααβα’αααβααβααααβααΈβααΆααΆβαααα»αααααΆαβαα βααΆβααΌα VM αααΆαβααΆααβαα αα αααα»αβααΆαβαααααΎαβααΆααΆβααααα·αβαααααβααααΌαα ααααααβααΊβααΆβααααααΈαααΆαβααβαα½αβα±ααβαααααααΆα βαα½αβαααβααααΆαβα ααα»α βαα·αααβαααα»αβααΆαβαα·α αΆαααΆβαα βααΈαααα αααα»αααααΆαααααα·ααΆαααΆαα ααααα·αααα α’αααααααααααααΎαααΆαα’ααα αα·αα’αααααΆαα αααΎα ααααΆα’αΆααααααΆααα·αα·αααααααααα½ααα αα·αα’αΆααααααΆαααα ααα»α α αΌαα
ααααΆααααααααα’ααααααααα
αααα»ααα·αααΆαααααΎαααΎαααααΆααααααααααα’αααα»ααααααΆααααΆαα’αα»ααααααα α’ααααααααααα·ααααααΎααααααΆαααΌαααΌα α’αααααααααααααααααααααΎααα ααΆααααΎααα ααΎαααααΌααααα ααΆααααααααα ααΆαααααα ααααα·αααΎαααααααααΌαααααααα»ααααααΎααα ααΌα ααΆ "while <condition>:" αααααΆα αααΆααααΆααααΆαααααΊααΆ while loop construct α αΎαααααΌαααΆαααααΎαααΆαααΆ while loop construct α α’αααΈαα½αααΌα ααΆααααΈααααΌααααα»αααααααΆαα
α’ααα»αα αααααααααααααΆαααααΆααααααααααα α’αααααααααααααααΆαα·αααΏαααα αααααΆαααΆαααΆαααααααΆαααΆααααα½αααααΆαααααααααααααΆααΆαααΎαα‘αΎααααΆαααααΆααα αααα»αααΆααααααααα ααΆααααααααα αΆαααΆα αααΏαααΆαααΆα ααααααααααα»αα’αΆα αααααΆααα α»αα ααΆαααΆαααα OOP ααααααααααΌαααΆαα’αα»αααααααα»ααααααααα·α ααΆααα½ααααααΆα αα
ααΆααααααΎαααααα·αααααΆαααΌα
αα ααΈααα ααΆααΆααα·α ααΆα’αΆα ααααΌαααΆαα’αα»ααααααΆααααααΎαααΆααα»α (α αΎαααΉαααααΌαααΆαα’αα»αααα ααα»αααααα αααααααα αααΆαααΆααα»αααααααΆααααα½αααΆαααΆ)α αα αΌαααααααααααα α’ααααααααΎαααααα·αααααΆαααααΆααααααΉαααΈααααααΆααααΌαααααα·αααααΎ ααα αα·αααΆαααΆαα αΌαααΈααααα·ααΆαα ααΌα ααααΆαααααααα αααααΆα αααΎααααααΆααααααααΌα ααααΆααααΌαααΆααααα½αααααα½αα α’ααα αΎαα
ααΆααΆαααΆα
αααα·αααΆααΌαααααΆαααααΆααΆ
αααα·αα ααααααΊααΎααααΈα’αα·ααααααΆααΆαααααΆααα»αααΆα αα·αααΆαααααααα»ααααα’αΆα ααααΎαα ααΆαα αααα»αβαα·αβααΆβααΆαβα’αα·ααααβααααΌαβαααααααΆαβααΆαα½αβααΉαβαα·α αα ααΆαβααααβαααα½αβαααβααα‘ααβααααΆααα
αααα»αααΌα ααΈαα·αα·ααΈ αα·ααα»αααΆα
αααααααΆααα’αααα αααα»αααΆααΆααααΌαααΆαααΎαααααααααΆα : α αΎαααααΌαααΆααα·ααααααααα·ααααα·αα αααα αα.
ααΈαα·αα·ααΈ αα·ααα»αααΆαααααΌαααΆααααααΆαααΆααΆ proc αα·α func αααααααΆα α’αΆαα»αααααααααΌαααΆαααΆααααα»αααααααα αα α’αααΈααααααααΆαααΊααΌα ααΆααΆααΆααααααααααΆαα αααΎαα
ααααα·ααααα·αα αααα‘αααααα·α α’αααα’αΆα αααα‘αααααααααΈα’αα»αααα ααααα·ααααα·αα ααααα α’αα»ααααΆαα±ααα’αααα ααααΈααΈαα·αα·ααΈ / αα»αααΆα (ααααα·αααΎααΆαα ααΆααααα ααααα·ααα»α) α
ααΌαααααΌα
...
func summ(a, b):
return a + b
end
proc main():
println(summ(inputln(), inputln()))
end
ααΆααα ααΆαααααΆαααα
- ααααα·ααα»αα αααααΆαα..αααα αα αααααα..αααα αα αα αΌαααα..αααα αα
- ααααααααα if..[else..] end, switch..[case..end..][else..] end
- αα·ααΈααΆαααααα proc <name>():... end, func <name>():... end
- Label & goto: <name>:, jump <name>
- ααΆαβααΆααβαααα αΌαβααααΆβαα·αβα’αΆααβαααα
α’ααα
α’αααααααααα’αΆα ααααααα½αααΆαααααααααααααααα· α¬ααααα·αααΎα’αααα’αα·ααααααααααα var αα»αααααααααααΆα
α§ααΆα αααααΌαα
a ?= 10
b ?= a + 20
var a = 10, b = a + 20
α’αααααα αα·αααΌαααααΆαααααΌαααΆαααΆααααα
OOP
ααΆααΆααααααΎαααΆαα, ααΎαααΆαααααααααααΆααααααααααΆαααααα»αα 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
ααααααααΉαα αα·α, αα·αα
α’αααΈααααα·ααααα·ααα αΆααααΆαα αα·ααααααΆα ααα’α»αα αααΆααααΆαα
ααααα·ααααα·αα ?= ααααΌαβααΆαβααααΎβααΎααααΈβαααααβα’αααβααααα·α
βαα
βαααααβαααα»αβα’αααβα
αα
αΆαα
ααααα·ααααα·αα = ααααΆααααααΌαααααααααα»αα’αααα
αα
αΆααααααααΎααααα·α
ααΈα’αααα
α αΎαα₯α‘αΌααααααααα·α
α’αααΈααααα·α
α
αααΆααααΆααα αααα»αααΆααααααααα½αααΆαα
αααα»αααΆααΆααΎααααΈα±αααα½αααααΆαα
@<variable> β ααααααα·α
ααΆααααΆαααα½ααα
α’αααα
?<variable> β ααα½αααΆαα’ααααααααααα·α
α
@= β αααααααααααα
α’ααααααααααα·α
α
αααΆααααΆαααα
ααΆα
ααΌαααααΌα
uses <bf>
uses <crt>
proc main():
var a = 10, b
b ?= @a
PrintLn(b)
b ?= ?b
PrintLn(b)
b++
PrintLn(a)
InputLn()
end
ααΉααααα ααα ααααα½αα ααα½α α‘α , α‘α‘α
ααΆααααα..[α αΆαα..] [α α»αααααα..]α αα
ααΌαααααΌα
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