Нов Π΅Π·ΠΈΠΊ Π·Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΈΡ€Π°Π½Π΅ Mash

Π’ ΠΏΡ€ΠΎΠ΄ΡŠΠ»ΠΆΠ΅Π½ΠΈΠ΅ Π½Π° няколко Π³ΠΎΠ΄ΠΈΠ½ΠΈ сС ΠΎΠΏΠΈΡ‚Π²Π°Ρ… Π΄Π° разработя собствСн Π΅Π·ΠΈΠΊ Π·Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΈΡ€Π°Π½Π΅. Π˜ΡΠΊΠ°Ρ… Π΄Π° създам, ΠΏΠΎ ΠΌΠΎΠ΅ ΠΌΠ½Π΅Π½ΠΈΠ΅, възмоТно Π½Π°ΠΉ-простия, напълно Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»Π΅Π½ ΠΈ ΡƒΠ΄ΠΎΠ±Π΅Π½ Π΅Π·ΠΈΠΊ.

Π’ Ρ‚Π°Π·ΠΈ статия искам Π΄Π° подчСртая основнитС Π΅Ρ‚Π°ΠΏΠΈ ΠΎΡ‚ моята Ρ€Π°Π±ΠΎΡ‚Π° ΠΈ ΠΊΠ°Ρ‚ΠΎ Π½Π°Ρ‡Π°Π»ΠΎ Π΄Π° опиша ΡΡŠΠ·Π΄Π°Π΄Π΅Π½Π°Ρ‚Π° концСпция Π½Π° Π΅Π·ΠΈΠΊΠ° ΠΈ ΠΏΡŠΡ€Π²Π°Ρ‚Π° ΠΌΡƒ рСализация, Π²ΡŠΡ€Ρ…Ρƒ която работя Π² ΠΌΠΎΠΌΠ΅Π½Ρ‚Π°.

ΠŸΠΎΠ·Π²ΠΎΠ»Π΅Ρ‚Π΅ ΠΌΠΈ Π΄Π° ΠΊΠ°ΠΆΠ° ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»Π½ΠΎ, Ρ‡Π΅ написах цСлия ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ Π½Π° Free Pascal, Π·Π°Ρ‰ΠΎΡ‚ΠΎ... ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΈΡ‚Π΅ Π²ΡŠΡ€Ρ…Ρƒ Π½Π΅Π³ΠΎ ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° Π±ΡŠΠ΄Π°Ρ‚ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€Π°Π½ΠΈ Π·Π° ΠΎΠ³Ρ€ΠΎΠΌΠ΅Π½ Π±Ρ€ΠΎΠΉ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠΈ, Π° самият ΠΊΠΎΠΌΠΏΠΈΠ»Π°Ρ‚ΠΎΡ€ ΠΏΡ€ΠΎΠΈΠ·Π²Π΅ΠΆΠ΄Π° ΠΌΠ½ΠΎΠ³ΠΎ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€Π°Π½ΠΈ Π΄Π²ΠΎΠΈΡ‡Π½ΠΈ Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅ (ΡΡŠΠ±ΠΈΡ€Π°ΠΌ всички ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΈ Π½Π° ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° с O2 Ρ„Π»Π°Π³).

Π•Π·ΠΈΠΊΠΎΠ²Π° срСда Π·Π° изпълнСниС

ΠŸΡ€Π΅Π΄ΠΈ всичко си струва Π΄Π° ΠΏΠΎΠ³ΠΎΠ²ΠΎΡ€ΠΈΠΌ Π·Π° Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»Π½Π°Ρ‚Π° машина, която Ρ‚Ρ€ΡΠ±Π²Π°ΡˆΠ΅ Π΄Π° напиша, Π·Π° Π΄Π° стартирам Π±ΡŠΠ΄Π΅Ρ‰ΠΈ прилоТСния Π½Π° моя Π΅Π·ΠΈΠΊ. Π Π΅ΡˆΠΈΡ… Π΄Π° внСдря стСкова Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π°, ΠΌΠΎΠΆΠ΅ Π±ΠΈ, Π·Π°Ρ‰ΠΎΡ‚ΠΎ Ρ‚ΠΎΠ²Π° бСшС Π½Π°ΠΉ-лСсният Π½Π°Ρ‡ΠΈΠ½. НС Π½Π°ΠΌΠ΅Ρ€ΠΈΡ… Π½ΠΈΡ‚ΠΎ Π΅Π΄Π½Π° Π½ΠΎΡ€ΠΌΠ°Π»Π½Π° статия Π·Π° Ρ‚ΠΎΠ²Π° ΠΊΠ°ΠΊ Π΄Π° направя Ρ‚ΠΎΠ²Π° Π½Π° руски, Ρ‚Π°ΠΊΠ° Ρ‡Π΅ слСд ΠΊΠ°Ρ‚ΠΎ сС Π·Π°ΠΏΠΎΠ·Π½Π°Ρ… с англоСзичния ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π», сСднах Π΄Π° ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΈΡ€Π°ΠΌ ΠΈ напиша собствСния си вСлосипСд. Π‘Π»Π΅Π΄ Ρ‚ΠΎΠ²Π° Ρ‰Π΅ прСдставя ΠΌΠΎΠΈΡ‚Π΅ β€žΠ½Π°ΠΏΡ€Π΅Π΄Π½Π°Π»ΠΈβ€œ ΠΈΠ΄Π΅ΠΈ ΠΈ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΏΠΎ Ρ‚ΠΎΠ·ΠΈ Π²ΡŠΠΏΡ€ΠΎΡ.

РСализация Π½Π° стСка

ΠžΡ‡Π΅Π²ΠΈΠ΄Π½ΠΎ Π² Π³ΠΎΡ€Π½Π°Ρ‚Π° част Π½Π° VM Π΅ ΡΡ‚Π΅ΠΊΡŠΡ‚. Π’ моята рСализация Ρ€Π°Π±ΠΎΡ‚ΠΈ Π½Π° Π±Π»ΠΎΠΊΠΎΠ²Π΅. По ΡΡŠΡ‰Π΅ΡΡ‚Π²ΠΎ Ρ‚ΠΎΠ²Π° Π΅ прост масив ΠΎΡ‚ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΠΈ ΠΈ ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²Π° Π·Π° ΡΡŠΡ…Ρ€Π°Π½ΡΠ²Π°Π½Π΅ Π½Π° индСкса Π½Π° Π²ΡŠΡ€Ρ…Π° Π½Π° стСка.
ΠšΠΎΠ³Π°Ρ‚ΠΎ сС ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€Π°, сС създава масив ΠΎΡ‚ 256 Π΅Π»Π΅ΠΌΠ΅Π½Ρ‚Π°. Ако ΠΏΠΎΠ²Π΅Ρ‡Π΅ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΠΈ сС ΠΈΠ·Π±ΡƒΡ‚Π°Ρ‚ Π² стСка, нСговият Ρ€Π°Π·ΠΌΠ΅Ρ€ сС ΡƒΠ²Π΅Π»ΠΈΡ‡Π°Π²Π° със слСдващитС 256 Π΅Π»Π΅ΠΌΠ΅Π½Ρ‚Π°. Π‘ΡŠΠΎΡ‚Π²Π΅Ρ‚Π½ΠΎ, ΠΏΡ€ΠΈ ΠΏΡ€Π΅ΠΌΠ°Ρ…Π²Π°Π½Π΅ Π½Π° Π΅Π»Π΅ΠΌΠ΅Π½Ρ‚ΠΈ ΠΎΡ‚ стСка, нСговият Ρ€Π°Π·ΠΌΠ΅Ρ€ сС ΠΊΠΎΡ€ΠΈΠ³ΠΈΡ€Π°.

VM ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° няколко стСка:

  1. ОсновСн стСк.
  2. Π‘Ρ‚Π΅ΠΊ Π·Π° ΡΡŠΡ…Ρ€Π°Π½ΡΠ²Π°Π½Π΅ Π½Π° Ρ‚ΠΎΡ‡ΠΊΠΈ Π·Π° Π²Ρ€ΡŠΡ‰Π°Π½Π΅.
  3. Π‘Ρ‚Π΅ΠΊ Π·Π° ΡΡŠΠ±ΠΈΡ€Π°Π½Π΅ Π½Π° Π±ΠΎΠΊΠ»ΡƒΠΊ.
  4. ΠžΠΏΠΈΡ‚Π°ΠΉΡ‚Π΅/ΡƒΠ»ΠΎΠ²Π΅Ρ‚Π΅/накрая Π±Π»ΠΎΠΊΠΈΡ€Π°ΠΉΡ‚Π΅ стСка Π½Π° ΠΌΠ°Π½ΠΈΠΏΡƒΠ»Π°Ρ‚ΠΎΡ€Π°.

ΠšΠΎΠ½ΡΡ‚Π°Π½Ρ‚ΠΈ ΠΈ ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈ

Π’ΠΎΠ·ΠΈ Π΅ прост. ΠšΠΎΠ½ΡΡ‚Π°Π½Ρ‚ΠΈΡ‚Π΅ сС ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π²Π°Ρ‚ Π² ΠΎΡ‚Π΄Π΅Π»Π΅Π½ малък ΠΊΠΎΠ΄ ΠΈ са Π΄ΠΎΡΡ‚ΡŠΠΏΠ½ΠΈ Π² Π±ΡŠΠ΄Π΅Ρ‰ΠΈ прилоТСния Ρ‡Ρ€Π΅Π· статични адрСси. ΠŸΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈΡ‚Π΅ са масив ΠΎΡ‚ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΠΈ с ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ Ρ€Π°Π·ΠΌΠ΅Ρ€, Π΄ΠΎΡΡ‚ΡŠΠΏΡŠΡ‚ Π΄ΠΎ Π½Π΅Π³ΠΎΠ²ΠΈΡ‚Π΅ ΠΊΠ»Π΅Ρ‚ΠΊΠΈ сС ΠΎΡΡŠΡ‰Π΅ΡΡ‚Π²ΡΠ²Π° ΠΏΠΎ индСкс - Ρ‚.Π΅. статичСн адрСс. ΠŸΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈΡ‚Π΅ ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° Π±ΡŠΠ΄Π°Ρ‚ ΠΈΠ·Π±ΡƒΡ‚Π°Π½ΠΈ Π² Π³ΠΎΡ€Π½Π°Ρ‚Π° част Π½Π° стСка ΠΈΠ»ΠΈ ΠΏΡ€ΠΎΡ‡Π΅Ρ‚Π΅Π½ΠΈ ΠΎΡ‚ Ρ‚Π°ΠΌ. Π’ΡΡŠΡ‰Π½ΠΎΡΡ‚, Π·Π°Ρ‰ΠΎΡ‚ΠΎ Π”ΠΎΠΊΠ°Ρ‚ΠΎ Π½Π°ΡˆΠΈΡ‚Π΅ ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈ ΠΏΠΎ ΡΡŠΡ‰Π΅ΡΡ‚Π²ΠΎ ΡΡŠΡ…Ρ€Π°Π½ΡΠ²Π°Ρ‚ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΠΈ към стойности във VM ΠΏΠ°ΠΌΠ΅Ρ‚Ρ‚Π°, Π΅Π·ΠΈΠΊΡŠΡ‚ Π΅ Π΄ΠΎΠΌΠΈΠ½ΠΈΡ€Π°Π½ ΠΎΡ‚ Ρ€Π°Π±ΠΎΡ‚Π° с нСявни ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΠΈ.

Π‘ΡŠΠ±ΠΈΡ€Π°Ρ‡ Π½Π° Π±ΠΎΠΊΠ»ΡƒΠΊ

Π’ моята Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»Π½Π° машина Π΅ ΠΏΠΎΠ»ΡƒΠ°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΡ‡Π½ΠΎ. Π’Π΅Π·ΠΈ. Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΡŠΡ‚ сам Ρ€Π΅ΡˆΠ°Π²Π° ΠΊΠΎΠ³Π° Π΄Π° сС ΠΎΠ±Π°Π΄ΠΈ Π½Π° ΡΡŠΠ±ΠΈΡ€Π°Ρ‡Π° Π½Π° ΠΎΡ‚ΠΏΠ°Π΄ΡŠΡ†ΠΈ. НС Ρ€Π°Π±ΠΎΡ‚ΠΈ с ΠΎΠ±ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ брояч Π½Π° ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΠΈ, ΠΊΠ°ΠΊΡ‚ΠΎ Π² Python, Perl, Ruby, Lua ΠΈ Π΄Ρ€. Π Π΅Π°Π»ΠΈΠ·ΠΈΡ€Π° сС Ρ‡Ρ€Π΅Π· ΠΌΠ°Ρ€ΠΊΠ΅Ρ€Π½Π° систСма. Π’Π΅Π·ΠΈ. ΠΊΠΎΠ³Π°Ρ‚ΠΎ Π½Π° ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²Π° Π΅ ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Π° Π΄Π° бъдС присвоСна Π²Ρ€Π΅ΠΌΠ΅Π½Π½Π° стойност, ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π» към Ρ‚Π°Π·ΠΈ стойност сС добавя към стСка Π½Π° ΡΡŠΠ±ΠΈΡ€Π°Ρ‡Π° Π½Π° ΠΎΡ‚ΠΏΠ°Π΄ΡŠΡ†ΠΈ. Π’ Π±ΡŠΠ΄Π΅Ρ‰Π΅ ΠΊΠΎΠ»Π΅ΠΊΡ‚ΠΎΡ€ΡŠΡ‚ Π±ΡŠΡ€Π·ΠΎ ΠΏΡ€Π΅ΠΌΠΈΠ½Π°Π²Π° ΠΏΡ€Π΅Π· Π²Π΅Ρ‡Π΅ подготвСния списък с ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΠΈ.

ΠžΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π½Π° Π±Π»ΠΎΠΊΠΎΠ²Π΅ try/catch/finally

ΠšΠ°ΠΊΡ‚ΠΎ във всСки ΡΡŠΠ²Ρ€Π΅ΠΌΠ΅Π½Π΅Π½ Π΅Π·ΠΈΠΊ, ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ°Ρ‚Π° Π½Π° ΠΈΠ·ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ Π΅ Π²Π°ΠΆΠ΅Π½ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚. Π―Π΄Ρ€ΠΎΡ‚ΠΎ Π½Π° Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»Π½Π°Ρ‚Π° машина Π΅ ΠΎΠ±Π²ΠΈΡ‚ΠΎ Π² Π±Π»ΠΎΠΊ try..catch, ΠΊΠΎΠΉΡ‚ΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° сС Π²ΡŠΡ€Π½Π΅ към изпълнСниС Π½Π° ΠΊΠΎΠ΄Π° слСд улавянС Π½Π° ΠΈΠ·ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ Ρ‡Ρ€Π΅Π· натисканС Π½Π° информация Π·Π° Π½Π΅Π³ΠΎ Π² стСка. Π’ ΠΊΠΎΠ΄Π° Π½Π° ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° Π΄Π΅Ρ„ΠΈΠ½ΠΈΡ€Π°Ρ‚Π΅ Π±Π»ΠΎΠΊΠΎΠ²Π΅ ΠΎΡ‚ ΠΊΠΎΠ΄ try/catch/finally, ΠΊΠ°Ρ‚ΠΎ посочитС Π²Ρ…ΠΎΠ΄Π½ΠΈ Ρ‚ΠΎΡ‡ΠΊΠΈ ΠΏΡ€ΠΈ catch (ΠΌΠ°Π½ΠΈΠΏΡƒΠ»Π°Ρ‚ΠΎΡ€ Π½Π° ΠΈΠ·ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ) ΠΈ finally/end (края Π½Π° Π±Π»ΠΎΠΊΠ°).

ΠœΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½ΠΎΡΡ‚

ΠŸΠΎΠ΄Π΄ΡŠΡ€ΠΆΠ° сС Π½Π° Π½ΠΈΠ²ΠΎ VM. Π’ΠΎΠΉ Π΅ лСсСн ΠΈ ΡƒΠ΄ΠΎΠ±Π΅Π½ Π·Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅. Π Π°Π±ΠΎΡ‚ΠΈ Π±Π΅Π· систСма Π·Π° ΠΏΡ€Π΅ΠΊΡŠΡΠ²Π°Π½Π΅, Ρ‚Π°ΠΊΠ° Ρ‡Π΅ ΠΊΠΎΠ΄ΡŠΡ‚ трябва Π΄Π° сС изпълнява Π² няколко нишки ΡΡŠΠΎΡ‚Π²Π΅Ρ‚Π½ΠΎ няколко ΠΏΡŠΡ‚ΠΈ ΠΏΠΎ-Π±ΡŠΡ€Π·ΠΎ.

Π’ΡŠΠ½ΡˆΠ½ΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ Π·Π° Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»Π½ΠΈ машини

Π‘Π΅Π· Ρ‚ΠΎΠ²Π° няма ΠΊΠ°ΠΊ. VM ΠΏΠΎΠ΄Π΄ΡŠΡ€ΠΆΠ° ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€Π°Π½Π΅, ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎ Π½Π° Ρ‚ΠΎΠ²Π° ΠΊΠ°ΠΊ сС ΠΏΡ€ΠΈΠ»Π°Π³Π° Π² Π΄Ρ€ΡƒΠ³ΠΈ Π΅Π·ΠΈΡ†ΠΈ. ΠœΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° Π½Π°ΠΏΠΈΡˆΠ΅Ρ‚Π΅ част ΠΎΡ‚ ΠΊΠΎΠ΄Π° Π² Mash ΠΈ част ΠΎΡ‚ ΠΊΠΎΠ΄Π° Π½Π° Ρ€ΠΎΠ΄Π½ΠΈΡ‚Π΅ Π΅Π·ΠΈΡ†ΠΈ, слСд ΠΊΠΎΠ΅Ρ‚ΠΎ Π΄Π° Π³ΠΈ ΡΠ²ΡŠΡ€ΠΆΠ΅Ρ‚Π΅ Π² Π΅Π΄Π½ΠΎ.

ΠŸΡ€Π΅Π²ΠΎΠ΄Π°Ρ‡ ΠΎΡ‚ Mash Π΅Π·ΠΈΠΊ Π½Π° високо Π½ΠΈΠ²ΠΎ към Π±Π°ΠΉΡ‚ ΠΊΠΎΠ΄ Π·Π° Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»Π½ΠΈ машини

МСТдинСн Сзик

Π—Π° Π΄Π° напиша Π±ΡŠΡ€Π·ΠΎ ΠΏΡ€Π΅Π²ΠΎΠ΄Π°Ρ‡ ΠΎΡ‚ слоТСн Π΅Π·ΠΈΠΊ във VM ΠΊΠΎΠ΄, ΠΏΡŠΡ€Π²ΠΎ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΈΡ… ΠΌΠ΅ΠΆΠ΄ΠΈΠ½Π΅Π½ Π΅Π·ΠΈΠΊ. Π Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ΡŠΡ‚ бСшС уТасно Π·Ρ€Π΅Π»ΠΈΡ‰Π΅ ΠΊΠ°Ρ‚ΠΎ асСмблСр, ΠΊΠΎΠ΅Ρ‚ΠΎ няма особСн смисъл Π΄Π° Ρ€Π°Π·Π³Π»Π΅ΠΆΠ΄Π°ΠΌΠ΅ Ρ‚ΡƒΠΊ. Π©Π΅ ΠΊΠ°ΠΆΠ° само, Ρ‡Π΅ Π½Π° Ρ‚ΠΎΠ²Π° Π½ΠΈΠ²ΠΎ Ρ‚Ρ€Π°Π½ΡΠ»Π°Ρ‚ΠΎΡ€ΡŠΡ‚ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π²Π° ΠΏΠΎΠ²Π΅Ρ‡Π΅Ρ‚ΠΎ константи ΠΈ ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈ, изчислява Ρ‚Π΅Ρ…Π½ΠΈΡ‚Π΅ статични адрСси ΠΈ адрСситС Π½Π° Π²Ρ…ΠΎΠ΄Π½ΠΈΡ‚Π΅ Ρ‚ΠΎΡ‡ΠΊΠΈ.

АрхитСктура Π½Π° ΠΏΡ€Π΅Π²ΠΎΠ΄Π°Ρ‡Π°

НС ΠΈΠ·Π±Ρ€Π°Ρ… Π½Π°ΠΉ-Π΄ΠΎΠ±Ρ€Π°Ρ‚Π° Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π° Π·Π° рСализация. ΠŸΡ€Π΅Π²ΠΎΠ΄Π°Ρ‡ΡŠΡ‚ Π½Π΅ ΠΈΠ·Π³Ρ€Π°ΠΆΠ΄Π° ΠΊΠΎΠ΄ΠΎΠ²ΠΎ Π΄ΡŠΡ€Π²ΠΎ, ΠΊΠ°ΠΊΡ‚ΠΎ правят Π΄Ρ€ΡƒΠ³ΠΈΡ‚Π΅ ΠΏΡ€Π΅Π²ΠΎΠ΄Π°Ρ‡ΠΈ. Π’ΠΎΠΉ Π³Π»Π΅Π΄Π° към Π½Π°Ρ‡Π°Π»ΠΎΡ‚ΠΎ Π½Π° структурата. Π’Π΅Π·ΠΈ. Π°ΠΊΠΎ частта ΠΎΡ‚ ΠΊΠΎΠ΄Π°, ΠΊΠΎΠΉΡ‚ΠΎ сС Π°Π½Π°Π»ΠΈΠ·ΠΈΡ€Π°, ΠΈΠ·Π³Π»Π΅ΠΆΠ΄Π° ΠΊΠ°Ρ‚ΠΎ β€œwhile <условиС>:”, Ρ‚ΠΎΠ³Π°Π²Π° Π΅ ΠΎΡ‡Π΅Π²ΠΈΠ΄Π½ΠΎ, Ρ‡Π΅ Ρ‚ΠΎΠ²Π° Π΅ конструкция Π½Π° Ρ†ΠΈΠΊΡŠΠ» while ΠΈ трябва Π΄Π° бъдС ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π΅Π½Π° ΠΊΠ°Ρ‚ΠΎ конструкция Π½Π° Ρ†ΠΈΠΊΡŠΠ» while. НСщо ΠΊΠ°Ρ‚ΠΎ слоТна кутия.

Π‘Π»Π°Π³ΠΎΠ΄Π°Ρ€Π΅Π½ΠΈΠ΅ Π½Π° Ρ‚ΠΎΠ²Π° Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π½ΠΎ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ ΠΏΡ€Π΅Π²ΠΎΠ΄Π°Ρ‡ΡŠΡ‚ Π½Π΅ сС ΠΎΠΊΠ°Π·Π° ΠΌΠ½ΠΎΠ³ΠΎ Π±ΡŠΡ€Π·. Π’ΡŠΠΏΡ€Π΅ΠΊΠΈ Ρ‚ΠΎΠ²Π°, Π»Π΅ΠΊΠΎΡ‚Π°Ρ‚Π° Π½Π° Π½Π΅Π³ΠΎΠ²Π°Ρ‚Π° модификация сС Π΅ ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΠ»Π° Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»Π½ΠΎ. Π”ΠΎΠ±Π°Π²ΠΈΡ… Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΈΡ‚Π΅ структури ΠΏΠΎ-Π±ΡŠΡ€Π·ΠΎ, ΠΎΡ‚ΠΊΠΎΠ»ΠΊΠΎΡ‚ΠΎ ΠΊΠ°Ρ„Π΅Ρ‚ΠΎ ΠΌΠΈ изстина. ΠŸΡŠΠ»Π½Π°Ρ‚Π° OOP ΠΏΠΎΠ΄Π΄Ρ€ΡŠΠΆΠΊΠ° бСшС Π²Π½Π΅Π΄Ρ€Π΅Π½Π° Π·Π° ΠΏΠΎ-ΠΌΠ°Π»ΠΊΠΎ ΠΎΡ‚ сСдмица.

ΠžΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΡ Π½Π° ΠΊΠΎΠ΄Π°

Π’ΡƒΠΊ, Ρ€Π°Π·Π±ΠΈΡ€Π° сС, моТСшС Π΄Π° сС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠΈ ΠΏΠΎ-Π΄ΠΎΠ±Ρ€Π΅ (ΠΈ Ρ‰Π΅ бъдС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΎ, Π½ΠΎ ΠΏΠΎ-късно, Ρ‰ΠΎΠΌ сС стигнС Π΄ΠΎ Π½Π΅Π³ΠΎ). ДосСга ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ‚ΠΎΡ€ΡŠΡ‚ Π·Π½Π°Π΅ само ΠΊΠ°ΠΊ Π΄Π° ΠΎΡ‚Ρ€Π΅ΠΆΠ΅ Π½Π΅ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½ ΠΊΠΎΠ΄, константи ΠΈ импортирания ΠΎΡ‚ асСмблира. ОсвСн Ρ‚ΠΎΠ²Π° няколко константи с Π΅Π΄Π½Π° ΠΈ ΡΡŠΡ‰Π° стойност сС замСнят с Π΅Π΄Π½Π°. Π’ΠΎΠ²Π° Π΅ всичко.

Маш Сзик

Основно понятиС Π·Π° Π΅Π·ΠΈΠΊ

ΠžΡΠ½ΠΎΠ²Π½Π°Ρ‚Π° идСя бСшС Π΄Π° сС Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΈ възмоТно Π½Π°ΠΉ-функционалният ΠΈ прост Π΅Π·ΠΈΠΊ. Мисля, Ρ‡Π΅ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ°Ρ‚Π° сС справя с Π³Ρ€ΡŠΠΌ ΠΈ Ρ‚Ρ€ΡΡΡŠΠΊ със Π·Π°Π΄Π°Ρ‡Π°Ρ‚Π° си.

Кодови Π±Π»ΠΎΠΊΠΎΠ²Π΅, ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€ΠΈ ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ

Всички конструкции Π² Π΅Π·ΠΈΠΊΠ° сС отварят с Π΄Π²ΠΎΠ΅Ρ‚ΠΎΡ‡ΠΈΠ΅. : ΠΈ сС затварят ΠΎΡ‚ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° ΠΊΡ€Π°ΠΉ.

ΠŸΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€ΠΈΡ‚Π΅ ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈΡ‚Π΅ сС Π΄Π΅ΠΊΠ»Π°Ρ€ΠΈΡ€Π°Ρ‚ ΡΡŠΠΎΡ‚Π²Π΅Ρ‚Π½ΠΎ ΠΊΠ°Ρ‚ΠΎ proc ΠΈ func. АргумСнтитС са ΠΈΠ·Π±Ρ€ΠΎΠ΅Π½ΠΈ Π² скоби. Всичко Π΅ ΠΊΠ°Ρ‚ΠΎ ΠΏΠΎΠ²Π΅Ρ‡Π΅Ρ‚ΠΎ Π΄Ρ€ΡƒΠ³ΠΈ Π΅Π·ΠΈΡ†ΠΈ.

ΠžΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ Π²Ρ€ΡŠΡ‰Π°Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° Π²ΡŠΡ€Π½Π΅Ρ‚Π΅ стойност ΠΎΡ‚ функция, ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ ΠΏΠΎΡ‡ΠΈΠ²ΠΊΠ° Π²ΠΈ позволява Π΄Π° ΠΈΠ·Π»Π΅Π·Π΅Ρ‚Π΅ ΠΎΡ‚ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π°Ρ‚Π°/функцията (Π°ΠΊΠΎ Π΅ извън Ρ†ΠΈΠΊΠ»ΠΈΡ‚Π΅).

ΠŸΡ€ΠΈΠΌΠ΅Ρ€Π΅Π½ ΠΊΠΎΠ΄:

...

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

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

ΠŸΠΎΠ΄Π΄ΡŠΡ€ΠΆΠ°Π½ΠΈ Π΄ΠΈΠ·Π°ΠΉΠ½ΠΈ

  • Π¦ΠΈΠΊΠ»ΠΈ: for..end, while..end, until..end
  • Условия: if.[else..]end, switch..[case..end..][else..]end
  • ΠœΠ΅Ρ‚ΠΎΠ΄ΠΈ: proc <ΠΈΠΌΠ΅>():... ΠΊΡ€Π°ΠΉ, func <ΠΈΠΌΠ΅>():... ΠΊΡ€Π°ΠΉ
  • Π•Ρ‚ΠΈΠΊΠ΅Ρ‚ & goto: <ΠΈΠΌΠ΅>:, скок <ΠΈΠΌΠ΅>
  • Enum изброявания ΠΈ постоянни масиви.

ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈ

ΠŸΡ€Π΅Π²ΠΎΠ΄Π°Ρ‡ΡŠΡ‚ ΠΌΠΎΠΆΠ΅ Π΄Π° Π³ΠΈ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈ Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΡ‡Π½ΠΎ ΠΈΠ»ΠΈ Π°ΠΊΠΎ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΡŠΡ‚ напишС 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.

ΠžΠΏΠΈΡ‚Π°ΠΉΡ‚Π΅.[catch..][finally..]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.

Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅

ΠœΠΎΠΆΠ΅Ρ‚Π΅ сами Π΄Π° си ΠΈΠ³Ρ€Π°Π΅Ρ‚Π΅ с Ρ€Π°Π·Π²ΠΈΡ‚ΠΈΠ΅Ρ‚ΠΎ ΠΈ Π΄Π° слСдватС ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°.

ΠœΡΡΡ‚ΠΎ
Π₯Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅ Π² GitHub

Благодаря Π²ΠΈ, Ρ‡Π΅ ΠΏΡ€ΠΎΡ‡Π΅Ρ‚ΠΎΡ…Ρ‚Π΅ Π΄ΠΎ края, Π°ΠΊΠΎ стС Π³ΠΎ Π½Π°ΠΏΡ€Π°Π²ΠΈΠ»ΠΈ.

Π˜Π·Ρ‚ΠΎΡ‡Π½ΠΈΠΊ: www.habr.com

ДобавянС Π½Π° Π½ΠΎΠ² ΠΊΠΎΠΌΠ΅Π½Ρ‚Π°Ρ€