ΠΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ ΡΠ΅Π»ΠΈΠ· ΡΠ·ΡΠΊΠ° ΡΠΈΡΡΠ΅ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ Nim 2.2.8. Nim β ΡΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ ΡΠΈΠΏΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΡΠ΅ΠΌΡΠΉ ΡΠ·ΡΠΊ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ Ρ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡΠΎΠΌ, Π²Π΄ΠΎΡ Π½ΠΎΠ²Π»ΡΠ½Π½ΡΠΌ Python, ΠΈ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡΠΌΠΈ ΠΌΠ΅ΡΠ°ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ Π½Π° ΡΡΠΎΠ²Π½Π΅ Lisp. Π―Π·ΡΠΊ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΡΠ΅ΡΡΡ Π² C, C++ ΠΈ JavaScript, ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΠ²Π°Ρ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΡ Π½Π° ΡΡΠΎΠ²Π½Π΅ C ΠΏΡΠΈ Π²ΡΡΠ°Π·ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ Π²ΡΡΠΎΠΊΠΎΡΡΠΎΠ²Π½Π΅Π²ΡΡ ΡΠ·ΡΠΊΠΎΠ². ΠΠΎΠ΄ ΠΏΡΠΎΠ΅ΠΊΡΠ° ΠΏΠΎΡΡΠ°Π²Π»ΡΠ΅ΡΡΡ ΠΏΠΎΠ΄ Π»ΠΈΡΠ΅Π½Π·ΠΈΠ΅ΠΉ MIT.
ΠΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ Nim Π²ΠΊΠ»ΡΡΠ°ΡΡ ΡΠΈΡΡΠ΅ΠΌΡ ΠΌΠ°ΠΊΡΠΎΡΠΎΠ², ΡΠ°Π±ΠΎΡΠ°ΡΡΠΈΡ Π½Π° AST Π²ΠΎ Π²ΡΠ΅ΠΌΡ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ, ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΡ ΠΎΠ±ΠΎΠ±ΡΡΠ½Π½ΠΎΠ³ΠΎ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ Ρ ΠΊΠΎΠ½ΡΠ΅ΠΏΡΠ°ΠΌΠΈ, ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²Π΅Π½Π½ΡΡ Π΄ΠΈΡΠΏΠ΅ΡΡΠ΅ΡΠΈΠ·Π°ΡΠΈΡ (multiple dispatch), Π΄Π΅ΡΠ΅ΡΠΌΠΈΠ½ΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠ΅ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΠΏΠ°ΠΌΡΡΡΡ Ρ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠΎΠΉ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΡ ΡΡΡΠ°ΡΠ΅Π³ΠΈΠΉ (ARC/ORC, refc, ΠΌΠ°ΡΠΊΠΈΡΠΎΠ²ΠΊΠ°-ΠΈ-ΠΏΠΎΠ΄ΠΌΠ΅ΡΠ°Π½ΠΈΠ΅), Π²ΡΡΡΠΎΠ΅Π½Π½ΡΡ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΡ async/await Π΄Π»Ρ Π°ΡΠΈΠ½Ρ ΡΠΎΠ½Π½ΠΎΠ³ΠΎ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΈ FFI Π΄Π»Ρ ΠΏΡΠΎΡΡΠΎΠΉ ΠΈΠ½ΡΠ΅Π³ΡΠ°ΡΠΈΠΈ Ρ C/C++/JavaScript. Nim ΠΏΠΎΠ·ΠΈΡΠΈΠΎΠ½ΠΈΡΡΠ΅ΡΡΡ ΠΊΠ°ΠΊ ΡΠΈΡΡΠ΅ΠΌΠ½ΡΠΉ ΡΠ·ΡΠΊ, ΠΏΠΎΠ΄Ρ ΠΎΠ΄ΡΡΠΈΠΉ Π΄Π»Ρ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ ΠΎΡ Π²ΡΡΡΠ°ΠΈΠ²Π°Π΅ΠΌΡΡ ΡΠΈΡΡΠ΅ΠΌ Π΄ΠΎ Π²Π΅Π±-ΡΠ΅ΡΠ²Π΅ΡΠΎΠ², Ρ Π°ΠΊΡΠ΅Π½ΡΠΎΠΌ Π½Π° ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½ΠΎΡΡΡ, Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡΡ ΠΏΠ°ΠΌΡΡΠΈ ΠΈ ΡΠ΄ΠΎΠ±ΡΡΠ²ΠΎ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ.
ΠΡΠΏΡΡΠΊ 2.2.8 ΡΠΎΡΡΠΎΡΠ»ΡΡ ΡΠΏΡΡΡΡ ΡΠ΅ΡΡΡΠ΅ ΠΌΠ΅ΡΡΡΠ° ΠΏΠΎΡΠ»Π΅ Π²Π΅ΡΡΠΈΠΈ 2.2.6 ΠΈ Π²ΠΊΠ»ΡΡΠ°Π΅Ρ 89 ΠΊΠΎΠΌΠΌΠΈΡΠΎΠ² Ρ ΠΈΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡΠΌΠΈ ΠΎΡΠΈΠ±ΠΎΠΊ ΠΈ ΡΠ»ΡΡΡΠ΅Π½ΠΈΡΠΌΠΈ. ΠΠ»Π°Π²Π½ΡΠΌ ΡΠ»ΡΡΡΠ΅Π½ΠΈΠ΅ΠΌ ΡΠ΅Π»ΠΈΠ·Π° Π½Π°Π·Π²Π°Π½ΠΎ Π·Π½Π°ΡΠΈΡΠ΅Π»ΡΠ½ΠΎΠ΅ ΠΏΠΎΠ²ΡΡΠ΅Π½ΠΈΠ΅ ΡΡΠ°Π±ΠΈΠ»ΡΠ½ΠΎΡΡΠΈ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΠΎΠ³ΠΎ Π°Π»Π»ΠΎΠΊΠ°ΡΠΎΡΠ° ΠΏΠ°ΠΌΡΡΠΈ ΠΏΡΠΈ Π°ΠΊΡΠΈΠ²Π½ΠΎΠΌ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠΈ ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡΠΎΡΠ½ΠΎΡΡΠΈ. ΠΠΎ ΡΠ»ΠΎΠ²Π°ΠΌ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΎΠ², Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΡΡΡ Π² ΠΎΠ±Ρ ΠΎΠ΄Π½ΠΎΠΌ ΡΠ΅ΡΠ΅Π½ΠΈΠΈ Β«-d:useMallocΒ» Π΄Π»Ρ ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡΠΎΡΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° ΠΎΡΡΠ°Π»Π°ΡΡ Π² ΠΏΡΠΎΡΠ»ΠΎΠΌ. ΠΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΉ ΠΏΡΠΎΡΡΡ ΠΎΡΡΠ°Π²Π»ΡΡΡ ΠΎΠ±ΡΠ°ΡΠ½ΡΡ ΡΠ²ΡΠ·Ρ.
Π‘ΡΠ΅Π΄ΠΈ ΠΈΡΠΏΡΠ°Π²Π»Π΅Π½Π½ΡΡ ΠΎΡΠΈΠ±ΠΎΠΊ:
- SIGBUS ΠΏΡΠΈ ΠΈΡΠ΅ΡΠ°ΡΠΈΠΈ ΠΏΠΎ ΠΊΠΎΠ½ΡΡΠ°Π½ΡΠ½ΠΎΠΉ ΡΠ°Π±Π»ΠΈΡΠ΅ ΠΈΠ·-Π·Π° ΠΏΡΠ΅ΠΆΠ΄Π΅Π²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠ³ΠΎ ΡΠ½ΠΈΡΡΠΎΠΆΠ΅Π½ΠΈΡ Π²ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ²;
- SIGSEGV Ρ Π·Π°ΠΌΡΠΊΠ°ΡΡΠΈΠΌΠΈ ΠΈΡΠ΅ΡΠ°ΡΠΎΡΠ°ΠΌΠΈ;
- Π½Π΅ΠΊΠΎΡΡΠ΅ΠΊΡΠ½Π°Ρ Π³Π΅Π½Π΅ΡΠ°ΡΠΈΡ C-ΠΊΠΎΠ΄Π° ΠΏΡΠΈ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ .global Π²Π½ΡΡΡΠΈ ΠΌΠ΅ΡΠΎΠ΄Π°;
- ΠΎΡΠΈΠ±ΠΊΠ° Π² ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ΅ finally Π² Π·Π°ΠΌΡΠΊΠ°ΡΡΠ΅ΠΌ ΠΈΡΠ΅ΡΠ°ΡΠΎΡΠ΅ ΠΏΡΠΈ Π½Π°Π»ΠΈΡΠΈΠΈ try..except;
- Π½Π΅ΠΊΠΎΡΡΠ΅ΠΊΡΠ½ΠΎΠ΅ name mangling Π² ΡΡΠΈΠ»Π΅ C++ ΠΏΡΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠΈ βdebuginfo;
- ΠΌΠ΅Π΄Π»Π΅Π½Π½Π°Ρ ΡΠ°Π±ΠΎΡΠ° setLen ΠΏΡΠΈ ΡΠΌΠ΅Π½ΡΡΠ΅Π½ΠΈΠΈ ΡΠ°Π·ΠΌΠ΅ΡΠ° ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ ΠΈΠ·-Π·Π° ΠΈΠ·Π»ΠΈΡΠ½Π΅ΠΉ Π·Π°ΡΠΈΡΡΠΊΠΈ ΠΏΠ°ΠΌΡΡΠΈ;
- ΠΎΡΡΡΡΡΡΠ²ΠΈΠ΅ setLenUninit Π΄Π»Ρ ΡΠ΅ΠΆΠΈΠΌΠ° Β«βmm:refcΒ»;
- Π·Π°Π²ΠΈΡΠ°Π½ΠΈΠ΅ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ term rewriting Π½Π° Π±ΠΎΠ»ΡΡΠΈΡ ΡΠ°ΠΉΠ»Π°Ρ ;
- SIGSEGV ΠΏΡΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠΈ distinct-ΡΠΈΠΏΠΎΠ² Ρ Π½Π°Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ΠΌ Π² heap-ΠΎΠ±ΡΠ΅ΠΊΡΡ Π² ΡΠ΅ΠΆΠΈΠΌΠ΅ refc;
- Π½Π΅ΠΊΠΎΡΡΠ΅ΠΊΡΠ½ΡΠΉ Π΄ΠΎΡΡΡΠΏ ΠΊ m_type Π² Ρ ΡΠΊΠ°Ρ Π΄Π»Ρ ΠΎΠ±ΠΎΠ±ΡΡΠ½Π½ΡΡ distinct-ΡΠΈΠΏΠΎΠ² ΠΏΠΎΠ΄ ARC/ORC/ATOMICARC;
- ΡΠ±ΠΎΠΉ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠ° ΠΏΡΠΈ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΠ΅ ΠΊΠΎΡΡΠ΅ΠΆΠ° Ρ Β«itemsΒ» ΠΈΠ· ΠΊΠΎΠ½ΡΠ΅ΠΏΡΠ°;
- ΡΠ΅ΠΊΡΡΡΠΈΠ²Π½ΡΠ΅ ΠΊΠΎΠ½ΡΠ΅ΠΏΡΡ Π²ΡΠ·ΡΠ²Π°Π»ΠΈ segfault ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠ°;
- Π½Π΅ΠΊΠΎΡΡΠ΅ΠΊΡΠ½Π°Ρ Π³Π΅Π½Π΅ΡΠ°ΡΠΈΡ HTTPS-Π·Π°ΠΏΡΠΎΡΠΎΠ² ΡΠ΅ΡΠ΅Π· HTTP-ΠΏΡΠΎΠΊΡΠΈ Π² httpclient;
- Π½Π΅ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ½Π½ΠΎΠ΅ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ ΠΏΡΠΈ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ shl;
- ΡΡΠ΅ΡΠ΅Π½ΠΈΠ΅ Π΄Π»ΠΈΠ½Π½ΡΡ ΡΠ΅Π»ΠΎΡΠΈΡΠ»Π΅Π½Π½ΡΡ Π»ΠΈΡΠ΅ΡΠ°Π»ΠΎΠ² Π±Π΅Π· ΠΏΡΠ΅Π΄ΡΠΏΡΠ΅ΠΆΠ΄Π΅Π½ΠΈΡ;
- ΡΠ±ΠΎΠΈ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠ° ΠΏΡΠΈ ΡΡΠ΄Π΅ Π½Π΅ΠΊΠΎΡΡΠ΅ΠΊΡΠ½ΡΡ ΠΎΠ±ΠΎΠ±ΡΡΠ½Π½ΡΡ ΠΈΠ½ΡΡΠ°Π½ΡΠΈΠ°ΡΠΈΠΉ;
- Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ ΡΠ΅ΠΆΠΈΠΌ βstyleCheck:warn.
ΠΡΡΠΎΡΠ½ΠΈΠΊ: opennet.ru
