π΄ ΠΡΠ°ΡΠ½Π°Ρ Π΄ΠΎΡΠΎΠΆΠΊΠ° #
ΠΡΠ»ΠΈ Π²Ρ Π²ΡΠ±ΡΠ°Π»ΠΈ ΡΡΠΎΡ Π²Π°ΡΠΈΠ°Π½Ρ β Π·Π½Π°ΡΠΈΡ, Π²Π°ΠΌ ΠΏΡΠ΅Π΄ΡΡΠΎΠΈΡ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠ°ΡΡ Π½Π° C++ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ ΡΠ²ΠΎΠ΅Π³ΠΎ ΡΠ·ΡΠΊΠ° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ Ρ Π³Π΅Π½Π΅ΡΠ°ΡΠΈΠ΅ΠΉ LLVM IR ΠΈ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠ΅ΠΉ Π² ΠΌΠ°ΡΠΈΠ½Π½ΡΠΉ ΠΊΠΎΠ΄ Ρ ΠΏΠΎΠΌΠΎΡΡΡ LLVM
- ΠΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ, Π² ΠΎΡΠ»ΠΈΡΠΈΠ΅ ΠΎΡ ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠ°ΡΠΎΡΠ°, ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ ΡΠΎΠ»ΡΠΊΠΎ ΠΈΡΡ ΠΎΠ΄Π½ΡΠΉ ΠΊΠΎΠ΄ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΠΈ ΡΠΎΠ·Π΄Π°ΡΡ ΠΈΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΡΠΉ ΡΠ°ΠΉΠ»
- ΠΡ ΠΏΠΈΡΠ΅ΡΠ΅ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ Π½Π° C++ Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊ ΠΈ ΠΈΠ½ΡΡΠ°ΡΡΡΡΠΊΡΡΡΡ LLVM
- ΠΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ Π³Π΅Π½Π΅ΡΠΈΡΡΠ΅Ρ ΠΈΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΡΠΉ ΡΠ°ΠΉΠ» Ρ ΠΌΠ°ΡΠΈΠ½Π½ΡΠΌ ΠΊΠΎΠ΄ΠΎΠΌ
ΠΡ Π΄ΠΎΠ»ΠΆΠ½Ρ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°ΡΡ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΡ ΠΏΠΎΠ΄ ΠΏΡΠΎΡΠ΅ΡΡΠΎΡΡ Ρ Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΠΎΠΉ AMD64 (x86-64) Π΄Π»Ρ ΠΠ‘ GNU/Linux. ΠΠΎΠΏΡΡΠΊΠ°Π΅ΡΡΡ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠ° Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΡ ΡΠ΅Π»Π΅ΠΉ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ.
ΠΠΈΠΆΠ΅ ΠΎΠΏΠΈΡΠ°Π½Ρ ΠΎΠ±ΡΠΈΠ΅ ΡΡΠ΅Π±ΠΎΠ²Π°Π½ΠΈΡ ΠΊ ΡΡΠΎΠΌΡ Π²Π°ΡΠΈΠ°Π½ΡΡ.
ΠΠ΅ΡΡΠΈΡ ΠΈ ΠΏΡΠΈΠΌΠ΅ΡΡ Π΄Π»Ρ LLVM #
- ΠΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ ΡΠΈΠΊΡΠΈΡΠΎΠ²Π°Π½Π½ΡΡ Π°ΠΊΡΡΠ°Π»ΡΠ½ΡΡ Π²Π΅ΡΡΠΈΡ LLVM, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, LLVM 22
- ΠΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ LLVM Kaleidoscope ΠΊΠ°ΠΊ ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠΉ ΠΏΡΠΈΠΌΠ΅Ρ: https://llvm.org/docs/tutorial/MyFirstLanguageFrontend/LangImpl07.html
ΠΡΡΡ ΠΏΡΠΈΠΌΠ΅ΡΡ ΠΎΡ ΠΏΡΠ΅ΠΏΠΎΠ΄Π°Π²Π°ΡΠ΅Π»Ρ:
- ΠΡΠΈΠΌΠ΅Ρ, Π² ΠΊΠΎΡΠΎΡΠΎΠΌ ΠΏΠΎΠ·ΠΆΠ΅ Π±ΡΠ΄Π΅Ρ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Π° Π³Π΅Π½Π΅ΡΠ°ΡΠΈΡ ΠΊΠΎΠ΄Π° Π΄Π»Ρ LLVM: https://sourcecraft.dev/sshambir-public/pstigercpp
- Π‘ΡΠ°ΡΡΠΉ ΠΏΡΠΈΠΌΠ΅Ρ (2017-2018) Ρ ΠΊΠΎΡΡΠ΅ΠΊΡΠ½ΡΠΌ, Π½ΠΎ ΠΏΠ΅ΡΠ΅ΡΡΠ»ΠΎΠΆΠ½ΡΠ½Π½ΡΠΌ ΠΊΠΎΠ΄ΠΎΠΌ: https://github.com/sergey-shambir/pythonishc
Π’Π°ΠΊΠΆΠ΅ Π·Π°Π΄Π°Π²Π°ΠΉΡΠ΅ Π²ΠΎΠΏΡΠΎΡΡ ΠΠ-ΠΌΠΎΠ΄Π΅Π»ΡΠΌ. ΠΡΠΈΠΌΠ΅ΡΡ ΠΌΠΎΠ΄Π΅Π»Π΅ΠΉ, Π΄ΠΎΡΡΡΠΏΠ½ΡΡ ΡΠ΅ΡΠ΅Π· ΡΠ°Ρ:
Π€Π°Π·Ρ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ #
ΠΠ°ΡΠΈΠ½Π°Ρ ΡΠΎ 2-ΠΉ ΠΈΡΠ΅ΡΠ°ΡΠΈΠΈ, Π²Ρ Π΄ΠΎΠ»ΠΆΠ½Ρ ΠΈΠΌΠ΅ΡΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅ ΡΠ°Π·Ρ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ:
| Π€Π°Π·Π° | Π‘ΠΏΠΎΡΠΎΠ± ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ |
|---|---|
| ΠΠ΅ΠΊΡΠΈΡΠ΅ΡΠΊΠΈΠΉ Π°Π½Π°Π»ΠΈΠ· | Π ΡΠΊΠΎΠΏΠΈΡΠ½ΡΠΉ ΡΠ°Π·Π±ΠΎΡ ΡΠΎΠΊΠ΅Π½Π° Π·Π° ΡΠΎΠΊΠ΅Π½ΠΎΠΌ ΠΏΠΎ Π·Π°ΠΏΡΠΎΡΡ ΠΏΠ°ΡΡΠ΅ΡΠ° |
| Π‘ΠΈΠ½ΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈΠΉ Π°Π½Π°Π»ΠΈΠ· | Π Π΅ΠΊΡΡΡΠΈΠ²Π½ΡΠΉ ΡΠΏΡΡΠΊ Ρ ΠΏΠΎΡΡΡΠΎΠ΅Π½ΠΈΠ΅ΠΌ AST ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ |
| Π‘Π΅ΠΌΠ°Π½ΡΠΈΡΠ΅ΡΠΊΠΈΠΉ Π°Π½Π°Π»ΠΈΠ· | ΠΠ±Ρ ΠΎΠ΄Ρ AST Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΠ°Π±Π»ΠΎΠ½Π° Visitor Π΄Π»Ρ ΠΏΡΠΎΠ²Π΅ΡΠΎΠΊ ΠΈ Π·Π°ΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ Π°ΡΡΠΈΠ±ΡΡΠΎΠ² AST |
| ΠΠ΅Π½Π΅ΡΠ°ΡΠΈΡ LLVM IR | ΠΠ±Ρ ΠΎΠ΄ AST Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΠ°Π±Π»ΠΎΠ½Π° Visitor Π΄Π»Ρ Π³Π΅Π½Π΅ΡΠ°ΡΠΈΠΈ ΡΠΏΠΈΡΠΊΠ° ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΉ |
| ΠΠ΅Π½Π΅ΡΠ°ΡΠΈΡ ΠΌΠ°ΡΠΈΠ½Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° | ΠΠ°ΠΏΡΡΠΊ ΠΏΠ°ΠΉΠΏΠ»Π°ΠΉΠ½Π° LLVM Π΄Π»Ρ ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΠΉ ΠΈ Π³Π΅Π½Π΅ΡΠ°ΡΠΈΠΈ ΠΈΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΠΎΠ³ΠΎ ΡΠ°ΠΉΠ»Π° Ρ ΠΌΠ°ΡΠΈΠ½Π½ΡΠΌ ΠΊΠΎΠ΄ΠΎΠΌ |
Π’ΡΠ΅Π±ΠΎΠ²Π°Π½ΠΈΡ ΠΊ ΡΠ·ΡΠΊΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ #
ΠΠΈΠΆΠ΅ ΠΏΠ΅ΡΠ΅ΡΠΈΡΠ»Π΅Π½ ΡΠΏΠΈΡΠΎΠΊ ΡΠΏΠΈΠΊΠΎΠ² ΠΈ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΡ ΡΡΠ½ΠΊΡΠΈΠΉ ΡΠ·ΡΠΊΠ° Ρ ΡΡΠ΅ΠΌΡ ΠΏΠΎΠΌΠ΅ΡΠΊΠ°ΠΌΠΈ:
- ΠΡΠ΅Π½ΠΊΠ° 3 ΠΈ Π²ΡΡΠ΅ β ΡΡΠ½ΠΊΡΠΈΡ ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½Π° Π½Π° ΠΎΡΠ΅Π½ΠΊΡ 3 ΠΈΠ»ΠΈ Π²ΡΡΠ΅, Π΄ΠΎΠ»ΠΆΠ½Π° Π±ΡΡΡ ΡΠ΄Π΅Π»Π°Π½Π° Π²ΠΎ 2-ΠΉ Π»ΠΈΠ±ΠΎ Π² 3-ΠΉ ΠΈΡΠ΅ΡΠ°ΡΠΈΠΈ
- ΠΡΠ΅Π½ΠΊΠ° 4 ΠΈ Π²ΡΡΠ΅ β ΡΡΠ½ΠΊΡΠΈΡ ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½Π° Π½Π° ΠΎΡΠ΅Π½ΠΊΡ 4 ΠΈΠ»ΠΈ Π²ΡΡΠ΅, Π΄ΠΎΠ»ΠΆΠ½Π° Π±ΡΡΡ ΡΠ΄Π΅Π»Π°Π½Π° Π² 4-ΠΉ Π»ΠΈΠ±ΠΎ Π² 5-ΠΉ ΠΈΡΠ΅ΡΠ°ΡΠΈΠΈ
- ΠΡΠ΅Π½ΠΊΠ° 5 β ΡΡΠ½ΠΊΡΠΈΡ ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½Π° Π½Π° ΠΎΡΠ΅Π½ΠΊΡ 5 ΠΈΠ»ΠΈ Π²ΡΡΠ΅, Π΄ΠΎΠ»ΠΆΠ½Π° Π±ΡΡΡ ΡΠ΄Π΅Π»Π°Π½Π° Π² 6-ΠΉ ΠΈΠ»ΠΈ 7-ΠΉ ΠΈΡΠ΅ΡΠ°ΡΠΈΠΈ
ΠΠΏΠΈΠΊ β1. ΠΠ°Π·ΠΎΠ²ΡΠΉ ΡΡΠΎΠ²Π΅Π½Ρ (ΠΎΡΠ΅Π½ΠΊΠ° 3 ΠΈ Π²ΡΡΠ΅) #
ΠΡ Π΄Π΅Π»ΠΈΡΠ΅ ΡΡΠΎΡ ΡΠΏΠΈΠΊ Π½Π° Π΄Π²Π΅ ΠΈΡΠ΅ΡΠ°ΡΠΈΠΈ (2-Ρ ΠΈ 3-Ρ ΠΈΡΠ΅ΡΠ°ΡΠΈΠΈ). Π‘ΠΏΠΎΡΠΎΠ± Π΄Π΅Π»Π΅Π½ΠΈΡ Π²ΡΠ±ΠΈΡΠ°Π΅ΡΠ΅ ΡΠ°ΠΌΠΈ.
1. ΠΠ°Π·ΠΎΠ²ΡΠ΅ ΡΡΠ΅Π±ΠΎΠ²Π°Π½ΠΈΡ #
Π―Π·ΡΠΊ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±ΡΡΡ ΠΈΠΌΠΏΠ΅ΡΠ°ΡΠΈΠ²Π½ΡΠΌ ΠΈ ΡΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ ΡΠΈΠΏΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π½ΡΠΌ.
ΠΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° ΡΠΎΡΡΠΎΠΈΡ ΠΈΠ· ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΡΠ°ΠΉΠ»Π° ΠΈ ΠΈΠΌΠ΅Π΅Ρ ΠΎΠ΄Π½Ρ ΡΠΎΡΠΊΡ Π²Ρ ΠΎΠ΄Π°
- ΠΡΠΎ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Π³Π»Π°Π²Π½Π°Ρ ΡΡΠ½ΠΊΡΠΈΡ, ΠΊΠ°ΠΊ Π² C/C++
- ΠΡΠΎ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠΉ Π±Π»ΠΎΠΊ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ, ΠΊΠ°ΠΊ Π² Pascal
2. ΠΠ°Π·ΠΎΠ²ΡΠ΅ ΡΠΈΠΏΡ Π΄Π°Π½Π½ΡΡ #
ΠΡ Π΄ΠΎΠ»ΠΆΠ½Ρ Π²ΡΠ±ΡΠ°ΡΡ Π΄Π»Ρ ΡΠ²ΠΎΠ΅Π³ΠΎ ΡΠ·ΡΠΊΠ° ΡΡΠΈ Π±Π°Π·ΠΎΠ²ΡΡ ΡΠΈΠΏΠ° Π΄Π°Π½Π½ΡΡ . ΠΠ°ΡΠΈΠ°Π½ΡΡ:
- Π¦Π΅Π»ΡΠ΅ ΡΠΈΡΠ»Π°, ΡΠΈΡΠ»Π° Ρ ΠΏΠ»Π°Π²Π°ΡΡΠ΅ΠΉ ΡΠΎΡΠΊΠΎΠΉ ΠΈ ΡΡΡΠΎΠΊΠΈ
- Π¦Π΅Π»ΡΠ΅ ΡΠΈΡΠ»Π°, ΡΠΈΠΌΠ²ΠΎΠ»Ρ ΠΈ ΡΡΡΠΎΠΊΠΈ
- Π¦Π΅Π»ΡΠ΅ ΡΠΈΡΠ»Π°, Π±ΡΠ»Π΅Π² ΡΠΈΠΏ ΠΈ ΡΡΡΠΎΠΊΠΈ
- Π‘ΠΈΠΌΠ²ΠΎΠ»Ρ, Π±ΡΠ»Π΅Π² ΡΠΈΠΏ ΠΈ ΡΡΡΠΎΠΊΠΈ
- Π¦Π΅Π»ΡΠ΅ ΡΠΈΡΠ»Π° ΡΠΎ Π·Π½Π°ΠΊΠΎΠΌ, ΡΠ΅Π»ΡΠ΅ ΡΠΈΡΠ»Π° Π±Π΅Π· Π·Π½Π°ΠΊΠ° ΠΈ ΡΡΡΠΎΠΊΠΈ
Π£ΡΡΠΈΡΠ΅, ΡΡΠΎ ΡΡΡΠΎΠΊΠΎΠ²ΡΠΉ ΠΈ Π±ΡΠ»Π΅Π² ΡΠΈΠΏΡ Π΄Π°Π½Π½ΡΡ ΠΏΠΎΡΡΠ΅Π±ΡΠ΅ΡΡΡ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°ΡΡ Π»ΠΈΡΡ Π² 3-ΠΌ ΡΠΏΠΈΠΊΠ΅.
3. ΠΠ²ΠΎΠ΄-Π²ΡΠ²ΠΎΠ΄ #
- ΠΡΡΡ Π»ΠΈΡΠ΅ΡΠ°Π»Ρ Π²ΡΠ΅Ρ Π±Π°Π·ΠΎΠ²ΡΡ ΡΠΈΠΏΠΎΠ² Π΄Π°Π½Π½ΡΡ
- ΠΡΡΡ ΡΡΠ΅Π΄ΡΡΠ²Π° Π΄Π»Ρ Π²ΡΠ²ΠΎΠ΄Π° Π»ΠΈΡΠ΅ΡΠ°Π»ΠΎΠ² Π²ΡΠ΅Ρ Π±Π°Π·ΠΎΠ²ΡΡ ΡΠΈΠΏΠΎΠ² Π΄Π°Π½Π½ΡΡ
- ΠΠΎΠΆΠ½ΠΎ Π½Π°ΠΏΠΈΡΠ°ΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ, ΠΊΠΎΡΠΎΡΠ°Ρ ΡΡΠΏΠ΅ΡΠ½ΠΎ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ ΠΈ Π·Π°Π²Π΅ΡΡΠ°Π΅ΡΡΡ
4. ΠΠΏΠ΅ΡΠ°ΡΠΈΠΈ Π½Π°Π΄ ΡΠΈΡΠ»Π°ΠΌΠΈ #
ΠΡΠΎ Π½ΡΠΆΠ½ΠΎ Π΄Π΅Π»Π°ΡΡ, Π΅ΡΠ»ΠΈ Ρ Π²Π°Ρ Π΅ΡΡΡ ΡΠΈΡΠ»ΠΎΠ²ΡΠ΅ ΡΠΈΠΏΡ Π΄Π°Π½Π½ΡΡ .
- ΠΡΡΡ Π°ΡΠΈΡΠΌΠ΅ΡΠΈΡΠ΅ΡΠΊΠΈΠ΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ Π½Π°Π΄ ΡΠΈΡΠ»Π°ΠΌΠΈ
- ΠΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°ΡΡΡΡ ΠΏΡΠΈΠΎΡΠΈΡΠ΅ΡΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΉ ΠΈ ΡΠΊΠΎΠ±ΠΊΠΈ Π΄Π»Ρ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ ΠΏΡΠΈΠΎΡΠΈΡΠ΅ΡΠ°
- ΠΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅ΡΡΡ Π°ΡΡΠΎΡΠΈΠ°ΡΠΈΠ²Π½ΠΎΡΡΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΉ
5. ΠΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅ #
- ΠΠΎΠΆΠ½ΠΎ ΠΎΠ±ΡΡΠ²Π»ΡΡΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅
- ΠΠΎΠΆΠ½ΠΎ ΠΏΡΠΈΡΠ²Π°ΠΈΠ²Π°ΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠΌ
- ΠΠΏΠΈΡΠ°Π½Π° ΡΠ΅ΠΌΠ°Π½ΡΠΈΠΊΠ° ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ , ΠΏΡΠΈΡΠ²Π°ΠΈΠ²Π°Π½ΠΈΠΉ ΠΈ ΠΎΠ±Π»Π°ΡΡΠ΅ΠΉ Π²ΠΈΠ΄ΠΈΠΌΠΎΡΡΠΈ
ΠΠΎΠΏΡΡΠΊΠ°Π΅ΡΡΡ ΡΠ°Π·Π΄Π΅Π»ΠΈΡΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅ Π½Π° Π΄Π²Π΅ ΠΊΠ°ΡΠ΅Π³ΠΎΡΠΈΠΈ:
- ΠΈΠ·ΠΌΠ΅Π½ΡΠ΅ΠΌΡΠ΅ (mutable) β ΡΡΠΎ ΠΈ Π΅ΡΡΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅
- Π½Π΅ΠΈΠ·ΠΌΠ΅Π½ΡΠ΅ΠΌΡΠ΅ (immutable) β ΠΈΡ Π΄ΠΎΠΏΡΡΠΊΠ°Π΅ΡΡΡ Π½Π°Π·ΡΠ²Π°ΡΡ ΠΊΠΎΠ½ΡΡΠ°Π½ΡΠ°ΠΌΠΈ
ΠΠΏΠΈΠΊ β2. ΠΠΎΠ½ΡΡΠΎΠ»Ρ ΠΏΠΎΡΠΎΠΊΠ° ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ (ΠΎΡΠ΅Π½ΠΊΠ° 4 ΠΈ Π²ΡΡΠ΅) #
1. Π€ΡΠ½ΠΊΡΠΈΠΈ #
- ΠΡΡΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΈΠ΅ ΠΈ Π²ΡΡΡΠΎΠ΅Π½Π½ΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ
- ΠΠ»Ρ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΈΡ ΡΡΠ½ΠΊΡΠΈΠΉ Π΄ΠΎΡΡΡΠΏΠ½Π° ΠΈΠ½ΡΡΡΡΠΊΡΠΈΡ return
- Π‘Π΅ΠΌΠ°Π½ΡΠΈΠΊΠ° ΡΡΠ½ΠΊΡΠΈΠΉ ΡΡΠ°ΡΠ΅Π»ΡΠ½ΠΎ ΠΎΠΏΠΈΡΠ°Π½Π° β Π²ΠΊΠ»ΡΡΠ°Ρ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ ΠΈ Π²ΠΎΠ·Π²ΡΠ°Ρ Π·Π½Π°ΡΠ΅Π½ΠΈΡ
2. ΠΠ΅ΡΠ²Π»Π΅Π½ΠΈΡ #
- ΠΡΡΡ Π²Π΅ΡΠ²Π»Π΅Π½ΠΈΡ, ΠΏΠΎΠ΄ΠΎΠ±Π½ΡΠ΅ if..then..else
- Π‘Π΅ΠΌΠ°Π½ΡΠΈΠΊΠ° Π²Π΅ΡΠ²Π»Π΅Π½ΠΈΠΉ ΡΡΠ°ΡΠ΅Π»ΡΠ½ΠΎ ΠΎΠΏΠΈΡΠ°Π½Π°
3. Π¦ΠΈΠΊΠ»Ρ #
- ΠΡΡΡ ΡΠΈΠΊΠ»Ρ, ΠΏΠΎΠ΄ΠΎΠ±Π½ΡΠ΅ while
- Π‘Π΅ΠΌΠ°Π½ΡΠΈΠΊΠ° ΡΠΈΠΊΠ»ΠΎΠ² ΡΡΠ°ΡΠ΅Π»ΡΠ½ΠΎ ΠΎΠΏΠΈΡΠ°Π½Π°
ΠΠΏΠΈΠΊ β3. ΠΠΎΠ³ΠΈΡΠ΅ΡΠΊΠΈΠ΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ ΠΈ ΡΡΡΠΎΠΊΠΈ (ΠΎΡΠ΅Π½ΠΊΠ° 5) #
1. ΠΠΎΠ³ΠΈΡΠ΅ΡΠΊΠΈΠ΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ #
- ΠΡΡΡ Π»ΠΎΠ³ΠΈΡΠ΅ΡΠΊΠΈΠ΅ Β«ΠΈΒ», Β«ΠΈΠ»ΠΈΒ», Β«Π½Π΅Β»
- ΠΠΎΠ³ΠΈΡΠ΅ΡΠΊΠΈΠ΅ Β«ΠΈΒ», Β«ΠΈΠ»ΠΈΒ» Π²ΡΡΠΈΡΠ»ΡΡΡΡΡ ΠΏΠΎ ΠΊΠΎΡΠΎΡΠΊΠΎΠΉ ΡΡ Π΅ΠΌΠ΅ (short-circuit evaluation)
- ΠΡΠ»ΠΈ Π΅ΡΡΡ Π±ΡΠ»Π΅Π² ΡΠΈΠΏ, ΡΠΎ Π»ΠΎΠ³ΠΈΡΠ΅ΡΠΊΠΈΠ΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ ΡΠ°Π±ΠΎΡΠ°ΡΡ Ρ Π½ΠΈΠΌ. Π ΠΏΡΠΎΡΠΈΠ²Π½ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ ΠΎΠ½ΠΈ ΡΠ°Π±ΠΎΡΠ°ΡΡ Ρ ΡΠ΅Π»ΠΎΡΠΈΡΠ»Π΅Π½Π½ΡΠΌ ΡΠΈΠΏΠΎΠΌ Π΄Π°Π½Π½ΡΡ .
- ΠΡΠ»ΠΈ Π΅ΡΡΡ Π±ΡΠ»Π΅Π² ΡΠΈΠΏ, ΡΠΎ Π΅ΡΡΡ ΠΈ Π»ΠΈΡΠ΅ΡΠ°Π»Ρ Π΄Π»Ρ Π½Π΅Π³ΠΎ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ,
true/false)
2. ΠΠΏΠ΅ΡΠ°ΡΠΈΠΈ Π½Π°Π΄ ΡΡΡΠΎΠΊΠ°ΠΌΠΈ #
ΠΡΠΎ Π½ΡΠΆΠ½ΠΎ Π΄Π΅Π»Π°ΡΡ, Π΅ΡΠ»ΠΈ Ρ Π²Π°Ρ Π΅ΡΡΡ ΡΡΡΠΎΠΊΠΎΠ²ΡΠΉ ΡΠΈΠΏ Π΄Π°Π½Π½ΡΡ .
- ΠΡΡΡ ΡΡΠ΅Π΄ΡΡΠ²Π° Π΄Π»Ρ ΠΊΠΎΠ½ΠΊΠ°ΡΠ΅Π½Π°ΡΠΈΠΈ, Π΄Π΅ΠΊΠΎΠΌΠΏΠΎΠ·ΠΈΡΠΈΠΈ ΠΈ ΠΈΠ·ΠΌΠ΅ΡΠ΅Π½ΠΈΡ Π΄Π»ΠΈΠ½Ρ ΡΡΡΠΎΠΊ
- ΠΡΡΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡ Π΄ΠΎΡΡΡΠΏΠ° ΠΊ ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ ΡΡΡΠΎΠΊΠΈ Π½Π° ΡΡΠ΅Π½ΠΈΠ΅ ΠΈ Π·Π°ΠΏΠΈΡΡ ΡΠ΅ΡΠ΅Π· ΠΊΠ²Π°Π΄ΡΠ°ΡΠ½ΡΠ΅ ΡΠΊΠΎΠ±ΠΊΠΈ:
text[index] - ΠΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅ΡΡΡ Π²Π²ΠΎΠ΄-Π²ΡΠ²ΠΎΠ΄ ΡΡΡΠΎΠΊ
- ΠΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅ΡΡΡ Unicode, Π° ΡΡΡΠΎΠΊΠΈ ΠΊΠΎΠ΄ΠΈΡΡΡΡΡΡ Π² UTF-8 Π»ΠΈΠ±ΠΎ UTF-16