Π‘ΠΎΠ΄Π΅Ρ€ΠΆΠ°Π½ΠΈΠ΅

тСория, инструмСнты ΠΈ совСты ΠΎΡ‚ ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ°

РассказываСт программист Π’ΠΈΠ»ΡŒΡΠΌ Π’. Π’ΠΎΠ»ΡŒΠ΄


На протяТСнии послСдних ΡˆΠ΅ΡΡ‚ΠΈ мСсяцСв я работал Π½Π°Π΄ созданиСм языка программирования (ЯП) ΠΏΠΎΠ΄ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ΠΌ Pinecone. Я нС рискну Π½Π°Π·Π²Π°Ρ‚ΡŒ Π΅Π³ΠΎ Π·Π°ΠΊΠΎΠ½Ρ‡Π΅Π½Π½Ρ‹ΠΌ, Π½ΠΎΒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π΅Π³ΠΎ ΡƒΠΆΠ΅ ΠΌΠΎΠΆΠ½ΠΎΒ β€” он содСрТит для этого достаточно элСмСнтов, Ρ‚Π°ΠΊΠΈΡ… ΠΊΠ°ΠΊ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅, Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈΒ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠ΅ структуры Π΄Π°Π½Π½Ρ‹Ρ…. Если Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΎΠ·Π½Π°ΠΊΠΎΠΌΠΈΡ‚ΡŒΡΡ с ним ΠΏΠ΅Ρ€Π΅Π΄ ΠΏΡ€ΠΎΡ‡Ρ‚Π΅Π½ΠΈΠ΅ΠΌ, ΠΏΡ€Π΅Π΄Π»Π°Π³Π°ΡŽ ΠΏΠΎΡΠ΅Ρ‚ΠΈΡ‚ΡŒ ΠΎΡ„ΠΈΡ†ΠΈΠ°Π»ΡŒΠ½ΡƒΡŽ страницу ΠΈΒ Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ Π½Π°Β GitHub.

Π’Π²Π΅Π΄Π΅Π½ΠΈΠ΅

Я нС экспСрт. Когда я начал Ρ€Π°Π±ΠΎΡ‚Ρƒ Π½Π°Π΄ этим ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠΌ, я понятия Π½Π΅Β ΠΈΠΌΠ΅Π», Ρ‡Ρ‚ΠΎ дСлаю, и всё Π΅Ρ‰Π΅ нС имСю. Π―Β Π½ΠΈΠΊΠΎΠ³Π΄Π° Ρ†Π΅Π»Π΅Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½Π½ΠΎ Π½Π΅Β ΠΈΠ·ΡƒΡ‡Π°Π» ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΡ‹ создания языка — Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Π» Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»Ρ‹ Π²Β Π‘Π΅Ρ‚ΠΈ ΠΈΒ Π΄Π°ΠΆΠ΅ Π²Β Π½ΠΈΡ… Π½Π΅Β Π½Π°ΡˆΡ‘Π» для сСбя ΠΏΠΎΡ‡Ρ‚ΠΈ Π½ΠΈΡ‡Π΅Π³ΠΎ ΠΏΠΎΠ»Π΅Π·Π½ΠΎΠ³ΠΎ.

Π’Π΅ΠΌ Π½Π΅Β ΠΌΠ΅Π½Π΅Π΅, я написал Π°Π±ΡΠΎΠ»ΡŽΡ‚Π½ΠΎ Π½ΠΎΠ²Ρ‹ΠΉ язык. Π˜Β ΠΎΠ½Β Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚. НавСрноС, я что-Ρ‚ΠΎ дСлаю ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ.

В этой ΡΡ‚Π°Ρ‚ΡŒΠ΅ ΡΒ ΠΏΠΎΡΡ‚Π°Ρ€Π°ΡŽΡΡŒ ΠΏΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ, ΠΊΠ°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ Pinecone (ΠΈΒ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ языки программирования) ΠΏΡ€Π΅Π²Ρ€Π°Ρ‰Π°ΡŽΡ‚ исходный ΠΊΠΎΠ΄ Π²Β Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ ΠΌΠ½ΠΎΠ³ΠΈΠ΅ ΡΡ‡ΠΈΡ‚Π°ΡŽΡ‚ ΠΌΠ°Π³ΠΈΠ΅ΠΉ. Π’Π°ΠΊΠΆΠ΅ ΡΒ ΡƒΠ΄Π΅Π»ΡŽ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ ситуациям, Π²Β ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΌΠ½Π΅ ΠΏΡ€ΠΈΡ…ΠΎΠ΄ΠΈΠ»ΠΎΡΡŒ ΠΈΡΠΊΠ°Ρ‚ΡŒ компромиссы, и поясню, ΠΏΠΎΡ‡Π΅ΠΌΡƒ я принял Ρ‚Π΅Β Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ принял.

ВСкст Ρ‚ΠΎΡ‡Π½ΠΎ Π½Π΅Β ΠΏΡ€Π΅Ρ‚Π΅Π½Π΄ΡƒΠ΅Ρ‚ Π½Π°Β Π·Π²Π°Π½ΠΈΠ΅ ΠΏΠΎΠ»Π½ΠΎΡ†Π΅Π½Π½ΠΎΠ³ΠΎ руководства по созданию языка программирования, но для Π»ΡŽΠ±ΠΎΠ·Π½Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… Π±ΡƒΠ΄Π΅Ρ‚ Ρ…ΠΎΡ€ΠΎΡˆΠ΅ΠΉ ΠΎΡ‚ΠΏΡ€Π°Π²Π½ΠΎΠΉ Ρ‚ΠΎΡ‡ΠΊΠΎΠΉ.

ΠŸΠ΅Ρ€Π²Ρ‹Π΅ шаги

«А с чСго Π²ΠΎΠΎΠ±Ρ‰Π΅ Π½Π°Ρ‡ΠΈΠ½Π°Ρ‚ΡŒ?» — вопрос, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ часто Π·Π°Π΄Π°ΡŽΡ‚, ΡƒΠ·Π½Π°Π², Ρ‡Ρ‚ΠΎ ΡΒ ΠΏΠΈΡˆΡƒ свой язык. В этой части ΠΏΠΎΡΡ‚Π°Ρ€Π°ΡŽΡΡŒ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ Π½Π°Β Π½Π΅Π³ΠΎ ΠΎΡ‚Π²Π΅Ρ‚ΠΈΡ‚ΡŒ.

ΠšΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΡƒΠ΅ΠΌΡ‹ΠΉ ΠΈΠ»ΠΈ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚ΠΈΡ€ΡƒΠ΅ΠΌΡ‹ΠΉ?

ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ‚ΠΎΡ€ Π°Π½Π°Π»ΠΈΠ·ΠΈΡ€ΡƒΠ΅Ρ‚ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ Ρ†Π΅Π»ΠΈΠΊΠΎΠΌ, ΠΏΡ€Π΅Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π΅Ρ‘Β Π²Β ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄ и сохраняСт для ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π³ΠΎ выполнСния. Π˜Π½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€Β ΠΆΠ΅ Ρ€Π°Π·Π±ΠΈΡ€Π°Π΅Ρ‚ и выполняСт ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ построчно Π²Β Ρ€Π΅ΠΆΠΈΠΌΠ΅ Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ.

ВСхничСски любой язык ΠΌΠΎΠΆΠ½ΠΎ ΠΊΠ°ΠΊ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ, Ρ‚Π°ΠΊ ΠΈΒ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ. Но для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ языка ΠΎΠ΄ΠΈΠ½ ΠΈΠ·Β ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΡ‚ большС, Ρ‡Π΅ΠΌ Π΄Ρ€ΡƒΠ³ΠΎΠΉ, ΠΈΒ Π²Ρ‹Π±ΠΎΡ€ ΠΏΠ°Ρ€Π°Π΄ΠΈΠ³ΠΌΡ‹ Π½Π°Β Ρ€Π°Π½Π½ΠΈΡ… этапах опрСдСляСт дальнСйшСС ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅. Π’Β ΠΎΠ±Ρ‰Π΅ΠΌ смыслС интСрпрСтация отличаСтся Π³ΠΈΠ±ΠΊΠΎΡΡ‚ΡŒΡŽ, а компиляция обСспСчиваСт Π²Ρ‹ΡΠΎΠΊΡƒΡŽ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ, но это лишь Π²Π΅Ρ€Ρ…ΡƒΡˆΠΊΠ° ΠΊΡ€Π°ΠΉΠ½Π΅ слоТной Ρ‚Π΅ΠΌΡ‹.

Π―Β Ρ…ΠΎΡ‚Π΅Π» ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ простой ΠΈΒ ΠΏΡ€ΠΈ этом ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ язык, ΠΊΠ°ΠΊΠΈΡ… Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ, поэтому с самого Π½Π°Ρ‡Π°Π»Π° Ρ€Π΅ΡˆΠΈΠ» ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Pinecone ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΡƒΠ΅ΠΌΡ‹ΠΌ. Π’Π΅ΠΌ Π½Π΅Β ΠΌΠ΅Π½Π΅Π΅, ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ ΡƒΒ Pinecone Ρ‚ΠΎΠΆΠ΅ Π΅ΡΡ‚ΡŒΒ β€” ΠΏΠ΅Ρ€Π²ΠΎΠ΅ врСмя запуск Π±Ρ‹Π» Π²ΠΎΠ·ΠΌΠΎΠΆΠ΅Π½ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ с Сго ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ, ΠΏΠΎΠ·ΠΆΠ΅ объясню, ΠΏΠΎΡ‡Π΅ΠΌΡƒ.

ΠŸΡ€ΠΈΠΌ. ΠΏΠ΅Ρ€Π΅Π². ΠšΡΡ‚Π°Ρ‚ΠΈ, Ρƒ нас Π΅ΡΡ‚ΡŒ ΠΊΡ€Π°Ρ‚ΠΊΠΈΠΉ ΠΎΠ±Π·ΠΎΡ€ сСрии статСй ΠΏΠΎ созданию собствСнного ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€Π° β€” это ΠΎΡ‚Π»ΠΈΡ‡Π½ΠΎΠ΅ ΡƒΠΏΡ€Π°ΠΆΠ½Π΅Π½ΠΈΠ΅ для Ρ‚Π΅Ρ…, ΠΊΡ‚ΠΎ ΠΈΠ·ΡƒΡ‡Π°Π΅Ρ‚ Python.

Π’Ρ‹Π±ΠΎΡ€ языка

Π‘Π²ΠΎΠ΅ΠΎΠ±Ρ€Π°Π·Π½Ρ‹ΠΉ ΠΌΠ΅Ρ‚Π°-шаг: язык программирования сам являСтся ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΎΠΉ, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ Π½Π°Π΄ΠΎ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ Π½Π°Β ΠΊΠ°ΠΊΠΎΠΌ-Ρ‚ΠΎ языкС. Π―Β Π²Ρ‹Π±Ρ€Π°Π»Β C++ ΠΈΠ·-Π·Π° ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ, большого Π½Π°Π±ΠΎΡ€Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹Ρ… возмоТностСй, и просто ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ ΠΎΠ½Β ΠΌΠ½Π΅ нравится.

Но в цСлом совСт ΠΌΠΎΠΆΠ½ΠΎ Π΄Π°Ρ‚ΡŒ Ρ‚Π°ΠΊΠΎΠΉ:

  • ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚ΠΈΡ€ΡƒΠ΅ΠΌΡ‹ΠΉΒ Π―ΠŸ ΠΊΡ€Π°ΠΉΠ½Π΅ рСкомСндуСтся ΠΏΠΈΡΠ°Ρ‚ΡŒ Π½Π°Β ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΡƒΠ΅ΠΌΠΎΠΌΒ Π―ΠŸ (C, C++, Swift). Π˜Π½Π°Ρ‡Π΅ ΠΏΠΎΡ‚Π΅Ρ€ΠΈ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ Π±ΡƒΠ΄ΡƒΡ‚ расти ΠΊΠ°ΠΊ снСТный ΠΊΠΎΠΌ, ΠΏΠΎΠΊΠ° ΠΌΠ΅Ρ‚Π°-ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚ΠΈΡ€ΡƒΠ΅Ρ‚ ваш ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€;
  • ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΡƒΠ΅ΠΌΡ‹ΠΉΒ Π―ΠŸ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΈΡΠ°Ρ‚ΡŒ Π½Π°Β ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚ΠΈΡ€ΡƒΠ΅ΠΌΠΎΠΌΒ Π―ΠŸ (Python, JS). Возрастёт врСмя компиляции, но нС врСмя выполнСния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹.

ΠŸΡ€ΠΎΠ΅ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Ρ‹

У структуры языка программирования Π΅ΡΡ‚ΡŒ нСсколько ступСнСй от исходного ΠΊΠΎΠ΄Π° до исполняСмого Ρ„Π°ΠΉΠ»Π°, Π½Π°Β ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΈΠ·Β ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ происходит Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π΄Π°Π½Π½Ρ‹Ρ…, Π°Β Ρ‚Π°ΠΊΠΆΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ для ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄Π° ΠΌΠ΅ΠΆΠ΄Ρƒ этими ступСнями. ΠŸΠΎΠ³ΠΎΠ²ΠΎΡ€ΠΈΠΌ об этом ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅.

ЛСксичСский Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€Β / лСксСр

Π‘Ρ‚Ρ€ΠΎΠΊΠ° исходного ΠΊΠΎΠ΄Π° ΠΏΡ€ΠΎΡ…ΠΎΠ΄ΠΈΡ‚ Ρ‡Π΅Ρ€Π΅Π· лСксСр ΠΈ прСвращаСтся Π² список Ρ‚ΠΎΠΊΠ΅Π½ΠΎΠ².

ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ шаг Π²Β Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π΅ Π―ΠŸΒ β€” это лСксичСский Π°Π½Π°Π»ΠΈΠ·. Говоря ΠΏΠΎ-простому, он прСдставляСт собой Ρ€Π°Π·Π±ΠΈΠ΅Π½ΠΈΠ΅ тСкста Π½Π°Β Ρ‚ΠΎΠΊΠ΅Π½Ρ‹, Ρ‚ΠΎΒ Π΅ΡΡ‚ΡŒ Π΅Π΄ΠΈΠ½ΠΈΡ†Ρ‹ языка: ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅, названия Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ (ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Ρ‹), ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹, числа. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, ΠΏΠΎΠ΄Π°Π² лСксСру Π½Π°Β Π²Ρ…ΠΎΠ΄ строку с исходным ΠΊΠΎΠ΄ΠΎΠΌ, ΠΌΡ‹Β ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠΌ Π½Π°Β Π²Ρ‹Ρ…ΠΎΠ΄Π΅ список всСх Ρ‚ΠΎΠΊΠ΅Π½ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Β Π½Π΅ΠΉ содСрТатся.

ΠžΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΡ к исходному ΠΊΠΎΠ΄Ρƒ ΡƒΠΆΠ΅ Π½Π΅Β Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€ΠΎΠΈΡΡ…ΠΎΠ΄ΠΈΡ‚ΡŒ Π½Π°Β ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… этапах, поэтому лСксСр Π΄ΠΎΠ»ΠΆΠ΅Π½ Π²Ρ‹Π΄Π°Ρ‚ΡŒ всю Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡƒΡŽ для Π½ΠΈΡ… ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ.

Flex

ΠŸΡ€ΠΈ создании языка ΠΏΠ΅Ρ€Π²Ρ‹ΠΌ Π΄Π΅Π»ΠΎΠΌ я написал лСксСр. ПозТС я изучил инструмСнты, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠ³Π»ΠΈΒ Π±Ρ‹ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ лСксичСский Π°Π½Π°Π»ΠΈΠ· ΠΏΡ€ΠΎΡ‰Π΅ ΠΈΒ ΡƒΠΌΠ΅Π½ΡŒΡˆΠΈΡ‚ΡŒ количСство Π²ΠΎΠ·Π½ΠΈΠΊΠ°ΡŽΡ‰ΠΈΡ… Π±Π°Π³ΠΎΠ².

Одним из основных Ρ‚Π°ΠΊΠΈΡ… инструмСнтов являСтся FlexΒ β€” Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€ лСксичСских Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€ΠΎΠ². ΠžΠ½Β ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ Π½Π°Β Π²Ρ…ΠΎΠ΄ Ρ„Π°ΠΉΠ» с описаниСм Π³Ρ€Π°ΠΌΠΌΠ°Ρ‚ΠΈΠΊΠΈ языка, Π°Β ΠΏΠΎΡ‚ΠΎΠΌ создаёт ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ Π½Π°Β C, которая в свою ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ Π°Π½Π°Π»ΠΈΠ·ΠΈΡ€ΡƒΠ΅Ρ‚ строку ΠΈΒ Π²Ρ‹Π΄Π°Ρ‘Ρ‚ Π½ΡƒΠΆΠ½Ρ‹ΠΉ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚.

ΠœΠΎΡ‘ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅

Π―Β Ρ€Π΅ΡˆΠΈΠ» ΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ написанный ΠΌΠ½ΠΎΠΉ Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€. ΠžΡΠΎΠ±Ρ‹Ρ… прСимущСств ΡƒΒ Flex я в итогС Π½Π΅Β ΡƒΠ²ΠΈΠ΄Π΅Π», Π°Β Π΅Π³ΠΎ использованиС Ρ‚ΠΎΠ»ΡŒΠΊΠΎ создало бы Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ зависимости, ΡƒΡΠ»ΠΎΠΆΠ½ΡΡŽΡ‰ΠΈΠ΅ процСсс сборки. ΠšΒ Ρ‚ΠΎΠΌΡƒΒ ΠΆΠ΅, ΠΌΠΎΠΉ Π²Ρ‹Π±ΠΎΡ€ обСспСчиваСт большС гибкости — Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΌΠΎΠΆΠ½ΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ к языку ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ Π±Π΅Π· нСобходимости Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ нСсколько Ρ„Π°ΠΉΠ»ΠΎΠ².

БинтаксичСский Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€Β / парсСр

Бписок Ρ‚ΠΎΠΊΠ΅Π½ΠΎΠ² ΠΏΡ€ΠΎΡ…ΠΎΠ΄ΠΈΡ‚ Ρ‡Π΅Ρ€Π΅Π· парсСр ΠΈ прСвращаСтся Π² Π΄Π΅Ρ€Π΅Π²ΠΎ.

Π‘Π»Π΅Π΄ΡƒΡŽΡ‰Π°Ρ стадия — парсСр. ΠžΠ½Β ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΠ΅Ρ‚ исходный тСкст, Ρ‚ΠΎΒ Π΅ΡΡ‚ΡŒ список Ρ‚ΠΎΠΊΠ΅Π½ΠΎΠ² (с учётом скобок и порядка ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ), в абстрактноС синтаксичСскоС Π΄Π΅Ρ€Π΅Π²ΠΎ, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ позволяСт структурно ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ ΠΏΡ€Π°Π²ΠΈΠ»Π° создаваСмого языка. Π‘Π°ΠΌ по сСбС процСсс ΠΌΠΎΠΆΠ½ΠΎ Π½Π°Π·Π²Π°Ρ‚ΡŒ простым, но с увСличСниСм количСства языковых конструкций он сильно услоТняСтся.

Bison

На этом шагС я такТС Π΄ΡƒΠΌΠ°Π» ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΡΡ‚ΠΎΡ€ΠΎΠ½Π½ΡŽΡŽ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ, рассматривая Bison для Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ синтаксичСского Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€Π°. Он во многом ΠΏΠΎΡ…ΠΎΠΆ Π½Π°Β FlexΒ β€” ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠΉ Ρ„Π°ΠΉΠ» с синтаксичСскими ΠΏΡ€Π°Π²ΠΈΠ»Π°ΠΌΠΈ структурируСтся ΡΒ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ на языкС C. Но я снова отказался от срСдств Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΠ·Π°Ρ†ΠΈΠΈ.

ΠŸΡ€Π΅ΠΈΠΌΡƒΡ‰Π΅ΡΡ‚Π²Π° кастомных ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ

Б лСксСром ΠΌΠΎΡ‘ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΈΒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ свой ΠΊΠΎΠ΄ (Π΄Π»ΠΈΠ½ΠΎΠΉ ΠΎΠΊΠΎΠ»ΠΎ 200 строк) Π±Ρ‹Π»ΠΎ довольно ΠΎΡ‡Π΅Π²ΠΈΠ΄Π½Ρ‹ΠΌ: я люблю Π·Π°Π΄Π°Ρ‡ΠΊΠΈ, а эта ΠΊΒ Ρ‚ΠΎΠΌΡƒΒ ΠΆΠ΅ ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Ρ‚Ρ€ΠΈΠ²ΠΈΠ°Π»ΡŒΠ½Π°Ρ. Б парсСром другая история: сСйчас Π΄Π»ΠΈΠ½Π° ΠΊΠΎΠ΄Π° для Π½Π΅Π³ΠΎΒ β€” 750 строк, и это ΡƒΠΆΠ΅ Ρ‚Ρ€Π΅Ρ‚ΡŒΡ ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠ° (ΠΏΠ΅Ρ€Π²Ρ‹Π΅ Π΄Π²Π΅ Π±Ρ‹Π»ΠΈ просто уТасны).

Π’Π΅ΠΌ Π½Π΅Β ΠΌΠ΅Π½Π΅Π΅, ΡΒ Ρ€Π΅ΡˆΠΈΠ» Π΄Π΅Π»Π°Ρ‚ΡŒ парсСр сам. Π’ΠΎΡ‚ основныС ΠΏΡ€ΠΈΡ‡ΠΈΠ½Ρ‹:

  • минимизация ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ контСкста;
  • ΡƒΠΏΡ€ΠΎΡ‰Π΅Π½ΠΈΠ΅ сборки;
  • ΠΆΠ΅Π»Π°Π½ΠΈΠ΅ ΡΠΏΡ€Π°Π²ΠΈΡ‚ΡŒΡΡ с задачСй ΡΠ°ΠΌΠΎΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΠ½ΠΎ.

В цСлСсообразности Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ мСня ΡƒΠ±Π΅Π΄ΠΈΠ»ΠΎ высказываниС Π£ΠΎΠ»Ρ‚Π΅Ρ€Π° Π‘Ρ€Π°ΠΉΡ‚Π° (создатСля языка D) Π²Β ΠΎΠ΄Π½ΠΎΠΉ ΠΈΠ·Β Π΅Π³ΠΎ статСй:

Π―Β Π±Ρ‹ нС совСтовал ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ лСксичСских и синтаксичСских Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€ΠΎΠ², Π°Β Ρ‚Π°ΠΊΠΆΠ΅ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ Ρ‚Π°ΠΊ Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΡ‹Π΅ «компиляторы компиляторов». НаписаниС лСксСра и парсСра Π½Π΅Β Π·Π°ΠΉΠΌΡ‘Ρ‚ ΠΌΠ½ΠΎΠ³ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ, а использованиС Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€Π° Π½Π°ΠΊΡ€Π΅ΠΏΠΊΠΎ привяТСт вас ΠΊΒ Π½Π΅ΠΌΡƒ в дальнСйшСй Ρ€Π°Π±ΠΎΡ‚Π΅ (Ρ‡Ρ‚ΠΎ ΠΈΠΌΠ΅Π΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΈ ΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ компилятора Π½Π°Β Π½ΠΎΠ²ΡƒΡŽ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡƒ). ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ ΠΎΡ‚Π»ΠΈΡ‡Π°ΡŽΡ‚ΡΡ Π²Ρ‹Π΄Π°Ρ‡Π΅ΠΉ Π½Π΅Β Ρ€Π΅Π»Π΅Π²Π°Π½Ρ‚Π½Ρ‹Ρ… сообщСний ΠΎΠ±Β ΠΎΡˆΠΈΠ±ΠΊΠ°Ρ….

Абстрактный сСмантичСский Π³Ρ€Π°Ρ„

ΠŸΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ ΠΎΡ‚ синтаксичСского Π΄Π΅Ρ€Π΅Π²Π° ΠΊ сСмантичСскому Π³Ρ€Π°Ρ„Ρƒ

В этой части я рСализовал структуру, по своСй сути Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ Π±Π»ΠΈΠ·ΠΊΡƒΡŽ ΠΊΒ Β«ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½ΠΎΠΌΡƒ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»Π΅Π½ΠΈΡŽΒ» (intermediate representation) Π²Β LLVM. БущСствуСт нСбольшая, но ваТная Ρ€Π°Π·Π½ΠΈΡ†Π° ΠΌΠ΅ΠΆΠ΄Ρƒ абстрактным синтаксичСским Π΄Π΅Ρ€Π΅Π²ΠΎΠΌ (АБД) и абстрактным сСмантичСским Π³Ρ€Π°Ρ„ΠΎΠΌ (АБГ).

АБГ vs АБД

Π“Ρ€ΡƒΠ±ΠΎ говоря, сСмантичСский Π³Ρ€Π°Ρ„Β β€” это синтаксичСскоС Π΄Π΅Ρ€Π΅Π²ΠΎ с контСкстом. Π’ΠΎΒ Π΅ΡΡ‚ΡŒ, он содСрТит ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ Π½Π°ΠΏΠΎΠ΄ΠΎΠ±ΠΈΠ΅ ΠΊΠ°ΠΊΠΎΠΉ Ρ‚ΠΈΠΏ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ функция ΠΈΠ»ΠΈ Π²Β ΠΊΠ°ΠΊΠΈΡ… мСстах ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΎΠ΄Π½Π° ΠΈΒ Ρ‚Π°Β ΠΆΠ΅ пСрСмСнная. Из-Π·Π° Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ Π³Ρ€Π°Ρ„Ρƒ Π½ΡƒΠΆΠ½ΠΎ Ρ€Π°ΡΠΏΠΎΠ·Π½Π°Ρ‚ΡŒ ΠΈΒ Π·Π°ΠΏΠΎΠΌΠ½ΠΈΡ‚ΡŒ вСсь этот контСкст, ΠΊΠΎΠ΄Ρƒ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π΅Π³ΠΎ Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠ° ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° Π²Β Π²ΠΈΠ΄Π΅ мноТСства Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… ΠΏΠΎΡΡΠ½ΡΡŽΡ‰ΠΈΡ… Ρ‚Π°Π±Π»ΠΈΡ†.

Запуск

ПослС Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ Π³Ρ€Π°Ρ„ составлСн, запуск ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ становится довольно простой Π·Π°Π΄Π°Ρ‡Π΅ΠΉ. ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ ΡƒΠ·Π΅Π» содСрТит Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, которая ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅ Π½Π°Β Π²Ρ…ΠΎΠ΄, Π΄Π΅Π»Π°Π΅Ρ‚Β Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ Π·Π°ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΎ (Π²ΠΊΠ»ΡŽΡ‡Π°Ρ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹ΠΉ Π²Ρ‹Π·ΠΎΠ² Π²ΡΠΏΠΎΠΌΠΎΠ³Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ), ΠΈΒ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚. Π­Ρ‚ΠΎΒ β€” ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ в дСйствии.

Π’Π°Ρ€ΠΈΠ°Π½Ρ‚Ρ‹ компиляции

Π’Ρ‹, Π½Π°Π²Π΅Ρ€Π½ΠΎΠ΅, спроситС, ΠΎΡ‚ΠΊΡƒΠ΄Π° взялся ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€, Ссли ΡΒ ΠΈΠ·Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΠ» Pinecone ΠΊΠ°ΠΊ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΡƒΠ΅ΠΌΡ‹ΠΉ язык. Π”Π΅Π»ΠΎ Π²Β Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ компиляция Π³ΠΎΡ€Π°Π·Π΄ΠΎ слоТнСС, Ρ‡Π΅ΠΌ интСрпрСтация — я уТС ΡƒΠΏΠΎΠΌΠΈΠ½Π°Π» Ρ€Π°Π½Π΅Π΅, Ρ‡Ρ‚ΠΎ столкнулся с нСкоторыми ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°ΠΌΠΈ на этом шагС.

ΠΠ°ΠΏΠΈΡΠ°Ρ‚ΡŒ свой компилятор

Π‘Π½Π°Ρ‡Π°Π»Π° ΠΌΠ½Π΅ ΠΏΠΎΠ½Ρ€Π°Π²ΠΈΠ»Π°ΡΡŒ эта ΠΌΡ‹ΡΠ»ΡŒΒ β€” я люблю Π΄Π΅Π»Π°Ρ‚ΡŒ Π²Π΅Ρ‰ΠΈ сам, ΠΊΒ Ρ‚ΠΎΠΌΡƒΒ ΠΆΠ΅ Π΄Π°Π²Π½ΠΎ Ρ…ΠΎΡ‚Π΅Π» ΠΈΠ·ΡƒΡ‡ΠΈΡ‚ΡŒ язык ассСмблСра. Π’ΠΎΡ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ с нуля кроссплатформСнный компилятор — слоТнСС, Ρ‡Π΅ΠΌ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄ для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ элСмСнта языка. Я счёл эту идСю Π°Π±ΡΠΎΠ»ΡŽΡ‚Π½ΠΎ Π½Π΅Β ΠΏΡ€Π°ΠΊΡ‚ΠΈΡ‡Π½ΠΎΠΉ и нС стоящСй Π·Π°Ρ‚Ρ€Π°Ρ‡Π΅Π½Π½Ρ‹Ρ… рСсурсов.

LLVM

LLVMΒ β€” это коллСкция инструмСнтов для компиляции, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ Swift, Rust ΠΈΒ Clang. Π―Β Ρ€Π΅ΡˆΠΈΠ» ΠΎΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒΡΡ на этом Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π΅, Π½ΠΎΒ ΠΎΠΏΡΡ‚ΡŒ нС рассчитал слоТности Π·Π°Π΄Π°Ρ‡ΠΈ, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ ΠΏΠ΅Ρ€Π΅Π΄ собой поставил. Для мСня ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΎΠΉ оказалось нС освоСниС ассСмблСра, Π°Β Ρ€Π°Π±ΠΎΡ‚Π° с огромной многосоставной Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΎΠΉ.

Вранспайлинг

МнС всё ТС Π½ΡƒΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ ΠΊΠ°ΠΊΠΎΠ΅-Ρ‚ΠΎ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅, поэтому я написал то, Ρ‡Ρ‚ΠΎ Ρ‚ΠΎΡ‡Π½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ: транспайлСр (transpiler) ΠΈΠ·Β Pinecone Π²Β C++Β β€” ΠΎΠ½Β ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡ†ΠΈΡŽ ΠΏΠΎΒ Ρ‚ΠΈΠΏΡƒ «исходный ΠΊΠΎΠ΄ в исходный ΠΊΠΎΠ΄Β», Π°Β Ρ‚Π°ΠΊΠΆΠ΅ Π΄ΠΎΠ±Π°Π²ΠΈΠ» Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ автоматичСской компиляции Π²Ρ‹Π²ΠΎΠ΄Π° с GCC. Π’Π°ΠΊΠΎΠΉ способ нС являСтся Π½ΠΈΒ ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΡƒΠ΅ΠΌΡ‹ΠΌ, ни кроссплатформСнным, Π½ΠΎΒ Π½Π°Β Π΄Π°Π½Π½Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚ хотя бы Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΠΏΠΎΡ‡Ρ‚ΠΈ для всСх ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ Π½Π°Β Pinecone, это ΡƒΠΆΠ΅ Ρ…ΠΎΡ€ΠΎΡˆΠΎ.

Π”Π°Π»ΡŒΠ½Π΅ΠΉΡˆΠΈΠ΅ ΠΏΠ»Π°Π½Ρ‹

БСйчас ΠΌΠ½Π΅ нС достаёт Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΠΉ ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠΈ, Π½ΠΎΒ Π²Β Π±ΡƒΠ΄ΡƒΡ‰Π΅ΠΌ ΡΒ ΡΠΎΠ±ΠΈΡ€Π°ΡŽΡΡŒ ΠΎΡ‚Β Π½Π°Ρ‡Π°Π»Π° ΠΈΒ Π΄ΠΎΒ ΠΊΠΎΠ½Ρ†Π° Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ компилятор Pinecone ΡΒ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ LLVMΒ β€” инструмСнт ΠΌΠ½Π΅ нравится и руководства ΠΊΒ Π½Π΅ΠΌΡƒ Ρ…ΠΎΡ€ΠΎΡˆΠΈΠ΅. Пока Ρ‡Ρ‚ΠΎ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€Π° Ρ…Π²Π°Ρ‚Π°Π΅Ρ‚ для ΠΏΡ€ΠΈΠΌΠΈΡ‚ΠΈΠ²Π½Ρ‹Ρ… ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ, а транспайлСр справляСтся с болСС слоТными.

Π—Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅

НадСюсь, эта ΡΡ‚Π°Ρ‚ΡŒΡ окаТСтся ΠΊΠΎΠΌΡƒ-Π½ΠΈΠ±ΡƒΠ΄ΡŒ ΠΏΠΎΠ»Π΅Π·Π½ΠΎΠΉ. Π―Β ΠΊΡ€Π°ΠΉΠ½Π΅ Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡƒΡŽ хотя бы ΠΏΠΎΠΏΡ€ΠΎΠ±ΠΎΠ²Π°Ρ‚ΡŒ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ свой язык, нСсмотря Π½Π°Β Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ придётся Ρ€Π°Π·Π±ΠΈΡ€Π°Ρ‚ΡŒΡΡ во мноТСствС Π΄Π΅Ρ‚Π°Π»Π΅ΠΉ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈΒ β€” это ΠΎΠ±ΡƒΡ‡Π°ΡŽΡ‰ΠΈΠΉ, Ρ€Π°Π·Π²ΠΈΠ²Π°ΡŽΡ‰ΠΈΠΉ и просто интСрСсный экспСримСнт.

Π’ΠΎΡ‚ ΠΎΠ±Ρ‰ΠΈΠ΅ совСты от мСня (разумССтся, довольно ΡΡƒΠ±ΡŠΠ΅ΠΊΡ‚ΠΈΠ²Π½Ρ‹Π΅):

  • Ссли у вас Π½Π΅Ρ‚ ΠΏΡ€Π΅Π΄ΠΏΠΎΡ‡Ρ‚Π΅Π½ΠΈΠΉ ΠΈΒ Π²Ρ‹Β ΡΠΎΠΌΠ½Π΅Π²Π°Π΅Ρ‚Π΅ΡΡŒ, ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΡƒΠ΅ΠΌΡ‹ΠΉ ΠΈΠ»ΠΈ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚ΠΈΡ€ΡƒΠ΅ΠΌΡ‹ΠΉ ΠΏΠΈΡΠ°Ρ‚ΡŒ язык, Π²Ρ‹Π±ΠΈΡ€Π°ΠΉΡ‚Π΅ Π²Ρ‚ΠΎΡ€ΠΎΠ΅. Π˜Π½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚ΠΈΡ€ΡƒΠ΅ΠΌΡ‹Π΅ языки ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ ΠΏΡ€ΠΎΡ‰Π΅ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ, ΡΠΎΠ±ΠΈΡ€Π°Ρ‚ΡŒ ΠΈΒ ΡƒΡ‡ΠΈΡ‚ΡŒ;
  • с лСксСрами и парсСрами Π΄Π΅Π»Π°ΠΉΡ‚Π΅, Ρ‡Ρ‚ΠΎ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅. ИспользованиС срСдств Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΠ·Π°Ρ†ΠΈΠΈ зависит ΠΎΡ‚Β Π²Π°ΡˆΠ΅Π³ΠΎ ТСлания, ΠΎΠΏΡ‹Ρ‚Π° ΠΈΒ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠΉ ситуации;
  • Ссли Π²Ρ‹Β Π½Π΅Β Π³ΠΎΡ‚ΠΎΠ²Ρ‹Β / Π½Π΅Β Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ Ρ‚Ρ€Π°Ρ‚ΠΈΡ‚ΡŒ врСмя и силы (ΠΌΠ½ΠΎΠ³ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ и сил) Π½Π°Β ΠΏΡ€ΠΈΠ΄ΡƒΠΌΡ‹Π²Π°Π½ΠΈΠ΅ собствСнной стратСгии Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈΒ Π―ΠŸ, слСдуйтС Ρ†Π΅ΠΏΠΎΡ‡ΠΊΠ΅ дСйствий, описанной в этой ΡΡ‚Π°Ρ‚ΡŒΠ΅. Π―Β Π²Π»ΠΎΠΆΠΈΠ» Π²Β Π½Π΅Ρ‘ ΠΌΠ½ΠΎΠ³ΠΎ усилий ΠΈΒ ΠΎΠ½Π° Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚;
  • ΠΎΠΏΡΡ‚ΡŒΒ ΠΆΠ΅, Ссли Π½Π΅Β Ρ…Π²Π°Ρ‚Π°Π΅Ρ‚ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈΒ / ΠΌΠΎΡ‚ΠΈΠ²Π°Ρ†ΠΈΠΈΒ / ΠΎΠΏΡ‹Ρ‚Π°Β / ТСлания ΠΈΠ»ΠΈ Π΅Ρ‰Ρ‘ Ρ‡Π΅Π³ΠΎ-Π½ΠΈΠ±ΡƒΠ΄ΡŒ для написания ΠΊΠ»Π°ΡΡΠΈΡ‡Π΅ΡΠΊΠΎΠ³ΠΎΒ Π―ΠŸ, ΠΏΠΎΠΏΡ€ΠΎΠ±ΡƒΠΉΡ‚Π΅ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ эзотСричСский, Ρ‚ΠΈΠΏΠ° Brainfuck.
    (Π‘ΠΎΠ²Π΅Ρ‚ΡƒΠ΅ΠΌ ΠΏΠΎΠΌΠ½ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ Ссли язык написан развлСчСния Ρ€Π°Π΄ΠΈ, это Π½Π΅Β Π·Π½Π°Ρ‡ΠΈΡ‚, Ρ‡Ρ‚ΠΎ ΠΏΠΈΡΠ°Ρ‚ΡŒ Π΅Π³ΠΎΒ β€” Ρ‚ΠΎΠΆΠ΅ сплошноС Ρ€Π°Π·Π²Π»Π΅Ρ‡Π΅Π½ΠΈΠ΅. β€”Β ΠΏΡ€ΠΈΠΌ. ΠΏΠ΅Ρ€Π΅Π².)

Π―Β Π΄Π΅Π»Π°Π» довольно ΠΌΠ½ΠΎΠ³ΠΎ ошибок ΠΏΠΎΒ Ρ…ΠΎΠ΄Ρƒ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ, Π½ΠΎΒ Π±ΠΎΠ»ΡŒΡˆΡƒΡŽ Ρ‡Π°ΡΡ‚ΡŒ ΠΊΠΎΠ΄Π°, Π½Π°Β ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ ΠΎΠ½ΠΈ ΠΌΠΎΠ³Π»ΠΈ ΠΏΠΎΠ²Π»ΠΈΡΡ‚ΡŒ, я уТС пСрСписал. Π―Π·Ρ‹ΠΊ сСйчас Π½Π΅ΠΏΠ»ΠΎΡ…ΠΎ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½ΠΈΡ€ΡƒΠ΅Ρ‚ ΠΈΒ Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°Π·Π²ΠΈΠ²Π°Ρ‚ΡŒΡΡ (Π½Π°Β ΠΌΠΎΠΌΠ΅Π½Ρ‚ написания ΡΡ‚Π°Ρ‚ΡŒΠΈ Π΅Π³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ ΡΠΎΠ±Ρ€Π°Ρ‚ΡŒ Π½Π°Β Linux и с пСрСмСнным успСхом Π½Π°Β macOS, Π½ΠΎΒ Π½Π΅Β Π½Π°Β Windows).

ΠžΒ Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ввязался Π²Β ΠΈΡΡ‚ΠΎΡ€ΠΈΡŽ с созданиСм Pinecone, Π½ΠΈΒ Π²Β ΠΊΠΎΠ΅ΠΌ случаС Π½Π΅Β ΠΆΠ°Π»Π΅ΡŽΒ β€” это ΠΎΡ‚Π»ΠΈΡ‡Π½Ρ‹ΠΉ экспСримСнт, ΠΈΒ ΠΎΠ½Β Ρ‚ΠΎΠ»ΡŒΠΊΠΎ начался.

ΠŸΠ΅Ρ€Π΅Π²ΠΎΠ΄ ΡΡ‚Π°Ρ‚ΡŒΠΈ: Β«I wrote a programming language. Here’s how you can, tooΒ»

Π‘ΠΎΠ·Π΄Π°Ρ‚ΡŒ свой язык программирования – Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ Π»ΠΈ Π² 2022 Π³ΠΎΠ΄Ρƒ

Автор Π‘Π΅Ρ€Π³Π΅ΠΉ Π’ΠΈΠΌΠΎΡ„Π΅Π΅Π² На Ρ‡Ρ‚Π΅Π½ΠΈΠ΅ 10 ΠΌΠΈΠ½ ΠŸΡ€ΠΎΡΠΌΠΎΡ‚Ρ€ΠΎΠ² 1ΠΊ. ΠžΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Π½ΠΎ ОбновлСно

Π‘ΠΎΠ·Π΄Π°Ρ‚ΡŒ свой язык программирования – Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ Π»ΠΈ Π² 2022 Π³ΠΎΠ΄Ρƒ. Если вас Π½Π΅ устраиваСт стандартный Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π» Python ΠΈΠ»ΠΈ Java, всСгда ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ свою Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ. Π›ΠΈΠ±ΠΎ ΠΆΠ΅ ΠΏΠΎΡΡ‚ΡƒΠΏΠΈΡ‚ΡŒΒ Π±ΠΎΠ»Π΅Π΅ Ρ€Π°Π΄ΠΈΠΊΠ°Π»ΡŒΠ½ΠΎ β€”Β ΠΌΠΎΠΆΠ½ΠΎ Π·Π°Π΄ΡƒΠΌΠ°Ρ‚ΡŒΡΡ Π½Π°Π΄ созданиСм своСго языка программирования. Π’ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Π²Π°ΠΌ удастся ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Π½Π΅Ρ‡Ρ‚ΠΎ ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½ΠΎΠ΅ ΠΈ ΠΏΡ€ΠΎΡΠ»Π°Π²ΠΈΡ‚ΡŒΡΡ Π½Π° вСсь ΠΌΠΈΡ€. Π”Π΅Π»ΠΎ это нСпростоС, Π½ΠΎ ΠΎΡ‡Π΅Π½ΡŒ ΡƒΠ²Π»Π΅ΠΊΠ°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠ΅.

Π‘ΠΎΠ΄Π΅Ρ€ΠΆΠ°Π½ΠΈΠ΅

  1. ΠŸΠ΅Ρ€Π²Ρ‹Π΅ шаги, ΠΏΠΎΡ‡Π΅ΠΌΡƒ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ свой язык ΠΌΠΎΠΆΠ΅Ρ‚ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ
  2. Π’Ρ‹Π±ΠΎΡ€ языка – Π½Π° Ρ‡Π΅ΠΌ ΠΈ ΠΎ Ρ‡Π΅ΠΌ ΠΏΠΈΡΠ°Ρ‚ΡŒ
  3. ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ‚ΠΎΡ€, ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ ΠΈΠ»ΠΈ транспилятор β€” Ρ‡Ρ‚ΠΎ Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ
  4. ΠžΡΠ½ΠΎΠ²Π½Ρ‹Π΅ ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΠΈ – ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° синтаксиса ΠΈ лСксичСского ядра
  5. ЛСксСр ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ‚ Ρ€Π°Π·ΠΎΠ±Ρ€Π°Ρ‚ΡŒΡΡ с синтаксисом
  6. Из Ρ‡Π΅Π³ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ ΡΠΎΡΡ‚ΠΎΡΡ‚ΡŒ Π½ΠΎΠ²Ρ‹ΠΉ язык программирования
  7. НуТно Π»ΠΈ Π΄Π΅Π»Π°Ρ‚ΡŒ ΡΡ‚Π°Π½Π΄Π°Ρ€Ρ‚Π½ΡƒΡŽ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ для собствСнного языка программирования
  8. Π‘Ρ‚ΠΎΠΈΡ‚ Π»ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ стороннСС ПО, Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€Ρ‹ ΠΈ компиляторы
  9. Π§Ρ‚ΠΎ Π΄Π΅Π»Π°Ρ‚ΡŒ с ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ΠΌ ΠΏΠ°ΠΌΡΡ‚ΡŒΡŽ
  10. Π’Ρ‹Π±ΠΎΡ€ Ρ‚ΠΈΠΏΠΈΠ·Π°Ρ†ΠΈΠΈ β€” динамичСская ΠΈΠ»ΠΈ статичСская
  11. Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ особСнности: самый простой ΠΈ самый слоТный Π² написании язык

ΠŸΠ΅Ρ€Π²Ρ‹Π΅ шаги, ΠΏΠΎΡ‡Π΅ΠΌΡƒ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ свой язык ΠΌΠΎΠΆΠ΅Ρ‚ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ

Π§Ρ‚ΠΎΠ±Ρ‹ просто ΠΎΠ±ΡŠΡΡΠ½ΠΈΡ‚ΡŒ ΡΡƒΡ‚ΡŒ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ написания языка программирования, возьмСм Π² качСствС ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° Β«ΠΌΠΎΠ»ΠΎΠ΄Π΅ΠΆΠ½Ρ‹ΠΉ слСнг». Как ΠΎΠ½ появился?

Π’ качСствС ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°. Π‘ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ Ρ‡ΠΈΡ‚Π°Ρ‚Π΅Π»Π΅ΠΉ ΠΏΠΎΠΉΠΌΡƒΡ‚ Ρ„Ρ€Π°Π·Ρƒ Β«ΠΏΠΎΠΉΠ΄Π΅ΠΌ Ρ‡ΠΈΠ»ΠΈΡ‚ΡŒΒ», хотя Π½ΠΈ Π² русском, Π½ΠΈ Π² английском Π΅Π΅ Π½Π΅ сущСствуСт. Π—Π½Π°Ρ‡ΠΈΡ‚, это Π½ΠΎΠ²ΠΎΠ΅ слово. ΠžΠΊΡƒΠ½Π΅ΠΌΡΡ Π² Π΄Π΅Π±Ρ€ΠΈ лингвистики. Π—Π΄Π΅ΡΡŒ выяснится, Ρ‡Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ английскоС слово Β«ChillΒ», Ρ‡Ρ‚ΠΎ Π² прямом ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Π΅ ΠΎΠ½ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ Β«ΠΏΡ€ΠΎΡ…Π»Π°Π΄Π°Β». Англоязычный Ρ‡ΠΈΡ‚Π°Ρ‚Π΅Π»ΡŒ Π·Π½Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Ρƒ этого слова Π΅ΡΡ‚ΡŒ ΠΈ Π΄Ρ€ΡƒΠ³ΠΎΠΉ смысл β€” Π±Π΅Π·Π·Π°Π±ΠΎΡ‚Π½Ρ‹ΠΉ расслаблСнный ΠΎΡ‚Π΄Ρ‹Ρ… Π² приятной обстановкС. А Π² русском появилось Β«Ρ‡ΠΈΠ»ΠΈΡ‚ΡŒΒ», Π΅Π³ΠΎ смысл Ρ‚ΠΎΠΆΠ΅ понятСн ΠΏΠΎΡ‡Ρ‚ΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠΌΡƒ. Π’Π°ΠΊΠΈΡ… словСчСк Π½Π΅ΠΌΠ°Π»ΠΎ, ΠΈ появился Π½ΠΎΠ²Ρ‹ΠΉ язык.

По этому-ΠΆΠ΅ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΡƒ ΡΠΎΠ·Π΄Π°ΡŽΡ‚ΡΡ ΠΈ языки программирования. Волько Π² качСствС основы, ΠΈΠ·Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎ ΠΎΠ±ΡŠΡΡΠ½ΡΡŽΡ‰Π΅ΠΉ смысл Ρ‚ΠΎΠ³ΠΎ ΠΈΠ»ΠΈ Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ слова (ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹), выступаСт Π΄Ρ€ΡƒΠ³ΠΎΠΉ язык программирования. А собСсСдником, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌΡƒ адрСсуСтся это посланиС, являСтся ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€, с Π΅Π³ΠΎ Π΄Π²ΠΎΠΈΡ‡Π½ΠΎΠΉ Π»ΠΎΠ³ΠΈΠΊΠΎΠΉ.

ΠŸΠ°Ρ€Π°Π΄ΠΎΠΊΡ Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΏΠ΅Ρ€Π΅Π΄ Ρ‚Π΅ΠΌ,Β ΠΊΠ°ΠΊ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ свой язык программирования, придСтся ΠΎΡ‡Π΅Π½ΡŒ Ρ…ΠΎΡ€ΠΎΡˆΠΎ Π²Ρ‹ΡƒΡ‡ΠΈΡ‚ΡŒ любой Π΄Ρ€ΡƒΠ³ΠΎΠΉ язык. Он Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹ΡΡ‚ΡƒΠΏΠ°Ρ‚ΡŒ Π² качСствС Β«ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Ρ‡ΠΈΠΊΠ°Β» ΠΌΠ΅ΠΆΠ΄Ρƒ Π½ΠΎΠ²Ρ‹ΠΌ ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚ΠΎΠΌ ΠΈ машиной.

Π’Ρ‹Π±ΠΎΡ€ языка – Π½Π° Ρ‡Π΅ΠΌ ΠΈ ΠΎ Ρ‡Π΅ΠΌ ΠΏΠΈΡΠ°Ρ‚ΡŒ

Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ свой язык программирования Π½Π° Π±Π°Π·Π΅ практичСски любого языка. НавСрноС, ΠΏΡ€ΠΎΡ‰Π΅ всСго Π΄Π΅Π»Π°Ρ‚ΡŒ это Π·Π½Π°Ρ‚ΠΎΠΊΠ°ΠΌ высокоуровнСвых Python, Java ΠΈΠ»ΠΈ Π‘++. Однако ΠΌΠΎΠ³ΡƒΡ‚ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΡƒΡ‚ΡŒ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ с быстродСйствиСм, особСнно Π²ΠΎ врСмя компиляции. Машина Π΄ΠΎΠ»ΠΆΠ½Π° Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Π½ΠΎΠ²Ρ‹Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ для этого инструмСнты исходника. Если вопрос ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹Ρ… рСсурсов стоит ΠΎΡ‡Π΅Π½ΡŒ остро, Ρ‚ΠΎ придСтся ΠΈΠ·ΡƒΡ‡Π°Ρ‚ΡŒ Π½ΠΈΠ·ΠΊΠΎΡƒΡ€ΠΎΠ²Π½Π΅Π²Ρ‹ΠΉ ассСмблСр.

АссСмблСр Ρ…ΠΎΡ€ΠΎΡˆ Π² ΠΏΠ»Π°Π½Π΅ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ, Π½ΠΎ ΠΏΠΈΡΠ°Ρ‚ΡŒ Π½Π° Π½Π΅ΠΌ ΠΊΠΎΠ΄ понравится Π½Π΅ ΠΊΠ°ΠΆΠ΄ΠΎΠΌΡƒ

Π’ΠΏΡ€ΠΎΡ‡Π΅ΠΌ, Π½Π΅ стоит сильно ΠΏΠ΅Ρ€Π΅ΠΆΠΈΠ²Π°Ρ‚ΡŒ ΠΏΠΎ этому ΠΏΠΎΠ²ΠΎΠ΄Ρƒ, Ρ€Π°Π·Π½ΠΈΡ†Π° Π±ΡƒΠ΄Π΅Ρ‚ Π½Π΅Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ. Если Π²Ρ‹ Π½Π΅ ΡΡ‚Ρ€Π΅ΠΌΠΈΡ‚Π΅ΡΡŒ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ высоконагруТСнныС систСмы. Π’Π°ΠΊ, ядро Windows NT, основа Windows 2000/XP/Vista/7/8, созданы Π½Π° Π‘ΠΈ ΠΈ Π‘++. Π“ΠΎΡ€Π°Π·Π΄ΠΎ Π²Π°ΠΆΠ½Π΅Π΅ ΠΏΠΎΠ½ΠΈΠΌΠ°Ρ‚ΡŒ Π»ΠΎΠ³ΠΈΠΊΡƒ самого процСсса. Π’Π°ΠΆΠ½Π΅Π΅ всСго ΡΡ„ΠΎΡ€ΠΌΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΡΡ‚Ρ€Π°Ρ‚Π΅Π³ΠΈΡŽ, ΠΎΠ±Ρ‰Π΅Π΅ Π²ΠΈΠ΄Π΅Π½ΠΈΠ΅ Π±ΡƒΠ΄ΡƒΡ‰Π΅Π³ΠΎ ЯП. Π—Π΄Π΅ΡΡŒ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΎΡ‚Π²Π΅Ρ‚ΠΈΡ‚ΡŒ Π½Π° ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ вопросы:

  • какая ΠΏΠ°Ρ€Π°Π΄ΠΈΠ³ΠΌΠ° исполнСния Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ, импСративная ΠΈΠ»ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Π°Ρ;
  • Π²ΠΈΠ΄ Ρ‚ΠΈΠΏΠΈΠ·Π°Ρ†ΠΈΠΈ β€” динамичСская ΠΈΠ»ΠΈ статичСская;
  • для ΠΊΠ°ΠΊΠΈΡ… ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ трСбуСтся Π½ΠΎΠ²Ρ‹ΠΉ язык;
  • Ρ‡Ρ‚ΠΎ Π²ΠΊΠ»Π°Π΄Ρ‹Π²Π°Ρ‚ΡŒ Π² ΡΡ‚Π°Π½Π΄Π°Ρ€Ρ‚Π½ΡƒΡŽ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ;
  • Ρ‡Ρ‚ΠΎ Π²Π°ΠΆΠ½Π΅Π΅, Ρ‡ΠΈΡ‚Π°Π΅ΠΌΠΎΡΡ‚ΡŒ ΠΈΠ»ΠΈ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ;
  • это Π°Π±ΡΠΎΠ»ΡŽΡ‚Π½ΠΎ новая ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° со своСй Π»ΠΎΠ³ΠΈΠΊΠΎΠΉ ΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Π°ΠΌΠΈΒ ΠΈΠ»ΠΈ ΠΆΠ΅ подразумСваСтся Π»Π΅Π³ΠΊΠΎΠ΅ освоСниС;
  • возмоТности ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠ΅ΠΊ макросов ΠΈ шаблонов.

Π—Π°Ρ€Π°Π½Π΅Π΅ ΠΏΡ€Π΅Π΄ΡƒΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ всС Π±ΡƒΠ΄ΡƒΡ‰ΠΈΠ΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, поэтому ΠΏΠΎ ΠΌΠ΅Ρ€Π΅ развития Π±ΡƒΠ΄ΡƒΡ‚ ΠΏΠΎΡΠ²Π»ΡΡ‚ΡŒΡΡ Π½ΠΎΠ²Ρ‹Π΅ слоТности ΠΈ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΡ‹ ΠΈΡ… Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ, Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΡƒΡ‚ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚ΠΈΡ€ΠΎΠ²ΠΊΠΈ. Но ΠΈΠ·Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎ Π½ΡƒΠΆΠ½ΠΎ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ ΠΎΡΠ½ΠΎΠ²Π½ΡƒΡŽ ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΡŽ. Π˜Π½Π°Ρ‡Π΅Β Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π·Π°ΠΉΠ΄Π΅Ρ‚ Π² Ρ‚ΡƒΠΏΠΈΠΊ.

ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ‚ΠΎΡ€, ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ ΠΈΠ»ΠΈ транспилятор β€” Ρ‡Ρ‚ΠΎ Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ

ΠŸΠ΅Ρ€Π΅Π΄ Ρ‚Π΅ΠΌ, ΠΊΠ°ΠΊ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ свой собствСнный язык программирования, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒΡΡ со стратСгиСй Π΅Π³ΠΎ ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Π° Π² ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄. Π§Ρ‚ΠΎΠ±Ρ‹ написанныС Π² срСдС ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ ΠΌΠΎΠ³Π»ΠΈ ΠΏΠΎΠ½ΠΈΠΌΠ°Ρ‚ΡŒΡΡ процСссором, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Ρ‚Ρ€Π°Π½ΡΡ„ΠΎΡ€ΠΌΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΡ… Π² стандартный Π½Π°Π±ΠΎΡ€ Π½ΡƒΠ»Π΅ΠΉ ΠΈ Π΅Π΄ΠΈΠ½ΠΈΡ‡Π΅ΠΊ. Π—Π° эту Ρ€Π°Π±ΠΎΡ‚Ρƒ ΠΎΡ‚Π²Π΅Ρ‡Π°Π΅Ρ‚ компилятор. Π›ΠΎΠ³ΠΈΠΊΠ° здСсь ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π½ΠΎ такая:

  • Π˜Π·Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎ создаСтся парсСр β€” Ρ€Π°Π·Π΄Π΅Π», ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±Π΅Ρ€Π΅Ρ‚ тСкст ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΈ распознаСт выраТСния, классы инструкции. Он Ρ„ΠΎΡ€ΠΌΠΈΡ€ΡƒΠ΅Ρ‚ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΠ΅ структуры Π΄Π°Π½Π½Ρ‹Ρ… для ΠΈΡ… прСдставлСния. Π’ дальнСйшСм Ρ€Π°Π±ΠΎΡ‚Π° вСдСтся ΠΈΠΌΠ΅Π½Π½ΠΎ с Π½ΠΈΠΌΠΈ.
  • Π—Π°Ρ‡Π΅ΠΌ Ρ€Π°Π·Ρ€Π΅ΡˆΠ°ΡŽΡ‚ΡΡ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Π΅ символы и провСряСтся само Π΄Π΅Ρ€Π΅Π²ΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. Π­Ρ‚ΠΎ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ ошибок. НапримСр, ΠΎΠ½ΠΈ Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎ ΠΏΡ€ΠΎΠΈΠ·ΠΎΠΉΠ΄ΡƒΡ‚ Π²ΠΎ врСмя ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠΈ суммирования логичСского ΠΈ Ρ†Π΅Π»ΠΎΠ³ΠΎ числа.
  • ПослС этого проводится ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π² Π±Π°ΠΉΡ‚ ΠΊΠΎΠ΄ ΠΈΠ»ΠΈ ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄ для ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠΉ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠΉ ΠΌΠ°ΡˆΠΈΠ½Ρ‹. Π’ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Ρ… случаях трСбуСтся объСдинСниС ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½ΠΎΠ³ΠΎ машинного ΠΊΠΎΠ΄Π° с ΠΊΠΎΠ΄ΠΎΠΌ статичСских Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ, это Π·Π°ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ этап Ρ€Π°Π±ΠΎΡ‚Ρ‹ компилятора.

Π’ΠΎΠ·ΠΌΠΎΠΆΠ΅Π½ ΠΈ Π΄Ρ€ΡƒΠ³ΠΎΠΉ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ, ΠΏΡ€ΠΈ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ происходит ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄ Π½Π° ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ ΠΊΠ°ΠΊΠΎΠ³ΠΎ-Ρ‚ΠΎ языка, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Python ΠΈΠ»ΠΈ Java, ΠΈ дальнСйшая ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° вСдСтся ΡƒΠΆΠ΅ ΠΈΡ… компилятором. Π­Ρ‚ΠΎΡ‚ процСсс называСтся транспиляция.

Π Π°Π·Π½ΠΈΡ†Π° ΠΌΠ΅ΠΆΠ΄Ρƒ компиляциСй ΠΈ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ†ΠΈΠ΅ΠΉ Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² Ρ‚ΠΎΠΌ, Π² ΠΏΠ΅Ρ€Π²ΠΎΠΌ случаС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Ρ†Π΅Π»ΠΈΠΊΠΎΠΌ трансформируСтся Π² ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄, Π° Π·Π°Ρ‚Π΅ΠΌ отправляСтся Π½Π° исполнСниС. Π’ случаС ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ†ΠΈΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ вСдСтся построчно, Ρ‡Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠ½ΠΈΠ·ΠΈΡ‚ΡŒ быстродСйствиС.

ΠŸΡ€ΠΎΡΡ‚Π°Ρ схСма позволяСт ΠΏΠΎΠ½ΡΡ‚ΡŒ Ρ€Π°Π·Π½ΠΈΡ†Ρƒ ΠΌΠ΅ΠΆΠ΄Ρƒ компилятором ΠΈ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ΠΎΠΌ

Π’Ρ‹Π±Ρ€Π°Ρ‚ΡŒ ΠΌΠ΅ΠΆΠ΄Ρƒ компиляциСй ΠΈ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ†ΠΈΠ΅ΠΉ ΠΌΠΎΠΆΠ½ΠΎ, просто ΠΎΠΏΠΈΡ€Π°ΡΡΡŒ Π½Π° свои прСдпочтСния. Π’Π°ΠΊ, Pascal, C, C++, Swift ΡΠ²Π»ΡΡŽΡ‚ΡΡ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΡƒΠ΅ΠΌΡ‹ΠΌΠΈ языками, Π° Π½Π΅ ΠΌΠ΅Π½Π΅Π΅ популярныС Java, JavaScript, Python, Ruby – ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚ΠΈΡ€ΡƒΠ΅ΠΌΡ‹ΠΌΠΈ.

ΠžΡΠ½ΠΎΠ²Π½Ρ‹Π΅ ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΠΈ – ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° синтаксиса ΠΈ лСксичСского ядра

Π Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ синтаксиса ΠΎΡ‡Π΅Π½ΡŒ сильно влияСт Π½Π° ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎΠΉ Π²ΠΈΠ΄ ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚Π°. Π’ Python для Π²Ρ‹Π²ΠΎΠ΄Π° Π½Π° экран Hello world потрСбуСтся Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ print(β€˜Hello, world!’). Π’ Java это ΡƒΠΆΠ΅ смотрится ΠΏΠΎ-Π΄Ρ€ΡƒΠ³ΠΎΠΌΡƒ.

Hello, world Π½Π° языкС Java Π³ΠΎΡ€Π°Π·Π΄ΠΎ Π΄Π»ΠΈΠ½Π½Π΅Π΅, Ρ‡Π΅ΠΌ Π½Π° Python

Π’ Π‘++ это ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° выглядит ΡΠΎΠ²Π΅Ρ€ΡˆΠ΅Π½Π½ΠΎ ΠΈΠ½Π°Ρ‡Π΅, ΠΈ Π½Π΅ ΡΠΊΠ°Π·Π°Ρ‚ΡŒ Ρ‡Ρ‚ΠΎ Π½Π°ΠΌΠ½ΠΎΠ³ΠΎ понятнСС для нСспСциалиста.

Β 

Π‘++ ΠΈΠΌΠ΅Π΅Ρ‚ свои прСимущСства, Π½ΠΎ ΠΊ Π½ΠΈΠΌ Π½Π΅ относится простота понимания ΠΊΠΎΠ΄Π°

Π’ΠΏΠΎΠ»Π½Π΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Ρ‡Ρ‚ΠΎ ваш язык программирования Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΡΠΏΠΎΠ»Π½ΡΡ‚ΡŒ Π½Π΅Ρ‡Ρ‚ΠΎ Π²Ρ€ΠΎΠ΄Π΅ β€˜Hello, world!’ ΠΏΠΎ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΡƒ «всС Ρ‡Ρ‚ΠΎ Π² ΠΊΠ°Π²Ρ‹Ρ‡ΠΊΠ°Ρ…, выводится Π½Π° экран. Никто Π½Π΅ Π·Π°ΠΏΡ€Π΅Ρ‚ΠΈΡ‚ Π·Π°Π½ΠΈΠΌΠ°Ρ‚ΡŒΡΡ творчСством.

Достаточно ΠΌΠ½ΠΎΠ³ΠΎ эзотСричСских языков программирования, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ Π³ΠΎΠ»ΠΎΠ²ΠΎΠ»ΠΎΠΌΠ½ΡƒΡŽ Π»ΠΎΠ³ΠΈΠΊΡƒ для Ρ€Π°Π±ΠΎΡ‚Ρ‹. ΠŸΡ€ΠΈ написании своСго языка программист сам опрСдСляСт, ΠΊΠ°ΠΊΠΈΠ΅ лСксичСскиС ΠΈ синтаксичСскиС ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΡ‹ Π±ΡƒΠ΄ΡƒΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½Ρ‹ Π² ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π΅.

ЛСксСр ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ‚ Ρ€Π°Π·ΠΎΠ±Ρ€Π°Ρ‚ΡŒΡΡ с синтаксисом

ΠšΠ°ΠΆΠ΅Ρ‚ΡΡ, Ρ‡Ρ‚ΠΎ Π² любом случаС придСтся Ρ€Π°Π·Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ свой собствСнный синтаксис. ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΠ° Π½Π° самом Π΄Π΅Π»Π΅ Π½Π΅ такая ΡƒΠΆ ΠΈ слоТная. О Ρ‚ΠΎΠΌ, ΠΊΠ°ΠΊ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ свой язык программирования, Π·Π°Π΄ΡƒΠΌΡ‹Π²Π°ΡŽΡ‚ΡΡ ΠΌΠ½ΠΎΠ³ΠΈΠ΅. Для Π½ΠΈΡ… Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Π½Ρ‹ лСксСры. Π­Ρ‚ΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Ρ€Π°ΡΠΏΠΎΠ·Π½Π°ΡŽΡ‚ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Ρ‹ тСкста ΠΈ Ρ€Π°Π·Π±ΠΈΠ²Π°ΡŽΡ‚ Π΅Π³ΠΎ Π½Π° составныС элСмСнты Ρ‚ΠΈΠΏΠ° строка, число, ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€. Если Π² нашСй ΠΊΠΎΠΌΠ°Π½Π΄Π΅ встрСтится Π½Π΅ΠΊΠΈΠΉ символ, лСксСр опрСдСляСт Π΅Π³ΠΎ ΠΊΠ°ΠΊ ΠΊΠ°ΠΊΠΎΠΉ-Π»ΠΈΠ±ΠΎ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€.

ЀактичСски ΠΊΠ°ΠΆΠ΄ΠΎΠΌΡƒ числу ΠΈΠ»ΠΈ символу лСксСр Π΄Π°Π΅Ρ‚ своС ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅, лСксСмы. Волько послС этого Π² Π΄Π΅Π»ΠΎ вступаСт парсСр ΠΈ распознаСт, ΠΊΠ°ΠΊΠΈΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ Π·Π°ΠΏΡƒΡ‰Π΅Π½Ρ‹, ΠΊΠ°ΠΊΠΈΠ΅ Π²Π»ΠΎΠΆΠ΅Π½Ρ‹, Π΅ΡΡ‚ΡŒ Π»ΠΈ условныС ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ ΠΈΠ»ΠΈ Ρ†ΠΈΠΊΠ»Ρ‹ ΠΈ Ρ‚Π°ΠΊ Π΄Π°Π»Π΅Π΅.

Из Ρ‡Π΅Π³ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ ΡΠΎΡΡ‚ΠΎΡΡ‚ΡŒ Π½ΠΎΠ²Ρ‹ΠΉ язык программирования

Π•Ρ‰Π΅ Π½Π° стадии Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈΒ ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΠΈΒ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΒ Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒΒ ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ Π½ΠΎΠ²ΠΎΠ³ΠΎ языка. Они ΠΊΠ°ΡΠ°ΡŽΡ‚ΡΡ Π²Ρ‹Π±ΠΎΡ€Π° Ρ‚ΠΈΠΏΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…, ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΈΠ²Π½ΠΎΠΉ ΠΏΠ°ΠΌΡΡ‚ΡŒΡŽ, ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΈΠΊΠ΅ примСнСния стороннСго ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ обСспСчСния ΠΈ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠΎΠ² Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°ΠΌΠΈ.

ВсС Π½Π΅ Ρ‚Π°ΠΊ слоТно, ΠΊΠ°ΠΊ каТСтся Π½Π° ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ взгляд

ВСорСтичСски Π²Ρ‹Π±ΠΎΡ€ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠΌΠ΅Π½ΡΡ‚ΡŒ Π² Π±ΡƒΠ΄ΡƒΡ‰Π΅ΠΌ, Π½ΠΎ это связано с лишними дСйствиями. К Ρ‚ΠΎΠΌΡƒ ΠΆΠ΅ измСнСния Π² любом ΠΈΠ· этих ΡΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‰ΠΈΡ… скаТутся Π½Π° ΠΎΠ±Ρ‰Π΅ΠΉ работоспособности ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎΠ³ΠΎ ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚Π°.

НуТно Π»ΠΈ Π΄Π΅Π»Π°Ρ‚ΡŒ ΡΡ‚Π°Π½Π΄Π°Ρ€Ρ‚Π½ΡƒΡŽ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ для собствСнного языка программирования

Вопрос Π½Π΅ ΠΏΡ€Π°Π·Π΄Π½Ρ‹ΠΉ. Π­Ρ‚ΠΎ совсСм Π½Π΅ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ условиС, ΠΊΠΎΠ΄ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ ΠΈ Π±Π΅Π· встроСнной Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ. Но Π² этом случаС запуск элСмСнтарных ΠΊΠΎΠΌΠ°Π½Π΄ прСвратится Π² настоящий квСст. Π•ΡΡ‚ΡŒ Π°Π»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Π°, ΠΏΠΎΠ΄ ΠΊΠ°ΠΆΠ΄ΡƒΡŽ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΡŽ ΠΏΡ€ΠΎΠΏΠΈΡΡ‹Π²Π°Ρ‚ΡŒ свою Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ.

ИмСнно Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ Π΄Π΅Π»Π°ΡŽΡ‚ языки программирования доступными для примСнСния

Но Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€Π΅Π΄ΡƒΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ всС Π½ΡŽΠ°Π½ΡΡ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ появятся Π² Π±ΡƒΠ΄ΡƒΡ‰Π΅ΠΌ. ВнСсти обновлСния Π² Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€ΠΎΡ‰Π΅, Ρ‡Π΅ΠΌ ΠΏΠ΅Ρ€Π΅ΠΏΠΈΡΡ‹Π²Π°Ρ‚ΡŒ сам язык Π² случаС нСобходимости. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ стандартная Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° с Π½Π°Π±ΠΎΡ€ΠΎΠΌ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ ΠΈ классов способна Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΎΠ±Π»Π΅Π³Ρ‡ΠΈΡ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Ρƒ.

Π•ΡΡ‚ΡŒ Π΅Ρ‰Π΅ ΠΎΠ΄Π½Π° Π°Π»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Π°. МоТно Π·Π°ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ язык Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Π½Π° ΡƒΠΆΠ΅ извСстной ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ΅, ΠΈ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π΅Π³ΠΎ ΡΡ‚Π°Π½Π΄Π°Ρ€Ρ‚Π½ΡƒΡŽ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ. Π­Ρ‚ΠΎ вСсьма популярный шаг, благодаря ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌΡƒ Π½ΠΎΠ²Ρ‹ΠΉ язык ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ стимул для развития. Π’ этом ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠ΅ кроСтся ΠΎΠ΄ΠΈΠ½ ΠΈΠ· сСкрСтов популярности Java. ВсС языки, Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‰ΠΈΠ΅ Π½Π° Π±Π°Π·Π΅ Java Virtual Machine, ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡŽΡ‚ Π΅Ρ‘ ΡΡ‚Π°Π½Π΄Π°Ρ€Ρ‚Π½ΡƒΡŽ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ.

Π‘Ρ‚ΠΎΠΈΡ‚ Π»ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ стороннСС ПО, Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€Ρ‹ ΠΈ компиляторы

БущСствуСт ряд ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΎΠ±Π»Π΅Π³Ρ‡Π°ΡŽΡ‚ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ собствСнного языка программирования, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, это Flex, Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€ лСксичСских Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€ΠΎΠ². Π’Π°ΠΊΠΆΠ΅ Π΅ΡΡ‚ΡŒ Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎ поддСрТиваСмая Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° Bison, которая структурируСт ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠΉ Ρ„Π°ΠΉΠ» синтаксичСскими ΠΏΡ€Π°Π²ΠΈΠ»Π°ΠΌΠΈ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ написанной Π½Π° языкС Π‘ΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹.

Π‘Π»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΈΠ΅ костыли Π΄Π΅Π»Π°ΡŽΡ‚ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ° зависимым ΠΎΡ‚ Π²Π½Π΅ΡˆΠ½ΠΈΡ… Ρ€Π΅ΡˆΠ΅Π½ΠΈΠΉ ΠΈ затянут процСсс сборки ΠΈΠ·-Π·Π° ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ совмСстимости. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ прСдсказуСмый Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ.

Π“Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€ синтаксичСского Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€Π° ΠΎΠ±Ρ‰Π΅Π³ΠΎ назначСния сам ΠΏΠΎ сСбС нСпростой ΠΏΡ€ΠΎΠ΅ΠΊΡ‚

На эту ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ ΠΌΠΎΠΆΠ½ΠΎ Π½Π΅ ΠΎΠ±Ρ€Π°Ρ‰Π°Ρ‚ΡŒ внимания, Ссли Π²Ρ‹ просто Ρ€Π΅ΡˆΠΈΠ»ΠΈ ΠΈΠ·ΡƒΡ‡ΠΈΡ‚ΡŒ Π½Π° ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅ ΠΊΠ°ΠΊ ΡΠΎΠ·Π΄Π°ΡŽΡ‚ΡΡ собствСнныС языки программирования. Если ΠΆΠ΅ ΠΈΠΌΠ΅ΡŽΡ‚ΡΡ ΠΏΠ»Π°Π½Ρ‹ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Π±ΠΎΠ»Π΅Π΅-ΠΌΠ΅Π½Π΅Π΅ популярный ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚, Ρ‚ΠΎ Π»ΡƒΡ‡ΡˆΠ΅ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€ ΡΠ°ΠΌΠΎΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΠ½ΠΎ.

Π§Ρ‚ΠΎ Π΄Π΅Π»Π°Ρ‚ΡŒ с ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ΠΌ ΠΏΠ°ΠΌΡΡ‚ΡŒΡŽ

БущСствуСт нСсколько ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠΎΠ² Ρ€Π°Π±ΠΎΡ‚Ρ‹ с ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π½Ρ‹ΠΌΠΈ рСсурсами. Если для вас Π½Π΅ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠΈΠ°Π»ΡŒΠ½Π° ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ, Ρ‚Π°ΠΌ ΠΌΠΎΠΆΠ½ΠΎ просто Π½Π΅ ΠΎΠ±Ρ€Π°Ρ‰Π°Ρ‚ΡŒ Π½Π° это Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅. Достаточно Π²Ρ‹Π΄Π΅Π»ΠΈΡ‚ΡŒ ΠΊΠ°ΠΊΠΎΠΉ-Π½ΠΈΠ±ΡƒΠ΄ΡŒ объСм ячССк, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ опСрационная систСма сама очистит послС закрытия прилоТСния.

МоТно ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚ΡŒ статичСскоС распрСдСлСниС памяти, Π½ΠΎ Π² этом случаС Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΡƒΡ‚ΡŒ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ с ΡΠΎΠ²ΠΌΠ΅ΡΡ‚ΠΈΠΌΠΎΡΡ‚ΡŒΡŽ ΠΏΡ€ΠΈ рСкурсивном Π²Ρ‹Π·ΠΎΠ²Π΅ ΠΏΠΎΠ΄ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ. Π§ΡƒΡ‚ΡŒ большС рСсурсов ΠΏΠΎΡ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏ «сборка мусора». Π’ этом случаС ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€ Ρ…Ρ€Π°Π½ΠΈΡ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‚Ρƒ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ, которая трСбуСтся Π² Π΄Π°Π½Π½Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚. Когда Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒ Π² Π½Π΅ΠΉ ΠΏΡ€ΠΎΡ…ΠΎΠ΄ΠΈΡ‚, ΠΈΠ΄Π΅Ρ‚ ΠΊΠΎΠΌΠ°Π½Π΄Π° Π½Π° ОсвобоТдСниС памяти. По Ρ‚Π°ΠΊΠΎΠΌΡƒ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΡƒ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ Lisp ΠΈ JavaScript.

Π’Ρ‹Π±ΠΎΡ€ Ρ‚ΠΈΠΏΠΈΠ·Π°Ρ†ΠΈΠΈ β€” динамичСская ΠΈΠ»ΠΈ статичСская

Π—Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½Π°Ρ Ρ‡Π°ΡΡ‚ΡŒ соврСмСнных языков программирования Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ с динамичСской Ρ‚ΠΈΠΏΠΈΠ·Π°Ρ†ΠΈΠ΅ΠΉ. Π’ΠΎ Π΅ΡΡ‚ΡŒ связываСтся с Ρ‚ΠΈΠΏΠΎΠΌ Π² ΠΌΠΎΠΌΠ΅Π½Ρ‚ присвоСния ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΠΊΠ°ΠΊΠΎΠ³ΠΎ-Ρ‚ΠΎ значСния. Π§Π°ΡΡ‚ΡŒ ПО ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ ΡΡ‚Π°Ρ‚ΠΈΡ‡Π΅ΡΠΊΡƒΡŽ Ρ‚ΠΈΠΏΠΈΠ·Π°Ρ†ΠΈΡŽ. Π’ этом случаС Π·Π°Ρ€Π°Π½Π΅Π΅ ΠΎΠ±ΡŠΡΠ²Π»ΡΠ΅Ρ‚ΡΡ Ρ‚ΠΈΠΏ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ. Он Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ Π² Π±ΡƒΠ΄ΡƒΡ‰Π΅ΠΌ. ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ Π² Python, PHP, JavaScript. Π’Ρ‚ΠΎΡ€ΠΎΠΉ β€” Java, Π‘ΠΈ, Π‘++.

ΠŸΡ€ΠΎΡΡ‚ΠΎ ΠΎ динамичСской ΠΈ статичСской Ρ‚ΠΈΠΏΠΈΠ·Π°Ρ†ΠΈΠΈ

Π­Ρ‚ΠΎ Ρ‚ΠΎΠΆΠ΅ Π½Π΅ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚, Π½ΠΎ Π² Π±ΡƒΠ΄ΡƒΡ‰Π΅ΠΌ ΠΎΠ½ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ влияниС Π½Π° процСсс Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ. Π’ΠΏΡ€ΠΎΡ‡Π΅ΠΌ, Ссли Π²Ρ‹ Ρ€Π΅ΡˆΠΈΠ»ΠΈ ΠΏΡ€ΠΈΠ΄ΡƒΠΌΠ°Ρ‚ΡŒ эзотСричСский язык, Ρ‚ΠΎ допускаСтся ΠΏΠΎΠ»Π½ΠΎΠ΅ отсутствиС Ρ‚ΠΈΠΏΠΈΠ·Π°Ρ†ΠΈΠΈ. Π’ΠΎΡ‡Π½Π΅Π΅, использованиС Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄Π½ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ° Π΄Π°Π½Π½Ρ‹Ρ….

Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ особСнности: самый простой ΠΈ самый слоТный Π² написании язык

Π•Ρ‰Π΅ ΠΎΠ΄ΠΈΠ½ парадокс Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ самый простой ΠΏΡ€ΠΈ написании язык окаТСтся самым слоТным Π² использовании. Π•ΡΡ‚ΡŒ ряд эзотСричСских языков, дистрибутив ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… измСряСтся сотнями Π±Π°ΠΉΡ‚. Но ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΠΈΡ… Π² ΠΆΠΈΠ·Π½ΠΈ практичСски Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ. Π—Π°Ρ‚ΠΎ это отличная ΠΏΠ»ΠΎΡ‰Π°Π΄ΠΊΠ° для творчСства. На Π½ΠΈΡ… Π»Π΅Π³ΠΊΠΎ ΠΏΠΎΠ½ΡΡ‚ΡŒ, ΠΊΠ°ΠΊ ΡΠΎΠ·Π΄Π°ΡŽΡ‚ΡΡ Π±ΠΎΠ»Π΅Π΅ слоТныС языки программирования.

ΠœΠ΅ΡΡ‚ΠΎ, ΠΊΡƒΠ΄Π° Ρ€Π°Π½ΠΎ ΠΈΠ»ΠΈ ΠΏΠΎΠ·Π΄Π½ΠΎ ΠΏΡ€ΠΈΡ…ΠΎΠ΄ΠΈΡ‚ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ программист

Π§Ρ‚ΠΎΠ±Ρ‹ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ ΠΏΠΎΠ»Π΅Π·Π½ΠΎΠ΅, придСтся ΠΏΡ€ΠΈΠ»ΠΎΠΆΠΈΡ‚ΡŒ массу усилий. И говоря ΠΎΡ‚ΠΊΡ€ΠΎΠ²Π΅Π½Π½ΠΎ, ΠΎΠ΄Π½ΠΎΠΌΡƒ Ρ‡Π΅Π»ΠΎΠ²Π΅ΠΊΡƒ сСйчас ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Ρ‚Π°ΠΊΠΎΠ΅ Π½Π΅ ΠΏΠΎΠ΄ силу. Достаточно Π²ΡΠΏΠΎΠΌΠ½ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ Microsoft Π΄ΠΎΠ»Π³ΠΈΠ΅ Π³ΠΎΠ΄Ρ‹ примСняла написанный Π΅Ρ‰Π΅ Π² 1973 Π³ΠΎΠ΄Ρƒ язык Π‘ΠΈ. ΠšΠΎΠ½Π΅Ρ‡Π½ΠΎ история ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΠΊΠΈ Π·Π½Π°Π΅Ρ‚ Π½Π΅ΠΌΠ°Π»ΠΎ Π²Ρ‹Π΄Π°ΡŽΡ‰ΠΈΡ…ΡΡ личностСй, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ практичСски Π² ΠΎΠ΄ΠΈΠ½ΠΎΡ‡ΠΊΡƒ создавали ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚Ρ‹. Но Π² послСдниС дСсятилСтия Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ПО стала Π½Π°ΡΡ‚ΠΎΠ»ΡŒΠΊΠΎ слоТной, Ρ‡Ρ‚ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ ΠΎΠ΄Π½ΠΎΠΌΡƒ ΠΈ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ Π½ΠΎΠ²ΠΎΠ΅ практичСски Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ. Никто Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Ρ‚ΡŒ язык, Ссли Ρƒ Π½Π΅Π³ΠΎ Π½Π΅Ρ‚ ΡƒΠ΄ΠΎΠ±Π½ΠΎΠΉ срСды Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ.

Как ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ свой язык программирования? ВСория ΠΈ ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ°

Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ языка программирования ΠΎΡ‡Π΅Π½ΡŒ слоТная Π·Π°Π΄Π°Ρ‡Π°, Π½ΠΎ выполнимая. ΠœΡ‹ расскаТСм основныС Ρ„Π°ΠΊΡ‚ΠΎΡ€Ρ‹ ΠΏΡ€ΠΈ создании своСго ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ языка.

Π–Π΅Π»Π°Π½ΠΈΠ΅ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ своё ΠΈ ΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ слСд Π² истории посСщаСт всСх людСй, Π² Ρ‚ΠΎΠΌ числС программистов. Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ собствСнного языка программирования – это подходящая Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ. ΠœΠΎΡ‚ΠΈΠ²Ρ‹ Π±Ρ‹Π²Π°ΡŽΡ‚ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅: ΠΎΡ‚ Π½Π΅Ρ‡Π΅Π³ΠΎ Π΄Π΅Π»Π°Ρ‚ΡŒ, Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ Π²Π΅Ρ‡Π½Ρ‹Ρ… ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ Π² Π΄Ρ€ΡƒΠ³ΠΈΡ… языках, Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ΠΊΠΎΠΌΡ„ΠΎΡ€Ρ‚Π½ΠΎΠ³ΠΎ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π° для сСбя.Β 

Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ языков – это посильная Π·Π°Π΄Π°Ρ‡Π°, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ Ρ‡ΠΈΡ‚Π°Ρ‚Π΅Π»ΡŒ, Ρ€ΡƒΠΊΠΎΠ²ΠΎΠ΄ΡΡ‚Π²ΡƒΡΡΡŒ ΠΏΠΎΡˆΠ°Π³ΠΎΠ²Ρ‹ΠΌ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΎΠΌ ΠΈΠ· 12 этапов. ВСроятно, Ρ‡Ρ‚ΠΎ ΠΈΠΌΠ΅Π½Π½ΠΎ Π·Π° вашим языком Π±ΡƒΠ΄ΡƒΡ‰Π΅Π΅.

Π‘Ρ‚Π°Ρ‚ΡŒΡ содСрТит спСцифичСскиС Ρ‚Π΅Ρ€ΠΌΠΈΠ½Ρ‹, Π±Π΅Π· понимания ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π½Π΅ ΠΎΠ±ΠΎΠΉΡ‚ΠΈΡΡŒ: лСксСры, парсСры, ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€Ρ‹, компиляторы, Π΄Π΅Ρ€Π΅Π²ΡŒΡ синтаксиса ΠΈ ΠΎΡΡ‚Π°Π»ΡŒΠ½ΠΎΠ΅. Π—Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΏΡ€ΠΎΡ‰Π΅ Π²Π½ΠΈΠΊΠ½ΡƒΡ‚ΡŒ Π² ΡΡƒΡ‚ΡŒ, чСрпая ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΈΠ· ΠΈΠ½Ρ‚Π΅Ρ€Π½Π΅Ρ‚Π° ΠΈΠ»ΠΈ ΠΏΡ€ΠΈ совмСстном ΠΈΠ·ΡƒΡ‡Π΅Π½ΠΈΠΈ Π΄Π°Π½Π½Ρ‹Ρ… с ΠΎΠΏΡ‹Ρ‚Π½Ρ‹ΠΌ программистом. Π‘Π°Π·ΠΎΠ²Ρ‹Π΅ понятия Ρ‚Π΅Ρ€ΠΌΠΈΠ½ΠΎΠ»ΠΎΠ³ΠΈΠΈ – это Ρ„ΡƒΠ½Π΄Π°ΠΌΠ΅Π½Ρ‚Π°Π»ΡŒΠ½Π°Ρ Π²Π΅Π»ΠΈΡ‡ΠΈΠ½Π° для создания своСго языка программирования.

Π˜Π·ΡƒΡ‡Π΅Π½ΠΈΠ΅ ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π°

Π­Ρ‚ΠΎ совСт ΠΈ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒ ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ, Π·Π½Π°Π½ΠΈΠ΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½Ρ‹Ρ… систСм ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ, ΠΈΠ·ΡƒΡ‡Π°Ρ‚ΡŒ Π½ΠΎΠ²Ρ‹Π΅ языки, ΡΡ‚Π°Ρ‚ΡŒ Π½Π° ΠΏΡƒΡ‚ΡŒ программиста. НСвозмоТно ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ быстрый, качСствСнный ΠΈ ΠΌΠ½ΠΎΠ³ΠΎΡ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹ΠΉ язык Π±Π΅Π· понимания способа прСобразования ΠΊΠΎΠ΄Π° ΠΈ Π΅Π³ΠΎ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ. ПознаниС функционирования систСмной ΠΌΠ°ΡˆΠΈΠ½Ρ‹ – это ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ этап дальнСйшСго развития.

Π—Π°Ρ‡Π΅ΠΌ Π²Π°ΠΌ Π½ΠΎΠ²Ρ‹ΠΉ язык программирования?

Π—Π°Ρ€Π°Π½Π΅Π΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚Π΅ΡΡŒ с ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ языка. БущСствуСт 2 основных направлСния – ΡƒΠ½ΠΈΠ²Π΅Ρ€ΡΠ°Π»ΡŒΠ½Ρ‹ΠΉ инструмСнт ΠΈΠ»ΠΈ узкоспСциализированноС Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅.Β 

ВострСбованными ΠΎΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ языки с ΠΎΠ±ΠΎΠΈΡ… Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠΉ, Π½ΠΎ Π±ΠΎΠ»Π΅Π΅ популярны ΡƒΠ½ΠΈΠ²Π΅Ρ€ΡΠ°Π»ΡŒΠ½Ρ‹Π΅. Π£Ρ‡Ρ‚ΠΈΡ‚Π΅, Ρ‡Ρ‚ΠΎ ΠΌΠ½ΠΎΠ³ΠΎΡ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹Π΅ языки Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‚ большС Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ ΠΈ усилий, Π° Ρ‚Π°ΠΊΠΆΠ΅ Ρƒ Π½ΠΈΡ… мноТСство ΠΊΠΎΠ½ΠΊΡƒΡ€Π΅Π½Ρ‚ΠΎΠ².Β 

БСйчас стоит ΠΎΡ†Π΅Π½ΠΈΡ‚ΡŒ количСство прСдстоящСй Ρ€Π°Π±ΠΎΡ‚Ρ‹, ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ Ρ†Π΅Π»ΠΈ ΠΈ ТСлания. НСмаловаТно ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒΡΡ, Π²Ρ‹ ΠΏΠ»Π°Π½ΠΈΡ€ΡƒΠ΅Ρ‚Π΅ ΡΡ‚Π°Ρ‚ΡŒ Π·Π½Π°ΠΌΠ΅Π½ΠΈΡ‚ΠΎΡΡ‚ΡŒΡŽ, Π° язык Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡΡ‚Π°Ρ‚ΡŒ ΠΎΠ΄Π½ΠΈΠΌ ΠΈΠ· Π»ΡƒΡ‡ΡˆΠΈΡ…, ΠΈΠ»ΠΈ Π²Π°ΠΌ достаточно интСрСсно провСсти врСмя ΠΈ Ρ€Π°ΡΡˆΠΈΡ€ΠΈΡ‚ΡŒ ΠΌΠΈΡ€ΠΎΠ²ΠΎΠ·Π·Ρ€Π΅Π½ΠΈΠ΅?

ΠšΠ°ΠΊΠΈΡ… ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΠΉ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€ΠΈΠ΄Π΅Ρ€ΠΆΠΈΠ²Π°Ρ‚ΡŒΡΡ Π½ΠΎΠ²Ρ‹ΠΉ язык?

На этапС планирования слСдуСт ΠΎΡ‚Π²Π΅Ρ‚ΠΈΡ‚ΡŒ Π½Π° ряд ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹Ρ… вопросов, ΠΎΠ½ΠΈ Π·Π°Π΄Π°Π΄ΡƒΡ‚ Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ развития:

  • интСрпрСтация ΠΈΠ»ΠΈ компиляция? Код для компилирования Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Ρ‹Π²Π°Ρ‚ΡŒΡΡ Π² ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹ΠΉ, Π·Π°Ρ‚Π΅ΠΌ ΠΈΡΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ. ΠŸΡ€ΠΈ использовании ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€Π° ΠΊΠΎΠ΄ обрабатываСтся построчно. На вопрос Π½Π΅Ρ‚ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΠ³ΠΎ ΠΎΡ‚Π²Π΅Ρ‚Π°, ΠΏΠ΅Ρ€Π΅Π΄ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠΌ стоит слоТный Π²Ρ‹Π±ΠΎΡ€, Π² ΠΊΠ°ΠΊΡƒΡŽ сторону ΡƒΠΊΠ»ΠΎΠ½ Π΄Π΅Π»Π°Ρ‚ΡŒ: Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ, Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡ‚ΡŒ, ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Ρ‹, удобство ΠΈ Ρ‚. Π΄.;
  • типизация? Если Π΄Π°, Ρ‚ΠΎ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΡƒ Π±ΡƒΠ΄Π΅Ρ‚ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ ΡƒΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°Ρ‚ΡŒ Ρ‚ΠΈΠΏΡ‹ Π΄Π°Π½Π½Ρ‹Ρ…. Π’ ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΎΠΌ случаС придётся ΠΎΠΏΠΈΡΡ‹Π²Π°Ρ‚ΡŒ систСму, которая Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡ‚ΡŒ Ρ‚ΠΈΠΏΡ‹;
  • Π² языкС Π±ΡƒΠ΄Π΅Ρ‚ встроСн автоматичСский Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ очистки мусора ΠΈΠ»ΠΈ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΎΡ‚Π΄Π°Ρ‚ΡŒ Π² Ρ€ΡƒΠΊΠΈ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ?
  • планируСмая модСль языка программирования: структурноС, ООП, Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Π°Ρ Π»ΠΎΠ³ΠΈΠΊΠ°. ΠšΡ‚ΠΎ Π·Π½Π°Π΅Ρ‚, ΠΌΠΎΠΆΠ΅Ρ‚ Π²Π°ΠΌ удастся Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ совсСм ΠΈΠ½ΠΎΠ΅;
  • ΠΊΠ°ΠΊ язык Π±ΡƒΠ΄Π΅Ρ‚ сСбя вСсти Π² ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΠΈ ΠΊΠΎΠ½ΠΊΡƒΡ€Π΅Π½Ρ‚ΠΎΠ², вставка ΠΈΠ· Π΄Ρ€ΡƒΠ³ΠΈΡ… языков планируСтся? Π£Ρ‡ΠΈΡ‚Ρ‹Π²Π°Ρ‚ΡŒ этот аспСкт Π²Π°ΠΆΠ½ΠΎ ΠΏΡ€ΠΈΒ ΠΈΠ·Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠΉ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ языка;
  • планируСтся ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»Π° языка ΠΈΠ»ΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ всС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π½Π° сторону Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊΠΎΠ²?
  • ΠΊΠ°ΠΊΠΎΠΉ оТидаСтся ΠΊΠΎΠ½Π΅Ρ‡Π½Ρ‹ΠΉ Π²ΠΈΠ΄ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Ρ‹ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹?

ΠŸΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ отвСчая Π½Π° поставлСнныС вопросы, Π² Π³ΠΎΠ»ΠΎΠ²Π΅ Π½Π°Ρ‡Π½Ρ‘Ρ‚ Ρ„ΠΎΡ€ΠΌΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠ±Π»ΠΈΠΊ Π΄Π΅Ρ‚ΠΈΡ‰Π°, Π½ΠΎ появятся ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ Π²Ρ‹Ρ‚Π΅ΠΊΠ°ΡŽΡ‰ΠΈΠ΅ вопросы, Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‰ΠΈΠ΅ ΠΎΡ‚Π²Π΅Ρ‚ΠΎΠ².

ΠŸΡ€ΠΈΠ΄ΡƒΠΌΠ°ΠΉΡ‚Π΅ синтаксис для языка

ΠŸΡ€ΠΈ использовании особых символов ΠΌΠΎΠΆΠ½ΠΎ сущСствСнно ΡƒΠΏΡ€ΠΎΡΡ‚ΠΈΡ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Ρƒ ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Ρƒ ΠΈ ΠΏΠΎΠ²Ρ‹ΡΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΠΊΠΎΠ΄Π°. НСдостатком являСтся ΠΎΡ‚Ρ‚Π°Π»ΠΊΠΈΠ²Π°Π½ΠΈΠ΅ Π½ΠΎΠ²ΠΎΠ³ΠΎ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ. ΠŸΠΎΠ΄ΠΎΠ±Π½Ρ‹ΠΉ Π²Ρ‹Π±ΠΎΡ€ стоит Π² ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ: Π»ΠΈΠ±ΠΎ элСмСнтарныС ΠΈ понятныС, Π»ΠΈΠ±ΠΎ максимально ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΠ²Π½Ρ‹Π΅.

ΠŸΡ€ΠΈ этом синтаксис ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΊΠ°ΠΊΠΈΠΌ Π²Ρ‹ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ сами Π·Π°Ρ…ΠΎΡ‚ΠΈΡ‚Π΅. К ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρƒ, сущСствуСт язык ΠΎΡ‚ отСчСствСнных Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ называСтся YoptaScript. Он ΠΈΠΌΠ΅Π΅Ρ‚ ΠΎΡ‡Π΅Π½ΡŒ Π·Π°Π±Π°Π²Π½Ρ‹ΠΉ синтаксис ΠΈ ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π½Π° Π½Π΅ΠΌ приносит лишь смСх πŸ™‚

PS: этот язык являСтся лишь ΡˆΡƒΡ‚ΠΊΠΎΠΉ ΠΈ Π΅Π³ΠΎ Π½Π΅ стоит Π²ΠΎΡΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Ρ‚ΡŒ ΠΊΠ°ΠΊ Ρ€Π΅Π°Π»ΡŒΠ½Ρ‹ΠΉ язык. ΠŸΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ язык Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π½Π° ΠΈΡ… ΠΎΡ„ΠΈΡ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠΌ сайтС.

НазовитС вашС Π΄Π΅Ρ‚ΠΈΡ‰Π΅

Вопрос с ΠΎΠ΄Π½ΠΎΠΉ стороны простой, с Π΄Ρ€ΡƒΠ³ΠΎΠΉ – Π½Π΅Ρ‚. МногиС Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ Π½Π΅ Π²Ρ‹Π±ΠΈΡ€Π°ΡŽΡ‚ Π³Π»ΡƒΠ±ΠΎΠΊΠΎΠ΅ ΠΈ замысловатоС Π½Π°Π·Π²Π°Π½ΠΈΠ΅, ΠΎΡ‚Π΄Π°ΡŽΡ‚ ΠΏΡ€Π΅Π΄ΠΏΠΎΡ‡Ρ‚Π΅Π½ΠΈΠ΅ простотС ΠΈ лёгкости запоминания. ОсобСнно эффСктивно Π΄Π°Π²Π°Ρ‚ΡŒ имя языку с явной ассоциациСй, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΡ‚Π΅Π½Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ Π·Π°ΠΏΠΎΠΌΠΈΠ½Π°Π» Π½Π°Π·Π²Π°Π½ΠΈΠ΅ послС ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ-Π²Ρ‚ΠΎΡ€ΠΎΠ³ΠΎ произнСсСния. Π‘Π»ΠΎΠΆΠ½Ρ‹Π΅ Π°Π±Π±Ρ€Π΅Π²ΠΈΠ°Ρ‚ΡƒΡ€Ρ‹ ΠΈ названия ΠΈΠ· 3 ΠΈ большС слов – слоТно Π·Π°ΠΏΠΎΠΌΠΈΠ½Π°ΡŽΡ‚ΡΡ ΠΈ быстро Ρ‚Π΅Ρ€ΡΡŽΡ‚ΡΡ Π² памяти. Имя Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΊΠΎΡ€ΠΎΡ‚ΠΊΠΈΠΌ ΠΈ Π·Π°ΠΏΠΎΠΌΠΈΠ½Π°ΡŽΡ‰ΠΈΠΌΡΡ.

Π’Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅ Ρ„ΡƒΠ½Π΄Π°ΠΌΠ΅Π½Ρ‚ языка

Π’Ρ‹Π±ΠΎΡ€ языка, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±ΡƒΠ΄Π΅Ρ‚ взят Π·Π° основу – это ваТнСйший шаг. Если Π·Π½Π°Π½ΠΈΠΉ достаточно, ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΈΡΠ°Ρ‚ΡŒ Π½Π° ассСмблСрС ΠΈΠ»ΠΈ Π΄Π°ΠΆΠ΅ машинном ΠΊΠΎΠ΄Π΅, Π½ΠΎ Π² соврСмСнном ΠΌΠΈΡ€Π΅ Π»ΡƒΡ‡ΡˆΠ΅ ΠΏΡ€ΠΈΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒΡΡ ΠΊ Π΄Ρ€ΡƒΠ³ΠΈΠΌ высокоуровнСвым языкам: C, C++, Swift, Pascal ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΡƒΠ΅ΠΌΡ‹Π΅ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Ρ‹ ΠΏΡ€ΠΈΠ³ΠΎΠ΄Π½Ρ‹Π΅ для ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚ΠΈΡ€ΡƒΠ΅ΠΌΡ‹Ρ… Ρ€Π΅ΡˆΠ΅Π½ΠΈΠΉ. Π’ качСствС достойных языков с ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€Π°ΠΌΠΈ стоит ΠΏΡ€ΠΈΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒΡΡ ΠΊ: Java, JavaScript, Ruby, Python – для компиляторов. ΠŸΠ΅Ρ€Π΅Ρ‡ΠΈΡΠ»Π΅Π½Π½Ρ‹Π΅ ΠΏΠ°Ρ€Ρ‹ снизят ΠΏΠΎΡ‚Π΅Ρ€ΡŽ скорости Ρ€Π°Π±ΠΎΡ‚Ρ‹.

ЛСксСр ΠΈ парсСр

ЛСксСр – это инструмСнт для Π°Π½Π°Π»ΠΈΠ·Π° лСксики, дСлСния написанного ΠΊΠΎΠ΄Π° Π½Π° ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Π΅ элСмСнты, ΠΈΡ… Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ Ρ‚ΠΎΠΊΠ΅Π½Ρ‹. Π”Π°Π»Π΅Π΅ вступаСт Π² Ρ€Π°Π±ΠΎΡ‚Ρ‹ парсСр для синтаксичСского Π°Π½Π°Π»ΠΈΠ·Π°, Π΅Π³ΠΎ Ρ€ΠΎΠ»ΡŒ – организация ΠΈΠ΅Ρ€Π°Ρ€Ρ…ΠΈΠΈ с ΡƒΡ‡Ρ‘Ρ‚ΠΎΠΌ Ρ‚ΠΎΠΊΠ΅Π½ΠΎΠ², ΠΎΠ½ восстанавливаСт Ρ†Π΅ΠΏΡŒ событий. Π’ качСствС графичСского ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° рассмотрим ΠΏΡ€ΠΎΡΡ‚ΡƒΡŽ схСму:

ΠŸΡƒΠ³Π°Ρ‚ΡŒΡΡ Π½Π΅ стоит, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΡƒΠΆΠ΅ Π΅ΡΡ‚ΡŒ Π³ΠΎΡ‚ΠΎΠ²Ρ‹Π΅ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ для быстрого формирования лСксСров ΠΈ парсСров. ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ упростят Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ слоТного этапа Ρ€Π°Π±ΠΎΡ‚Ρ‹.

Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ основной Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ

НСзависимо ΠΎΡ‚ наличия встроСнных возмоТностСй Π² языкС для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с элСмСнтарным Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΠΎΠΌ ΠΈΠ»ΠΈ максимального использования Π²Π½Π΅ΡˆΠ½ΠΈΡ… Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ, потрСбуСтся созданиС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ. Они ΠΏΠΎΠΌΠΎΠ³ΡƒΡ‚ ΠΏΡ€ΠΎΠ΄Π΅ΠΌΠΎΠ½ΡΡ‚Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ возмоТности хотя Π±Ρ‹ ΠΎΡ‡Π΅Π½ΡŒ базисно.

Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΈ написаниС тСстов

ΠŸΡ€ΠΎΡ†Π΅ΡΡ создания Π² большСй ΠΌΠ΅Ρ€Π΅ сводится ΠΊ ΠΎΡ‚Ρ‚Π°Ρ‡ΠΈΠ²Π°Π½ΠΈΡŽ Ρ€Π°Π±ΠΎΡ‚Ρ‹, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΡΡ„ΠΎΡ€ΠΌΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π½ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‰ΠΈΠΉ язык вСсьма слоТно. Π—Π°Π΄Π°Ρ‡Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ° – Π²Ρ‹ΡΠ²ΠΈΡ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚ΠΎΡΠΏΠΎΡΠΎΠ±Π½ΠΎΡΡ‚ΡŒ встроСнных элСмСнтов ΠΈ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠΎΠ² ΠΈΡ… взаимодСйствия, здСсь Π½Π° ΠΏΠΎΠΌΠΎΡ‰ΡŒ приходят тСсты. По Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π°ΠΌ тСстирования дСлаСтся Π²Ρ‹Π²ΠΎΠ΄ ΠΎ нСдопустимом ΠΈ Ρ€Π°Π·Ρ€Π΅ΡˆΡ‘Π½Π½ΠΎΠΌ синтаксисС ΠΈ сочСтании Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ. Π’ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ удастся Ρ€Π°ΡΡˆΠΈΡ€ΠΈΡ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π» языка.

Выпуск языка Π² свСт

ПослС Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ слСдуСт Π·Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚ΡŒ язык Π² ΡΠ΅Ρ‚ΡŒ. Π—Π΄Π΅ΡΡŒ Π²Ρ‹ Π½Π°ΠΉΠ΄Ρ‘Ρ‚Π΅ Π΅Π΄ΠΈΠ½ΠΎΠΌΡ‹ΡˆΠ»Π΅Π½Π½ΠΈΠΊΠΎΠ² ΠΈ людСй, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠΎΠΌΠΎΠ³ΡƒΡ‚ ΡΠΎΠ²Π΅Ρ€ΡˆΠ΅Π½ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ Π΄Π΅Ρ‚ΠΈΡ‰Π΅.Β ΠŸΡƒΠ±Π»ΠΈΠΊΠ°Ρ†ΠΈΡ – это логичСскоС Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΠ΅ процСсса, Π½Π΅ стоит ΠΏΡ€ΡΡ‚Π°Ρ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Ρƒ Π² ящик, ΠΏΠΎΠ΄Π΅Π»ΠΈΡ‚Π΅ΡΡŒ Π΅ΠΉ.

Как ΠΌΠ½Π΅ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ язык программирования?

Как ΠΌΠ½Π΅ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ язык программирования?

Π˜Π½ΡΡ‚Ρ€ΡƒΠΌΠ΅Π½Ρ‚

Π’Π΅Π±-сайт tomassetti.me измСнился: Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ ΠΎΠ½ являСтся Ρ‡Π°ΡΡ‚ΡŒΡŽ strumenta.com. Π’Ρ‹ ΠΏΠΎ-ΠΏΡ€Π΅ΠΆΠ½Π΅ΠΌΡƒ Π±ΡƒΠ΄Π΅Ρ‚Π΅ Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒ всС новости Π² ΠΎΠ±Ρ‹Ρ‡Π½ΠΎΠΌ качСствС, Π½ΠΎ Π² Π½ΠΎΠ²ΠΎΠΌ ΠΎΡ„ΠΎΡ€ΠΌΠ»Π΅Π½ΠΈΠΈ.

    НазваниС этой ΡΡ‚Π°Ρ‚ΡŒΠΈ ΠΎΡ‚Ρ€Π°ΠΆΠ°Π΅Ρ‚ вопрос, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ я снова ΠΈ снова ΡΠ»Ρ‹ΡˆΡƒ Π½Π° Ρ„ΠΎΡ€ΡƒΠΌΠ°Ρ… ΠΈΠ»ΠΈ Π² элСктронных ΠΏΠΈΡΡŒΠΌΠ°Ρ….

    Π”ΡƒΠΌΠ°ΡŽ, всС Π»ΡŽΠ±ΠΎΠ·Π½Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ хотя Π±Ρ‹ Ρ€Π°Π· Π΅Π³ΠΎ ΡΠΏΡ€Π°ΡˆΠΈΠ²Π°Π»ΠΈ. Π­Ρ‚ΠΎ Π½ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ ΠΎΡ‡Π°Ρ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΌ Ρ‚Π΅ΠΌ, ΠΊΠ°ΠΊ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ языки программирования. К соТалСнию, Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ ΠΎΡ‚Π²Π΅Ρ‚ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΡ‹ Ρ‡ΠΈΡ‚Π°Π΅ΠΌ, носят акадСмичСский ΠΈΠ»ΠΈ тСорСтичСский Ρ…Π°Ρ€Π°ΠΊΡ‚Π΅Ρ€. НСкоторыС Π΄Ρ€ΡƒΠ³ΠΈΠ΅ содСрТат слишком ΠΌΠ½ΠΎΠ³ΠΎ Π΄Π΅Ρ‚Π°Π»Π΅ΠΉ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ. ΠŸΡ€ΠΎΡ‡ΠΈΡ‚Π°Π² ΠΈΡ…, ΠΌΡ‹ Π΄ΠΎ сих ΠΏΠΎΡ€ удивляСмся, ΠΊΠ°ΠΊ всС устроСно Π½Π° ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅ .

    Π˜Ρ‚Π°ΠΊ, ΠΌΡ‹ собираСмся ΠΎΡ‚Π²Π΅Ρ‚ΠΈΡ‚ΡŒ Π½Π° Π½Π΅Π³ΠΎ. Π”Π°, ΠΌΡ‹ ΡƒΠ²ΠΈΠ΄ΠΈΠΌ, ΠΊΠ°ΠΊΠΎΠ² процСсс создания вашСго собствСнного ΠΏΠΎΠ»Π½ΠΎΠ³ΠΎ языка с компилятором для Π½Π΅Π³ΠΎ, Π° Ρ‡Ρ‚ΠΎ Π½Π΅Ρ‚.

    ΠžΠ±Π·ΠΎΡ€

    Π‘ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ людСй, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ хотят Π½Π°ΡƒΡ‡ΠΈΡ‚ΡŒΡΡ Β«ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ язык программирования», фактичСски ΠΈΡ‰ΡƒΡ‚ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ Ρ‚ΠΎΠΌ, ΠΊΠ°ΠΊ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ компилятор. Они хотят ΠΏΠΎΠ½ΡΡ‚ΡŒ ΠΌΠ΅Ρ…Π°Π½ΠΈΠΊΡƒ, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰ΡƒΡŽ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ Π½ΠΎΠ²Ρ‹ΠΉ язык программирования.
    ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ‚ΠΎΡ€ β€” это Ρ„ΡƒΠ½Π΄Π°ΠΌΠ΅Π½Ρ‚Π°Π»ΡŒΠ½Π°Ρ Ρ‡Π°ΡΡ‚ΡŒ Π³ΠΎΠ»ΠΎΠ²ΠΎΠ»ΠΎΠΌΠΊΠΈ, Π½ΠΎ для создания Π½ΠΎΠ²ΠΎΠ³ΠΎ языка программирования трСбуСтся Π½Π΅Ρ‡Ρ‚ΠΎ большСС:

    1) Π―Π·Ρ‹ΠΊ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ спроСктирован : ΡΠΎΠ·Π΄Π°Ρ‚Π΅Π»ΡŒ языка Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΏΡ€ΠΈΠ½ΡΡ‚ΡŒ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Ρ„ΡƒΠ½Π΄Π°ΠΌΠ΅Π½Ρ‚Π°Π»ΡŒΠ½Ρ‹Π΅ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Ρ… ΠΏΠ°Ρ€Π°Π΄ΠΈΠ³ΠΌ ΠΈ синтаксиса языка
    2) Π”ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ создан компилятор
    3) Π”ΠΎΠ»ΠΆΠ½Π° Π±Ρ‹Ρ‚ΡŒ стандартная Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° Π±Ρ‹Ρ‚ΡŒ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π½Ρ‹ΠΌ
    4) Π”ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ прСдоставлСны Π²ΡΠΏΠΎΠΌΠΎΠ³Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ инструмСнты, Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€Ρ‹ ΠΈ систСмы сборки

    Π”Π°Π²Π°ΠΉΡ‚Π΅ Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ рассмотрим, Ρ‡Ρ‚ΠΎ Π²Π»Π΅Ρ‡Π΅Ρ‚ Π·Π° собой ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΈΠ· этих ΠΏΡƒΠ½ΠΊΡ‚ΠΎΠ².

    Π Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° языка программирования

    Если Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ просто Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ свой собствСнный компилятор, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ·Π½Π°Ρ‚ΡŒ, ΠΊΠ°ΠΊ всС это Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΡ€ΠΎΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ этот этап. Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ просто Π²Π·ΡΡ‚ΡŒ подмноТСство ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π³ΠΎ языка ΠΈΠ»ΠΈ ΠΏΡ€ΠΈΠ΄ΡƒΠΌΠ°Ρ‚ΡŒ Π΅Π³ΠΎ ΠΏΡ€ΠΎΡΡ‚ΡƒΡŽ Π²Π°Ρ€ΠΈΠ°Ρ†ΠΈΡŽ ΠΈ ΠΏΡ€ΠΈΡΡ‚ΡƒΠΏΠΈΡ‚ΡŒ ΠΊ Ρ€Π°Π±ΠΎΡ‚Π΅. Однако, Ссли Ρƒ вас Π΅ΡΡ‚ΡŒ ΠΏΠ»Π°Π½Ρ‹ ΠΏΠΎ созданию собствСнного языка программирования, Π²Π°ΠΌ придСтся ΠΏΠΎΠ΄ΡƒΠΌΠ°Ρ‚ΡŒ ΠΎΠ± этом.

    Π― Π΄ΡƒΠΌΠ°ΡŽ, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ языка программирования ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π°Π·Π΄Π΅Π»ΠΈΡ‚ΡŒ Π½Π° Π΄Π²Π΅ Ρ„Π°Π·Ρ‹:

    1. Π€Π°Π·Π° ΠΎΠ±Ρ‰Π΅ΠΉ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½Ρ‹
    2. Π€Π°Π·Π° уточнСния

    На ΠΏΠ΅Ρ€Π²ΠΎΠΉ Ρ„Π°Π·Π΅ ΠΌΡ‹ ΠΎΡ‚Π²Π΅Ρ‡Π°Π΅ΠΌ Π½Π° основныС вопросы ΠΎ нашСм языкС.

    • ΠšΠ°ΠΊΡƒΡŽ ΠΏΠ°Ρ€Π°Π΄ΠΈΠ³ΠΌΡƒ выполнСния ΠΌΡ‹ Ρ…ΠΎΡ‚ΠΈΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ? Π‘ΡƒΠ΄Π΅Ρ‚ Π»ΠΈ ΠΎΠ½ ΠΈΠΌΠΏΠ΅Ρ€Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΌ ΠΈΠ»ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹ΠΌ? Или, ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ, Π½Π° основС Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΎΠ² состояний ΠΈΠ»ΠΈ бизнСс-ΠΏΡ€Π°Π²ΠΈΠ»?
    • Нам Π½ΡƒΠΆΠ½Π° статичСская ΠΈΠ»ΠΈ динамичСская типизация?
    • Для ΠΊΠ°ΠΊΠΈΡ… ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ Π»ΡƒΡ‡ΡˆΠ΅ всСго ΠΏΠΎΠ΄ΠΎΠΉΠ΄Π΅Ρ‚ этот язык? Π‘ΡƒΠ΄Π΅Ρ‚ Π»ΠΈ ΠΎΠ½ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ для Π½Π΅Π±ΠΎΠ»ΡŒΡˆΠΈΡ… сцСнариСв ΠΈΠ»ΠΈ Π±ΠΎΠ»ΡŒΡˆΠΈΡ… систСм?
    • Π§Ρ‚ΠΎ для нас Π²Π°ΠΆΠ½Π΅Π΅ всСго: ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ? Π§ΠΈΡ‚Π°Π±Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ?
    • Π₯ΠΎΡ‚ΠΈΠΌ Π»ΠΈ ΠΌΡ‹, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ½ Π±Ρ‹Π» ΠΏΠΎΡ…ΠΎΠΆ Π½Π° ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ язык программирования? Π‘ΡƒΠ΄Π΅Ρ‚ Π»ΠΈ ΠΎΠ½ ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½ для Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ² C ΠΈΠ»ΠΈ Π±ΡƒΠ΄Π΅Ρ‚ простым Π² освоСнии для Ρ‚Π΅Ρ…, ΠΊΡ‚ΠΎ ΠΏΡ€ΠΈΡˆΠ΅Π» ΠΈΠ· Python?
    • Π₯ΠΎΡ‚ΠΈΠΌ Π»ΠΈ ΠΌΡ‹, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ½ Ρ€Π°Π±ΠΎΡ‚Π°Π» Π½Π° ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΉ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ΅ (JVM, CLR)?
    • КакиС возмоТности мСтапрограммирования ΠΌΡ‹ Ρ…ΠΎΡ‚ΠΈΠΌ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Ρ‚ΡŒ, Ссли Ρ‚Π°ΠΊΠΎΠ²Ρ‹Π΅ ΠΈΠΌΠ΅ΡŽΡ‚ΡΡ? ΠœΠ°ΠΊΡ€ΠΎΡΡ‹? Π¨Π°Π±Π»ΠΎΠ½Ρ‹? ΠžΡ‚Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅?

    На Π²Ρ‚ΠΎΡ€ΠΎΠΌ этапС ΠΌΡ‹ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠΈΠΌ Ρ€Π°Π·Π²ΠΈΠ²Π°Ρ‚ΡŒ язык ΠΏΠΎ ΠΌΠ΅Ρ€Π΅ Π΅Π³ΠΎ использования. ΠœΡ‹ столкнСмся с ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°ΠΌΠΈ, с Π²Π΅Ρ‰Π°ΠΌΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΎΡ‡Π΅Π½ΡŒ Ρ‚Ρ€ΡƒΠ΄Π½ΠΎ ΠΈΠ»ΠΈ Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ Π²Ρ‹Ρ€Π°Π·ΠΈΡ‚ΡŒ Π½Π° нашСм языкС, ΠΈ Π² ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎΠΌ ΠΈΡ‚ΠΎΠ³Π΅ ΠΌΡ‹ Π±ΡƒΠ΄Π΅ΠΌ Π΅Π³ΠΎ Ρ€Π°Π·Π²ΠΈΠ²Π°Ρ‚ΡŒ. Π’Ρ‚ΠΎΡ€ΠΎΠΉ этап ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π½Π΅ Ρ‚Π°ΠΊΠΈΠΌ Π³Π»Π°ΠΌΡƒΡ€Π½Ρ‹ΠΌ, ΠΊΠ°ΠΊ ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ, Π½ΠΎ это этап, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΌΡ‹ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°Π΅ΠΌ Π½Π°ΡΡ‚Ρ€Π°ΠΈΠ²Π°Ρ‚ΡŒ наш язык, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Π΅Π³ΠΎ ΠΏΡ€ΠΈΠ³ΠΎΠ΄Π½Ρ‹ΠΌ для использования Π½Π° ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅, поэтому ΠΌΡ‹ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π΅Π³ΠΎ Π½Π΅Π΄ΠΎΠΎΡ†Π΅Π½ΠΈΠ²Π°Ρ‚ΡŒ.

    Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ компилятора

    Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ компилятора β€” самый Π·Π°Ρ…Π²Π°Ρ‚Ρ‹Π²Π°ΡŽΡ‰ΠΈΠΉ шаг Π² создании языка программирования. Когда Ρƒ нас Π΅ΡΡ‚ΡŒ компилятор, ΠΌΡ‹ Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΌΠΎΠΆΠ΅ΠΌ Π²ΠΎΠΏΠ»ΠΎΡ‚ΠΈΡ‚ΡŒ наш язык Π² Тизнь. ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ‚ΠΎΡ€ позволяСт Π½Π°ΠΌ Π½Π°Ρ‡Π°Ρ‚ΡŒ ΠΈΠ³Ρ€Π°Ρ‚ΡŒ с языком, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π΅Π³ΠΎ ΠΈ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ Π½Π°ΠΌ Π½Π΅ Ρ…Π²Π°Ρ‚Π°Π΅Ρ‚ Π² ΠΏΠ΅Ρ€Π²ΠΎΠ½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠΌ Π΄ΠΈΠ·Π°ΠΉΠ½Π΅. Π­Ρ‚ΠΎ позволяСт ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ ΠΏΠ΅Ρ€Π²Ρ‹Π΅ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹. Π’Ρ€ΡƒΠ΄Π½ΠΎ ΠΏΡ€Π΅Π²Π·ΠΎΠΉΡ‚ΠΈ Ρ€Π°Π΄ΠΎΡΡ‚ΡŒ выполнСния ΠΏΠ΅Ρ€Π²ΠΎΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, написанной Π½Π° нашСм ΡΠΎΠ²Π΅Ρ€ΡˆΠ΅Π½Π½ΠΎ Π½ΠΎΠ²ΠΎΠΌ языкС программирования, ΠΊΠ°ΠΊΠΎΠΉ Π±Ρ‹ простой ΠΎΠ½Π° Π½ΠΈ Π±Ρ‹Π»Π°.

    Но ΠΊΠ°ΠΊ ΠΏΠΎΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ компилятор?

    Как ΠΈ всС слоТноС, ΠΌΡ‹ Π΄Π΅Π»Π°Π΅ΠΌ это пошагово:

    1. Π‘Ρ‚Ρ€ΠΎΠΈΠΌ парсСр : парсСр β€” это Ρ‡Π°ΡΡ‚ΡŒ нашСго компилятора, которая Π±Π΅Ρ€Π΅Ρ‚ тСкст Π½Π°ΡˆΠΈΡ… ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ ΠΈ ΠΏΠΎΠ½ΠΈΠΌΠ°Π΅Ρ‚, ΠΊΠ°ΠΊΠΈΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ ΠΎΠ½ΠΈ Π²Ρ‹Ρ€Π°ΠΆΠ°ΡŽΡ‚. Он распознаСт выраТСния, ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹, классы ΠΈ создаСт Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΠ΅ структуры Π΄Π°Π½Π½Ρ‹Ρ… для ΠΈΡ… прСдставлСния. ΠžΡΡ‚Π°Π»ΡŒΠ½Π°Ρ Ρ‡Π°ΡΡ‚ΡŒ парсСра Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с этими структурами Π΄Π°Π½Π½Ρ‹Ρ…, Π° Π½Π΅ с исходным тСкстом
    2. (Π½Π΅ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ) ΠœΡ‹ ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄ΠΈΠΌ Π΄Π΅Ρ€Π΅Π²ΠΎ Ρ€Π°Π·Π±ΠΎΡ€Π° Π² абстрактноС синтаксичСскоС Π΄Π΅Ρ€Π΅Π²ΠΎ . ΠžΠ±Ρ‹Ρ‡Π½ΠΎ структуры Π΄Π°Π½Π½Ρ‹Ρ…, создаваСмыС синтаксичСским Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€ΠΎΠΌ, ΠΈΠΌΠ΅ΡŽΡ‚ Π½ΠΈΠ·ΠΊΠΎΡƒΡ€ΠΎΠ²Π½Π΅Π²Ρ‹ΠΉ ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ содСрТат мноТСство Π΄Π΅Ρ‚Π°Π»Π΅ΠΉ, Π½Π΅ ΡΠ²Π»ΡΡŽΡ‰ΠΈΡ…ΡΡ критичСскими для нашСго компилятора. Из-Π·Π° этого ΠΌΡ‹ Ρ…ΠΎΡ‚ΠΈΠΌ часто ΠΏΠ΅Ρ€Π΅ΡΡ‚Π°Π²Π»ΡΡ‚ΡŒ структуры Π΄Π°Π½Π½Ρ‹Ρ… Π²ΠΎ Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ Ρ‡ΡƒΡ‚ΡŒ Π±ΠΎΠ»Π΅Π΅ высокого уровня
    3. Π Π°Π·Ρ€Π΅ΡˆΠ°Π΅ΠΌ символы . Π’ ΠΊΠΎΠ΄Π΅ ΠΌΡ‹ пишСм Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ Π²Ρ€ΠΎΠ΄Π΅ a + 1 . Наш компилятор Π΄ΠΎΠ»ΠΆΠ΅Π½ Π²Ρ‹ΡΡΠ½ΠΈΡ‚ΡŒ, Π½Π° Ρ‡Ρ‚ΠΎ ссылаСтся ΠΈ . Π­Ρ‚ΠΎ ΠΏΠΎΠ»Π΅? Π­Ρ‚ΠΎ пСрСмСнная? Π­Ρ‚ΠΎ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°? ΠœΡ‹ ΠΈΠ·ΡƒΡ‡Π°Π΅ΠΌ ΠΊΠΎΠ΄, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΡ‚Π²Π΅Ρ‚ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ
    4. ΠŸΡ€ΠΎΠ²Π΅Ρ€ΡΠ΅ΠΌ Π΄Π΅Ρ€Π΅Π²ΠΎ . Нам Π½ΡƒΠΆΠ½ΠΎ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ, Π½Π΅ допустил Π»ΠΈ программист ошибок. Он пытаСтся ΡΡƒΠΌΠΌΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ логичСскоС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΈ Ρ†Π΅Π»ΠΎΠ΅ число? Или доступ ΠΊ Π½Π΅ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰Π΅ΠΌΡƒ полю? Нам Π½ΡƒΠΆΠ½ΠΎ произвСсти ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ сообщСния ΠΎΠ± ΠΎΡˆΠΈΠ±ΠΊΠ°Ρ…
    5. Π“Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠ΅ΠΌ ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄ . На этом этапС ΠΌΡ‹ ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄ΠΈΠΌ ΠΊΠΎΠ΄ Π²ΠΎ Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ машина ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ. Π­Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹ΠΉ ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄ ΠΈΠ»ΠΈ Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄ для ΠΊΠ°ΠΊΠΎΠΉ-Ρ‚ΠΎ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠΉ ΠΌΠ°ΡˆΠΈΠ½Ρ‹
    6. (ΠΎΠΏΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎ) ВыполняСм Π»ΠΈΠ½ΠΊΠΎΠ²ΠΊΡƒ . Π’ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… случаях Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΠΈΡ‚ΡŒ ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄, созданный для Π½Π°ΡˆΠΈΡ… ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ, с ΠΊΠΎΠ΄ΠΎΠΌ статичСских Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΡ‹ Ρ…ΠΎΡ‚ΠΈΠΌ Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠ³Π΅Π½Π΅Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠ΄ΠΈΠ½ исполняСмый Ρ„Π°ΠΉΠ» 9.0037

    ВсСгда Π»ΠΈ Π½Π°ΠΌ Π½ΡƒΠΆΠ΅Π½ компилятор? НСт. ΠœΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Π·Π°ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Π΅Π³ΠΎ Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ срСдствами для выполнСния ΠΊΠΎΠ΄Π°:

    • ΠœΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€: ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ β€” это, ΠΏΠΎ сущСству, ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°, которая выполняСт шаги 1-4 компилятора, Π° Π·Π°Ρ‚Π΅ΠΌ нСпосрСдствСнно выполняСт Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ ΡƒΠΊΠ°Π·Π°Π½ΠΎ Π² абстрактном синтаксичСском Π΄Π΅Ρ€Π΅Π²Π΅.
    • ΠœΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ транспилятор: транспилятор Π±ΡƒΠ΄Π΅Ρ‚ Π΄Π΅Π»Π°Ρ‚ΡŒ Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ ΡƒΠΊΠ°Π·Π°Π½ΠΎ Π² ΡˆΠ°Π³Π°Ρ… 1-4, Π° Π·Π°Ρ‚Π΅ΠΌ Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ΡŒ ΠΊΠΎΠ΄ Π½Π° ΠΊΠ°ΠΊΠΎΠΌ-Ρ‚ΠΎ языкС, для ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ Ρƒ нас ΡƒΠΆΠ΅ Π΅ΡΡ‚ΡŒ компилятор (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, C++ ΠΈΠ»ΠΈ Java)

    Π­Ρ‚ΠΈ Π΄Π²Π° Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π° Π²ΠΏΠΎΠ»Π½Π΅ допустимы, ΠΈ часто ΠΈΠΌΠ΅Π΅Ρ‚ смысл Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· Π½ΠΈΡ…, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ Ρ‚Ρ€Π΅Π±ΡƒΠ΅ΠΌΡ‹Π΅ усилия ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ мСньшС.

    ΠœΡ‹ написали ΡΡ‚Π°Ρ‚ΡŒΡŽ, ΠΎΠ±ΡŠΡΡΠ½ΡΡŽΡ‰ΡƒΡŽ, ΠΊΠ°ΠΊ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ транспилятор. ВзглянитС Π½Π° Π½Π΅Π³ΠΎ, Ссли Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ практичСский ΠΏΡ€ΠΈΠΌΠ΅Ρ€ с ΠΊΠΎΠ΄ΠΎΠΌ.

    Π’ этой ΡΡ‚Π°Ρ‚ΡŒΠ΅ ΠΌΡ‹ Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ объясняСм Ρ€Π°Π·Π½ΠΈΡ†Ρƒ ΠΌΠ΅ΠΆΠ΄Ρƒ компилятором ΠΈ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ΠΎΠΌ.

    Бтандартная Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° для вашСго языка программирования

    Π›ΡŽΠ±ΠΎΠΉ язык программирования Π΄ΠΎΠ»ΠΆΠ΅Π½ Π΄Π΅Π»Π°Ρ‚ΡŒ нСсколько Π²Π΅Ρ‰Π΅ΠΉ:

    • ΠŸΠ΅Ρ‡Π°Ρ‚ΡŒ Π½Π° экранС
    • Доступ ΠΊ Ρ„Π°ΠΉΠ»ΠΎΠ²ΠΎΠΉ систСмС
    • ИспользованиС сСтСвых ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ
    • Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ графичСских интСрфСйсов

    Π­Ρ‚ΠΎ основныС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ для взаимодСйствия с ΠΎΡΡ‚Π°Π»ΡŒΠ½ΠΎΠΉ систСмой. Π‘Π΅Π· Π½ΠΈΡ… язык практичСски бСсполСзСн. Как ΠΌΡ‹ прСдоставляСм эти Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ? Π‘ΠΎΠ·Π΄Π°Π² ΡΡ‚Π°Π½Π΄Π°Ρ€Ρ‚Π½ΡƒΡŽ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ. Π­Ρ‚ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ Π½Π°Π±ΠΎΡ€ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ ΠΈΠ»ΠΈ классов, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠΆΠ½ΠΎ Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒ Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°Ρ…, написанных Π½Π° нашСм языкС программирования, Π½ΠΎ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π±ΡƒΠ΄ΡƒΡ‚ написаны Π½Π° ΠΊΠ°ΠΊΠΎΠΌ-Ρ‚ΠΎ Π΄Ρ€ΡƒΠ³ΠΎΠΌ языкС. НапримСр, ΠΌΠ½ΠΎΠ³ΠΈΠ΅ языки ΠΈΠΌΠ΅ΡŽΡ‚ стандартныС Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ, хотя Π±Ρ‹ частично написанныС Π½Π° C.

    Бтандартная Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ Π³ΠΎΡ€Π°Π·Π΄ΠΎ большС. НапримСр, классы для прСдставлСния основных ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΉ, Ρ‚Π°ΠΊΠΈΡ… ΠΊΠ°ΠΊ списки ΠΈ ΠΊΠ°Ρ€Ρ‚Ρ‹, ΠΈΠ»ΠΈ для ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ распространСнных Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΎΠ², Ρ‚Π°ΠΊΠΈΡ… ΠΊΠ°ΠΊ JSON ΠΈΠ»ΠΈ XML. Часто ΠΎΠ½ Π±ΡƒΠ΄Π΅Ρ‚ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½Π½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ для ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ строк ΠΈ рСгулярных Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ.

    Π”Ρ€ΡƒΠ³ΠΈΠΌΠΈ словами, написаниС стандартной Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ ΠΌΠ½ΠΎΠ³ΠΎ Ρ€Π°Π±ΠΎΡ‚Ρ‹. Π­Ρ‚ΠΎ Π½Π΅ Π³Π»Π°ΠΌΡƒΡ€Π½ΠΎ, ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ‚ΡƒΠ°Π»ΡŒΠ½ΠΎ Π½Π΅ Ρ‚Π°ΠΊ интСрСсно, ΠΊΠ°ΠΊ написаниС компилятора, Π½ΠΎ ΠΏΠΎ-ΠΏΡ€Π΅ΠΆΠ½Π΅ΠΌΡƒ являСтся Ρ„ΡƒΠ½Π΄Π°ΠΌΠ΅Π½Ρ‚Π°Π»ΡŒΠ½Ρ‹ΠΌ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠΌ, Π΄Π΅Π»Π°ΡŽΡ‰ΠΈΠΌ язык программирования ТизнСспособным.

    Π•ΡΡ‚ΡŒ способы ΠΎΠ±ΠΎΠΉΡ‚ΠΈ это Ρ‚Ρ€Π΅Π±ΠΎΠ²Π°Π½ΠΈΠ΅. Один ΠΈΠ· Π½ΠΈΡ… β€” Π·Π°ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ язык Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Π½Π° ΠΊΠ°ΠΊΠΎΠΉ-Ρ‚ΠΎ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ΅ ΠΈ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹ΠΌ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎΠ΅ использованиС стандартной Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ языка. НапримСр, всС языки, Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‰ΠΈΠ΅ Π½Π° JVM, ΠΌΠΎΠ³ΡƒΡ‚ просто ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΡΡ‚Π°Π½Π΄Π°Ρ€Ρ‚Π½ΡƒΡŽ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ Java.

    Π’ΡΠΏΠΎΠΌΠΎΠ³Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ инструмСнты для Π½ΠΎΠ²ΠΎΠ³ΠΎ языка программирования

    Π§Ρ‚ΠΎΠ±Ρ‹ язык ΠΌΠΎΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π½Π° ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅, Π½Π°ΠΌ часто приходится ΠΏΠΈΡΠ°Ρ‚ΡŒ нСсколько Π²ΡΠΏΠΎΠΌΠΎΠ³Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… инструмСнтов.

    НаиболСС ΠΎΡ‡Π΅Π²ΠΈΠ΄Π½Ρ‹ΠΌ являСтся Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€. Π‘ΠΏΠ΅Ρ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€ с подсвСткой синтаксиса, встроСнной ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΎΠΉ ошибок ΠΈ Π°Π²Ρ‚ΠΎΠ·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΠ΅ΠΌ Π² настоящСС врСмя Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌ Π»ΡŽΠ±ΠΎΠΌΡƒ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΡƒ.

    Но сСгодня Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ ΠΈΠ·Π±Π°Π»ΠΎΠ²Π°Π½Ρ‹ ΠΈ Π±ΡƒΠ΄ΡƒΡ‚ ΠΎΠΆΠΈΠ΄Π°Ρ‚ΡŒ всСвозмоТных Π΄Ρ€ΡƒΠ³ΠΈΡ… Π²ΡΠΏΠΎΠΌΠΎΠ³Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… инструмСнтов. НапримСр, ΠΎΡ‚Π»Π°Π΄Ρ‡ΠΈΠΊ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΎΡ‡Π΅Π½ΡŒ ΠΏΠΎΠ»Π΅Π·Π΅Π½ для устранСния нСприятной ошибки. Или систСма сборки, похоТая Π½Π° maven ΠΈΠ»ΠΈ gradle, ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Ρ‡Π΅ΠΌ-Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΠΈ спросят ΠΏΠΎΠ·ΠΆΠ΅.

    Π’ самом Π½Π°Ρ‡Π°Π»Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ достаточно Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€Π°, Π½ΠΎ ΠΏΠΎ ΠΌΠ΅Ρ€Π΅ роста вашСй ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΎΠΉ Π±Π°Π·Ρ‹ Π±ΡƒΠ΄Π΅Ρ‚ расти ΠΈ ΡΠ»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠ², ΠΈ потрСбуСтся большС Π²ΡΠΏΠΎΠΌΠΎΠ³Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… инструмСнтов. НадСюсь, ΠΊ Ρ‚ΠΎΠΌΡƒ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ найдСтся сообщСство, Π³ΠΎΡ‚ΠΎΠ²ΠΎΠ΅ ΠΏΠΎΠΌΠΎΡ‡ΡŒ Π² ΠΈΡ… создании.

    РСзюмС

    Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ языка программирования β€” процСсс, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠ½ΠΎΠ³ΠΈΠΌ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°ΠΌ каТСтся Π·Π°Π³Π°Π΄ΠΎΡ‡Π½Ρ‹ΠΌ. Π’ этой ΡΡ‚Π°Ρ‚ΡŒΠ΅ ΠΌΡ‹ ΠΏΠΎΠΏΡ‹Ρ‚Π°Π»ΠΈΡΡŒ ΠΏΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ это всСго лишь процСсс. Π­Ρ‚ΠΎ ΡƒΠ²Π»Π΅ΠΊΠ°Ρ‚Π΅Π»ΡŒΠ½ΠΎ ΠΈ Π½Π΅ просто, Π½ΠΎ это ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ.

    Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π·Π°Ρ…ΠΎΡ‚Π΅Ρ‚ΡŒ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ язык программирования ΠΏΠΎ Ρ€Π°Π·Π½Ρ‹ΠΌ ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π°ΠΌ. Одна вСская ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π° β€” Ρ€Π°Π·Π²Π»Π΅Ρ‡Π΅Π½ΠΈΠ΅, другая β€” ΠΈΠ·ΡƒΡ‡Π΅Π½ΠΈΠ΅ Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ компиляторы. Π’Π°Ρˆ язык ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΠΊΠ°Π·Π°Ρ‚ΡŒΡΡ ΠΎΡ‡Π΅Π½ΡŒ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹ΠΌ ΠΈΠ»ΠΈ Π½Π΅Ρ‚, Π² зависимости ΠΎΡ‚ ΠΌΠ½ΠΎΠ³ΠΈΡ… Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΎΠ². Однако, Ссли Π²Ρ‹ Ρ€Π°Π·Π²Π»Π΅ΠΊΠ°Π΅Ρ‚Π΅ΡΡŒ ΠΈ/ΠΈΠ»ΠΈ ΡƒΡ‡ΠΈΡ‚Π΅ΡΡŒ Π²ΠΎ врСмя сборки, Ρ‚ΠΎ стоит ΠΏΠΎΡ‚Ρ€Π°Ρ‚ΠΈΡ‚ΡŒ Π½Π° это Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ врСмя.

    И, ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎ ΠΆΠ΅, Π²Ρ‹ смоТСтС ΠΏΠΎΡ…Π²Π°ΡΡ‚Π°Ρ‚ΡŒΡΡ ΠΏΠ΅Ρ€Π΅Π΄ своими ΠΊΠΎΠ»Π»Π΅Π³Π°ΠΌΠΈ-Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°ΠΌΠΈ.

    Если Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΡƒΠ·Π½Π°Ρ‚ΡŒ большС ΠΎ создании языка, взглянитС Π½Π° Π΄Ρ€ΡƒΠ³ΠΈΠ΅ созданныС Π½Π°ΠΌΠΈ рСсурсы: ΡƒΠ·Π½Π°ΠΉΡ‚Π΅, ΠΊΠ°ΠΊ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ языки.

    Вас Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠ³ΡƒΡ‚ Π·Π°ΠΈΠ½Ρ‚Π΅Ρ€Π΅ΡΠΎΠ²Π°Ρ‚ΡŒ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΠ· Π½Π°ΡˆΠΈΡ… статСй:

    • 68 РСсурсы, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠΎΠΌΠΎΠ³ΡƒΡ‚ Π²Π°ΠΌ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ языки программирования
    • ПолноС руководство ΠΏΠΎ (внСшним) ΠΏΡ€Π΅Π΄ΠΌΠ΅Ρ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΌ языкам

    Β 

    ΠšΠ°Ρ‚Π΅Π³ΠΎΡ€ΠΈΠΈ

    ΠŸΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅ ΠΎ языковом Π΄ΠΈΠ·Π°ΠΉΠ½Π΅

    Как я написал свой собствСнный Β«ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹ΠΉΒ» язык программирования

    Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ компилятора Bolt: Ρ‡Π°ΡΡ‚ΡŒ 1

    10 мая 2020 г.

    7 ΠΌΠΈΠ½ чтСния ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ.

    Π§Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°ΡŽΡ‚ всС этапы? Π― Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΈΠ·ΡƒΡ‡ΠΈΡ‚ΡŒ OCaml ΠΈ C++? ΠŸΠΎΠ΄ΠΎΠΆΠ΄ΠΈΡ‚Π΅, я Π΄Π°ΠΆΠ΅ Π½Π΅ ΡΠ»Ρ‹ΡˆΠ°Π» ΠΎΠ± OCaml…

    НС Π²ΠΎΠ»Π½ΡƒΠΉΡ‚Π΅ΡΡŒ. Когда я Π½Π°Ρ‡Π°Π» этот ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ 6 мСсяцСв Π½Π°Π·Π°Π΄, я Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ создавал компилятор ΠΈ Π½Π΅ использовал OCaml ΠΈΠ»ΠΈ C++ Π½ΠΈ Π² ΠΎΠ΄Π½ΠΎΠΌ ΡΠ΅Ρ€ΡŒΠ΅Π·Π½ΠΎΠΌ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π΅. Π― объясню всС Π² своС врСмя.

    Π’ этой сСрии постов ΠΌΡ‹ Π±ΡƒΠ΄Π΅ΠΌ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ язык программирования , ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ . Когда я ΡƒΠ²ΠΈΠ΄Π΅Π» ΡƒΡ‡Π΅Π±Π½ΠΈΠΊΠΈ ΠΏΠΎ языку программирования, Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π±Ρ‹Π» создан ΠΈΠ³Ρ€ΡƒΡˆΠ΅Ρ‡Π½Ρ‹ΠΉ язык с Ρ‚Π°ΠΊΠΈΠΌΠΈ опСрациями, ΠΊΠ°ΠΊ слоТСниС ΠΈ ΡƒΠΌΠ½ΠΎΠΆΠ΅Π½ΠΈΠ΅, Ρƒ мСня Π²ΠΎΠ·Π½ΠΈΠΊΠ»ΠΎ ΠΎΠ΄Π½ΠΎ Π½Π΅Π΄ΠΎΡƒΠΌΠ΅Π½ΠΈΠ΅: Ρ…ΠΎΡ€ΠΎΡˆΠΎ, , Π½ΠΎ ΠΊΠ°ΠΊ насчСт настоящСго языка, Ρ‚Π°ΠΊΠΎΠ³ΠΎ ΠΊΠ°ΠΊ Java ?

    Π’ΠΎΡ‚ Ρ‡Ρ‚ΠΎ эта сСрия ΠΏΡ€ΠΈΠ·Π²Π°Π½Π° ΠΈΡΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ. Π―Π·Ρ‹ΠΊ Bolt, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ я написал Π² Ρ€Π°ΠΌΠΊΠ°Ρ… своСй диссСртации Π½Π° Ρ‚Ρ€Π΅Ρ‚ΡŒΠ΅ΠΌ курсС, прСдставляСт собой ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ язык Π² стилС Java. НСкоторыС ΠΈΠ· основных ΠΌΠΎΠΌΠ΅Π½Ρ‚ΠΎΠ² этой сСрии:

    • ΠœΡ‹ Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠ΅ΠΌ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ ΠΈ классы с ΠΏΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ΠΌ наслСдования ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ²
    • ΠŸΠ°Ρ€Π°Π»Π»Π΅Π»ΠΈΠ·ΠΌ (насколько я ΠΌΠΎΠ³ ΡΠΊΠ°Π·Π°Ρ‚ΡŒ, ΠΊΠΎΠ³Π΄Π° писал это, Π½ΠΈ ΠΎΠ΄Π½ΠΎ Π΄Ρ€ΡƒΠ³ΠΎΠ΅ руководство ΠΏΠΎ языку программирования Π½Π΅ освСщало это)
    • ΠžΠ±ΠΎΠ±Ρ‰Π΅Π½ΠΈΡ : Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΏΠΈΡΠ°Ρ‚ΡŒ класс Ρ‚ΠΈΠΏΠ° LinkedList , Π° Π·Π°Ρ‚Π΅ΠΌ созданиС Π΅Π³ΠΎ экзСмпляра с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ LinkedList , LinkedList ΠΈ Ρ‚Π°ΠΊ Π΄Π°Π»Π΅Π΅.
    • Π’Π²Π΅Π΄Π΅Π½ΠΈΠ΅ Π² ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΡƒ Ρ‚ΠΈΠΏΠΎΠ² Π² компиляторС
    • ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ†ΠΈΡ Π² LLVM (этот пост занял Π²Ρ‚ΠΎΡ€ΠΎΠ΅ мСсто Π² Hacker News!) β€” LLVM ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ C, C++, Swift, Rust ΠΈ ΠΌΠ½ΠΎΠ³ΠΈΠΌΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ языками.

    ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ я Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡƒΡŽ Π²Π°ΠΌ ΠΏΠ΅Ρ€Π΅ΠΉΡ‚ΠΈ ΠΏΠΎ ссылкам Π² ΠΎΠ±Π·ΠΎΡ€Π΅ Β«Π‘Π΅Ρ€ΠΈΠΈΒ», Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ·Π½Π°Ρ‚ΡŒ ΠΎΠ± этих ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹Ρ… функциях. ΠžΡΡ‚Π°Π²ΡˆΠ°ΡΡΡ Ρ‡Π°ΡΡ‚ΡŒ этого поста Π±ΡƒΠ΄Π΅Ρ‚ Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½Π° ​​на Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ±Π΅Π΄ΠΈΡ‚ΡŒ вас, ΠΏΠΎΡ‡Π΅ΠΌΡƒ стоит ΠΏΠΈΡΠ°Ρ‚ΡŒ собствСнный язык программирования, Π° Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ постС Π±ΡƒΠ΄Π΅Ρ‚ описана структура компилятора.

    Π—Π°Ρ‡Π΅ΠΌ Π²Π°ΠΌ ΠΏΠΈΡΠ°Ρ‚ΡŒ свой собствСнный язык программирования?

    Вопрос, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΡ‹ Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π·Π°Π΄Π°Ρ‚ΡŒ, это Π·Π°Ρ‡Π΅ΠΌ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ свой собствСнный язык ? Π’ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Π΅ ΠΎΡ‚Π²Π΅Ρ‚Ρ‹:

    1. Π­Ρ‚ΠΎ вСсСло
    2. Π˜ΠΌΠ΅Ρ‚ΡŒ собствСнный язык программирования ΠΊΡ€ΡƒΡ‚ΠΎ
    3. Π­Ρ‚ΠΎ Ρ…ΠΎΡ€ΠΎΡˆΠΈΠΉ ΠΏΠΎΠ±ΠΎΡ‡Π½Ρ‹ΠΉ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚

    ΠœΠ΅Π½Ρ‚Π°Π»ΡŒΠ½Ρ‹Π΅ ΠΌΠΎΠ΄Π΅Π»ΠΈ

    мотивация: Π½Π°Π»ΠΈΡ‡ΠΈΠ΅ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹Ρ… ΠΌΠ΅Π½Ρ‚Π°Π»ΡŒΠ½Ρ‹Ρ… ΠΌΠΎΠ΄Π΅Π»Π΅ΠΉ . Π’ΠΈΠ΄ΠΈΡ‚Π΅ Π»ΠΈ, ΠΊΠΎΠ³Π΄Π° Π²Ρ‹ ΠΈΠ·ΡƒΡ‡Π°Π΅Ρ‚Π΅ свой ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ язык программирования, Π²Ρ‹ смотритС Π½Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Ρ‡Π΅Ρ€Π΅Π· ΠΏΡ€ΠΈΠ·ΠΌΡƒ этого языка. ΠŸΠ΅Ρ€Π΅Π½Π΅ΡΠ΅ΠΌΡΡ ΠΊ Π²Π°ΡˆΠ΅ΠΌΡƒ Π²Ρ‚ΠΎΡ€ΠΎΠΌΡƒ языку, ΠΈ это каТСтся слоТным, Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ Π·Π°Π½ΠΎΠ²ΠΎ Π²Ρ‹ΡƒΡ‡ΠΈΡ‚ΡŒ синтаксис, Π° этот Π½ΠΎΠ²Ρ‹ΠΉ язык Π΄Π΅Π»Π°Π΅Ρ‚ Π²Π΅Ρ‰ΠΈ ΠΏΠΎ-Π΄Ρ€ΡƒΠ³ΠΎΠΌΡƒ. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ большС языков программирования, Π²Ρ‹ ΠΏΠΎΠ½ΠΈΠΌΠ°Π΅Ρ‚Π΅, Ρ‡Ρ‚ΠΎ языки ΠΈΠΌΠ΅ΡŽΡ‚ ΠΎΠ±Ρ‰ΠΈΠ΅ Ρ‚Π΅ΠΌΡ‹. Π’ Java ΠΈ Python Π΅ΡΡ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹, Python ΠΈ JavaScript Π½Π΅ Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‚ написания Ρ‚ΠΈΠΏΠΎΠ², этот список ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠΈΡ‚ΡŒ. ΠŸΠΎΠ³Ρ€ΡƒΠΆΠ°ΡΡΡŒ Π³Π»ΡƒΠ±ΠΆΠ΅ Π² Ρ‚Π΅ΠΎΡ€ΠΈΡŽ языков программирования, Π²Ρ‹ Ρ‡ΠΈΡ‚Π°Π΅Ρ‚Π΅ ΠΎ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… языковых конструкциях β€” Java ΠΈ Python β€” ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Π΅ языки программирования, Π° Ρ‚Π°ΠΊΠΆΠ΅ Python ΠΈ JavaScript ΠΈΠΌΠ΅ΡŽΡ‚ Π΄ΠΈΠ½Π°ΠΌΠΈΡ‡Π΅ΡΠΊΡƒΡŽ Ρ‚ΠΈΠΏΠΈΠ·Π°Ρ†ΠΈΡŽ .

    Π―Π·Ρ‹ΠΊΠΈ программирования, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Ρ‹ использовали, основаны Π½Π° идСях, ΠΏΡ€ΠΈΡΡƒΡ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… Π² Π±ΠΎΠ»Π΅Π΅ старых языках, ΠΎ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π²Ρ‹, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Π½Π΅ ΡΠ»Ρ‹ΡˆΠ°Π»ΠΈ. Simula ΠΈ Smalltalk прСдставили ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΡŽ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Ρ… языков программирования. Лисп Π²Π²Π΅Π» понятиС динамичСской Ρ‚ΠΈΠΏΠΈΠ·Π°Ρ†ΠΈΠΈ. И постоянно ΠΏΠΎΡΠ²Π»ΡΡŽΡ‚ΡΡ Π½ΠΎΠ²Ρ‹Π΅ ΠΈΡΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠ΅ языки, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ вводят Π½ΠΎΠ²Ρ‹Π΅ ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΠΈ. Π‘ΠΎΠ»Π΅Π΅ распространСнный ΠΏΡ€ΠΈΠΌΠ΅Ρ€: Rust строит Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡ‚ΡŒ памяти Π² Π½ΠΈΠ·ΠΊΠΎΡƒΡ€ΠΎΠ²Π½Π΅Π²Ρ‹ΠΉ язык систСмного программирования.

    Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ собствСнного языка (особСнно Ссли Π²Ρ‹ добавляСтС Π½ΠΎΠ²Ρ‹Π΅ ΠΈΠ΄Π΅ΠΈ) ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ‚ Π²Π°ΠΌ Π±ΠΎΠ»Π΅Π΅ критичСски ΠΎΡ‚Π½ΠΎΡΠΈΡ‚ΡŒΡΡ ΠΊ Π΄ΠΈΠ·Π°ΠΉΠ½Ρƒ языка, поэтому, ΠΊΠΎΠ³Π΄Π° Π²Ρ‹ Π½Π°Ρ‡ΠΈΠ½Π°Π΅Ρ‚Π΅ ΠΈΠ·ΡƒΡ‡Π°Ρ‚ΡŒ Π½ΠΎΠ²Ρ‹ΠΉ язык, это становится Π½Π°ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΡ€ΠΎΡ‰Π΅. НапримСр, я Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π» Π½Π° Hack Π΄ΠΎ своСй стаТировки Π² Facebook ΠΏΡ€ΠΎΡˆΠ»Ρ‹ΠΌ Π»Π΅Ρ‚ΠΎΠΌ, Π½ΠΎ Π·Π½Π°Π½ΠΈΠ΅ этих ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΠΉ языка программирования Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΎΠ±Π»Π΅Π³Ρ‡ΠΈΠ»ΠΎ освоСниС.

    Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ компиляторы?

    Π˜Ρ‚Π°ΠΊ, Π²Ρ‹ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Π»ΠΈ свой ΠΌΠΎΠ΄Π½Ρ‹ΠΉ Π½ΠΎΠ²Ρ‹ΠΉ язык, ΠΈ ΠΎΠ½ ΡΠΎΠ²Π΅Ρ€ΡˆΠΈΡ‚ Ρ€Π΅Π²ΠΎΠ»ΡŽΡ†ΠΈΡŽ Π² ΠΌΠΈΡ€Π΅, Π½ΠΎ Π΅ΡΡ‚ΡŒ ΠΎΠ΄Π½Π° ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°. Как Ρ‚Ρ‹ Π΅Π³ΠΎ Π·Π°ΠΏΡƒΡΠΊΠ°Π΅ΡˆΡŒ? Π­Ρ‚ΠΎ Ρ€ΠΎΠ»ΡŒ компилятора. Π§Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ±ΡŠΡΡΠ½ΠΈΡ‚ΡŒ, ΠΊΠ°ΠΊ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ компиляторы, Π΄Π°Π²Π°ΠΉΡ‚Π΅ сначала вСрнСмся Π² 19 Π²Π΅ΠΊ, Π² эпоху Ρ‚Π΅Π»Π΅Π³Ρ€Π°Ρ„Π°. Π’ΠΎΡ‚ Ρƒ нас Π΅ΡΡ‚ΡŒ этот ΠΏΡ€ΠΈΡ‡ΡƒΠ΄Π»ΠΈΠ²Ρ‹ΠΉ Π½ΠΎΠ²Ρ‹ΠΉ Ρ‚Π΅Π»Π΅Π³Ρ€Π°Ρ„, Π½ΠΎ ΠΊΠ°ΠΊ ΠΌΡ‹ Π±ΡƒΠ΄Π΅ΠΌ ΠΎΡ‚ΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ сообщСния? Π’Π° ΠΆΠ΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°, Π΄Ρ€ΡƒΠ³ΠΎΠΉ Π΄ΠΎΠΌΠ΅Π½. ВСлСграфист Π΄ΠΎΠ»ΠΆΠ΅Π½ Π²Π·ΡΡ‚ΡŒ Ρ€Π΅Ρ‡ΡŒ, ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Ρ‚ΡŒ Π΅Π΅ Π² Π°Π·Π±ΡƒΠΊΡƒ ΠœΠΎΡ€Π·Π΅ ΠΈ Π²Ρ‹ΡΡ‚ΡƒΠΊΠΈΠ²Π°Ρ‚ΡŒ ΠΊΠΎΠ΄. ΠŸΠ΅Ρ€Π²ΠΎΠ΅, Ρ‡Ρ‚ΠΎ Π΄Π΅Π»Π°Π΅Ρ‚ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€, β€” это осмысливаСт Ρ€Π΅Ρ‡ΡŒ β€” ΠΎΠ½ Ρ€Π°Π·Π±ΠΈΠ²Π°Π΅Ρ‚ Π΅Π΅ Π½Π° слова ( лСксинг ), Π° Π·Π°Ρ‚Π΅ΠΌ ΠΏΠΎΠ½ΠΈΠΌΠ°Π΅Ρ‚, ΠΊΠ°ΠΊ эти слова ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ Π² ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠΈ ( parsing ) β€” ΡΠ²Π»ΡΡŽΡ‚ΡΡ Π»ΠΈ ΠΎΠ½ΠΈ Ρ‡Π°ΡΡ‚ΡŒΡŽ ΠΈΠΌΠ΅Π½Π½ΠΎΠΉ Π³Ρ€ΡƒΠΏΠΏΡ‹, ΠΏΡ€ΠΈΠ΄Π°Ρ‚ΠΎΡ‡Π½ΠΎΠ³ΠΎ прСдлоТСния ΠΈ Ρ‚. Π΄. Они ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡΡŽΡ‚, ΠΈΠΌΠ΅Π΅Ρ‚ Π»ΠΈ смысл классификация слов ΠΏΠΎ катСгориям ΠΈΠ»ΠΈ Ρ‚ΠΈΠΏΠ°ΠΌ (ΠΏΡ€ΠΈΠ»Π°Π³Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠ΅, ΡΡƒΡ‰Π΅ΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ΅, Π³Π»Π°Π³ΠΎΠ») ΠΈ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡΡŽΡ‚, ΠΈΠΌΠ΅Π΅Ρ‚ Π»ΠΈ ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅ грамматичСский смысл (ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ Β«runsΒ» для описания ΡΡƒΡ‰Π΅ΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ это Π³Π»Π°Π³ΠΎΠ», Π° Π½Π΅ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ΅). НаконСц, ΠΎΠ½ΠΈ пСрСводят ( ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΡƒΡŽΡ‚ ) ΠΊΠ°ΠΆΠ΄ΠΎΠ΅ слово Π² Ρ‚ΠΎΡ‡ΠΊΠΈ ΠΈ Ρ‚ΠΈΡ€Π΅ (Π°Π·Π±ΡƒΠΊΡƒ ΠœΠΎΡ€Π·Π΅), ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π·Π°Ρ‚Π΅ΠΌ ΠΏΠ΅Ρ€Π΅Π΄Π°ΡŽΡ‚ΡΡ ΠΏΠΎ ΠΏΡ€ΠΎΠ²ΠΎΠ΄Π°ΠΌ.

    ΠšΠ°ΠΆΠ΅Ρ‚ΡΡ, Ρ‡Ρ‚ΠΎ это Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊ ΠΌΠ½ΠΎΠ³ΠΎ автоматичСский для людСй. ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ‚ΠΎΡ€Ρ‹ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ Ρ‚Π°ΠΊ ΠΆΠ΅, Π·Π° ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ΠΌ Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ для этого Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ явно Π·Π°ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Ρ‹. Π’ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΌ Π²Ρ‹ΡˆΠ΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ описан простой компилятор, состоящий ΠΈΠ· 4 этапов: lex, parse, type-check ΠΈ Π·Π°Ρ‚Π΅ΠΌ трансляция Π² ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹Π΅ инструкции. ΠžΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρƒ Ρ‚Π°ΠΊΠΆΠ΅ Π½ΡƒΠΆΠ½Ρ‹ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ инструмСнты, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½Π°Π±ΠΈΡ€Π°Ρ‚ΡŒ Π°Π·Π±ΡƒΠΊΡƒ ΠœΠΎΡ€Π·Π΅; для языков программирования это срСда выполнСния .

    На ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€, вСроятно, создаСт Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ ΡΡ‚Π΅Π½ΠΎΠ³Ρ€Π°Ρ„ΠΈΡ‡Π΅ΡΠΊΡƒΡŽ запись, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ ΠΎΠ½ Π·Π½Π°Π΅Ρ‚, ΠΊΠ°ΠΊ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Ρ‚ΡŒ Π² Π°Π·Π±ΡƒΠΊΡƒ ΠœΠΎΡ€Π·Π΅. Π’Π΅ΠΏΠ΅Ρ€ΡŒ вмСсто Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Ρ‹Π²Π°Ρ‚ΡŒ Ρ€Π΅Ρ‡ΡŒ Π² Π°Π·Π±ΡƒΠΊΡƒ ΠœΠΎΡ€Π·Π΅, ΠΎΠ½ΠΈ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΡŽΡ‚ Ρ€Π΅Ρ‡ΡŒ Π² свою ΡΡ‚Π΅Π½ΠΎΠ³Ρ€Π°Ρ„ΠΈΡŽ, Π° Π·Π°Ρ‚Π΅ΠΌ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΡŽΡ‚ ΡΡ‚Π΅Π½ΠΎΠ³Ρ€Π°Ρ„ΠΈΡŽ Π² Π°Π·Π±ΡƒΠΊΡƒ ΠœΠΎΡ€Π·Π΅. Π’ΠΎ ΠΌΠ½ΠΎΠ³ΠΈΡ… практичСских языках Π²Ρ‹ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ просто ΠΏΠ΅Ρ€Π΅ΠΉΡ‚ΠΈ ΠΎΡ‚ исходного ΠΊΠΎΠ΄Π° ΠΊ ΠΌΠ°ΡˆΠΈΠ½Π½ΠΎΠΌΡƒ ΠΊΠΎΠ΄Ρƒ, Ρƒ вас Π΅ΡΡ‚ΡŒ desugaring ΠΈΠ»ΠΈ ΠΏΠΎΠ½ΠΈΠΆΠ΅Π½ΠΈΠ΅ стадий, Π³Π΄Π΅ Π²Ρ‹ поэтапно удаляСтС языковыС конструкции (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Ρ€Π°Π·Π²Π΅Ρ€Ρ‚Ρ‹Π²Π°Π½ΠΈΠ΅ Ρ†ΠΈΠΊΠ»ΠΎΠ² for), ΠΏΠΎΠΊΠ° Π½Π΅ останСтся нСбольшой Π½Π°Π±ΠΎΡ€ инструкций, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠΆΠ½ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ. Π”Π΅ΡˆΡƒΠ³Π°Ρ€ΠΈΠ·Π°Ρ†ΠΈΡ Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΡƒΠΏΡ€ΠΎΡ‰Π°Π΅Ρ‚ Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ·Π΄Π½ΠΈΠ΅ этапы, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΎΠ½ΠΈ ΠΎΠΏΠ΅Ρ€ΠΈΡ€ΡƒΡŽΡ‚ Π±ΠΎΠ»Π΅Π΅ простым прСдставлСниСм. Π­Ρ‚Π°ΠΏΡ‹ компиляции сгруппированы Π² Ρ€Π°Π·Π΄Π΅Π»Ρ‹ внСшнСго интСрфСйса, срСднСго уровня ΠΈ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅Π³ΠΎ интСрфСйса, Π³Π΄Π΅ внСшний интСрфСйс выполняСт Π±ΠΎΠ»ΡŒΡˆΡƒΡŽ Ρ‡Π°ΡΡ‚ΡŒ синтаксичСского Π°Π½Π°Π»ΠΈΠ·Π°/ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ Ρ‚ΠΈΠΏΠΎΠ², Π° срСдний ΠΈ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΠΉ ΡƒΡ€ΠΎΠ²Π½ΠΈ ΡƒΠΏΡ€ΠΎΡ‰Π°ΡŽΡ‚ ΠΈ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΡƒΡŽΡ‚ ΠΊΠΎΠ΄.

    Π’Π°Ρ€ΠΈΠ°Π½Ρ‚Ρ‹ конструкции компилятора

    На самом Π΄Π΅Π»Π΅ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΡΡ„ΠΎΡ€ΠΌΡƒΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΌΠ½ΠΎΠ³ΠΈΠ΅ языки ΠΈ Π΄ΠΈΠ·Π°ΠΉΠ½ компилятора Π² Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Ρ… ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΉ Π²Ρ‹ΡˆΠ΅ Π°Π½Π°Π»ΠΎΠ³ΠΈΠΈ:

    ΠŸΠ΅Ρ€Π΅Π²ΠΎΠ΄ΠΈΡ‚ Π»ΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ слова Π½Π° Π»Π΅Ρ‚Ρƒ Π² Π°Π·Π±ΡƒΠΊΡƒ ΠœΠΎΡ€Π·Π΅ ΠΏΠΎ ΠΌΠ΅Ρ€Π΅ ΠΈΡ… ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ, ΠΈΠ»ΠΈ ΠΎΠ½ Π·Π°Ρ€Π°Π½Π΅Π΅ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΠ΅Ρ‚ слова Π² Π°Π·Π±ΡƒΠΊΡƒ ΠœΠΎΡ€Π·Π΅ , Π° ΠΏΠΎΡ‚ΠΎΠΌ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ Π°Π·Π±ΡƒΠΊΠΎΠΉ ΠœΠΎΡ€Π·Π΅? Π˜Π½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚ΠΈΡ€ΡƒΠ΅ΠΌΡ‹Π΅ языка, Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ Python, Π΄Π΅Π»Π°ΡŽΡ‚ ΠΏΠ΅Ρ€Π²ΠΎΠ΅, Π² Ρ‚ΠΎ врСмя ΠΊΠ°ΠΊ скомпилированныС с ΠΎΠΏΠ΅Ρ€Π΅ΠΆΠ΅Π½ΠΈΠ΅ΠΌ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ языка, Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ C (ΠΈ Bolt), Π΄Π΅Π»Π°ΡŽΡ‚ Π²Ρ‚ΠΎΡ€ΠΎΠ΅. Java Π½Π° самом Π΄Π΅Π»Π΅ находится Π³Π΄Π΅-Ρ‚ΠΎ посСрСдинС β€” ΠΎΠ½Π° ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ Ρ‚ΠΎΡ‡Π½ΠΎ Π² срок , ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ выполняСт Π±ΠΎΠ»ΡŒΡˆΡƒΡŽ Ρ‡Π°ΡΡ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Ρ‹ Π·Π°Ρ€Π°Π½Π΅Π΅, пСрСводя ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π² Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄, Π° Π·Π°Ρ‚Π΅ΠΌ Π²ΠΎ врСмя выполнСния ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΡƒΠ΅Ρ‚ Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄ Π² ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄.

    Π’Π΅ΠΏΠ΅Ρ€ΡŒ рассмотрим сцСнарий, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ появилась новая Π°Π·Π±ΡƒΠΊΠ° Π›ΠΎΡ€Π·Π΅, ΡΠ²Π»ΡΡŽΡ‰Π°ΡΡΡ Π°Π»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²ΠΎΠΉ Π°Π·Π±ΡƒΠΊΠ΅ ΠœΠΎΡ€Π·Π΅. Если ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ² ΡƒΡ‡Π°Ρ‚, ΠΊΠ°ΠΊ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Ρ‚ΡŒ ΡΡ‚Π΅Π½ΠΎΠ³Ρ€Π°Ρ„ΠΈΡŽ Π² ΠΊΠΎΠ΄ Π›ΠΎΡ€Π·Π΅, говорящСму Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ Π·Π½Π°Ρ‚ΡŒ, ΠΊΠ°ΠΊ это дСлаСтся, ΠΎΠ½ΠΈ ΠΏΠΎΠ»ΡƒΡ‡Π°ΡŽΡ‚ это бСсплатно. Π’ΠΎΡ‡Π½ΠΎ Ρ‚Π°ΠΊ ΠΆΠ΅ Ρ‡Π΅Π»ΠΎΠ²Π΅ΠΊΡƒ, говорящСму Π½Π° Π΄Ρ€ΡƒΠ³ΠΎΠΌ языкС, просто Π½ΡƒΠΆΠ½ΠΎ ΡΠΊΠ°Π·Π°Ρ‚ΡŒ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρƒ, ΠΊΠ°ΠΊ пСрСвСсти Π΅Π³ΠΎ Π² ΡΡ‚Π΅Π½ΠΎΠ³Ρ€Π°Ρ„ΠΈΡŽ, ΠΈ Ρ‚ΠΎΠ³Π΄Π° ΠΎΠ½ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄ Π½Π° лорс 9.0010 ΠΈ Π°Π·Π±ΡƒΠΊΠ° ΠœΠΎΡ€Π·Π΅! Π’ΠΎΡ‚ ΠΊΠ°ΠΊ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ LLVM . LLVM IR (ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½ΠΎΠ΅ прСдставлСниС) дСйствуСт ΠΊΠ°ΠΊ ΡΡ‚ΡƒΠΏΠ΅Π½ΡŒΠΊΠ° ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΎΠΉ ΠΈ ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹ΠΌ ΠΊΠΎΠ΄ΠΎΠΌ. C, C++, Rust ΠΈ Ρ†Π΅Π»Ρ‹ΠΉ ряд Π΄Ρ€ΡƒΠ³ΠΈΡ… языков (Π²ΠΊΠ»ΡŽΡ‡Π°Ρ Bolt) Π½Π°Ρ†Π΅Π»Π΅Π½Ρ‹ Π½Π° LLVM IR, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π·Π°Ρ‚Π΅ΠΌ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΡƒΠ΅Ρ‚ ΠΊΠΎΠ΄ для Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€ машин.

    БтатичСская ΠΈΠ»ΠΈ динамичСская типизация? Π’ ΠΏΠ΅Ρ€Π²ΠΎΠΌ случаС ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ Π»ΠΈΠ±ΠΎ провСряСт, ΠΈΠΌΠ΅ΡŽΡ‚ Π»ΠΈ слова грамматичСский смысл, ΠΏΡ€Π΅ΠΆΠ΄Π΅ Ρ‡Π΅ΠΌ Π½Π°Ρ‡Π°Ρ‚ΡŒ ΠΏΠΎΡΡ‚ΡƒΠΊΠΈΠ²Π°Ρ‚ΡŒ. Или ΠΎΠ½ΠΈ этого Π½Π΅ Π΄Π΅Π»Π°ΡŽΡ‚, Π° Π·Π°Ρ‚Π΅ΠΌ Π½Π° ΠΏΠΎΠ»ΠΏΡƒΡ‚ΠΈ говорят: Β«Π”Π°, это Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ‚ смысла» ΠΈ ΠΎΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°ΡŽΡ‚ΡΡ. Π”ΠΈΠ½Π°ΠΌΠΈΡ‡Π΅ΡΠΊΡƒΡŽ Ρ‚ΠΈΠΏΠΈΠ·Π°Ρ†ΠΈΡŽ ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°Ρ‚ΡŒ ΠΊΠ°ΠΊ Π±ΠΎΠ»Π΅Π΅ Π±Ρ‹ΡΡ‚Ρ€ΡƒΡŽ для экспСримСнтов (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Python, JS), Π½ΠΎ ΠΊΠΎΠ³Π΄Π° Π²Ρ‹ отправляСтС это сообщСниС, Π²Ρ‹ Π½Π΅ Π·Π½Π°Π΅Ρ‚Π΅, остановится Π»ΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ Π½Π° ΠΏΠΎΠ»ΠΏΡƒΡ‚ΠΈ (сбой).

    Π― объяснил это Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ Π²ΠΎΠΎΠ±Ρ€Π°ΠΆΠ°Π΅ΠΌΠΎΠ³ΠΎ тСлСграфиста, Π½ΠΎ любая аналогия Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚. Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ этой ΠΈΠ½Ρ‚ΡƒΠΈΡ†ΠΈΠΈ ΠΈΠΌΠ΅Π΅Ρ‚ большоС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ для понимания Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊΠΈΠ΅ языковыС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ подходят для вашСго языка: Ссли Π²Ρ‹ ΡΠΎΠ±ΠΈΡ€Π°Π΅Ρ‚Π΅ΡΡŒ ΡΠΊΡΠΏΠ΅Ρ€ΠΈΠΌΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ, Ρ‚ΠΎ, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, динамичСская типизация Π»ΡƒΡ‡ΡˆΠ΅, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π²ΠΈΠ³Π°Ρ‚ΡŒΡΡ быстрСС. Если Π²Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ Π±ΠΎΠ»ΡŒΡˆΡƒΡŽ ΠΊΠΎΠ΄ΠΎΠ²ΡƒΡŽ Π±Π°Π·Ρƒ, Π΅Π΅ слоТнСС Π²Ρ‹Ρ‡ΠΈΡ‚Ρ‹Π²Π°Ρ‚ΡŒ, ΠΈ Π²Ρ‹ с большСй Π²Π΅Ρ€ΠΎΡΡ‚Π½ΠΎΡΡ‚ΡŒΡŽ сдСлаСтС ошибки, поэтому Π²Π°ΠΌ, вСроятно, слСдуСт ΠΏΠ΅Ρ€Π΅ΠΉΡ‚ΠΈ Π½Π° ΡΡ‚Π°Ρ‚ΠΈΡ‡Π΅ΡΠΊΡƒΡŽ Ρ‚ΠΈΠΏΠΈΠ·Π°Ρ†ΠΈΡŽ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ ΠΏΠΎΠ»ΠΎΠΌΠΎΠΊ.

    Π’ΠΈΠΏΡ‹

    НаиболСС интСрСсной Ρ‡Π°ΡΡ‚ΡŒΡŽ компилятора (Π½Π° ΠΌΠΎΠΉ взгляд) являСтся ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Ρ‚ΠΈΠΏΠΎΠ². Π’ нашСй Π°Π½Π°Π»ΠΎΠ³ΠΈΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ классифицировал слова ΠΊΠ°ΠΊ части Ρ€Π΅Ρ‡ΠΈ (ΠΏΡ€ΠΈΠ»Π°Π³Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅, ΡΡƒΡ‰Π΅ΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅, Π³Π»Π°Π³ΠΎΠ»Ρ‹), Π° Π·Π°Ρ‚Π΅ΠΌ провСрял, ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ Π»ΠΈ ΠΎΠ½ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ. Π’ΠΈΠΏΡ‹ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ Ρ‚Π°ΠΊ ΠΆΠ΅, ΠΌΡ‹ классифицируСм ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹Π΅ значСния Π½Π° основС повСдСния, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΠΌΡ‹ Ρ…ΠΎΡ‚Π΅Π»ΠΈ Π±Ρ‹, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ½ΠΈ ΠΈΠΌΠ΅Π»ΠΈ. НапримСр. int для чисСл, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠ΅Ρ€Π΅ΠΌΠ½ΠΎΠΆΠ°Ρ‚ΡŒ, String для ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² символов, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΡΡ‚ΡŒ вмСстС. Роль срСдства ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ Ρ‚ΠΈΠΏΠΎΠ² состоит Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€Π΅Π΄ΠΎΡ‚Π²Ρ€Π°Ρ‚ΠΈΡ‚ΡŒ Π½Π΅ΠΆΠ΅Π»Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ объСдинСниС int s ΠΈΠ»ΠΈ ΡƒΠΌΠ½ΠΎΠΆΠ΅Π½ΠΈΠ΅ String s вмСстС β€” эти ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ Π½Π΅ ΠΈΠΌΠ΅ΡŽΡ‚ смысла, поэтому ΠΈΡ… нСльзя Π΄ΠΎΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ. Π‘ Ρ‚ΠΈΠΏΠΎΠΌ , ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡΡŽΡ‰ΠΈΠΌ , программист Π°Π½Π½ΠΎΡ‚ΠΈΡ€ΡƒΠ΅Ρ‚ значСния Ρ‚ΠΈΠΏΠ°ΠΌΠΈ, Π° компилятор провСряСт ΠΈΡ… ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΡΡ‚ΡŒ. ΠŸΡ€ΠΈ Π²Ρ‹Π²ΠΎΠ΄Π΅ Ρ‚ΠΈΠΏΠ° компилятор Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ ΠΈ провСряСт Ρ‚ΠΈΠΏΡ‹. ΠœΡ‹ Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌ ΠΏΡ€Π°Π²ΠΈΠ»Π°, ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡΡŽΡ‰ΠΈΠ΅ Ρ‚ΠΈΠΏΡ‹ суТдСниями ΠΎ Ρ‚ΠΈΠΏΠ°Ρ… , ΠΈ ΠΈΡ… ΡΠΎΠ²ΠΎΠΊΡƒΠΏΠ½ΠΎΡΡ‚ΡŒ (вмСстС с самими Ρ‚ΠΈΠΏΠ°ΠΌΠΈ) ΠΎΠ±Ρ€Π°Π·ΡƒΠ΅Ρ‚ систСму Ρ‚ΠΈΠΏΠΎΠ².

    На самом Π΄Π΅Π»Π΅ оказываСтся, Ρ‡Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Π½Π°ΠΌΠ½ΠΎΠ³ΠΎ большС: систСмы Ρ‚ΠΈΠΏΠΎΠ² Π½Π΅ просто ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡΡŽΡ‚, int s ΠΈΠ»ΠΈ String s ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ. Π‘ΠΎΠ»Π΅Π΅ Π±ΠΎΠ³Π°Ρ‚Ρ‹Π΅ систСмы Ρ‚ΠΈΠΏΠΎΠ² ΠΌΠΎΠ³ΡƒΡ‚ Π΄ΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ Π±ΠΎΠ»Π΅Π΅ ΡΠΈΠ»ΡŒΠ½Ρ‹Π΅ ΠΈΠ½Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Ρ‹ ΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°Ρ…: ΠΎΠ½ΠΈ Π·Π°Π²Π΅Ρ€ΡˆΠ°Ρ‚ΡΡ, бСзопасно ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚ доступ ΠΊ памяти ΠΈΠ»ΠΈ Ρ‡Ρ‚ΠΎ ΠΎΠ½ΠΈ Π½Π΅ содСрТат Π³ΠΎΠ½ΠΎΠΊ Π΄Π°Π½Π½Ρ‹Ρ…. НапримСр, систСма Ρ‚ΠΈΠΏΠΎΠ² Rust Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΡƒΠ΅Ρ‚ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡ‚ΡŒ памяти ΠΈ свободу ΠΎΡ‚ Π³ΠΎΠ½ΠΊΠΈ Π΄Π°Π½Π½Ρ‹Ρ…, Π° Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΡƒ Ρ‚Ρ€Π°Π΄ΠΈΡ†ΠΈΠΎΠ½Π½Ρ‹Ρ… Ρ‚ΠΈΠΏΠΎΠ² int s ΠΈ String s.

    Π― создаю ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»Ρ‹ ΠΎ своСм ΠΏΡƒΡ‚Π΅ΡˆΠ΅ΡΡ‚Π²ΠΈΠΈ Π² области Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ обСспСчСния Π² своСм ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΌ Π±ΡŽΠ»Π»Π΅Ρ‚Π΅Π½Π΅!

    Π‘ΠΎΠ²Π΅Ρ‚Ρ‹ ΠΈΠ· ΠšΠ΅ΠΌΠ±Ρ€ΠΈΠ΄ΠΆΠ° ΠΈ Facebook, Π° Ρ‚Π°ΠΊΠΆΠ΅ Ρ€Π°Π½Π½ΠΈΠΉ доступ ΠΊ тСхничСским руководствам ΠΏΠΎ ΠΌΠ°ΡˆΠΈΠ½Π½ΠΎΠΌΡƒ ΠΎΠ±ΡƒΡ‡Π΅Π½ΠΈΡŽ, компиляторам ΠΈ Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ.

    ΠžΠ·Π½Π°ΠΊΠΎΠΌΡŒΡ‚Π΅ΡΡŒ с ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΠΌΠΈ выпусками!

    АдрСс элСктронной ΠΏΠΎΡ‡Ρ‚Ρ‹

    ΠŸΠΎΠ΄ΠΏΠΈΡΡ‹Π²Π°ΡΡΡŒ, Π²Ρ‹ ΡΠΎΠ³Π»Π°ΡˆΠ°Π΅Ρ‚Π΅ΡΡŒ с Условиями обслуТивания ΠΈ ΠŸΠΎΠ»ΠΈΡ‚ΠΈΠΊΠΎΠΉ ΠΊΠΎΠ½Ρ„ΠΈΠ΄Π΅Π½Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ Revue.

    ΠšΡƒΠ΄Π° ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΡ‚ Π‘ΠΎΠ»Ρ‚?

    Π―Π·Ρ‹ΠΊΠΈ программирования Π΄ΠΎ сих ΠΏΠΎΡ€ Π½Π΅ Ρ€Π΅ΡˆΠΈΠ»ΠΈ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ написания бСзопасного ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°. Bolt, ΠΊΠ°ΠΊ ΠΈ Rust, ΠΏΡ€Π΅Π΄ΠΎΡ‚Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π³ΠΎΠ½ΠΊΠΈ Π΄Π°Π½Π½Ρ‹Ρ… (ΠΎΠ±ΡŠΡΡΠ½ΡΠ΅Ρ‚ΡΡ Π² этом Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π΅ Rust), Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ Π±ΠΎΠ»Π΅Π΅ Π΄Π΅Ρ‚Π°Π»ΡŒΠ½Ρ‹ΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ ΠΊ ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΠΈΠ·ΠΌΡƒ. Π”ΠΎ Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ Π²ΠΎΠΈΠ½Ρ‹-клавишники набросятся Π½Π° мСня Π² Π’Π²ΠΈΡ‚Ρ‚Π΅Ρ€Π΅, я Π΄ΡƒΠΌΠ°ΡŽ, Ρ‡Ρ‚ΠΎ Rust ΠΏΡ€ΠΎΠ΄Π΅Π»Π°Π» Π±Π»Π΅ΡΡ‚ΡΡ‰ΡƒΡŽ Ρ€Π°Π±ΠΎΡ‚Ρƒ, Π½Π°Ρ‡Π°Π² Ρ€Π°Π·Π³ΠΎΠ²ΠΎΡ€ ΠΎΠ± этом β€” хотя Bolt, скорСС всСго, Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ станСт мСйнстримом, ΠΎΠ½ дСмонстрируСт Π΄Ρ€ΡƒΠ³ΠΎΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄.

    Если ΠΌΡ‹ сСйчас посмотрим Π½Π° ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅Ρ€, Ρ‚ΠΎ ΡƒΠ²ΠΈΠ΄ΠΈΠΌ, Ρ‡Ρ‚ΠΎ Bolt содСрТит Ρ„Π°Π·Ρ‹ лСксирования, синтаксичСского Π°Π½Π°Π»ΠΈΠ·Π° ΠΈ Π΄Π΅ΡˆΡƒΠ³Π°Ρ€ΠΈΠ·Π°Ρ†ΠΈΠΈ/пониТСния. Он Ρ‚Π°ΠΊΠΆΠ΅ содСрТит нСсколько Ρ„Π°Π· сСриализации ΠΈ дСсСриализации Protobuf: ΠΎΠ½ΠΈ ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Ρ‹ ΠΈΡΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ для прСобразования ΠΌΠ΅ΠΆΠ΄Ρƒ OCaml ΠΈ C++. Он Π½Π°Ρ†Π΅Π»Π΅Π½ Π½Π° LLVM IR, Π° Π·Π°Ρ‚Π΅ΠΌ ΠΌΡ‹ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π°Π΅ΠΌ ΠΏΠ°Ρ€Ρƒ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ выполнСния (pthreads ΠΈ libc) ΠΈ, Π½Π°ΠΊΠΎΠ½Π΅Ρ†, Π²Ρ‹Π²ΠΎΠ΄ΠΈΠΌ наш ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ» , Π΄Π²ΠΎΠΈΡ‡Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ», содСрТащий ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄.

    Однако, Π² ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π° компиляторов, Bolt ΠΈΠΌΠ΅Π΅Ρ‚ Π½Π΅ ΠΎΠ΄ΠΈΠ½, Π° Π΄Π²Π° этапа ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ Ρ‚ΠΈΠΏΠ° ! Bolt ΠΈΠΌΠ΅Π΅Ρ‚ ΠΊΠ°ΠΊ Ρ‚Ρ€Π°Π΄ΠΈΡ†ΠΈΠΎΠ½Π½Ρ‹Π΅ Ρ‚ΠΈΠΏΡ‹, Ρ‚Π°ΠΊ ΠΈ возмоТности , ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π΅ΠΎΡ„ΠΈΡ†ΠΈΠ°Π»ΡŒΠ½ΠΎ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‚ собой Π΅Ρ‰Π΅ ΠΎΠ΄ΠΈΠ½ Π½Π°Π±ΠΎΡ€ Ρ‚ΠΈΠΏΠΎΠ² для ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ Ρ‚ΠΈΠΏΠΎΠ² Π΄Π°Π½Π½Ρ‹Ρ…. Π― написал Π΄ΠΈΡΡΠ΅Ρ€Ρ‚Π°Ρ†ΠΈΡŽ, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ это рассматриваСтся Π±ΠΎΠ»Π΅Π΅ Ρ„ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½ΠΎ, Ссли Π²Π°ΠΌ интСрСсна тСория, Ссли Π½Π΅Ρ‚, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΡ€ΠΎΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ посты, посвящСнныС ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ΅ Π³ΠΎΠ½ΠΊΠΈ Π΄Π°Π½Π½Ρ‹Ρ… Π² этой сСрии. Π‘Π½Π°Ρ‡Π°Π»Π° ΠΌΡ‹ провСряСм Ρ‚Ρ€Π°Π΄ΠΈΡ†ΠΈΠΎΠ½Π½Ρ‹Π΅ Ρ‚ΠΈΠΏΡ‹, Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ ΡƒΠΏΡ€ΠΎΡ‰Π°Π΅ΠΌ язык Π½Π° этапС Π΄Π΅ΡˆΡƒΠ³Π°Ρ€ΠΈΠ½Π³Π°, Π° Π·Π°Ρ‚Π΅ΠΌ выполняСм ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΡƒ Ρ‚ΠΈΠΏΠΎΠ² Π½Π° основС Π³ΠΎΠ½ΠΊΠΈ Π΄Π°Π½Π½Ρ‹Ρ….

    А Ρ‡Ρ‚ΠΎ насчСт этой сСрии?

    Π­Ρ‚Ρƒ ΡΠ΅Ρ€ΠΈΡŽ статСй ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°Ρ‚ΡŒ с Π΄Π²ΡƒΡ… Ρ‚ΠΎΡ‡Π΅ΠΊ зрСния: Π²ΠΎ-ΠΏΠ΅Ρ€Π²Ρ‹Ρ…, ΠΌΡ‹ Π±ΡƒΠ΄Π΅ΠΌ ΠΎΠ±ΡΡƒΠΆΠ΄Π°Ρ‚ΡŒ Π΄ΠΈΠ·Π°ΠΉΠ½ языка ΠΈ ΡΡ€Π°Π²Π½ΠΈΠ²Π°Ρ‚ΡŒ Bolt с Java, C++ ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ языками. Π’ΠΎ-Π²Ρ‚ΠΎΡ€Ρ‹Ρ…, это практичСскоС пошаговоС руководство ΠΏΠΎ созданию собствСнного компилятора. Π’ ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ ΠΌΠ½ΠΎΠ³ΠΈΡ… руководств ΠΏΠΎ сборкС собствСнного компилятора, Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… рассказываСтся, ΠΊΠ°ΠΊ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΈΠ³Ρ€ΡƒΡˆΠ΅Ρ‡Π½Ρ‹ΠΉ язык , Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Ρ‚Π΅ΠΌΡ‹, рассматриваСмыС Π² этом руководствС, ΡΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‚ основу ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½Ρ‹Ρ… ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Ρ… языков, Ρ‚Π°ΠΊΠΈΡ… ΠΊΠ°ΠΊ Java: ΠΊΠ°ΠΊ Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽΡ‚ΡΡ классы, ΠΊΠ°ΠΊ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ наслСдованиС. , ΡƒΠ½ΠΈΠ²Π΅Ρ€ΡΠ°Π»ΡŒΠ½Ρ‹Π΅ классы ΠΈ Π΄Π°ΠΆΠ΅ Ρ‚ΠΎ, ΠΊΠ°ΠΊ ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΠΈΠ·ΠΌ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ ΠΏΠΎΠ΄ ΠΊΠ°ΠΏΠΎΡ‚ΠΎΠΌ.

    Π‘ΠΎΠ»Ρ‚ Ρ‚Π°ΠΊΠΆΠ΅ Π½Π΅ Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ ΠΈΠ³Ρ€ΡƒΡˆΠ΅Ρ‡Π½Ρ‹Π΅ инструкции, Π° вмСсто этого нацСливаСтся Π½Π° LLVM IR . На ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅ это ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Bolt ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ ΡƒΠ΄ΠΈΠ²ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ, ΠΏΡ€ΠΈΡΡƒΡ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ Π² компиляторах C/C++. LLVM API являСтся ΠΌΠΎΡ‰Π½Ρ‹ΠΌ, Π½ΠΎ Ρ‚Π°ΠΊΠΆΠ΅ ΠΎΡ‡Π΅Π½ΡŒ слоТно ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π² Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ. Π― ΠΏΡ€ΠΎΠ²Π΅Π» ΠΌΠ½ΠΎΠ³ΠΎ Π΄ΠΎΠ»Π³ΠΈΡ… Π½ΠΎΡ‡Π΅ΠΉ, рСконструируя ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π½Π° C++ β€” надСюсь, эта сСрия ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ‚ хотя Π±Ρ‹ ΠΎΠ΄Π½ΠΎΠΌΡƒ Ρ‡Π΅Π»ΠΎΠ²Π΅ΠΊΡƒ ΠΏΡ€ΠΎΠΉΡ‚ΠΈ Ρ‡Π΅Ρ€Π΅Π· эту боль!

    Π’ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ части ΠΌΡ‹ рассмотрим практичСскиС аспСкты настройки ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° компилятора β€” я ΠΏΡ€ΠΎΠΉΠ΄ΡƒΡΡŒ ΠΏΠΎ Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΡŽ Bolt ΠΈ объясню ΠΏΠΎΡ‡Π΅ΠΌΡƒ ΠΌΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ OCaml всСх языков для внСшнСго интСрфСйса.

    Π‘ΠΎΠ·Π΄Π°ΠΉΡ‚Π΅ свой собствСнный язык программирования

    ΠšΠΎΠ½Π΅Ρ‡Π½ΠΎ, Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΠ·ΠΎΠ±Ρ€Π΅Ρ‚Π°Ρ‚Π΅Π»ΠΈ языков программирования, Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ ДСннис Π ΠΈΡ‚Ρ‡ΠΈ ΠΈΠ»ΠΈ Π“Π²ΠΈΠ΄ΠΎ Π²Π°Π½ Россум, ΡΠ²Π»ΡΡŽΡ‚ΡΡ Ρ€ΠΎΠΊ-Π·Π²Π΅Π·Π΄Π°ΠΌΠΈ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΠΊΠΈ! Но Ρ‚ΠΎΠ³Π΄Π° ΡΡ‚Π°Ρ‚ΡŒ Ρ€ΠΎΠΊ-Π·Π²Π΅Π·Π΄ΠΎΠΉ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΠΊΠΈ Π±Ρ‹Π»ΠΎ ΠΏΡ€ΠΎΡ‰Π΅. Π”Π°Π²Π½Ρ‹ΠΌ-Π΄Π°Π²Π½ΠΎ я ΡΠ»Ρ‹ΡˆΠ°Π» ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ Π΄ΠΎΠΊΠ»Π°Π΄ ΠΎΡ‚ участника Π²Ρ‚ΠΎΡ€ΠΎΠΉ ΠΊΠΎΠ½Ρ„Π΅Ρ€Π΅Π½Ρ†ΠΈΠΈ History of Programming Languages: ВсС ΠΏΡ€ΠΈΡˆΠ»ΠΈ ΠΊ Π΅Π΄ΠΈΠ½ΠΎΠΌΡƒ мнСнию, Ρ‡Ρ‚ΠΎ ΠΎΠ±Π»Π°ΡΡ‚ΡŒ языков программирования ΠΌΠ΅Ρ€Ρ‚Π²Π°. ВсС Π²Π°ΠΆΠ½Ρ‹Π΅ языки ΡƒΠΆΠ΅ ΠΈΠ·ΠΎΠ±Ρ€Π΅Ρ‚Π΅Π½Ρ‹ . Π­Ρ‚ΠΎ Π±Ρ‹Π»ΠΎ Π΄ΠΎΠΊΠ°Π·Π°Π½ΠΎ Π²ΠΎΠΏΠΈΡŽΡ‰Π΅ΠΉ Π½Π΅ΠΏΡ€Π°Π²ΠΎΡ‚ΠΎΠΉ Π³ΠΎΠ΄ ΠΈΠ»ΠΈ Π΄Π²Π° спустя, ΠΊΠΎΠ³Π΄Π° Π½Π° сцСну Π²Ρ‹ΡˆΠ»Π° Java, ΠΈ, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Π΅Ρ‰Π΅ Π΄ΡŽΠΆΠΈΠ½Ρƒ Ρ€Π°Π· с Ρ‚Π΅Ρ… ΠΏΠΎΡ€, ΠΊΠΎΠ³Π΄Π° появились Ρ‚Π°ΠΊΠΈΠ΅ языки, ΠΊΠ°ΠΊ Go. По ΠΏΡ€ΠΎΡˆΠ΅ΡΡ‚Π²ΠΈΠΈ всСго лишь ΡˆΠ΅ΡΡ‚ΠΈ дСсятилСтий Π±Ρ‹Π»ΠΎ Π±Ρ‹ Π½Π΅Ρ€Π°Π·ΡƒΠΌΠ½ΠΎ ΡƒΡ‚Π²Π΅Ρ€ΠΆΠ΄Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ наша ΠΎΠ±Π»Π°ΡΡ‚ΡŒ Π·Ρ€Π΅Π»Π° ΠΈ Ρ‡Ρ‚ΠΎ Π½Π΅Ρ‚ Π½ΠΈΡ‡Π΅Π³ΠΎ Π½ΠΎΠ²ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ Π±Ρ‹ ΠΈΠ·ΠΎΠ±Ρ€Π΅Ρ‚Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΌΠΎΠ³Π»ΠΎ Π±Ρ‹ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ вас Π·Π½Π°ΠΌΠ΅Π½ΠΈΡ‚Ρ‹ΠΌ.

    Π’Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅, ΠΈΠ·Π²Π΅ΡΡ‚Π½ΠΎΡΡ‚ΡŒ β€” ΠΏΠ»ΠΎΡ…ΠΎΠΉ ΠΏΠΎΠ²ΠΎΠ΄ для создания языка программирования. Шансы ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΈΠ·Π²Π΅ΡΡ‚Π½ΠΎΡΡ‚ΡŒ ΠΈΠ»ΠΈ богатство благодаря ΠΈΠ·ΠΎΠ±Ρ€Π΅Ρ‚Π΅Π½ΠΈΡŽ языка программирования Π½Π΅Π²Π΅Π»ΠΈΠΊΠΈ. Π›ΡŽΠ±ΠΎΠΏΡ‹Ρ‚ΡΡ‚Π²ΠΎ ΠΈ ΠΆΠ΅Π»Π°Π½ΠΈΠ΅ ΡƒΠ·Π½Π°Ρ‚ΡŒ, ΠΊΠ°ΠΊ всС устроСно, ΡΠ²Π»ΡΡŽΡ‚ΡΡ вСскими ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π°ΠΌΠΈ, Ссли Ρƒ вас Π΅ΡΡ‚ΡŒ врСмя ΠΈ ΠΆΠ΅Π»Π°Π½ΠΈΠ΅, Π½ΠΎ, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Π»ΡƒΡ‡ΡˆΠΈΠ΅ ΠΏΡ€ΠΈΡ‡ΠΈΠ½Ρ‹ для создания собствСнного языка программирования β€” ΠΏΠΎΡ‚Ρ€Π΅Π±Π½ΠΎΡΡ‚ΡŒ ΠΈ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒ.

    НСкоторым людям Π½ΡƒΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Π½ΠΎΠ²Ρ‹ΠΉ язык ΠΈΠ»ΠΈ Π½ΠΎΠ²ΡƒΡŽ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π³ΠΎ языка программирования, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π½Π° Π½ΠΎΠ²Ρ‹ΠΉ процСссор ΠΈΠ»ΠΈ ΠΊΠΎΠ½ΠΊΡƒΡ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ с ΠΊΠΎΠ½ΠΊΡƒΡ€ΠΈΡ€ΡƒΡŽΡ‰Π΅ΠΉ ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠ΅ΠΉ. Если это Π½Π΅ Π²Ρ‹, Ρ‚ΠΎ, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Π²Ρ‹ смотрСли Π½Π° Π»ΡƒΡ‡ΡˆΠΈΠ΅ языки (ΠΈ компиляторы ΠΈΠ»ΠΈ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€Ρ‹), доступныС для ΠΊΠ°ΠΊΠΎΠΉ-Ρ‚ΠΎ области, для ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Π²Ρ‹ Ρ€Π°Π·Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅Ρ‚Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, ΠΈ Π² Π½ΠΈΡ… ΠΎΡ‚ΡΡƒΡ‚ΡΡ‚Π²ΡƒΡŽΡ‚ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ Π²Ρ‹ Π΄Π΅Π»Π°Π΅Ρ‚Π΅, ΠΈ эти Π½Π΅Π΄ΠΎΡΡ‚Π°ΡŽΡ‰ΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ причиняя Ρ‚Π΅Π±Π΅ боль. ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ€Π°Π· Π² Π³ΠΎΠ»ΡƒΠ±ΠΎΠΉ Π»ΡƒΠ½Π΅ ΠΊΡ‚ΠΎ-Ρ‚ΠΎ ΠΏΡ€ΠΈΠ΄ΡƒΠΌΡ‹Π²Π°Π΅Ρ‚ ΡΠΎΠ²Π΅Ρ€ΡˆΠ΅Π½Π½ΠΎ Π½ΠΎΠ²Ρ‹ΠΉ ΡΡ‚ΠΈΠ»ΡŒ вычислСний, для ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ новая ΠΏΠ°Ρ€Π°Π΄ΠΈΠ³ΠΌΠ° программирования Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ Π½ΠΎΠ²ΠΎΠ³ΠΎ языка.

    Пока ΠΌΡ‹ обсуТдаСм ваши ΠΌΠΎΡ‚ΠΈΠ²Ρ‹ для создания языка, Π΄Π°Π²Π°ΠΉΡ‚Π΅ ΠΏΠΎΠ³ΠΎΠ²ΠΎΡ€ΠΈΠΌ ΠΎ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… Ρ‚ΠΈΠΏΠ°Ρ… языков, ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΈ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°Ρ…, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ эта ΠΊΠ½ΠΈΠ³Π° Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π² качСствС руководства. КаТдая ΠΈΠ· этих Ρ‚Π΅ΠΌ заслуТиваСт внимания.

    Π’ΠΈΠΏΡ‹ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ языков программирования

    Какими Π±Ρ‹ Π½ΠΈ Π±Ρ‹Π»ΠΈ ваши ΠΏΡ€ΠΈΡ‡ΠΈΠ½Ρ‹, ΠΏΡ€Π΅ΠΆΠ΄Π΅ Ρ‡Π΅ΠΌ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ язык программирования, Π²Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ Π»ΡƒΡ‡ΡˆΠΈΠ΅ инструмСнты ΠΈ Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π½Π°ΠΉΡ‚ΠΈ для выполнСния этой Ρ€Π°Π±ΠΎΡ‚Ρ‹. Π’ нашСм случаС эта ΠΊΠ½ΠΈΠ³Π° ΠΏΠΎΠ΄Π±Π΅Ρ€Π΅Ρ‚ ΠΈΡ… для вас. Π’ΠΎ-ΠΏΠ΅Ρ€Π²Ρ‹Ρ…, Π΅ΡΡ‚ΡŒ вопрос ΠΎ языкС Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ Π²Ρ‹ строитС свой язык. Π˜ΡΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΠΈ языков программирования Π»ΡŽΠ±ΡΡ‚ Ρ…Π²Π°ΡΡ‚Π°Ρ‚ΡŒΡΡ Ρ‚Π΅ΠΌ, Ρ‡Ρ‚ΠΎ ΠΏΠΈΡˆΡƒΡ‚ свой язык Π½Π° самом этом языкС, Π½ΠΎ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ это Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΠΎΠ»ΡƒΠΏΡ€Π°Π²Π΄Π° (ΠΈΠ»ΠΈ ΠΊΡ‚ΠΎ-Ρ‚ΠΎ Π±Ρ‹Π» ΠΎΡ‡Π΅Π½ΡŒ Π½Π΅ΠΏΡ€Π°ΠΊΡ‚ΠΈΡ‡Π½Ρ‹ΠΌ ΠΈ Ρ…Π²Π°ΡΡ‚Π°Ρ‚ΡŒΡΡ Π·Π°ΠΎΠ΄Π½ΠΎ). Π’Π°ΠΊΠΆΠ΅ Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ вопрос, ΠΊΠ°ΠΊΡƒΡŽ ΠΈΠΌΠ΅Π½Π½ΠΎ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ языка программирования ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ:

    • Чистый ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ , ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ сам выполняСт исходный ΠΊΠΎΠ΄
    • БобствСнный компилятор ΠΈ систСма выполнСния, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ C
    • Вранспилятор , ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄ΠΈΡ‚ ваш язык Π½Π° Π΄Ρ€ΡƒΠ³ΠΎΠΉ язык высокого уровня
    • ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ‚ΠΎΡ€ Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄Π° с ΡΠΎΠΏΡƒΡ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅ΠΉ машиной Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄Π°, Ρ‚Π°ΠΊΠΎΠΉ ΠΊΠ°ΠΊ Java

    ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ вСсСлый, Π½ΠΎ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ слишком ΠΌΠ΅Π΄Π»Π΅Π½Π½Ρ‹ΠΉ. Π’Ρ‚ΠΎΡ€ΠΎΠΉ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ самый Π»ΡƒΡ‡ΡˆΠΈΠΉ, Π½ΠΎ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ ΠΎΠ½ слишком Ρ‚Ρ€ΡƒΠ΄ΠΎΠ΅ΠΌΠΊΠΈΠΉ; Ρ…ΠΎΡ€ΠΎΡˆΠΈΠΉ собствСнный компилятор ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΎΠ²Π°Ρ‚ΡŒ ΠΌΠ½ΠΎΠ³ΠΈΡ… Ρ‡Π΅Π»ΠΎΠ²Π΅ΠΊΠΎ-Π»Π΅Ρ‚ усилий.

    Π₯отя Ρ‚Ρ€Π΅Ρ‚ΠΈΠΉ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚, бСзусловно, самый простой ΠΈ, вСроятно, самый вСсСлый, ΠΈ я ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ использовал Π΅Π³ΠΎ Ρ€Π°Π½ΡŒΡˆΠ΅, Ссли это Π½Π΅ ΠΏΡ€ΠΎΡ‚ΠΎΡ‚ΠΈΠΏ, Ρ‚ΠΎ это своСго Ρ€ΠΎΠ΄Π° читСрство. ΠšΠΎΠ½Π΅Ρ‡Π½ΠΎ, пСрвая вСрсия C++ Π±Ρ‹Π»Π° транспилСром, Π½ΠΎ ΠΎΠ½ уступил мСсто компиляторам, ΠΈ Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΠΎΡ‚ΠΎΠΌΡƒ, Ρ‡Ρ‚ΠΎ содСрТал ошибки. Как Π½ΠΈ странно, созданиС высокоуровнСвого ΠΊΠΎΠ΄Π° Π΄Π΅Π»Π°Π΅Ρ‚ ваш язык Π΅Ρ‰Π΅ Π±ΠΎΠ»Π΅Π΅ зависимым ΠΎΡ‚ Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ языка, Ρ‡Π΅ΠΌ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Ρ‹, Π° языки β€” двиТущиСся Ρ†Π΅Π»ΠΈ. Π₯ΠΎΡ€ΠΎΡˆΠΈΠ΅ языки ΡƒΠΌΠ΅Ρ€Π»ΠΈ, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ Π»Π΅ΠΆΠ°Ρ‰ΠΈΠ΅ Π² ΠΈΡ… основС зависимости ΠΎΡ‚ Π½ΠΈΡ… исчСзли ΠΈΠ»ΠΈ Π±Π΅Π·Π²ΠΎΠ·Π²Ρ€Π°Ρ‚Π½ΠΎ сломались. Π­Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΡΠΌΠ΅Ρ€Ρ‚ΡŒ ΠΎΡ‚ тысячи ΠΌΠ°Π»Π΅Π½ΡŒΠΊΠΈΡ… ΠΏΠΎΡ€Π΅Π·ΠΎΠ².

    Π’ этой ΠΊΠ½ΠΈΠ³Π΅ Π²Ρ‹Π±Ρ€Π°Π½ Ρ‡Π΅Ρ‚Π²Π΅Ρ€Ρ‚Ρ‹ΠΉ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚: ΠΌΡ‹ создадим компилятор Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄Π° с ΡΠΎΠΏΡƒΡ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅ΠΉ машиной Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄Π°, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ это Π»ΡƒΡ‡ΡˆΠ΅Π΅ мСсто, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π΄Π°Π΅Ρ‚ Π½Π°ΠΈΠ±ΠΎΠ»ΡŒΡˆΡƒΡŽ Π³ΠΈΠ±ΠΊΠΎΡΡ‚ΡŒ, Π½ΠΎ ΠΏΡ€ΠΈ этом обСспСчиваСт Π΄ΠΎΡΡ‚ΠΎΠΉΠ½ΡƒΡŽ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ. Для Ρ‚Π΅Ρ… ΠΈΠ· вас, ΠΊΠΎΠΌΡƒ трСбуСтся максимально быстроС Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅, Π²ΠΊΠ»ΡŽΡ‡Π΅Π½Π° Π³Π»Π°Π²Π° ΠΎ компиляции собствСнного ΠΊΠΎΠ΄Π°.

    ΠŸΠΎΠ½ΡΡ‚ΠΈΠ΅ ΠΌΠ°ΡˆΠΈΠ½Ρ‹ Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄Π° ΠΎΡ‡Π΅Π½ΡŒ старо; ΠΎΠ½ прославился, срСди ΠΏΡ€ΠΎΡ‡Π΅Π³ΠΎ, Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠ΅ΠΉ Pascal ΠΎΡ‚ UCSD ΠΈ классичСской Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠ΅ΠΉ SmallTalk-80. Он стал повсСмСстным Π΄ΠΎ Ρ‚Π°ΠΊΠΎΠΉ стСпСни, Ρ‡Ρ‚ΠΎ стал доступСн Π½Π΅ΠΏΡ€ΠΎΡ„Π΅ΡΡΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠΌΡƒ английскому языку с ΠΎΠ±Π½Π°Ρ€ΠΎΠ΄ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ Java JVM. ΠœΠ°ΡˆΠΈΠ½Ρ‹ Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄Π° β€” это абстрактныС процСссоры, ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚ΠΈΡ€ΡƒΠ΅ΠΌΡ‹Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹ΠΌ обСспСчСниСм; ΠΈΡ… часто Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΌΠ°ΡˆΠΈΠ½Ρ‹ (ΠΊΠ°ΠΊ Π² Π’ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Π°Ρ машина Java ), хотя я Π½Π΅ Π±ΡƒΠ΄Ρƒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ эту Ρ‚Π΅Ρ€ΠΌΠΈΠ½ΠΎΠ»ΠΎΠ³ΠΈΡŽ, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ ΠΎΠ½Π° Ρ‚Π°ΠΊΠΆΠ΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для обозначСния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹Ρ… инструмСнтов, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ Π½Π°Π±ΠΎΡ€Ρ‹ Ρ€Π΅Π°Π»ΡŒΠ½Ρ‹Ρ… Π°ΠΏΠΏΠ°Ρ€Π°Ρ‚Π½Ρ‹Ρ… инструкций, Ρ‚Π°ΠΊΠΈΡ… ΠΊΠ°ΠΊ классичСскиС ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹ IBM ΠΈΠ»ΠΈ Π±ΠΎΠ»Π΅Π΅ соврСмСнныС инструмСнты, Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ Π’ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹ΠΉ ящик .

    Машина Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄Π° ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ ΠΈΠΌΠ΅Π΅Ρ‚ Π±ΠΎΠ»Π΅Π΅ высокий ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ, Ρ‡Π΅ΠΌ Π°ΠΏΠΏΠ°Ρ€Π°Ρ‚Π½ΠΎΠ΅ обСспСчСниС, поэтому рСализация Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄Π° обСспСчиваСт Π±ΠΎΠ»ΡŒΡˆΡƒΡŽ Π³ΠΈΠ±ΠΊΠΎΡΡ‚ΡŒ. Π”Π°Π²Π°ΠΉΡ‚Π΅ быстро посмотрим, Ρ‡Ρ‚ΠΎ Π½ΡƒΠΆΠ½ΠΎ для этого…

    ΠžΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΡ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ языка Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄Π°

    Π’ Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ стСпСни организация этой ΠΊΠ½ΠΈΠ³ΠΈ соотвСтствуСт классичСской ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΠΈ компилятора Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄Π° ΠΈ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅ΠΉ Π΅ΠΌΡƒ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠΉ ΠΌΠ°ΡˆΠΈΠ½Ρ‹. Π­Ρ‚ΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Ρ‹ здСсь, Π° Π·Π°Ρ‚Π΅ΠΌ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π° Π΄ΠΈΠ°Π³Ρ€Π°ΠΌΠΌΠ°, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ±ΠΎΠ±Ρ‰ΠΈΡ‚ΡŒ ΠΈΡ…:

    • ЛСксичСский Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€ считываСт символы исходного ΠΊΠΎΠ΄Π° ΠΈ выясняСт, ΠΊΠ°ΠΊ ΠΎΠ½ΠΈ сгруппированы Π² ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ слов ΠΈΠ»ΠΈ Ρ‚ΠΎΠΊΠ΅Π½ΠΎΠ².
    • БинтаксичСский Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€ считываСт ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ Ρ‚ΠΎΠΊΠ΅Π½ΠΎΠ² ΠΈ опрСдСляСт, являСтся Π»ΠΈ эта ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ допустимой Π² соотвСтствии с Π³Ρ€Π°ΠΌΠΌΠ°Ρ‚ΠΈΠΊΠΎΠΉ языка. Если Ρ‚ΠΎΠΊΠ΅Π½Ρ‹ находятся Π² ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΠΌ порядкС, создаСтся синтаксичСскоС Π΄Π΅Ρ€Π΅Π²ΠΎ.
    • БСмантичСский Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€ провСряСт, ΡΠ²Π»ΡΡŽΡ‚ΡΡ Π»ΠΈ всС ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Π΅ ΠΈΠΌΠ΅Π½Π° допустимыми для ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ, Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΎΠ½ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ. Он провСряСт ΠΈΡ… Ρ‚ΠΈΠΏΡ‹, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Ρ‚ΠΎΡ‡Π½ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ, ΠΊΠ°ΠΊΠΈΠ΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ΡΡ. Вся эта ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π΄Π΅Π»Π°Π΅Ρ‚ синтаксичСскоС Π΄Π΅Ρ€Π΅Π²ΠΎ тяТСлым, ΠΏΠ΅Ρ€Π΅Π³Ρ€ΡƒΠΆΠ΅Π½Π½Ρ‹ΠΌ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠ΅ΠΉ ΠΎ Ρ‚ΠΎΠΌ, Π³Π΄Π΅ ΠΎΠ±ΡŠΡΠ²Π»Π΅Π½Ρ‹ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ ΠΈ ΠΊΠ°ΠΊΠΎΠ²Ρ‹ ΠΈΡ… Ρ‚ΠΈΠΏΡ‹.
    • Π“Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€ ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° вычисляСт ячСйки памяти для всСх ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… ΠΈ всСх мСст, Π³Π΄Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° ΠΌΠΎΠΆΠ΅Ρ‚ Ρ€Π΅Π·ΠΊΠΎ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΠΏΠΎΡ‚ΠΎΠΊ выполнСния, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Ρ†ΠΈΠΊΠ»Ρ‹ ΠΈ Π²Ρ‹Π·ΠΎΠ²Ρ‹ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ. Он добавляСт ΠΈΡ… Π² синтаксичСскоС Π΄Π΅Ρ€Π΅Π²ΠΎ, Π° Π·Π°Ρ‚Π΅ΠΌ ΠΏΡ€ΠΎΡ…ΠΎΠ΄ΠΈΡ‚ ΠΏΠΎ этому Π΅Ρ‰Π΅ Π±ΠΎΠ»Π΅Π΅ толстому Π΄Π΅Ρ€Π΅Π²Ρƒ ΠΏΠ΅Ρ€Π΅Π΄ построСниСм списка машинно-нСзависимых инструкций ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°.
    • Π“Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€ ΠΎΠΊΠΎΠ½Ρ‡Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΠ΅Ρ‚ список инструкций ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° Π² фактичСский Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄ Π² Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅ Ρ„Π°ΠΉΠ»Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±ΡƒΠ΄Π΅Ρ‚ эффСктивСн для Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ ΠΈ выполнСния.

    НСзависимо ΠΎΡ‚ шагов этого компилятора Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠΉ ΠΌΠ°ΡˆΠΈΠ½Ρ‹ Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄Π°, ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄Π° написан для Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ ΠΈ выполнСния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ. Π­Ρ‚ΠΎ гигантский Ρ†ΠΈΠΊΠ» с ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠΌ switch Π²Π½ΡƒΡ‚Ρ€ΠΈ, Π½ΠΎ для экзотичСских языков программирования компилятор ΠΌΠΎΠΆΠ΅Ρ‚ Π½Π΅ ΠΈΠΌΠ΅Ρ‚ΡŒ большого значСния, ΠΈ вся магия Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€ΠΎΠΈΡΡ…ΠΎΠ΄ΠΈΡ‚ΡŒ Π² ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€Π΅ Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄Π°. Π’ΡΡŽ ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΡŽ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ Π΄ΠΈΠ°Π³Ρ€Π°ΠΌΠΌΠΎΠΉ:

    Рисунок 1.1 – Π€Π°Π·Ρ‹ ΠΈ ΠΏΠΎΡ‚ΠΎΠΊ Π΄Π°Π½Π½Ρ‹Ρ… Π² простом языкС программирования

    ΠŸΠΎΡ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ΡΡ ΠΌΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΎΠΈΠ»Π»ΡŽΡΡ‚Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ, ΠΊΠ°ΠΊ ΠΏΠΎΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ ΠΌΠ°ΡˆΠΈΠ½Ρƒ Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄Π° для Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ языка программирования. Π’ΠΎ, ΠΊΠ°ΠΊ прСдставлСн этот ΠΊΠΎΠ΄, Π²Π°ΠΆΠ½ΠΎ ΠΈ подскаТСт Π²Π°ΠΌ, Ρ‡Ρ‚ΠΎ Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ Π·Π½Π°Ρ‚ΡŒ, ΠΈ ΠΌΠ½ΠΎΠ³ΠΎΠ΅ ΠΈΠ· Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡƒΠ·Π½Π°Ρ‚ΡŒ, ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Π² эту ΠΊΠ½ΠΈΠ³Ρƒ.

    Π―Π·Ρ‹ΠΊΠΈ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½Π½Ρ‹Π΅ Π² ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°Ρ…

    Π’ этой ΠΊΠ½ΠΈΠ³Π΅ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Ρ‹ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ ΠΊΠΎΠ΄Π° Π½Π° Π΄Π²ΡƒΡ… языках с использованиСм ΠΌΠΎΠ΄Π΅Π»ΠΈ ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½Ρ‹Ρ… ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄ΠΎΠ² . ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ язык β€” Java , ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ этот язык распространСн повсСмСстно. НадСюсь, Π²Ρ‹ Π·Π½Π°Π΅Ρ‚Π΅ Π΅Π³ΠΎ ΠΈΠ»ΠΈ C++ ΠΈ смоТСтС Ρ‡ΠΈΡ‚Π°Ρ‚ΡŒ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ Π½Π° срСднСм ΡƒΡ€ΠΎΠ²Π½Π΅. Π’Ρ‚ΠΎΡ€ΠΎΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ языка β€” это собствСнный язык Π°Π²Ρ‚ΠΎΡ€Π°, Unicon . Читая эту ΠΊΠ½ΠΈΠ³Ρƒ, Π²Ρ‹ смоТСтС сами Ρ€Π΅ΡˆΠΈΡ‚ΡŒ, ΠΊΠ°ΠΊΠΎΠΉ язык Π»ΡƒΡ‡ΡˆΠ΅ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΡ‚ для создания собствСнного языка программирования. Максимально Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΠ΅ количСство ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠ² Π±ΡƒΠ΄Π΅Ρ‚ прСдоставлСно Π½Π° ΠΎΠ±ΠΎΠΈΡ… языках, ΠΈ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ Π½Π° Π΄Π²ΡƒΡ… языках Π±ΡƒΠ΄ΡƒΡ‚ написаны максимально ΠΏΠΎΡ…ΠΎΠΆΠ΅. Иногда это Π±ΡƒΠ΄Π΅Ρ‚ Π² ΠΏΠΎΠ»ΡŒΠ·Ρƒ мСньшСго языка.

    Различия ΠΌΠ΅ΠΆΠ΄Ρƒ Java ΠΈ Unicon Π±ΡƒΠ΄ΡƒΡ‚ ΠΎΡ‡Π΅Π²ΠΈΠ΄Π½Ρ‹, Π½ΠΎ ΠΈΡ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ нСсколько ΡƒΠΌΠ΅Π½ΡŒΡˆΠΈΡ‚ΡΡ благодаря срСдствам построСния компилятора, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΡ‹ Π±ΡƒΠ΄Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ. ΠœΡ‹ Π±ΡƒΠ΄Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ соврСмСнныС ΠΏΠΎΡ‚ΠΎΠΌΠΊΠΈ ΠΏΠΎΡ‡Ρ‚Π΅Π½Π½Ρ‹Ρ… инструмСнтов Lex ΠΈ YACC для создания нашСго сканСра ΠΈ синтаксичСского Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€Π°, ΠΈ, ΠΏΡ€ΠΈΠ΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡΡΡŒ инструмСнтов для Java ΠΈ Unicon, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΎΡΡ‚Π°ΡŽΡ‚ΡΡ максимально совмСстимыми с ΠΎΡ€ΠΈΠ³ΠΈΠ½Π°Π»ΡŒΠ½Ρ‹ΠΌΠΈ Lex ΠΈ YACC, внСшниС интСрфСйсы нашСго компилятора Π±ΡƒΠ΄ΡƒΡ‚ ΠΏΠΎΡ‡Ρ‚ΠΈ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ‡Π½Ρ‹ΠΌΠΈ. Π½Π° ΠΎΠ±ΠΎΠΈΡ… языках. Lex ΠΈ YACC β€” это Π΄Π΅ΠΊΠ»Π°Ρ€Π°Ρ‚ΠΈΠ²Π½Ρ‹Π΅ языки программирования, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Ρ€Π΅ΡˆΠ°ΡŽΡ‚ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΠ· Π½Π°ΡˆΠΈΡ… слоТных ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ Π½Π° Π±ΠΎΠ»Π΅Π΅ высоком ΡƒΡ€ΠΎΠ²Π½Π΅, Ρ‡Π΅ΠΌ Java ΠΈΠ»ΠΈ Unicon.

    Пока ΠΌΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ Java ΠΈ Unicon Π² качСствС языков Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ, Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠΎΠ³ΠΎΠ²ΠΎΡ€ΠΈΡ‚ΡŒ Π΅Ρ‰Π΅ ΠΎΠ± ΠΎΠ΄Π½ΠΎΠΌ языкС: языкС-ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΡ‹ создаСм. Π­Ρ‚ΠΎ Π·Π°ΠΌΠ΅Π½Π° для любого языка, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π²Ρ‹ Ρ€Π΅ΡˆΠΈΡ‚Π΅ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ. НСсколько ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½ΠΎ я Π²Π²Π΅Π΄Ρƒ для этой Ρ†Π΅Π»ΠΈ язык ΠΏΠΎΠ΄ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ΠΌ Jzero . Никлаус Π’ΠΈΡ€Ρ‚ ΠΈΠ·ΠΎΠ±Ρ€Π΅Π» ΠΈΠ³Ρ€ΡƒΡˆΠ΅Ρ‡Π½Ρ‹ΠΉ язык ΠΏΠΎΠ΄ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ΠΌ PL/0 (язык программирования ноль ; Π½Π°Π·Π²Π°Π½ΠΈΠ΅ являСтся Ρ€ΠΈΡ„Ρ„ΠΎΠΌ ΠΎΡ‚ названия языка PL/1 ), ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ использовался Π² курсах ΠΏΠΎ созданию компиляторов. Jzero Π±ΡƒΠ΄Π΅Ρ‚ ΠΊΡ€ΠΎΡˆΠ΅Ρ‡Π½Ρ‹ΠΌ подмноТСством Java, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ слуТит Ρ‚ΠΎΠΉ ΠΆΠ΅ Ρ†Π΅Π»ΠΈ. я посмотрСл довольно слоТно (Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ я ΠΏΠΎΠ³ΡƒΠ³Π»ΠΈΠ» Jzero , Π° Π·Π°Ρ‚Π΅ΠΌ компилятор Jzero ), Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ, Π½Π΅ ΠΎΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Π» Π»ΠΈ ΠΊΡ‚ΠΎ-Π½ΠΈΠ±ΡƒΠ΄ΡŒ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Jzero, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΠΌΡ‹ ΠΌΠΎΠ³Π»ΠΈ Π±Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ, ΠΈ Π½Π΅ нашСл Π΅Π³ΠΎ с Ρ‚Π°ΠΊΠΈΠΌ ΠΈΠΌΠ΅Π½Π΅ΠΌ, поэтому ΠΌΡ‹ просто ΠΏΡ€ΠΈΠ΄ΡƒΠΌΠ°Π΅ΠΌ ΠΊΠ°ΠΊ ΠΌΡ‹ ΠΈΠ΄Π΅ΠΌ Π²ΠΏΠ΅Ρ€Π΅Π΄.

    ΠŸΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ Java Π² этой ΠΊΠ½ΠΈΠ³Π΅ Π±ΡƒΠ΄ΡƒΡ‚ протСстированы с использованиСм OpenJDK 14; Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Π΄Ρ€ΡƒΠ³ΠΈΠ΅ вСрсии Java (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, OpenJDK 12 ΠΈΠ»ΠΈ Oracle Java JDK) Π±ΡƒΠ΄ΡƒΡ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Ρ‚Π°ΠΊ ΠΆΠ΅, Π° Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΠΈ Π½Π΅Ρ‚. Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ OpenJDK с http://openjdk.java.net, ΠΈΠ»ΠΈ, Ссли Π²Ρ‹ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚Π΅ Π² Linux, ваша опСрационная систСма, вСроятно, ΠΈΠΌΠ΅Π΅Ρ‚ ΠΏΠ°ΠΊΠ΅Ρ‚ OpenJDK, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ. Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ инструмСнты построСния языков программирования (Jflex ΠΈ byacc/j), Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Π΅ для ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠ² Java, Π±ΡƒΠ΄ΡƒΡ‚ прСдставлСны Π² ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… Π³Π»Π°Π²Π°Ρ… ΠΏΠΎ ΠΌΠ΅Ρ€Π΅ ΠΈΡ… использования. Π Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Java, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΡ‹ Π±ΡƒΠ΄Π΅ΠΌ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Ρ‚ΡŒ, ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ большС ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Ρ‹ Ρ‚Π΅ΠΌ, ΠΊΠ°ΠΊΠΈΠ΅ вСрсии Π±ΡƒΠ΄ΡƒΡ‚ Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ эти инструмСнты построСния языка, Ρ‡Π΅ΠΌ Ρ‡Ρ‚ΠΎ-Π»ΠΈΠ±ΠΎ Π΅Ρ‰Π΅.

    ΠŸΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ Unicon Π² этой ΠΊΠ½ΠΈΠ³Π΅ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ с Unicon вСрсии 13.2, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ ΠΌΠΎΠΆΠ½ΠΎ Π·Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚ΡŒ с http://unicon.org. Π§Ρ‚ΠΎΠ±Ρ‹ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ Unicon Π² Windows, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π·Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚ΡŒ Ρ„Π°ΠΉΠ» .msi ΠΈ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ установки. Π§Ρ‚ΠΎΠ±Ρ‹ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ Π² Linux, Π²Ρ‹ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ Π΄Π΅Π»Π°Π΅Ρ‚Π΅ git-ΠΊΠ»ΠΎΠ½ исходников ΠΈ Π½Π°Π±ΠΈΡ€Π°Π΅Ρ‚Π΅ make .