βΉοΈ Skipped - page is already crawled
| Filter | Status | Condition | Details |
|---|---|---|---|
| HTTP status | PASS | download_http_code = 200 | HTTP 200 |
| Age cutoff | PASS | download_stamp > now() - 6 MONTH | 0 months ago |
| History drop | PASS | isNull(history_drop_reason) | No drop reason |
| Spam/ban | PASS | fh_dont_index != 1 AND ml_spam_score = 0 | ml_spam_score=0 |
| Canonical | PASS | meta_canonical IS NULL OR = '' OR = src_unparsed | Not set |
| Property | Value |
|---|---|
| URL | https://habr.com/ru/companies/exness/articles/542106/ |
| Last Crawled | 2026-04-06 11:56:28 (1 day ago) |
| First Indexed | not set |
| HTTP Status Code | 200 |
| Meta Title | ΠΠ°ΠΊ ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠΎΠ²Π°ΡΡ Python / Π₯Π°Π±Ρ |
| Meta Description | ΠΡΠΈΠ²Π΅Ρ, Π₯Π°Π±Ρ! Π― Ρ ΠΎΡΡ ΡΠ°ΡΡΠΊΠ°Π·Π°ΡΡ ΠΎΠ± ΡΠ΄ΠΈΠ²ΠΈΡΠ΅Π»ΡΠ½ΠΎΠΌ ΡΠΎΠ±ΡΡΠΈΠΈ, ΠΎ ΠΊΠΎΡΠΎΡΠΎΠΌ Ρ ΡΠ·Π½Π°Π» ΠΏΠ°ΡΡ ΠΌΠ΅ΡΡΡΠ΅Π² Π½Π°Π·Π°Π΄. ΠΠΊΠ°Π·ΡΠ²Π°Π΅ΡΡΡ, ΠΎΠ΄Π½Π° ΠΏΠΎΠΏΡΠ»ΡΡΠ½Π°Ρ python-ΡΡΠΈΠ»ΠΈΡΠ° ΡΠΆΠ΅ Π±ΠΎΠ»Π΅Π΅ Π³ΠΎΠ΄Π° ΡΠ°ΡΠΏΡΠΎΡΡΡΠ°Π½ΡΠ΅ΡΡΡ Π² Π²ΠΈΠ΄Π΅ Π±ΠΈΠ½Π°ΡΠ½ΡΡ ΡΠ°ΠΉΠ»ΠΎΠ²,... |
| Meta Canonical | null |
| Boilerpipe Text | ΠΡΠΈΠ²Π΅Ρ, Π₯Π°Π±Ρ!
Π― Ρ
ΠΎΡΡ ΡΠ°ΡΡΠΊΠ°Π·Π°ΡΡ ΠΎΠ± ΡΠ΄ΠΈΠ²ΠΈΡΠ΅Π»ΡΠ½ΠΎΠΌ ΡΠΎΠ±ΡΡΠΈΠΈ, ΠΎ ΠΊΠΎΡΠΎΡΠΎΠΌ Ρ ΡΠ·Π½Π°Π» ΠΏΠ°ΡΡ ΠΌΠ΅ΡΡΡΠ΅Π² Π½Π°Π·Π°Π΄. ΠΠΊΠ°Π·ΡΠ²Π°Π΅ΡΡΡ, ΠΎΠ΄Π½Π° ΠΏΠΎΠΏΡΠ»ΡΡΠ½Π°Ρ python-ΡΡΠΈΠ»ΠΈΡΠ° ΡΠΆΠ΅ Π±ΠΎΠ»Π΅Π΅ Π³ΠΎΠ΄Π° ΡΠ°ΡΠΏΡΠΎΡΡΡΠ°Π½ΡΠ΅ΡΡΡ Π² Π²ΠΈΠ΄Π΅ Π±ΠΈΠ½Π°ΡΠ½ΡΡ
ΡΠ°ΠΉΠ»ΠΎΠ², ΠΊΠΎΡΠΎΡΡΠ΅ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΡΡΡΡΡ ΠΏΡΡΠΌΠΎ ΠΈΠ· python. Π ΡΠ΅ΡΡ Π½Π΅ ΠΏΡΠΎ Π±Π°Π½Π°Π»ΡΠ½ΡΡ ΡΠΏΠ°ΠΊΠΎΠ²ΠΊΡ ΠΊΠ°ΠΊΠΈΠΌ-Π½ΠΈΠ±ΡΠ΄Ρ
PyInstaller
-ΠΎΠΌ, Π° ΠΏΡΠΎ ΡΠ΅ΡΡΠ½ΡΡ
Ahead-of-time
ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΡ ΡΠ΅Π»ΠΎΠ³ΠΎ python-ΠΏΠ°ΠΊΠ΅ΡΠ°. ΠΡΠ»ΠΈ Π²Ρ ΡΠ΄ΠΈΠ²Π»Π΅Π½Ρ ΡΠ°ΠΊ ΠΆΠ΅ ΠΊΠ°ΠΊ ΠΈ Ρ, Π΄ΠΎΠ±ΡΠΎ ΠΏΠΎΠΆΠ°Π»ΠΎΠ²Π°ΡΡ ΠΏΠΎΠ΄ ΠΊΠ°Ρ.
ΠΠ±ΡΡΡΠ½Ρ, ΠΏΠΎΡΠ΅ΠΌΡ Ρ ΡΡΠΈΡΠ°Ρ ΡΡΠΎ ΡΠΎΠ±ΡΡΠΈΠ΅ ΠΏΠΎ-Π½Π°ΡΡΠΎΡΡΠ΅ΠΌΡ ΡΠ΄ΠΈΠ²ΠΈΡΠ΅Π»ΡΠ½ΡΠΌ. Π‘ΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ Π΄Π²Π° Π²ΠΈΠ΄Π° ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ:Β
Ahead-of-time (AOT)
, ΠΊΠΎΠ³Π΄Π° Π²Π΅ΡΡ ΠΊΠΎΠ΄ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΡΠ΅ΡΡΡ Π΄ΠΎ Π·Π°ΠΏΡΡΠΊΠ° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΠΈ
Just in time compiler (JIT)
, ΠΊΠΎΠ³Π΄Π° Π½Π΅ΠΏΠΎΡΡΠ΅Π΄ΡΡΠ²Π΅Π½Π½ΠΎ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΠΏΠΎΠ΄ ΡΡΠ΅Π±ΡΠ΅ΠΌΡΡ Π°ΡΡ
ΠΈΡΠ΅ΠΊΡΡΡΡ ΠΏΡΠΎΡΠ΅ΡΡΠΎΡΠ° ΠΎΡΡΡΠ΅ΡΡΠ²Π»ΡΠ΅ΡΡΡ Π²ΠΎ Π²ΡΠ΅ΠΌΡ Π΅Π΅ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ. ΠΠΎ Π²ΡΠΎΡΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ ΠΏΠ΅ΡΠ²ΠΎΠ½Π°ΡΠ°Π»ΡΠ½ΡΠΉ Π·Π°ΠΏΡΡΠΊ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΠΎΡΡΡΠ΅ΡΡΠ²Π»ΡΠ΅ΡΡΡ Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΠΎΠΉ ΠΌΠ°ΡΠΈΠ½ΠΎΠΉ ΠΈΠ»ΠΈ ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠ°ΡΠΎΡΠΎΠΌ.
ΠΡΠ»ΠΈ ΡΠ³ΡΡΠΏΠΏΠΈΡΠΎΠ²Π°ΡΡ ΠΏΠΎΠΏΡΠ»ΡΡΠ½ΡΠ΅ ΡΠ·ΡΠΊΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΏΠΎ ΡΠΈΠΏΡ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ, ΡΠΎ ΠΏΠΎΠ»ΡΡΠΈΠΌ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΉ ΡΠΏΠΈΡΠΎΠΊ:
Ahead-of-time compiler: C, C++, Rust, Kotlin, Nim, D, Go, Dart;
Just in time compiler: Lua, Π‘#, Groovy, Dart.
Π python ΠΈΠ· ΠΊΠΎΡΠΎΠ±ΠΊΠΈ Π½Π΅Ρ JIT ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠ°, Π½ΠΎ ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΠ΅ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ, ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΡΡΠΈΠ΅ ΡΠ°ΠΊΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ, ΡΡΡΠ΅ΡΡΠ²ΡΡΡ Π΄Π°Π²Π½ΠΎ
Π‘ΠΌΠΎΡΡΡ Π½Π° ΡΡΡ ΡΠ°Π±Π»ΠΈΡΡ, ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΌΠ΅ΡΠΈΡΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΡΡ Π·Π°ΠΊΠΎΠ½ΠΎΠΌΠ΅ΡΠ½ΠΎΡΡΡ:
ΡΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ ΡΠΈΠΏΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π½ΡΠ΅ ΡΠ·ΡΠΊΠΈ Π½Π°Ρ
ΠΎΠ΄ΡΡΡΡ Π² ΠΎΠ±Π΅ΠΈΡ
ΡΡΡΠΎΠΊΠ°Ρ
. ΠΠ΅ΠΊΠΎΡΠΎΡΡΠ΅ Π΄Π°ΠΆΠ΅ ΠΌΠΎΠ³ΡΡ ΡΠ°ΡΠΏΡΠΎΡΡΡΠ°Π½ΡΡΡΡΡ Ρ Π΄Π²ΡΠΌΡ Π²Π΅ΡΡΠΈΡΠΌΠΈ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠΎΠ²: Kotlin ΠΌΠΎΠΆΠ΅Ρ ΠΈΡΠΏΠΎΠ»Π½ΡΡΡΡΡ ΠΊΠ°ΠΊ Ρ JIT JavaVM, ΡΠ°ΠΊ ΠΈ Ρ AOT Kotlin/Native. Π’ΠΎ ΠΆΠ΅ ΡΠ°ΠΌΠΎΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΡΠΊΠ°Π·Π°ΡΡ ΠΏΡΠΎ Dart (Π²Π΅ΡΡΠΈΠΈ 2). A Π²ΠΎΡ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΈ ΡΠΈΠΏΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π½ΡΠ΅ ΡΠ·ΡΠΊΠΈ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΡΡΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ JIT-ΠΎΠΌ, ΡΡΠΎ Π²ΠΏΡΠΎΡΠ΅ΠΌ Π²ΠΏΠΎΠ»Π½Π΅ Π»ΠΎΠ³ΠΈΡΠ½ΠΎ.Β
ΠΡΠΈ Π·Π°ΠΏΡΡΠΊΠ΅ Π²ΠΈΡΡΡΠ°Π»ΡΠ½Π°Ρ ΠΌΠ°ΡΠΈΠ½Π° ΡΠ½Π°ΡΠ°Π»Π° Π½Π°ΠΊΠ°ΠΏΠ»ΠΈΠ²Π°Π΅Ρ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΎ ΡΠΈΠΏΠ°Ρ
ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ
, Π·Π°ΡΠ΅ΠΌ ΠΏΠΎΡΠ»Π΅ Π½Π°ΠΊΠΎΠΏΠ»Π΅Π½ΠΈΡ ΡΡΠ°ΡΠΈΡΡΠΈΠΊΠΈ, Π·Π°ΠΏΡΡΠΊΠ°Π΅ΡΡΡ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΡ Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ Π½Π°Π³ΡΡΠΆΠ΅Π½Π½ΡΡ
ΡΠ°ΡΡΠ΅ΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ. ΠΠΈΡΡΡΠ°Π»ΡΠ½Π°Ρ ΠΌΠ°ΡΠΈΠ½Π° ΠΎΡΡΠ»Π΅ΠΆΠΈΠ²Π°Π΅Ρ ΡΠΈΠΏΡ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠ² ΠΈ ΠΏΠ΅ΡΠ΅ΠΊΠ»ΡΡΠ°Π΅Ρ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΠΌΠ΅ΠΆΠ΄Ρ ΡΠΆΠ΅ ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠΎΠ²Π°Π½Π½ΡΠΌΠΈ ΠΈ Π½Π΅ ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠΎΠ²Π°Π½Π½ΡΠΌΠΈ ΡΡΠ°ΡΡΠΊΠ°ΠΌΠΈ ΠΊΠΎΠ΄Π° Π² Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ ΠΎΡ ΡΠ΅ΠΊΡΡΠΈΡ
Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ
.
ΠΡΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠΈ JIT ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ ΡΠΈΠΏΡ Π½Π΅ ΠΎΡΠ΅Π½Ρ ΡΠΎ ΠΈ Π½ΡΠΆΠ½Ρ, Π²Π΅Π΄Ρ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΎ ΡΠΈΠΏΠ°Ρ
ΡΠΎΠ±ΠΈΡΠ°Π΅ΡΡΡ Π²ΠΎ Π²ΡΠ΅ΠΌΡ ΡΠ°Π±ΠΎΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ. ΠΠΎΡΡΠΎΠΌΡ Π²ΡΠ΅ ΠΏΠΎΠΏΡΠ»ΡΡΠ½ΡΠ΅ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΈ ΡΠΈΠΏΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π½ΡΠ΅ ΡΠ·ΡΠΊΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΡΠ°ΡΠΏΡΠΎΡΡΡΠ°Π½ΡΡΡΡΡ ΠΈΠΌΠ΅Π½Π½ΠΎ Ρ JIT ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠΎΠΌ.
ΠΠΎ ΠΊΠ°ΠΊ Π±ΡΡΡ Ρ AOT ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠ΅ΠΉ ΠΊΠΎΠ΄Π°, Π² ΠΊΠΎΡΠΎΡΠΎΠΌ Π½Π΅Ρ ΡΠΈΠΏΠΎΠ²?
ΠΠ΅Π½Ρ ΠΎΡΠ΅Π½Ρ Π·Π°ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠΎΠ²Π°Π» ΡΡΠΎΡ Π²ΠΎΠΏΡΠΎΡ, ΠΈ Ρ ΠΏΠΎΠ»Π΅Π· ΡΠ°Π·Π±ΠΈΡΠ°ΡΡΡΡ.
ΠΡΠ°ΠΊ, Π²Π΅ΡΠ½Π΅ΠΌΡΡ ΠΊ ΡΡΠΈΠ»ΠΈΡΠ΅, ΠΎ ΠΊΠΎΡΠΎΡΠΎΠΉ Π³ΠΎΠ²ΠΎΡΠΈΠ»ΠΎΡΡ Π² Π½Π°ΡΠ°Π»Π΅ ΡΡΠ°ΡΡΠΈ. Π Π΅ΡΡ ΠΏΡΠΎ
mypy
- Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠΏΡΠ»ΡΡΠ½ΡΠΉ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈΠΉ Π°Π½Π°Π»ΠΈΠ·Π°ΡΠΎΡ python-ΠΊΠΎΠ΄Π°.
Π‘ Π°ΠΏΡΠ΅Π»Ρ 2019 Π³ΠΎΠ΄Π° ΡΡΠ° ΡΡΠΈΠ»ΠΈΡΠ° ΡΠ°ΡΠΏΡΠΎΡΡΡΠ°Π½ΡΠ΅ΡΡΡ Π² ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠΌ Π²ΠΈΠ΄Π΅, ΠΎ ΡΠ΅ΠΌ ΡΠ°ΡΡΠΊΠ°Π·ΡΠ²Π°Π΅ΡΡΡ Π²
Π±Π»ΠΎΠ³Π΅
ΠΏΡΠΎΠ΅ΠΊΡΠ°. Π Π΄Π»Ρ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π΅ΡΠ΅ ΠΎΠ΄Π½Π° ΡΡΠΈΠ»ΠΈΡΠ° ΠΎΡ ΡΠ΅Ρ
ΠΆΠ΅ Π°Π²ΡΠΎΡΠΎΠ² β
mypyc
. ΠΠΎΠ³ΡΠ³Π»ΠΈΠ² Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ, Ρ Π½Π°ΡΠ΅Π» Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ Π±ΠΎΠ»ΡΡΡΡ ΡΡΠ°ΡΡΡ β
ΠΡΡΡ ΠΊ ΠΏΡΠΎΠ²Π΅ΡΠΊΠ΅ ΡΠΈΠΏΠΎΠ² 4 ΠΌΠΈΠ»Π»ΠΈΠΎΠ½ΠΎΠ² ΡΡΡΠΎΠΊ Python-ΠΊΠΎΠ΄Π°
β ΠΏΡΠΎ ΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ ΠΈ ΡΠ°Π·Π²ΠΈΡΠΈΠ΅ mypy (Π½Π° Π₯Π°Π±ΡΠ΅ Π΄ΠΎΡΡΡΠΏΠ΅Π½ ΠΏΠ΅ΡΠ΅Π²ΠΎΠ΄:
ΡΠ°ΡΡΡ 1
,
ΡΠ°ΡΡΡ 2
,
ΡΠ°ΡΡΡ 3
). Π’Π°ΠΌ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ ΡΠ°ΡΡΠΊΠ°Π·ΡΠ²Π°Π΅ΡΡΡ ΠΎ ΡΠ΅Π»ΡΡ
ΡΠΎΠ·Π΄Π°Π½ΠΈΡ mypyc: ΡΡΠΎΠ»ΠΊΠ½ΡΠ²ΡΠΈΡΡ Ρ Π½Π΅Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎΠΉ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΡΡ mypy ΠΏΡΠΈ ΡΠ°Π·Π±ΠΎΡΠ΅ ΠΊΡΡΠΏΠ½ΡΡ
python-ΠΏΡΠΎΠ΅ΠΊΡΠΎΠ² Π² Dropbox, ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΈ Π΄ΠΎΠ±Π°Π²ΠΈΠ»ΠΈ ΠΊΠ΅ΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠΎΠ² ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ ΠΊΠΎΠ΄Π°, Π° Π·Π°ΡΠ΅ΠΌ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ Π·Π°ΠΏΡΡΠΊΠ° ΡΡΠΈΠ»ΠΈΡΡ ΠΊΠ°ΠΊ ΡΠ΅ΡΠ²ΠΈΡΠ°. ΠΠΎ ΠΈΡΡΠ΅ΡΠΏΠ°Π² ΠΎΡΠ΅Π²ΠΈΠ΄Π½ΡΠ΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΠΈ, ΡΡΠΎΠ»ΠΊΠ½ΡΠ»ΠΈΡΡ Ρ Π²ΡΠ±ΠΎΡΠΎΠΌ: ΠΏΠ΅ΡΠ΅ΠΏΠΈΡΠ°ΡΡ Π²ΡΠ΅ Π½Π°
go
ΠΈΠ»ΠΈ Π½Π°
cython
. Π ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ΅ ΠΏΡΠΎΠ΅ΠΊΡ ΠΏΠΎΡΠ΅Π» ΠΏΠΎ ΡΡΠ΅ΡΡΠ΅ΠΌΡ ΠΏΡΡΠΈ β
Π½Π°ΠΏΠΈΡΠ°Π½ΠΈΠ΅ ΡΠ²ΠΎΠ΅Π³ΠΎ AOT python-ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠ°
.
ΠΠ΅Π»ΠΎ Π² ΡΠΎΠΌ, ΡΡΠΎ Π΄Π»Ρ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎΠΉ ΡΠ°Π±ΠΎΡΡ
mypy
ΠΈ ΡΠ°ΠΊ Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΠΎΡΡΡΠΎΠΈΡΡ ΡΠΎ ΠΆΠ΅ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΎΠ΅ Π΄Π΅ΡΠ΅Π²ΠΎ, ΡΡΠΎ ΠΈ ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠ°ΡΠΎΡΡ Π²ΠΎ Π²ΡΠ΅ΠΌΡ ΠΈΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΊΠΎΠ΄Π°. Π’ΠΎ Π΅ΡΡΡ
mypy ΡΠΆΠ΅ βΠΏΠΎΠ½ΠΈΠΌΠ°Π΅Ρβ python
, Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ ΡΡΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΡΠΎΠ»ΡΠΊΠΎ Π΄Π»Ρ ΡΡΠ°ΡΠΈΡΡΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ Π°Π½Π°Π»ΠΈΠ·Π°, Π° Π²ΠΎΡ
mypyc
ΠΌΠΎΠΆΠ΅Ρ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²ΡΠ²Π°ΡΡ ΡΡΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ Π² ΠΏΠΎΠ»Π½ΠΎΡΠ΅Π½Π½ΡΠΉ Π±ΠΈΠ½Π°ΡΠ½ΡΠΉ ΠΊΠΎΠ΄.
ΠΡΠΌΠ°Ρ ΡΡΡ ΠΌΠ½ΠΎΠ³ΠΈΠ΅ ΡΠ΅ΡΠΈΠ»ΠΈ, ΡΡΠΎ ΡΠ°Π·ΠΎΠ±ΡΠ°Π»ΠΈΡΡ Π² Π²ΠΎΠΏΡΠΎΡΠ΅ ΡΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠΎΠ²Π°ΡΡ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΈ ΡΠΈΠΏΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉ python-ΠΊΠΎΠ΄. Python c Π²Π΅ΡΡΠΈΠΈ 3.4 ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅Ρ Π°Π½Π½ΠΎΡΠ°ΡΠΈΡ ΡΠΈΠΏΠΎΠ², Π°
mypy
ΠΊΠ°ΠΊ ΡΠ°Π· ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π΄Π»Ρ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ ΠΊΠΎΡΡΠ΅ΠΊΡΠ½ΠΎΡΡΠΈ Π°Π½Π½ΠΎΡΠ°ΡΠΈΠΉ. ΠΠΎΠ»ΡΡΠ°Π΅ΡΡΡ, python ΠΊΠ°ΠΊ Π±Ρ ΡΠΆΠ΅ ΠΈ Π½Π΅ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΈ ΡΠΈΠΏΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉ ΡΠ·ΡΠΊ, ΡΡΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΏΡΠΈΠΌΠ΅Π½ΠΈΡΡ AOT ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΡ. ΠΠΎ Π·Π°Π³Π²ΠΎΠ·Π΄ΠΊΠ° Π² ΡΠΎΠΌ, ΡΡΠΎ
mypyc
ΠΌΠΎΠΆΠ΅Ρ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠΎΠ²Π°ΡΡ ΠΈ Π½Π΅Π°Π½Π½ΠΎΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉ ΠΊΠΎΠ΄
!
Π€ΡΠ½ΠΊΡΠΈΡ bubble_sort
ΠΠ»Ρ ΠΏΡΠΈΠΌΠ΅ΡΠ° ΡΠ°ΡΡΠΌΠΎΡΡΠΈΠΌ ΡΡΠ½ΠΊΡΠΈΡ ΡΠΎΡΡΠΈΡΠΎΠ²ΠΊΠΈ βΠΏΡΠ·ΡΡΡΠΊΠΎΠΌβ.Β Π€Π°ΠΉΠ»
lib.py:
def bubble_sort(data):
Β Β Β n = len(data)
Β Β Β for i in range(n - 1):
Β Β Β Β Β Β Β for j in range(n - i - 1):
Β Β Β Β Β Β Β Β Β Β Β if data[j] > data[j + 1]:
Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β buff = data[j]
Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β data[j] = data[j + 1]
Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β data[j + 1] = buff
Β Β Β return data
Π£ ΡΠΈΠΏΠΎΠ² Π½Π΅Ρ Π°Π½Π½ΠΎΡΠ°ΡΠΈΠΉ, Π½ΠΎ ΡΡΠΎ Π½Π΅ ΠΌΠ΅ΡΠ°Π΅Ρ
mypyc
Π΅Π΅ ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠΎΠ²Π°ΡΡ. Π§ΡΠΎΠ±Ρ Π·Π°ΠΏΡΡΡΠΈΡΡ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΡ, Π½ΡΠΆΠ½ΠΎ ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ
mypyc
. ΠΠ½ Π½Π΅ ΡΠ°ΡΠΏΡΠΎΡΡΡΠ°Π½ΡΠ΅ΡΡΡ ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΠΌ ΠΏΠ°ΠΊΠ΅ΡΠΎΠΌ, Π½ΠΎ Π΅ΡΠ»ΠΈ Ρ Π²Π°Ρ ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½
mypy
, ΡΠΎ ΠΈ
mypyc
ΡΠΆΠ΅ ΠΏΡΠΈΡΡΡΡΡΠ²ΡΠ΅Ρ Π² ΡΠΈΡΡΠ΅ΠΌΠ΅! ΠΠ°ΠΏΡΡΠΊΠ°Π΅ΠΌ
mypyc
, ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΉ ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ:
> mypyc lib.py
ΠΠΎΡΠ»Π΅ Π·Π°ΠΏΡΡΠΊΠ° Π² ΠΏΡΠΎΠ΅ΠΊΡΠ΅ Π±ΡΠ΄ΡΡ ΡΠΎΠ·Π΄Π°Π½Ρ ΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅ Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΠΈ:
.mypy_cache
Β β
mypy
ΠΊΡΡ, mypyc Π½Π΅ΡΠ²Π½ΠΎ Π·Π°ΠΏΡΡΠΊΠ°Π΅Ρ mypy Π΄Π»Ρ ΡΠ°Π·Π±ΠΎΡΠ° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΠΈ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΡ AST;
build
β Π°ΡΡΠ΅ΡΠ°ΠΊΡΡ ΡΠ±ΠΎΡΠΊΠΈ;
lib.cpython-38-x86_64-linux-gnu.so
β ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΠΎ ΡΠ±ΠΎΡΠΊΠ° ΠΏΠΎΠ΄ ΡΠ΅Π»Π΅Π²ΡΡ ΠΏΠ»Π°ΡΡΠΎΡΠΌΡ. ΠΠ°Π½Π½ΡΠΉ ΡΠ°ΠΉΠ» ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ΅Ρ ΠΈΠ· ΡΠ΅Π±Ρ Π³ΠΎΡΠΎΠ²ΡΠΉ CPython Extension.
CPython Extension
β Π²ΡΡΡΠΎΠ΅Π½Π½ΡΠΉ Π²
CPython
ΠΌΠ΅Ρ
Π°Π½ΠΈΠ·ΠΌ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΡ Ρ ΠΊΠΎΠ΄ΠΎΠΌ, Π½Π°ΠΏΠΈΡΠ°Π½Π½ΡΠΌ Π½Π° Π‘/C++. ΠΠΎ ΡΡΡΠΈ ΡΡΠΎ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠ°Ρ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ°, ΠΊΠΎΡΠΎΡΡΡ
CPython
ΡΠΌΠ΅Π΅Ρ Π·Π°Π³ΡΡΠΆΠ°ΡΡ ΠΏΡΠΈ ΠΈΠΌΠΏΠΎΡΡΠ΅ Π½Π°ΡΠ΅Π³ΠΎ ΠΌΠΎΠ΄ΡΠ»Ρ
lib
. Π§Π΅ΡΠ΅Π· Π΄Π°Π½Π½ΡΠΉ ΠΌΠ΅Ρ
Π°Π½ΠΈΠ·ΠΌ ΠΎΡΡΡΠ΅ΡΡΠ²Π»ΡΠ΅ΡΡΡ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΠ΅ Ρ ΠΌΠΎΠ΄ΡΠ»ΡΠΌΠΈ, Π½Π°ΠΏΠΈΡΠ°Π½Π½ΡΠΌΠΈ Π½Π° python.
ΠΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΡ ΡΠΎΡΡΠΎΠΈΡ ΠΈΠ· Π΄Π²ΡΡ
ΡΠ°Π·:
ΠΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΡ python ΠΊΠΎΠ΄Π° Π² ΠΊΠΎΠ΄ Π‘;
ΠΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΡ Π‘ Π² Π±ΠΈΠ½Π°ΡΠ½ΡΠΉ
.so
ΡΠ°ΠΉΠ», Π΄Π»Ρ ΡΡΠΎΠ³ΠΎ
mypyc
ΡΠ°ΠΌ Π·Π°ΠΏΡΡΠΊΠ°Π΅Ρ gcc (
gcc
ΠΈ
python-dev
ΡΠ°ΠΊΠΆΠ΅ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±ΡΡΡ ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½Ρ).
Π€Π°ΠΉΠ»
lib.cpython-38-x86_64-linux-gnu.so
ΠΈΠΌΠ΅Π΅Ρ ΠΏΡΠ΅ΠΈΠΌΡΡΠ΅ΡΡΠ²ΠΎ ΠΏΠ΅ΡΠ΅Π΄
lib.py
ΠΏΡΠΈ ΠΈΠΌΠΏΠΎΡΡΠ΅ Π½Π° ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠ΅ΠΉ ΠΏΠ»Π°ΡΡΠΎΡΠΌΠ΅, ΠΈ ΠΈΡΠΏΠΎΠ»Π½ΡΡΡΡΡ ΡΠ΅ΠΏΠ΅ΡΡ Π±ΡΠ΄Π΅Ρ ΠΈΠΌΠ΅Π½Π½ΠΎ ΠΎΠ½.
ΠΡ ΠΈ Π΄Π°Π²Π°ΠΉΡΠ΅ ΡΡΠ°Π²Π½ΠΈΠΌ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΡ ΠΌΠΎΠ΄ΡΠ»Ρ Π΄ΠΎ ΠΈ ΠΏΠΎΡΠ»Π΅ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ. ΠΠ»Ρ ΡΡΠΎΠ³ΠΎ ΡΠΎΠ·Π΄Π°Π΄ΠΈΠΌ ΡΠ°ΠΉΠ»
main.py
Ρ ΠΊΠΎΠ΄ΠΎΠΌ Π·Π°ΠΏΡΡΠΊΠ° ΡΠΎΡΡΠΈΡΠΎΠ²ΠΊΠΈ:
import lib
data = lib.bubble_sort(list(range(5000, 0, -1)))
assert data == list(range(1, 5001))
ΠΠΎΠ»ΡΡΠΈΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠ½ΠΎ ΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΡ:
ΠΠΎ
ΠΠΎΡΠ»Π΅
real 5.68
user 5.60
sys 0.01
real 2.78
user 2.73
sys 0.01
ΠΠΆΠΈΠ΄Π°Π΅ΠΌΠΎ ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉ ΠΊΠΎΠ΄
ΠΎΠΊΠ°Π·Π°Π»ΡΡ Π±ΡΡΡΡΠ΅Π΅ (~ Π² 2 ΡΠ°Π·Π°)
, ΡΡΠΎ Π½Π΅ΠΏΠ»ΠΎΡ
ΠΎ, ΡΠ°ΠΊ ΠΊΠ°ΠΊ Π΄Π»Ρ ΡΠ°ΠΊΠΎΠ³ΠΎ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ° Π½Π°ΠΌ ΠΏΠΎΡΡΠ΅Π±ΠΎΠ²Π°Π»ΠΎΡΡ Π·Π°ΠΏΡΡΡΠΈΡΡ Π»ΠΈΡΡ ΠΎΠ΄Π½Ρ ΠΊΠΎΠΌΠ°Π½Π΄Ρ. Π₯ΠΎΡΡ ΠΎΡ ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° ΠΏΡΠΈΠ²ΡΡΠ½ΠΎ ΠΎΠΆΠΈΠ΄Π°Π΅ΡΡ Π±ΠΎΠ»ΡΡΠ΅Π³ΠΎ.
Π§ΡΠΎΠ±Ρ ΠΎΡΠ²Π΅ΡΠΈΡΡ Π½Π° Π²ΠΎΠΏΡΠΎΡ
βΠΊΠ°ΠΊ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΡΠ΅ΡΡΡ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΈ ΡΠΈΠΏΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉ ΠΊΠΎΠ΄β
, ΠΏΡΠΈΠ΄Π΅ΡΡΡ Π·Π°Π³Π»ΡΠ½ΡΡΡ Π² ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΡΡΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ Π½Π° Π‘. ΠΠΎ ΡΠ°Π·ΠΎΠ±ΡΠ°ΡΡ Π΅Π΅ Π±ΡΠ΄Π΅Ρ Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ ΡΠ»ΠΎΠΆΠ½ΠΎ, ΠΏΠΎΡΡΠΎΠΌΡ Π΄Π°Π²Π°ΠΉΡΠ΅ ΠΏΠΎΠΏΡΠΎΠ±ΡΠ΅ΠΌ ΡΠ°Π·ΠΎΠ±ΡΠ°ΡΡΡΡ Ρ ΠΏΡΠΈΠΌΠ΅ΡΠΎΠΌ ΠΏΠΎΠΏΡΠΎΡΠ΅.Β Β
Π€ΡΠ½ΠΊΡΠΈΡ sum(a, b)
Π‘ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΡΠ΅ΠΌ ΡΡΠ½ΠΊΡΠΈΡ ΡΡΠΌΠΌΡ ΠΎΡ Π΄Π²ΡΡ
ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ
:
def sum(a, b):
Β Β return a + b
ΠΠ΅ΡΠ΅Π΄ Π·Π°ΠΏΡΡΠΊΠΎΠΌ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ Ρ ΠΎΠΆΠΈΠ΄Π°Π» ΡΠ²ΠΈΠ΄Π΅ΡΡ ΠΏΡΠΈΠΌΠ΅ΡΠ½ΠΎ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΉ ΠΊΠΎΠ΄ Π½Π° Π‘:
int sum(int a, int b) {
Β Β Β return a + b;
}
ΠΠ΄Π½Π°ΠΊΠΎ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ ΠΎΠΊΠ°Π·Π°Π»ΡΡ cΡΡΠ΅ΡΡΠ²Π΅Π½Π½ΠΎ ΠΈΠ½ΡΠΌ (
ΠΊΠΎΠ΄ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ ΡΠΏΡΠΎΡΠ΅Π½
):
PyObject *CPyDef_sum(PyObject *cpy_r_a, PyObject *cpy_r_b){
Β Β Β Β return PyNumber_Add(cpy_r_a, cpy_r_b);
}
Π Π°ΡΡΠΌΠΎΡΡΠΈΠΌ, ΡΡΠΎ ΡΡΡ ΠΏΡΠΎΠΈΡΡ
ΠΎΠ΄ΠΈΡ. ΠΠΎ-ΠΏΠ΅ΡΠ²ΡΡ
, ΡΠ°ΠΊ ΠΊΠ°ΠΊ ΠΌΡ Π½Π΅ Π·Π½Π°Π΅ΠΌ ΡΠΈΠΏΡ Π²Ρ
ΠΎΠ΄Π½ΡΡ
ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ
, ΡΡΠ½ΠΊΡΠΈΡ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠ² ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ ΡΠΊΠ°Π·Π°ΡΠ΅Π»ΠΈ Π½Π° ΠΎΠ±ΡΠ΅ΠΊΡΡ ΠΊΠ»Π°ΡΡΠ°
PyObject
, ΠΏΠΎ ΡΡΡΠΈ ΡΡΠΎ Π²Π½ΡΡΡΠ΅Π½Π½ΠΈΠ΅
CPython
ΡΡΡΡΠΊΡΡΡΡ. ΠΠ°Π»Π΅Π΅
ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡΠ»ΠΎΠΆΠΈΡΡ ΡΡΠΈ ΠΎΠ±ΡΠ΅ΠΊΡΡ
, Π½ΠΎ ΠΊΠ°ΠΊ, Π΅ΡΠ»ΠΈ Π½Π°ΡΡΠΎΡΡΠΈΠ΅ ΡΠΈΠΏΡ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠ² Π½Π΅ΠΈΠ·Π²Π΅ΡΡΠ½Ρ Π²ΠΎ Π²ΡΠ΅ΠΌΡ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ: ΡΡΠΎ ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ ΡΠ΅Π»ΡΠ΅ ΡΠΈΡΠ»Π°, ΡΠΈΡΠ»Π° Ρ ΠΏΠ»Π°Π²Π°ΡΡΠ΅ΠΉ ΡΠΎΡΠΊΠΎΠΉ, ΡΠΏΠΈΡΠΊΠΈ ΠΈ Π²ΠΎΠΎΠ±ΡΠ΅ Π½Π΅ ΡΠ°ΠΊΡ, ΡΡΠΎ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΡ ΠΌΠΎΠΆΠ½ΠΎ ΡΠΊΠ»Π°Π΄ΡΠ²Π°ΡΡ, ΡΠΎΠ³Π΄Π° Π½ΡΠΆΠ½ΠΎ Π²Π΅ΡΠ½ΡΡΡ ΠΎΡΠΈΠ±ΠΊΡ. Π ΡΡΠΎ ΠΆΠ΅ Π΄Π΅Π»Π°Π΅Ρ Π² ΡΡΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ mypyc?Β
ΠΠ°ΠΊ ΠΎΠΊΠ°Π·Π°Π»ΠΎΡΡ, Π²ΡΠ΅ ΠΎΡΠ΅Π½Ρ ΠΏΡΠΎΡΡΠΎ: ΠΎΠ½ ΠΏΡΠΎΡΠΈΡ
CPython
ΡΠ°ΠΌΠΎΡΡΠΎΡΡΠ΅Π»ΡΠ½ΠΎ ΡΠ»ΠΎΠΆΠΈΡΡ ΡΡΠΈ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΡ. Π€ΡΠ½ΠΊΡΠΈΡ
PyNumber_Add
β ΡΡΠΎ Π²Π½ΡΡΡΠ΅Π½Π½ΡΡ ΡΡΠ½ΠΊΡΠΈΡ
Π‘Python
, ΠΊΠΎΡΠΎΡΠ°Ρ Π΄ΠΎΡΡΡΠΏΠ½Π° ΠΈΠ· ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΡ, Π²Π΅Π΄Ρ
Π‘Python
ΠΎΡΠ»ΠΈΡΠ½ΠΎ ΡΠΌΠ΅Π΅Ρ ΡΠΊΠ»Π°Π΄ΡΠ²Π°ΡΡ ΡΠ²ΠΎΠΈ ΠΎΠ±ΡΠ΅ΠΊΡΡ
.
ΠΠ·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΠ΅ CPython c Extension ΠΌΠΎΠΆΠ½ΠΎ ΠΈΠ·ΠΎΠ±ΡΠ°Π·ΠΈΡΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΌ Π΄ΠΈΠ°Π»ΠΎΠ³ΠΎΠΌ:
Β β Π ΠΏΠΎΡΡΠΈΡΠ°ΠΉ-ΠΊΠ° ΠΌΠ½Π΅ ΡΡΠ½ΠΊΡΠΈΡ sum Π΄Π»Ρ A, B;
Β β Π₯ΠΎΡΠΎΡΠΎ, Π½ΠΎ ΡΠΊΠ°ΠΆΠΈ ΡΠ½Π°ΡΠ°Π»Π°, ΡΠΊΠΎΠ»ΡΠΊΠΎ Π±ΡΠ΄Π΅Ρ A + B;
Β β ΠΡΠ΄Π΅Ρ Π‘;
Β β Π₯ΠΎΡΠΎΡΠΎ, ΡΠΎΠ³Π΄Π° Π΄Π΅ΡΠΆΠΈ ΠΎΡΠ²Π΅Ρ - Π‘.
ΠΠΎΡ ΡΠ°ΠΊΠΎΠΉ Π½Π΅Ρ
ΠΈΡΡΡΠΉ ΠΏΡΠΈΠ΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ ΠΏΡΠΈ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°:
ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΡΠ΅ΠΌ Π²ΡΠ΅, ΡΡΠΎ ΠΌΠΎΠΆΠ΅ΠΌ, Π° Π²ΡΠ΅ ΠΎΡΡΠ°Π»ΡΠ½ΠΎΠ΅ ΠΎΡΠ΄Π°Π΅ΠΌ ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠ°ΡΠΎΡΡ
.Β
ΠΠΎΠ½Π΅ΡΠ½ΠΎ, Π΄Π°Π½Π½ΡΠΉ ΠΏΡΠΈΠΌΠ΅Ρ Π²ΡΠ³Π»ΡΠ΄ΠΈΡ Π³ΡΠΎΡΠ΅ΡΠΊΠ½ΠΎ, Π½ΠΎ Π΄Π°ΠΆΠ΅
Π½Π΅ΡΠΌΠΎΡΡΡ Π½Π° ΡΠ°ΠΊΡΡ Π½Π΅ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½ΠΎΡΡΡ
, mypyc ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ Π΄ΠΎΠ±ΠΈΡΡΡΡ ΡΡΡΠ΅ΡΡΠ²Π΅Π½Π½ΠΎΠ³ΠΎ
ΠΏΡΠΈΡΠΎΡΡΠ° ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ
, ΠΊΠ°ΠΊ Π² ΠΏΡΠΈΠΌΠ΅ΡΠ΅ Ρ ΡΠΎΡΡΠΈΡΠΎΠ²ΠΊΠΎΠΉ.
Π€ΡΠ½ΠΊΡΠΈΡ sum(a: int, b: int)
ΠΡΠ°ΠΊ, Ρ Π½Π°Ρ ΠΏΠΎΠ»ΡΡΠΈΠ»ΠΎΡΡ ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠΎΠ²Π°ΡΡ python, ΠΈ ΠΌΡ ΡΠ°Π·ΠΎΠ±ΡΠ°Π»ΠΈΡΡ Ρ ΡΠ΅ΠΌ, ΠΊΠ°ΠΊ ΡΡΠΎ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ, Π° ΡΠ°ΠΊΠΆΠ΅ ΡΠ²ΠΈΠ΄Π΅Π»ΠΈ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΡΡ Π½Π΅ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½ΠΎΡΡΡ ΠΏΠΎΠ»ΡΡΠ΅Π½Π½ΠΎΠ³ΠΎ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ°. Π’Π΅ΠΏΠ΅ΡΡ ΠΏΠΎΠΏΡΠΎΠ±ΡΠ΅ΠΌ ΡΠ°Π·ΠΎΠ±ΡΠ°ΡΡΡΡ Π² ΡΠΎΠΌ, ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ ΡΡΠΎ ΡΠ»ΡΡΡΠΈΡΡ. ΠΡΠ΅Π²ΠΈΠ΄Π½ΠΎ, ΡΡΠΎ ΠΎΡΠ½ΠΎΠ²Π½Π°Ρ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ° Π·Π°ΠΊΠ»ΡΡΠ°Π΅ΡΡΡ Π²ΠΎ
ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²Π΅Π½Π½ΠΎΠΌ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΠΈ
CPython - Extension
. ΠΠΎ ΠΊΠ°ΠΊ ΡΡΠΎ ΠΏΠΎΠ±ΠΎΡΠΎΡΡ?Β
ΠΠ»Ρ ΠΏΠΎΠ²ΡΡΠ΅Π½ΠΈΡ ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½ΠΎΡΡΠΈ, Π½ΡΠΆΠ½ΠΎ, ΡΡΠΎΠ±Ρ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΠ΅, ΠΏΠΎΠ»ΡΡΠΈΠ² ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅, ΠΌΠΎΠ³Π»ΠΎ ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ
Π΄ΠΎΠ»ΡΡΠ΅ ΠΎΡΡΠ°Π²Π»ΡΡΡ Π΅Π³ΠΎ Ρ ΡΠ΅Π±Ρ
Π±Π΅Π· ΠΎΠ±ΡΠ°ΡΠ΅Π½ΠΈΡ ΠΊ
CPython
. ΠΡΠ»ΠΈ Π±Ρ Ρ mypyc Π±ΡΠ»Π° ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΎ ΡΠΈΠΏΠ°Ρ
ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ
, ΡΠΎ ΠΎΠ½ Π±Ρ ΠΌΠΎΠ³ ΡΠ°ΠΌΠΎΡΡΠΎΡΡΠ΅Π»ΡΠ½ΠΎ ΠΏΡΠΎΠΈΠ·Π²Π΅ΡΡΠΈ ΡΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π±Π΅Π· Π²ΠΎΠ·Π²ΡΠ°ΡΠ° ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ. ΠΠΎ Π²ΡΠ²Π΅ΡΡΠΈ ΡΠΈΠΏΡ ΡΠ°ΠΌΠΎΡΡΠΎΡΡΠ΅Π»ΡΠ½ΠΎ mypyc Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ, ΠΎΠ½ Π΄Π°ΠΆΠ΅
Π½Π΅ ΠΊΠΎΠ½ΡΡΠΎΠ»ΠΈΡΡΠ΅Ρ ΠΊΠΎΠ΄
, ΠΈΠ· ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ ΠΎΡΡΡΠ΅ΡΡΠ²Π»ΡΠ΅ΡΡΡ Π²ΡΠ·ΠΎΠ² ΡΡΠ½ΠΊΡΠΈΠΈ sum. Π‘ΠΎΠΎΡΠ²Π΅ΡΡΡΠ²Π΅Π½Π½ΠΎ, Π΅ΠΌΡ Π½ΡΠΆΠ½ΠΎ ΠΏΠΎΠΌΠΎΡΡ, ΠΏΡΠΎΡΡΠ°Π²ΠΈΠ² Π°Π½Π½ΠΎΡΠ°ΡΠΈΠΈ Π²ΡΡΡΠ½ΡΡ. ΠΠ°Π²Π°ΠΉΡΠ΅ ΠΏΠΎΡΠΌΠΎΡΡΠΈΠΌ, ΠΊΠ°ΠΊ ΠΏΠΎΠΌΠ΅Π½ΡΠ΅ΡΡΡ ΡΠ΅Π·ΡΠ»ΡΡΠΈΡΡΡΡΠ°Ρ Π‘-ΡΡΠ½ΠΊΡΠΈΡ, Π΅ΡΠ»ΠΈ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ Π°Π½Π½ΠΎΡΠ°ΡΠΈΡ ΡΠΈΠΏΠΎΠ²:
def sum(a: int, b: int):
Β Β return a + b
Π‘ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ Π½Π° C (
Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ ΠΎΡΠΈΡΠ΅Π½Π½ΡΠΉ
):
PyObject *CPyDef_sum(CPyTagged cpy_r_a, CPyTagged cpy_r_b) {
Β Β Β CPyTagged cpy_r_r0;
Β Β Β PyObject *cpy_r_r1;
Β Β Β cpy_r_r0 = CPyTagged_Add(cpy_r_a, cpy_r_b);
Β Β Β cpy_r_r1 = CPyTagged_StealAsObject(cpy_r_r0);
Β Β Β return cpy_r_r1;
}
ΠΠ»Π°Π²Π½ΠΎΠ΅, ΡΡΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΌΠ΅ΡΠΈΡΡ:
ΡΡΠ½ΠΊΡΠΈΡ ΡΡΡΠ΅ΡΡΠ²Π΅Π½Π½ΠΎ ΠΏΠΎΠΌΠ΅Π½ΡΠ»Π°ΡΡ
, Π° Π·Π½Π°ΡΠΈΡ, ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ ΡΠ΅Π°Π³ΠΈΡΡΠ΅Ρ Π½Π° ΠΏΠΎΡΠ²Π»Π΅Π½ΠΈΠ΅ Π°Π½Π½ΠΎΡΠ°ΡΠΈΠΈ. ΠΠ°Π²Π°ΠΉΡΠ΅ ΡΠ°Π·Π±ΠΈΡΠ°ΡΡΡΡ, ΡΡΠΎ ΠΈΠ·ΠΌΠ΅Π½ΠΈΠ»ΠΎΡΡ.Β
Π’Π΅ΠΏΠ΅ΡΡ
CPyDef_sum
ΠΏΠΎΠ»ΡΡΠ°Π΅Ρ Π½Π° Π²Ρ
ΠΎΠ΄ Π½Π΅ ΡΠΊΠ°Π·Π°ΡΠ΅Π»ΠΈ Π½Π°
PyObject
, Π° ΡΡΡΡΠΊΡΡΡΡ
CPyTagged
. ΠΡΠΎ Π²ΡΠ΅ Π΅ΡΠ΅ Π½Π΅
int
, Π½ΠΎ ΡΠΆΠ΅ ΠΈ Π½Π΅ ΡΠ°ΡΡΡ
CPython
, Π° ΡΠ°ΡΡΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊ mypyc, ΠΊΠΎΡΠΎΡΡΡ ΠΎΠ½ Π΄ΠΎΠ±Π°Π²Π»ΡΠ΅Ρ Π² ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉ ΠΊΠΎΠ΄ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΡ. ΠΠ»Ρ Π΅Π΅ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ Π² ΡΠ°Π½ΡΠ°ΠΉΠΌΠ΅ ΡΠ½Π°ΡΠ°Π»Π° ΠΏΡΠΎΠ²Π΅ΡΡΠ΅ΡΡΡ ΡΠΈΠΏ, ΡΠ°ΠΊ ΡΡΠΎ ΡΠ΅ΠΏΠ΅ΡΡ ΡΡΠ½ΠΊΡΠΈΡ
sum
ΡΠ°Π±ΠΎΡΠ°Π΅Ρ ΡΠΎΠ»ΡΠΊΠΎ Ρ
int
ΠΈ ΠΎΠ±ΠΎΠΉΡΠΈ Π°Π½Π½ΠΎΡΠ°ΡΠΈΡ Π½Π΅ ΠΏΠΎΠ»ΡΡΠΈΡΡΡ.
ΠΠ°Π»Π΅Π΅ ΠΏΡΠΎΠΈΡΡ
ΠΎΠ΄ΠΈΡ Π²ΡΠ·ΠΎΠ²
CPyTaggetAdd
Π²ΠΌΠ΅ΡΡΠΎ
PyNumber_Add
. ΠΡΠΎ ΡΠΆΠ΅
Π²Π½ΡΡΡΠ΅Π½Π½ΡΡ ΡΡΠ½ΠΊΡΠΈΡ mypyc
. ΠΡΠ»ΠΈ Π·Π°Π³Π»ΡΠ½ΡΡΡ Π²
ΠΊΠΎΠ΄
CPyTaggetAdd
, ΡΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ½ΡΡΡ, ΡΡΠΎ ΡΠ°ΠΌ ΠΏΡΠΎΠΈΡΡ
ΠΎΠ΄ΠΈΡ ΠΏΡΠΎΠ²Π΅ΡΠΊΠ° Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ΠΎΠ² Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ
a
ΠΈ
b
, ΠΈ Π΅ΡΠ»ΠΈ ΠΎΠ½ΠΈ ΡΠΊΠ»Π°Π΄ΡΠ²Π°ΡΡΡΡ Π² int, ΡΠΎ ΠΏΡΠΎΠΈΡΡ
ΠΎΠ΄ΠΈΡ ΠΏΡΠΎΡΡΠΎΠ΅ ΡΡΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅, Π° ΡΠ°ΠΊΠΆΠ΅ ΠΏΡΠΎΠ²Π΅ΡΠΊΠ° Π½Π° ΠΏΠ΅ΡΠ΅ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅:
if (likely(CPyTagged_CheckShort(left) && CPyTagged_CheckShort(right))) {
Β Β Β Β CPyTagged sum = left + right;
Β Β Β Β if (likely(!CPyTagged_IsAddOverflow(sum, left, right))) {
Β Β Β Β Β Β Β Β return sum;
Β Β Β Β }
}
Π’Π°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, Π½Π°Ρ Π΄ΠΈΠ°Π»ΠΎΠ³
CPython - Extension
ΠΏΡΠ΅Π²ΡΠ°ΡΠ°Π΅ΡΡΡ
ΠΈΠ· Π°Π±ΡΡΡΠ΄Π½ΠΎΠ³ΠΎ Π² Π½ΠΎΡΠΌΠ°Π»ΡΠ½ΡΠΉ
:
Β β Π ΠΏΠΎΡΡΠΈΡΠ°ΠΉ-ΠΊΠ° ΠΌΠ½Π΅ ΡΡΠ½ΠΊΡΠΈΡ sum Π΄Π»Ρ A, B;
Β β Π₯ΠΎΡΠΎΡΠΎ, ΡΠΎΠ³Π΄Π° Π΄Π΅ΡΠΆΠΈ ΠΎΡΠ²Π΅Ρ Π‘.
Π€ΡΠ½ΠΊΡΠΈΡ bubble_sort(data: List[int])
ΠΠ°ΡΡΠ°Π»ΠΎ Π²ΡΠ΅ΠΌΡ Π²Π΅ΡΠ½ΡΡΡΡΡ ΠΊ ΡΡΠ½ΠΊΡΠΈΠΈ ΡΠΎΡΡΠΈΡΠΎΠ²ΠΊΠΈ, ΡΡΠΎΠ±Ρ ΠΏΡΠΎΠ²Π΅ΡΡΠΈ Π·Π°ΠΌΠ΅ΡΡ ΡΠΊΠΎΡΠΎΡΡΠΈ. ΠΠ·ΠΌΠ΅Π½ΠΈΠΌ Π½Π°ΡΠ°Π»ΡΠ½ΡΡ ΡΡΠ½ΠΊΡΠΈΡ, Π΄ΠΎΠ±Π°Π²ΠΈΠ² Π°Π½Π½ΠΎΡΠ°ΡΠΈΡ Π΄Π»Ρ
data
:
def bubble_sort(data: List[int]):
Β Β Β Β β¦
Π‘ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΡΠ΅ΠΌ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ ΠΈ Π·Π°ΠΌΠ΅ΡΠΈΠΌ Π²ΡΠ΅ΠΌΡ ΡΠΎΡΡΠΈΡΠΎΠ²ΠΊΠΈ:
ΠΠ΅Π· ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ
Π‘ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠ΅ΠΉ, Π±Π΅Π· Π°Π½Π½ΠΎΡΠ°ΡΠΈΠΈ ΡΠΈΠΏΠΎΠ²
Π‘ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠ΅ΠΉ ΠΈ Π°Π½Π½ΠΎΡΠ°ΡΠΈΠ΅ΠΉ ΡΠΈΠΏΠΎΠ²
real 5.68
user 5.60
sys 0.01
real 2.78
user 2.73
sys 0.01
real 1.32
user 1.30
sys 0.01
ΠΡΠ°ΠΊ, ΠΌΡ ΠΏΠΎΠ»ΡΡΠΈΠ»ΠΈ Π΅ΡΠ΅ Π΄Π²ΡΠΊΡΠ°ΡΠ½ΠΎΠ΅ ΡΡΠΊΠΎΡΠ΅Π½ΠΈΠ΅ ΠΎΡΠ½ΠΎΡΠΈΡΠ΅Π»ΡΠ½ΠΎ ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ, Π½Π΅ Π°Π½Π½ΠΎΡΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°, ΠΈ ΡΠ΅ΡΡΡΠ΅Ρ
ΠΊΡΠ°ΡΠ½ΠΎΠ΅ ΠΎΡΠ½ΠΎΡΠΈΡΠ΅Π»ΡΠ½ΠΎ ΠΎΡΠΈΠ³ΠΈΠ½Π°Π»ΡΠ½ΠΎΠ³ΠΎ!
ΠΠ°ΡΠ° ΡΠ»ΠΎΠ² ΠΎ mypyc
ΠΡΠ»ΠΈ Π²Ρ ΡΠΆΠ΅ Π±ΡΠΎΡΠΈΠ»ΠΈΡΡ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠΎΠ²Π°ΡΡ Π²Π°ΡΠΈ ΠΏΠ°ΠΊΠ΅ΡΡ, ΡΠΎ ΡΡΠΎΠΈΡ Π·Π°Π΄Π΅ΡΠΆΠ°ΡΡΡΡ Π½Π° ΠΏΠ°ΡΡ ΠΌΠΈΠ½ΡΡ, ΡΡΠΎΠ±Ρ Π΄ΠΎΡΠΈΡΠ°ΡΡ ΡΡΠΎΡ Π°Π±Π·Π°Ρ Π΄ΠΎ ΠΊΠΎΠ½ΡΠ°. ΠΠ»Π°Π²Π½ΡΠΌ Π½Π΅Π΄ΠΎΡΡΠ°ΡΠΊΠΎΠΌ
mypyc
ΠΏΠΎΠΊΠ° ΠΎΡΡΠ°Π΅ΡΡΡ ΡΡΠ°Π±ΠΈΠ»ΡΠ½ΠΎΡΡΡ: ΠΎΠ½ Π²ΡΠ΅ Π΅ΡΠ΅ Π² Π°Π»ΡΡΠ΅, ΡΠΎΡΠ½Π΅Π΅, ΡΠ΅ΠΉΡΠ°Ρ ΡΡΠΎ Π²ΠΎΠΎΠ±ΡΠ΅ Π½Π΅ ΡΠ°ΠΌΠΎΡΡΠΎΡΡΠ΅Π»ΡΠ½ΡΠΉ ΠΏΡΠΎΠ΅ΠΊΡ, Π° ΡΠ°ΡΡΡ
mypy
. Π‘ΠΎΠ±ΡΡΠ²Π΅Π½Π½ΠΎ ΠΎΠ½ ΠΈ ΡΠΎΠ·Π΄Π°Π²Π°Π»ΡΡ ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΠΎ ΠΏΠΎΠ΄ Π·Π°Π΄Π°ΡΡ ΡΠ²Π΅Π»ΠΈΡΠ΅Π½ΠΈΡ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ
mypy
ΠΈ Π΄Π»Ρ ΡΡΠΎΠΉ ΡΠ΅Π»ΠΈ ΠΎΠ½ ΡΠΆΠ΅
Π±ΠΎΠ»Π΅Π΅ Π³ΠΎΠ΄Π° ΠΊΠ°ΠΊ ΡΡΠ°Π±ΠΈΠ»Π΅Π½
. ΠΠΎ ΠΊΠ°ΠΊ ΠΎΠ±ΡΠ΅Π΅ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ ΠΏΠΎ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ Π»ΡΠ±ΠΎΠ³ΠΎ python-ΠΊΠΎΠ΄Π°, ΠΎΠ½ Π΅ΡΠ΅ ΡΡΡΠΎΠ²Π°Ρ, ΠΎ ΡΠ΅ΠΌ Π°Π²ΡΠΎΡΡ ΠΏΡΠ΅Π΄ΡΠΏΡΠ΅ΠΆΠ΄Π°ΡΡ Π½Π° ΡΡΡΠ°Π½ΠΈΡΠ΅ ΠΏΡΠΎΠ΅ΠΊΡΠ°.
Π’Π°ΠΊΠΆΠ΅ ΡΡΡΠ΅ΡΡΠ²ΡΡΡ ΠΏΡΠΈΠ½ΡΠΈΠΏΠΈΠ°Π»ΡΠ½ΡΠ΅ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΡ, Π½Π°ΠΊΠ»Π°Π΄ΡΠ²Π°Π΅ΠΌΡΠ΅ Π½Π° ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΡΠ΅ΠΌΡΠΉ ΠΊΠΎΠ΄ ΠΈΠ»ΠΈ Π½Π° ΠΊΠΎΠ΄, Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΡΡΡΠΈΠΉ ΡΠΎ ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠΎΠ²Π°Π½Π½ΡΠΌ:
ΠΡΠΈΠ½ΡΠ΄ΠΈΡΠ΅Π»ΡΠ½Π°Ρ ΠΏΡΠΎΠ²Π΅ΡΠΊΠ° ΡΠΈΠΏΠΎΠ² Π² ΡΠ°Π½ΡΠ°ΠΉΠΌΠ΅;
Π ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΡΠ΅ΠΌΠΎΠΌ ΠΊΠΎΠ΄Π΅ Π·Π°ΠΏΡΠ΅ΡΠ°Π΅ΡΡΡ monkey patching;
Mypy Ρ
ΡΠ°Π½ΠΈΡ ΠΊΠ»Π°ΡΡΡ Π² Π‘ ΡΡΡΡΠΊΡΡΡΠ°Ρ
Π΄Π»Ρ ΡΠ²Π΅Π»ΠΈΡΠ΅Π½ΠΈΡ ΡΠΊΠΎΡΠΎΡΡΠΈ Π΄ΠΎΡΡΡΠΏΠ° ΠΊ Π°ΡΡΠΈΠ±ΡΡΠ°ΠΌ, Π½ΠΎ ΡΡΠΎ ΠΏΡΠΈΠ²ΠΎΠ΄ΠΈΡ ΠΊ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ°ΠΌ ΡΠΎΠ²ΠΌΠ΅ΡΡΠΈΠΌΠΎΡΡΠΈ.
ΠΡΠΈ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΡ Π½ΠΎΡΡΡ
ΠΏΡΠΈΠ½ΡΠΈΠΏΠΈΠ°Π»ΡΠ½ΡΠΉ
Ρ
Π°ΡΠ°ΠΊΡΠ΅Ρ ΠΈ ΡΠ²Π»ΡΡΡΡΡ ΡΠ»Π΅Π΄ΡΡΠ²ΠΈΠ΅ΠΌ Π°ΡΡ
ΠΈΡΠ΅ΠΊΡΡΡΡ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠ°. ΠΠΎ ΠΈΠ· Π½ΠΈΡ
ΠΏΡΠΎΠΈΡΡΠ΅ΠΊΠ°ΡΡ Π΄ΡΡΠ³ΠΈΠ΅ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΡ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ ΠΌΠΎΠ΄ΡΠ»Ρ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΠΎΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ abc. ΠΠΎΠΌΠΈΠΌΠΎ ΡΡΠΎΠ³ΠΎ, Π΅ΡΡΡ Π±ΠΎΠ»ΡΡΠ°Ρ ΠΏΠΎΡΡΠΈΡ Π½Π΅Π΄ΠΎΡΠ°Π±ΠΎΡΠΎΠΊ ΠΈ Π±Π°Π³ΠΎΠ². Π§Π°ΡΠ΅ Π²ΡΠ΅Π³ΠΎ ΠΎΠ½ΠΈ ΠΏΡΠΈΠ²ΠΎΠ΄ΡΡ ΠΊ ΡΠΎΠΌΡ, ΡΡΠΎ ΠΊΠΎΠ΄
gcc
ΠΎΡΠΊΠ°Π·ΡΠ²Π°Π΅ΡΡΡ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠΎΠ²Π°ΡΡ ΠΏΠΎΠ»ΡΡΠ΅Π½Π½ΡΠΉ Π‘ ΠΊΠΎΠ΄, ΠΏΡΠΈ ΡΡΠΎΠΌ, ΡΡΠΎΠ±Ρ ΠΏΠΎΠ½ΡΡΡ Π½Π°ΡΡΠΎΡΡΡΡ ΠΏΡΠΈΡΠΈΠ½Ρ ΠΎΡΠΈΠ±ΠΊΠΈ, ΠΏΡΠΈΡ
ΠΎΠ΄ΠΈΡΡΡ ΠΏΡΠΎΠΊΡΡΡΠΈΠ²Π°ΡΡ Π² Π³ΠΎΠ»ΠΎΠ²Π΅ Π½Π΅ΠΏΡΠΎΡΡΡΡ ΠΏΡΠΎΡΠ΅Π΄ΡΡΡ ΡΠ΅Π²Π΅ΡΡ ΠΈΠ½ΠΆΠΈΠ½ΠΈΡΠΈΠ½Π³Π°. ΠΠΎΠΊΠ° ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ ΡΠ°ΠΊΠΎΠ², ΡΡΠΎ ΠΏΡΠΈ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈΠ· ΠΌΠΎΠΈΡ
ΠΏΡΠΎΠ΅ΠΊΡΠΎΠ², Π±Π΅Π· ΠΏΡΠΎΠ±Π»Π΅ΠΌ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠΎΠ²Π°Π»ΠΎΡΡ ΠΏΡΠΈΠΌΠ΅ΡΠ½ΠΎ
20 % ΠΌΠΎΠ΄ΡΠ»Π΅ΠΉ
, Π·Π°ΡΠΎ ΠΊΠ°ΠΊΠΈΡ
Π»ΠΈΠ±ΠΎ ΠΏΡΠΎΠ±Π»Π΅ΠΌ ΠΏΡΠΈ ΡΠ°Π±ΠΎΡΠ΅ Ρ ΡΠΆΠ΅ ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠΎΠ²Π°Π½Π½ΡΠΌΠΈ ΠΌΠΎΠ΄ΡΠ»ΡΠΌΠΈ Ρ Π½Π΅ Π·Π°ΠΌΠ΅ΡΠΈΠ».
Π’Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅, Π±ΠΎΠ»ΡΡΠ°Ρ ΡΠ°ΡΡΡ ΡΠ»ΡΡΡΠ΅Π½ΠΈΠΉ Π² ΠΈΡ
Roadmap
Π·Π°ΠΊΡΡΡΠ°, ΠΈ ΠΏΡΠΎΠ΅ΠΊΡ Π³ΠΎΡΠΎΠ²ΠΈΡΡΡ ΠΊ ΠΏΡΠ±Π»ΠΈΡΠ½ΠΎΠΌΡ
ΡΠ΅Π»ΠΈΠ·Ρ
.
Nuitka
Π£ΠΆΠ΅ Π² ΠΏΡΠΎΡΠ΅ΡΡΠ΅ ΡΠ°Π±ΠΎΡΡ Π½Π°Π΄ ΡΡΠ°ΡΡΠ΅ΠΉ, Ρ ΡΠ·Π½Π°Π» ΠΏΡΠΎ Π΅ΡΠ΅ ΠΎΠ΄ΠΈΠ½ ΠΏΡΠΎΠ΅ΠΊΡ Ρ Π°Π½Π°Π»ΠΎΠ³ΠΈΡΠ½ΡΠΌΠΈ ΡΠ΅Π»ΡΠΌΠΈ. ΠΠ΅Ρ
Π°Π½ΠΈΠ·ΠΌ ΡΠ°Π±ΠΎΡΡ
Nuitka
ΡΠΈΠ»ΡΠ½ΠΎ Π½Π°ΠΏΠΎΠΌΠΈΠ½Π°Π΅Ρ ΠΎΠΏΠΈΡΠ°Π½Π½ΡΠΉ Π²ΡΡΠ΅. Π Π°Π·Π½ΠΈΡΠ° Π·Π°ΠΊΠ»ΡΡΠ°Π΅ΡΡΡ Π² ΡΠΎΠΌ, ΡΡΠΎ
Nuitka
ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΡΠ΅Ρ Python ΠΌΠΎΠ΄ΡΠ»Ρ Π² Π‘++ ΠΊΠΎΠ΄, ΠΊΠΎΡΠΎΡΡΠΉ ΡΠ°ΠΊΠΆΠ΅ ΡΠΎΠ±ΠΈΡΠ°Π΅ΡΡΡ Π²
Π‘Python Extension
. ΠΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΠΎ ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΡΠΎΠ±ΡΠ°ΡΡ Π²Π΅ΡΡ ΠΏΡΠΎΠ΅ΠΊΡ Π²
ΠΎΠ΄ΠΈΠ½ ΠΈΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΡΠΉ ΡΠ°ΠΉΠ»
, ΡΠΎΠ³Π΄Π° ΡΠΆΠ΅ ΡΠ°ΠΌ
CPython
ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ°Π΅ΡΡΡ ΠΊ ΠΏΡΠΎΠ΅ΠΊΡΡ ΠΊΠ°ΠΊ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠ°Ρ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ°
libpython
.
Nuitka
ΠΏΠΎΠΊΠ° Π½Π΅ ΡΡΠΈΡΡΠ²Π°Π΅Ρ Π°Π½Π½ΠΎΡΠ°ΡΠΈΡ ΡΠΈΠΏΠΎΠ², ΠΏΠΎΡΡΠΎΠΌΡ ΡΠ΅Π·ΡΠ»ΡΡΠΈΡΡΡΡΠΈΠΉ ΠΊΠΎΠ΄ ΠΈ ΡΠΊΠΎΡΠΎΡΡΡ ΡΠ°Π±ΠΎΡΡ Π½Π΅ Π·Π°Π²ΠΈΡΡΡ ΠΎΡ Π½Π°Π»ΠΈΡΠΈΡ Π°Π½Π½ΠΎΡΠ°ΡΠΈΠΉ. ΠΠΎΠ»ΡΡΠ΅Π½Π½Π°Ρ ΠΆΠ΅ ΡΠΊΠΎΡΠΎΡΡΡ Π² ΠΌΠΎΠ΅ΠΌ ΡΠ΅ΡΡΠ΅
ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΠ΅Ρ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΡ mypy
Π½Π° Π½Π΅ Π°Π½Π½ΠΎΡΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠΌ ΠΊΠΎΠ΄Π΅.
ΠΠ°Π²Π΅ΡΡΠ΅Π½ΠΈΠ΅
ΠΠ΅Π΄Π°Π²Π½ΠΎ ΠΎΠ΄ΠΈΠ½ ΠΌΠΎΠΉ ΠΊΠΎΠ»Π»Π΅Π³Π° Π²ΡΡΠΊΠ°Π·Π°Π» ΠΌΠ½Π΅Π½ΠΈΠ΅, ΡΡΠΎ
mypy
ΡΠΈΠ»ΡΠ½ΠΎ ΡΡΠ»ΠΎΠΆΠ½ΡΠ΅Ρ
Π΅ΠΌΡ ΠΆΠΈΠ·Π½Ρ: ΠΈΠ· ΡΠ΅ΠΊΡΡΠ° ΠΎΡΠΈΠ±ΠΎΠΊ Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ½ΡΡΡ, βΡΠ΅Π³ΠΎ ΠΎΠ½ ΠΎΡ ΠΌΠ΅Π½Ρ Ρ
ΠΎΡΠ΅Ρβ, Π° Π°Π½Π°Π»ΠΈΠ·Π°ΡΠΎΡ ΠΈΠ·
PyCharm
Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ Π»ΡΡΡΠ΅. Π’Π΅ΠΏΠ΅ΡΡ Ρ ΠΏΠΎΠ½ΠΈΠΌΠ°Ρ, ΡΡΠΎ ΠΎΠ½ Π½Π΅Π΄ΠΎΠΎΡΠ΅Π½ΠΈΠ²Π°Π΅Ρ
mypy
. Π’Π°ΠΊ ΠΊΠ°ΠΊ ΠΎΠ½
Π½Π°ΠΌΠ½ΠΎΠ³ΠΎ Π±ΠΎΠ»ΡΡΠ΅Π΅, ΡΠ΅ΠΌ ΠΏΡΠΎΡΡΠΎ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈΠΉ Π°Π½Π°Π»ΠΈΠ·Π°ΡΠΎΡ
. ΠΠΎ ΡΡΡΠΈ ΠΎΠ½ ΡΠ΅Π°Π»ΠΈΠ·ΡΠ΅Ρ ΠΏΠΎΠ΄ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ ΡΠ·ΡΠΊΠ°, ΠΏΠΎΡΠ΅Π½ΡΠΈΠ°Π» ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ Π² ΠΏΠ»Π°Π½Π΅ ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΠΈ ΡΠΈΠ»ΡΠ½ΠΎ ΠΏΡΠ΅Π²ΠΎΡΡ
ΠΎΠ΄ΠΈΡ ΠΎΠ±ΡΡΠ½ΡΠΉ python. ΠΠΎΡΡΠΎΠΌΡ Π²ΡΡΡΠ°Π½ΠΈΠ²Π°Π½ΠΈΠ΅
mypy
Π² ΠΏΠ°ΠΉΠΏΠ»Π°ΠΉΠ½ ΠΏΡΠΎΠ΅ΠΊΡΠ° β ΠΈΠ½Π²Π΅ΡΡΠΈΡΠΈΡ Π½Π΅ ΡΠΎΠ»ΡΠΊΠΎ Π² ΠΏΠΎΠΈΡΠΊ ΠΎΡΠΈΠ±ΠΎΠΊ, Π½ΠΎ ΠΈ
Π±ΡΠ΄ΡΡΠΈΠΉ ΠΏΠ΅ΡΡΠΎΠΌΠ°Π½Ρ
ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ. ΠΠ½Π΅ ΠΎΡΠ΅Π½Ρ ΠΏΠΎΠ½ΡΠ°Π²ΠΈΠ»ΠΎΡΡ, ΡΡΠΎ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΠ΅ Ρ
CPython
ΠΎΡΡΡΠ΅ΡΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠ΅ΡΠ΅Π· ΠΌΠ΅Ρ
Π°Π½ΠΈΠ·ΠΌ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΠΉ ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠ°ΡΠΎΡΠ°, Π²Π΅Π΄Ρ ΡΡΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΡΠ΄Π΅Π»Π°ΡΡ Π²ΡΠ±ΠΎΡΠΎΡΠ½ΡΡ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΡ Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ Π½Π°Π³ΡΡΠΆΠ΅Π½Π½ΡΡ
ΠΌΠΎΠ΄ΡΠ»Π΅ΠΉ, ΠΎΡΡΠ°Π²ΠΈΠ² Π±ΠΎΠ»ΡΡΡΡ ΡΠ°ΡΡΡ ΠΊΠΎΠ΄Π° Π±Π΅Π· ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ. Π’Π°ΠΊΠΎΠΉ ΠΏΡΡΡ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ΅ΡΡΡ ΠΌΠ½Π΅
Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΡΠΌ
(ΡΡΠΈΡΡΠ²Π°Ρ, ΡΡΠΎ
mypyc
Π΄ΠΎ ΡΠΈΡ
ΠΏΠΎΡ Π² Π°Π»ΡΡΠ΅). ΠΠΎΠ½Π΅ΡΠ½ΠΎ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π»ΠΈ
mypyc
Π½Π° ΠΏΡΠΎΠ΄Π°ΠΊΡΠ΅Π½Π΅, ΡΠ΅ΡΠ°ΡΡ Π²Π°ΠΌ, Π½ΠΎ Π΅ΡΠ»ΠΈ Π²Ρ ΡΠΆΠ΅ ΡΠΏΠ΅ΡΠ»ΠΈΡΡ Π² ΠΏΠΎΡΠΎΠ»ΠΎΠΊ ΠΏΠΎ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ ΠΈ ΠΏΠΎΠ΄ΡΠΌΡΠ²Π°Π΅ΡΠ΅ ΠΎ ΡΠΎΠΌ, ΡΡΠΎΠ±Ρ ΠΏΠ΅ΡΠ΅ΠΏΠΈΡΠ°ΡΡ ΠΊΠ°ΠΊΠΈΠ΅-ΡΠΎ ΡΠ°ΡΡΠΈ Π½Π° Π½ΠΈΠ·ΠΊΠΎΡΡΠΎΠ²Π½Π΅Π²ΡΠ΅ ΡΠ·ΡΠΊΠΈ, ΡΠΎ ΡΡΠΎΠΈΡ ΠΏΠΎΠΏΡΠΎΠ±ΠΎΠ²Π°ΡΡ Π·Π°ΠΏΡΡΡΠΈΡΡ
mypyc
, ΡΠ΅ΠΌ Π±ΠΎΠ»Π΅Π΅, ΡΡΠΎ ΡΠ΄Π΅Π»Π°ΡΡ ΡΡΠΎ ΠΏΡΠΎΡΡΠΎ, Π΅ΡΠ»ΠΈ Π²Ρ ΡΠΆΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΠ΅ mypy.
P.S.
ΠΠ°Π΄Π΅ΡΡΡ, Π²Π°ΠΌ Π±ΡΠ»ΠΎ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ½ΠΎ ΡΠ·Π½Π°ΡΡ ΠΎ Π½ΠΎΠ²ΠΎΠΌ ΡΠΏΠΎΡΠΎΠ±Π΅ ΠΏΠΎΠ²ΡΡΠ΅Π½ΠΈΡ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ python, Π° ΡΠ°ΠΊΠΆΠ΅ Π³Π»ΡΠ±ΠΆΠ΅ ΡΠ°Π·ΠΎΠ±ΡΠ°ΡΡΡΡ Π² ΠΌΠ΅Ρ
Π°Π½ΠΈΠ·ΠΌΠ΅ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΈ ΡΠΈΠΏΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°. ΠΡΠ»ΠΈ ΡΠ΅ΠΌΠ° ΠΎΠΊΠ°ΠΆΠ΅ΡΡΡ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ½ΠΎΠΉ, ΡΠΎ Π² ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΉ ΡΡΠ°ΡΡΠ΅ ΠΏΠ»Π°Π½ΠΈΡΡΡ Π±ΠΎΠ»ΡΡΠ΅ ΡΠ°ΡΡΠΊΠ°Π·Π°ΡΡ ΠΏΡΠΎ
mypyc
, Π΅Π³ΠΎ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΡ ΠΈ ΡΠ°ΡΡΡΠ΅ ΠΎΡΠΈΠ±ΠΊΠΈ, Π° ΡΠ°ΠΊΠΆΠ΅, ΠΊΠ°ΠΊ ΠΈΡ
ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ±ΠΎΠΉΡΠΈ.
UPD
Π ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΡΡ
ΠΏΠΎΠ΄ΡΠΊΠ°Π·Π°Π»ΠΈ, ΠΎΠ± Π΅ΡΠ΅ ΠΎΠ΄Π½ΠΎΠΌ python ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠ΅ -
Cython
, ΠΎΠΊΠ°Π·ΡΠ²Π°Π΅ΡΡΡ ΡΠ΅ΠΏΠ΅ΡΡ ΠΎΠ½ ΡΠΌΠ΅Π΅Ρ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠΎΠ²Π°ΡΡ python ΠΊΠΎΠ΄ Π½Π°ΠΏΡΡΠΌΡΡ (ΠΌΠΈΠ½ΡΡ ΡΡΡΠ½ΡΡ ΡΠ°Π·Ρ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΡ ΠΊΠΎΠ΄Π° Π²
cython
-ΠΊΠΎΠ΄). Π‘ΡΠ΄Ρ ΠΏΠΎ Π·Π°ΠΌΠ΅ΡΠ°ΠΌ cython ΠΏΠΎΠΊΠ°
Π½Π΅ ΡΡΠΈΡΡΠ²Π°Ρ
Π°Π½Π½ΠΎΡΠ°ΡΠΈΡ ΡΠΈΠΏΠΎΠ², Π½ΠΎ Π²ΡΠ΅ΠΌΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ (
real 1.82
) ΠΎΠΊΠ°Π·Π°Π»ΠΎΡΡ ΠΏΠΎΡΠ΅ΡΠ΅Π΄ΠΈΠ½Π΅ ΠΌΠ΅ΠΆΠ΄Ρ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠΎΠΌ mypyc Π½Π° Π°Π½Π½ΠΎΡΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠΌ ΠΈ Π½Π΅ Π°Π½Π½ΠΎΡΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠΌ ΠΊΠΎΠ΄Π°. ΠΠΎ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ Π΅Π΅ Π΄ΠΎΠ±Π°Π²ΡΡ Π² Π±ΡΠ΄ΡΡΠ΅ΠΌ. |
| Markdown | [ΠΡΠ΅ ΠΏΠΎΡΠΎΠΊΠΈ](https://habr.com/ru/articles/)
[ΠΠΎΠΉΡΠΈ](https://habr.com/kek/v1/auth/habrahabr/?back=/ru/companies/exness/articles/542106/&hl=ru)
[](https://habr.com/ru/companies/exness/profile/)
[Exness](https://habr.com/ru/companies/exness/profile/)
Tech professionals. Good people
182
ΠΠΎΠ΄ΠΏΠΈΡΡΠΈΠΊΠΈ
ΠΠΎΠ΄ΠΏΠΈΡΠ°ΡΡΡΡ
[](https://habr.com/ru/users/zueve/)
[zueve](https://habr.com/ru/users/zueve/)
12 ΡΠ΅Π² 2021 Π² 12:41
# ΠΠ°ΠΊ ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠΎΠ²Π°ΡΡ Python
10 ΠΌΠΈΠ½
68K
[ΠΠ»ΠΎΠ³ ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ Exness](https://habr.com/ru/companies/exness/articles/)[ΠΡΡΠΎΠΊΠΎΠ½Π°Π³ΡΡΠΆΠ΅Π½Π½ΡΠ΅ ΡΠΈΡΡΠ΅ΠΌΡ \*](https://habr.com/ru/hubs/hi/) [Python \*](https://habr.com/ru/hubs/python/) [ΠΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ \*](https://habr.com/ru/hubs/programming/) [ΠΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΡ \*](https://habr.com/ru/hubs/compilers/)

ΠΡΠΈΠ²Π΅Ρ, Π₯Π°Π±Ρ\!
Π― Ρ
ΠΎΡΡ ΡΠ°ΡΡΠΊΠ°Π·Π°ΡΡ ΠΎΠ± ΡΠ΄ΠΈΠ²ΠΈΡΠ΅Π»ΡΠ½ΠΎΠΌ ΡΠΎΠ±ΡΡΠΈΠΈ, ΠΎ ΠΊΠΎΡΠΎΡΠΎΠΌ Ρ ΡΠ·Π½Π°Π» ΠΏΠ°ΡΡ ΠΌΠ΅ΡΡΡΠ΅Π² Π½Π°Π·Π°Π΄. ΠΠΊΠ°Π·ΡΠ²Π°Π΅ΡΡΡ, ΠΎΠ΄Π½Π° ΠΏΠΎΠΏΡΠ»ΡΡΠ½Π°Ρ python-ΡΡΠΈΠ»ΠΈΡΠ° ΡΠΆΠ΅ Π±ΠΎΠ»Π΅Π΅ Π³ΠΎΠ΄Π° ΡΠ°ΡΠΏΡΠΎΡΡΡΠ°Π½ΡΠ΅ΡΡΡ Π² Π²ΠΈΠ΄Π΅ Π±ΠΈΠ½Π°ΡΠ½ΡΡ
ΡΠ°ΠΉΠ»ΠΎΠ², ΠΊΠΎΡΠΎΡΡΠ΅ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΡΡΡΡΡ ΠΏΡΡΠΌΠΎ ΠΈΠ· python. Π ΡΠ΅ΡΡ Π½Π΅ ΠΏΡΠΎ Π±Π°Π½Π°Π»ΡΠ½ΡΡ ΡΠΏΠ°ΠΊΠΎΠ²ΠΊΡ ΠΊΠ°ΠΊΠΈΠΌ-Π½ΠΈΠ±ΡΠ΄Ρ *PyInstaller*\-ΠΎΠΌ, Π° ΠΏΡΠΎ ΡΠ΅ΡΡΠ½ΡΡ *Ahead-of-time* ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΡ ΡΠ΅Π»ΠΎΠ³ΠΎ python-ΠΏΠ°ΠΊΠ΅ΡΠ°. ΠΡΠ»ΠΈ Π²Ρ ΡΠ΄ΠΈΠ²Π»Π΅Π½Ρ ΡΠ°ΠΊ ΠΆΠ΅ ΠΊΠ°ΠΊ ΠΈ Ρ, Π΄ΠΎΠ±ΡΠΎ ΠΏΠΎΠΆΠ°Π»ΠΎΠ²Π°ΡΡ ΠΏΠΎΠ΄ ΠΊΠ°Ρ.
ΠΠ±ΡΡΡΠ½Ρ, ΠΏΠΎΡΠ΅ΠΌΡ Ρ ΡΡΠΈΡΠ°Ρ ΡΡΠΎ ΡΠΎΠ±ΡΡΠΈΠ΅ ΠΏΠΎ-Π½Π°ΡΡΠΎΡΡΠ΅ΠΌΡ ΡΠ΄ΠΈΠ²ΠΈΡΠ΅Π»ΡΠ½ΡΠΌ. Π‘ΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ Π΄Π²Π° Π²ΠΈΠ΄Π° ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ: *Ahead-of-time (AOT)*, ΠΊΠΎΠ³Π΄Π° Π²Π΅ΡΡ ΠΊΠΎΠ΄ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΡΠ΅ΡΡΡ Π΄ΠΎ Π·Π°ΠΏΡΡΠΊΠ° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΠΈ *Just in time compiler (JIT)*, ΠΊΠΎΠ³Π΄Π° Π½Π΅ΠΏΠΎΡΡΠ΅Π΄ΡΡΠ²Π΅Π½Π½ΠΎ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΠΏΠΎΠ΄ ΡΡΠ΅Π±ΡΠ΅ΠΌΡΡ Π°ΡΡ
ΠΈΡΠ΅ΠΊΡΡΡΡ ΠΏΡΠΎΡΠ΅ΡΡΠΎΡΠ° ΠΎΡΡΡΠ΅ΡΡΠ²Π»ΡΠ΅ΡΡΡ Π²ΠΎ Π²ΡΠ΅ΠΌΡ Π΅Π΅ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ. ΠΠΎ Π²ΡΠΎΡΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ ΠΏΠ΅ΡΠ²ΠΎΠ½Π°ΡΠ°Π»ΡΠ½ΡΠΉ Π·Π°ΠΏΡΡΠΊ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΠΎΡΡΡΠ΅ΡΡΠ²Π»ΡΠ΅ΡΡΡ Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΠΎΠΉ ΠΌΠ°ΡΠΈΠ½ΠΎΠΉ ΠΈΠ»ΠΈ ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠ°ΡΠΎΡΠΎΠΌ.
ΠΡΠ»ΠΈ ΡΠ³ΡΡΠΏΠΏΠΈΡΠΎΠ²Π°ΡΡ ΠΏΠΎΠΏΡΠ»ΡΡΠ½ΡΠ΅ ΡΠ·ΡΠΊΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΏΠΎ ΡΠΈΠΏΡ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ, ΡΠΎ ΠΏΠΎΠ»ΡΡΠΈΠΌ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΉ ΡΠΏΠΈΡΠΎΠΊ:
- Ahead-of-time compiler: C, C++, Rust, Kotlin, Nim, D, Go, Dart;
- Just in time compiler: Lua, Π‘\#, Groovy, Dart.
*Π python ΠΈΠ· ΠΊΠΎΡΠΎΠ±ΠΊΠΈ Π½Π΅Ρ JIT ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠ°, Π½ΠΎ ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΠ΅ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ, ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΡΡΠΈΠ΅ ΡΠ°ΠΊΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ, ΡΡΡΠ΅ΡΡΠ²ΡΡΡ Π΄Π°Π²Π½ΠΎ*
Π‘ΠΌΠΎΡΡΡ Π½Π° ΡΡΡ ΡΠ°Π±Π»ΠΈΡΡ, ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΌΠ΅ΡΠΈΡΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΡΡ Π·Π°ΠΊΠΎΠ½ΠΎΠΌΠ΅ΡΠ½ΠΎΡΡΡ: **ΡΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ ΡΠΈΠΏΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π½ΡΠ΅ ΡΠ·ΡΠΊΠΈ Π½Π°Ρ
ΠΎΠ΄ΡΡΡΡ Π² ΠΎΠ±Π΅ΠΈΡ
ΡΡΡΠΎΠΊΠ°Ρ
**. ΠΠ΅ΠΊΠΎΡΠΎΡΡΠ΅ Π΄Π°ΠΆΠ΅ ΠΌΠΎΠ³ΡΡ ΡΠ°ΡΠΏΡΠΎΡΡΡΠ°Π½ΡΡΡΡΡ Ρ Π΄Π²ΡΠΌΡ Π²Π΅ΡΡΠΈΡΠΌΠΈ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠΎΠ²: Kotlin ΠΌΠΎΠΆΠ΅Ρ ΠΈΡΠΏΠΎΠ»Π½ΡΡΡΡΡ ΠΊΠ°ΠΊ Ρ JIT JavaVM, ΡΠ°ΠΊ ΠΈ Ρ AOT Kotlin/Native. Π’ΠΎ ΠΆΠ΅ ΡΠ°ΠΌΠΎΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΡΠΊΠ°Π·Π°ΡΡ ΠΏΡΠΎ Dart (Π²Π΅ΡΡΠΈΠΈ 2). A Π²ΠΎΡ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΈ ΡΠΈΠΏΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π½ΡΠ΅ ΡΠ·ΡΠΊΠΈ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΡΡΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ JIT-ΠΎΠΌ, ΡΡΠΎ Π²ΠΏΡΠΎΡΠ΅ΠΌ Π²ΠΏΠΎΠ»Π½Π΅ Π»ΠΎΠ³ΠΈΡΠ½ΠΎ.
> *ΠΡΠΈ Π·Π°ΠΏΡΡΠΊΠ΅ Π²ΠΈΡΡΡΠ°Π»ΡΠ½Π°Ρ ΠΌΠ°ΡΠΈΠ½Π° ΡΠ½Π°ΡΠ°Π»Π° Π½Π°ΠΊΠ°ΠΏΠ»ΠΈΠ²Π°Π΅Ρ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΎ ΡΠΈΠΏΠ°Ρ
ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ
, Π·Π°ΡΠ΅ΠΌ ΠΏΠΎΡΠ»Π΅ Π½Π°ΠΊΠΎΠΏΠ»Π΅Π½ΠΈΡ ΡΡΠ°ΡΠΈΡΡΠΈΠΊΠΈ, Π·Π°ΠΏΡΡΠΊΠ°Π΅ΡΡΡ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΡ Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ Π½Π°Π³ΡΡΠΆΠ΅Π½Π½ΡΡ
ΡΠ°ΡΡΠ΅ΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ. ΠΠΈΡΡΡΠ°Π»ΡΠ½Π°Ρ ΠΌΠ°ΡΠΈΠ½Π° ΠΎΡΡΠ»Π΅ΠΆΠΈΠ²Π°Π΅Ρ ΡΠΈΠΏΡ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠ² ΠΈ ΠΏΠ΅ΡΠ΅ΠΊΠ»ΡΡΠ°Π΅Ρ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΠΌΠ΅ΠΆΠ΄Ρ ΡΠΆΠ΅ ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠΎΠ²Π°Π½Π½ΡΠΌΠΈ ΠΈ Π½Π΅ ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠΎΠ²Π°Π½Π½ΡΠΌΠΈ ΡΡΠ°ΡΡΠΊΠ°ΠΌΠΈ ΠΊΠΎΠ΄Π° Π² Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ ΠΎΡ ΡΠ΅ΠΊΡΡΠΈΡ
Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ
.*
ΠΡΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠΈ JIT ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ ΡΠΈΠΏΡ Π½Π΅ ΠΎΡΠ΅Π½Ρ ΡΠΎ ΠΈ Π½ΡΠΆΠ½Ρ, Π²Π΅Π΄Ρ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΎ ΡΠΈΠΏΠ°Ρ
ΡΠΎΠ±ΠΈΡΠ°Π΅ΡΡΡ Π²ΠΎ Π²ΡΠ΅ΠΌΡ ΡΠ°Π±ΠΎΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ. ΠΠΎΡΡΠΎΠΌΡ Π²ΡΠ΅ ΠΏΠΎΠΏΡΠ»ΡΡΠ½ΡΠ΅ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΈ ΡΠΈΠΏΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π½ΡΠ΅ ΡΠ·ΡΠΊΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΡΠ°ΡΠΏΡΠΎΡΡΡΠ°Π½ΡΡΡΡΡ ΠΈΠΌΠ΅Π½Π½ΠΎ Ρ JIT ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠΎΠΌ. **ΠΠΎ ΠΊΠ°ΠΊ Π±ΡΡΡ Ρ AOT ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠ΅ΠΉ ΠΊΠΎΠ΄Π°, Π² ΠΊΠΎΡΠΎΡΠΎΠΌ Π½Π΅Ρ ΡΠΈΠΏΠΎΠ²?** ΠΠ΅Π½Ρ ΠΎΡΠ΅Π½Ρ Π·Π°ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠΎΠ²Π°Π» ΡΡΠΎΡ Π²ΠΎΠΏΡΠΎΡ, ΠΈ Ρ ΠΏΠΎΠ»Π΅Π· ΡΠ°Π·Π±ΠΈΡΠ°ΡΡΡΡ.
ΠΡΠ°ΠΊ, Π²Π΅ΡΠ½Π΅ΠΌΡΡ ΠΊ ΡΡΠΈΠ»ΠΈΡΠ΅, ΠΎ ΠΊΠΎΡΠΎΡΠΎΠΉ Π³ΠΎΠ²ΠΎΡΠΈΠ»ΠΎΡΡ Π² Π½Π°ΡΠ°Π»Π΅ ΡΡΠ°ΡΡΠΈ. Π Π΅ΡΡ ΠΏΡΠΎ [mypy](http://mypy-lang.org/) - Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠΏΡΠ»ΡΡΠ½ΡΠΉ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈΠΉ Π°Π½Π°Π»ΠΈΠ·Π°ΡΠΎΡ python-ΠΊΠΎΠ΄Π°.

Π‘ Π°ΠΏΡΠ΅Π»Ρ 2019 Π³ΠΎΠ΄Π° ΡΡΠ° ΡΡΠΈΠ»ΠΈΡΠ° ΡΠ°ΡΠΏΡΠΎΡΡΡΠ°Π½ΡΠ΅ΡΡΡ Π² ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠΌ Π²ΠΈΠ΄Π΅, ΠΎ ΡΠ΅ΠΌ ΡΠ°ΡΡΠΊΠ°Π·ΡΠ²Π°Π΅ΡΡΡ Π² [Π±Π»ΠΎΠ³Π΅](https://mypy-lang.blogspot.com/2019/04/mypy-0700-released-up-to-4x-faster.html) ΠΏΡΠΎΠ΅ΠΊΡΠ°. Π Π΄Π»Ρ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π΅ΡΠ΅ ΠΎΠ΄Π½Π° ΡΡΠΈΠ»ΠΈΡΠ° ΠΎΡ ΡΠ΅Ρ
ΠΆΠ΅ Π°Π²ΡΠΎΡΠΎΠ² β *mypyc*. ΠΠΎΠ³ΡΠ³Π»ΠΈΠ² Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ, Ρ Π½Π°ΡΠ΅Π» Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ Π±ΠΎΠ»ΡΡΡΡ ΡΡΠ°ΡΡΡ β[ΠΡΡΡ ΠΊ ΠΏΡΠΎΠ²Π΅ΡΠΊΠ΅ ΡΠΈΠΏΠΎΠ² 4 ΠΌΠΈΠ»Π»ΠΈΠΎΠ½ΠΎΠ² ΡΡΡΠΎΠΊ Python-ΠΊΠΎΠ΄Π°](https://dropbox.tech/application/our-journey-to-type-checking-4-million-lines-of-python)β ΠΏΡΠΎ ΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ ΠΈ ΡΠ°Π·Π²ΠΈΡΠΈΠ΅ mypy (Π½Π° Π₯Π°Π±ΡΠ΅ Π΄ΠΎΡΡΡΠΏΠ΅Π½ ΠΏΠ΅ΡΠ΅Π²ΠΎΠ΄: [ΡΠ°ΡΡΡ 1](https://habr.com/ru/company/ruvds/blog/468233/), [ΡΠ°ΡΡΡ 2](https://habr.com/ru/company/ruvds/blog/468235/), [ΡΠ°ΡΡΡ 3](https://habr.com/ru/company/ruvds/blog/468237/)). Π’Π°ΠΌ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ ΡΠ°ΡΡΠΊΠ°Π·ΡΠ²Π°Π΅ΡΡΡ ΠΎ ΡΠ΅Π»ΡΡ
ΡΠΎΠ·Π΄Π°Π½ΠΈΡ mypyc: ΡΡΠΎΠ»ΠΊΠ½ΡΠ²ΡΠΈΡΡ Ρ Π½Π΅Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎΠΉ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΡΡ mypy ΠΏΡΠΈ ΡΠ°Π·Π±ΠΎΡΠ΅ ΠΊΡΡΠΏΠ½ΡΡ
python-ΠΏΡΠΎΠ΅ΠΊΡΠΎΠ² Π² Dropbox, ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΈ Π΄ΠΎΠ±Π°Π²ΠΈΠ»ΠΈ ΠΊΠ΅ΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠΎΠ² ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ ΠΊΠΎΠ΄Π°, Π° Π·Π°ΡΠ΅ΠΌ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ Π·Π°ΠΏΡΡΠΊΠ° ΡΡΠΈΠ»ΠΈΡΡ ΠΊΠ°ΠΊ ΡΠ΅ΡΠ²ΠΈΡΠ°. ΠΠΎ ΠΈΡΡΠ΅ΡΠΏΠ°Π² ΠΎΡΠ΅Π²ΠΈΠ΄Π½ΡΠ΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΠΈ, ΡΡΠΎΠ»ΠΊΠ½ΡΠ»ΠΈΡΡ Ρ Π²ΡΠ±ΠΎΡΠΎΠΌ: ΠΏΠ΅ΡΠ΅ΠΏΠΈΡΠ°ΡΡ Π²ΡΠ΅ Π½Π° *go* ΠΈΠ»ΠΈ Π½Π° *cython*. Π ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ΅ ΠΏΡΠΎΠ΅ΠΊΡ ΠΏΠΎΡΠ΅Π» ΠΏΠΎ ΡΡΠ΅ΡΡΠ΅ΠΌΡ ΠΏΡΡΠΈ β **Π½Π°ΠΏΠΈΡΠ°Π½ΠΈΠ΅ ΡΠ²ΠΎΠ΅Π³ΠΎ AOT python-ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠ°**.
ΠΠ΅Π»ΠΎ Π² ΡΠΎΠΌ, ΡΡΠΎ Π΄Π»Ρ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎΠΉ ΡΠ°Π±ΠΎΡΡ *mypy* ΠΈ ΡΠ°ΠΊ Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΠΎΡΡΡΠΎΠΈΡΡ ΡΠΎ ΠΆΠ΅ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΎΠ΅ Π΄Π΅ΡΠ΅Π²ΠΎ, ΡΡΠΎ ΠΈ ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠ°ΡΠΎΡΡ Π²ΠΎ Π²ΡΠ΅ΠΌΡ ΠΈΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΊΠΎΠ΄Π°. Π’ΠΎ Π΅ΡΡΡ **mypy ΡΠΆΠ΅ βΠΏΠΎΠ½ΠΈΠΌΠ°Π΅Ρβ python**, Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ ΡΡΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΡΠΎΠ»ΡΠΊΠΎ Π΄Π»Ρ ΡΡΠ°ΡΠΈΡΡΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ Π°Π½Π°Π»ΠΈΠ·Π°, Π° Π²ΠΎΡ *mypyc* ΠΌΠΎΠΆΠ΅Ρ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²ΡΠ²Π°ΡΡ ΡΡΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ Π² ΠΏΠΎΠ»Π½ΠΎΡΠ΅Π½Π½ΡΠΉ Π±ΠΈΠ½Π°ΡΠ½ΡΠΉ ΠΊΠΎΠ΄.
ΠΡΠΌΠ°Ρ ΡΡΡ ΠΌΠ½ΠΎΠ³ΠΈΠ΅ ΡΠ΅ΡΠΈΠ»ΠΈ, ΡΡΠΎ ΡΠ°Π·ΠΎΠ±ΡΠ°Π»ΠΈΡΡ Π² Π²ΠΎΠΏΡΠΎΡΠ΅ ΡΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠΎΠ²Π°ΡΡ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΈ ΡΠΈΠΏΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉ python-ΠΊΠΎΠ΄. Python c Π²Π΅ΡΡΠΈΠΈ 3.4 ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅Ρ Π°Π½Π½ΠΎΡΠ°ΡΠΈΡ ΡΠΈΠΏΠΎΠ², Π° *mypy* ΠΊΠ°ΠΊ ΡΠ°Π· ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π΄Π»Ρ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ ΠΊΠΎΡΡΠ΅ΠΊΡΠ½ΠΎΡΡΠΈ Π°Π½Π½ΠΎΡΠ°ΡΠΈΠΉ. ΠΠΎΠ»ΡΡΠ°Π΅ΡΡΡ, python ΠΊΠ°ΠΊ Π±Ρ ΡΠΆΠ΅ ΠΈ Π½Π΅ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΈ ΡΠΈΠΏΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉ ΡΠ·ΡΠΊ, ΡΡΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΏΡΠΈΠΌΠ΅Π½ΠΈΡΡ AOT ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΡ. ΠΠΎ Π·Π°Π³Π²ΠΎΠ·Π΄ΠΊΠ° Π² ΡΠΎΠΌ, ΡΡΠΎ *mypyc* **ΠΌΠΎΠΆΠ΅Ρ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠΎΠ²Π°ΡΡ ΠΈ Π½Π΅Π°Π½Π½ΠΎΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉ ΠΊΠΎΠ΄**\!
## Π€ΡΠ½ΠΊΡΠΈΡ bubble\_sort
ΠΠ»Ρ ΠΏΡΠΈΠΌΠ΅ΡΠ° ΡΠ°ΡΡΠΌΠΎΡΡΠΈΠΌ ΡΡΠ½ΠΊΡΠΈΡ ΡΠΎΡΡΠΈΡΠΎΠ²ΠΊΠΈ βΠΏΡΠ·ΡΡΡΠΊΠΎΠΌβ. Π€Π°ΠΉΠ» *lib.py:*
```
```
Π£ ΡΠΈΠΏΠΎΠ² Π½Π΅Ρ Π°Π½Π½ΠΎΡΠ°ΡΠΈΠΉ, Π½ΠΎ ΡΡΠΎ Π½Π΅ ΠΌΠ΅ΡΠ°Π΅Ρ *mypyc* Π΅Π΅ ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠΎΠ²Π°ΡΡ. Π§ΡΠΎΠ±Ρ Π·Π°ΠΏΡΡΡΠΈΡΡ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΡ, Π½ΡΠΆΠ½ΠΎ ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ *mypyc*. ΠΠ½ Π½Π΅ ΡΠ°ΡΠΏΡΠΎΡΡΡΠ°Π½ΡΠ΅ΡΡΡ ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΠΌ ΠΏΠ°ΠΊΠ΅ΡΠΎΠΌ, Π½ΠΎ Π΅ΡΠ»ΠΈ Ρ Π²Π°Ρ ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½ *mypy*, ΡΠΎ ΠΈ *mypyc* ΡΠΆΠ΅ ΠΏΡΠΈΡΡΡΡΡΠ²ΡΠ΅Ρ Π² ΡΠΈΡΡΠ΅ΠΌΠ΅! ΠΠ°ΠΏΡΡΠΊΠ°Π΅ΠΌ *mypyc*, ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΉ ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ:
```
> mypyc lib.py
```
ΠΠΎΡΠ»Π΅ Π·Π°ΠΏΡΡΠΊΠ° Π² ΠΏΡΠΎΠ΅ΠΊΡΠ΅ Π±ΡΠ΄ΡΡ ΡΠΎΠ·Π΄Π°Π½Ρ ΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅ Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΠΈ:
- `.mypy_cache` β *mypy* ΠΊΡΡ, mypyc Π½Π΅ΡΠ²Π½ΠΎ Π·Π°ΠΏΡΡΠΊΠ°Π΅Ρ mypy Π΄Π»Ρ ΡΠ°Π·Π±ΠΎΡΠ° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΠΈ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΡ AST;
- `build` β Π°ΡΡΠ΅ΡΠ°ΠΊΡΡ ΡΠ±ΠΎΡΠΊΠΈ;
- `lib.cpython-38-x86_64-linux-gnu.so` β ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΠΎ ΡΠ±ΠΎΡΠΊΠ° ΠΏΠΎΠ΄ ΡΠ΅Π»Π΅Π²ΡΡ ΠΏΠ»Π°ΡΡΠΎΡΠΌΡ. ΠΠ°Π½Π½ΡΠΉ ΡΠ°ΠΉΠ» ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ΅Ρ ΠΈΠ· ΡΠ΅Π±Ρ Π³ΠΎΡΠΎΠ²ΡΠΉ CPython Extension.
> *CPython Extension* β Π²ΡΡΡΠΎΠ΅Π½Π½ΡΠΉ Π² *CPython* ΠΌΠ΅Ρ
Π°Π½ΠΈΠ·ΠΌ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΡ Ρ ΠΊΠΎΠ΄ΠΎΠΌ, Π½Π°ΠΏΠΈΡΠ°Π½Π½ΡΠΌ Π½Π° Π‘/C++. ΠΠΎ ΡΡΡΠΈ ΡΡΠΎ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠ°Ρ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ°, ΠΊΠΎΡΠΎΡΡΡ *CPython* ΡΠΌΠ΅Π΅Ρ Π·Π°Π³ΡΡΠΆΠ°ΡΡ ΠΏΡΠΈ ΠΈΠΌΠΏΠΎΡΡΠ΅ Π½Π°ΡΠ΅Π³ΠΎ ΠΌΠΎΠ΄ΡΠ»Ρ *lib*. Π§Π΅ΡΠ΅Π· Π΄Π°Π½Π½ΡΠΉ ΠΌΠ΅Ρ
Π°Π½ΠΈΠ·ΠΌ ΠΎΡΡΡΠ΅ΡΡΠ²Π»ΡΠ΅ΡΡΡ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΠ΅ Ρ ΠΌΠΎΠ΄ΡΠ»ΡΠΌΠΈ, Π½Π°ΠΏΠΈΡΠ°Π½Π½ΡΠΌΠΈ Π½Π° python.
ΠΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΡ ΡΠΎΡΡΠΎΠΈΡ ΠΈΠ· Π΄Π²ΡΡ
ΡΠ°Π·:
1. ΠΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΡ python ΠΊΠΎΠ΄Π° Π² ΠΊΠΎΠ΄ Π‘;
2. ΠΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΡ Π‘ Π² Π±ΠΈΠ½Π°ΡΠ½ΡΠΉ *.so* ΡΠ°ΠΉΠ», Π΄Π»Ρ ΡΡΠΎΠ³ΠΎ *mypyc* ΡΠ°ΠΌ Π·Π°ΠΏΡΡΠΊΠ°Π΅Ρ gcc (*gcc* ΠΈ *python-dev* ΡΠ°ΠΊΠΆΠ΅ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±ΡΡΡ ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½Ρ).
Π€Π°ΠΉΠ» `lib.cpython-38-x86_64-linux-gnu.so` ΠΈΠΌΠ΅Π΅Ρ ΠΏΡΠ΅ΠΈΠΌΡΡΠ΅ΡΡΠ²ΠΎ ΠΏΠ΅ΡΠ΅Π΄ *lib.py* ΠΏΡΠΈ ΠΈΠΌΠΏΠΎΡΡΠ΅ Π½Π° ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠ΅ΠΉ ΠΏΠ»Π°ΡΡΠΎΡΠΌΠ΅, ΠΈ ΠΈΡΠΏΠΎΠ»Π½ΡΡΡΡΡ ΡΠ΅ΠΏΠ΅ΡΡ Π±ΡΠ΄Π΅Ρ ΠΈΠΌΠ΅Π½Π½ΠΎ ΠΎΠ½.
ΠΡ ΠΈ Π΄Π°Π²Π°ΠΉΡΠ΅ ΡΡΠ°Π²Π½ΠΈΠΌ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΡ ΠΌΠΎΠ΄ΡΠ»Ρ Π΄ΠΎ ΠΈ ΠΏΠΎΡΠ»Π΅ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ. ΠΠ»Ρ ΡΡΠΎΠ³ΠΎ ΡΠΎΠ·Π΄Π°Π΄ΠΈΠΌ ΡΠ°ΠΉΠ» *main.py* Ρ ΠΊΠΎΠ΄ΠΎΠΌ Π·Π°ΠΏΡΡΠΊΠ° ΡΠΎΡΡΠΈΡΠΎΠ²ΠΊΠΈ:
```
```
ΠΠΎΠ»ΡΡΠΈΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠ½ΠΎ ΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΡ:
| | |
|---|---|
| ΠΠΎ | ΠΠΎΡΠ»Π΅ |
| real 5.68user 5.60sys 0.01 | real 2.78user 2.73sys 0.01 |
ΠΠΆΠΈΠ΄Π°Π΅ΠΌΠΎ ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉ ΠΊΠΎΠ΄ **ΠΎΠΊΠ°Π·Π°Π»ΡΡ Π±ΡΡΡΡΠ΅Π΅ (~ Π² 2 ΡΠ°Π·Π°)**, ΡΡΠΎ Π½Π΅ΠΏΠ»ΠΎΡ
ΠΎ, ΡΠ°ΠΊ ΠΊΠ°ΠΊ Π΄Π»Ρ ΡΠ°ΠΊΠΎΠ³ΠΎ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ° Π½Π°ΠΌ ΠΏΠΎΡΡΠ΅Π±ΠΎΠ²Π°Π»ΠΎΡΡ Π·Π°ΠΏΡΡΡΠΈΡΡ Π»ΠΈΡΡ ΠΎΠ΄Π½Ρ ΠΊΠΎΠΌΠ°Π½Π΄Ρ. Π₯ΠΎΡΡ ΠΎΡ ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° ΠΏΡΠΈΠ²ΡΡΠ½ΠΎ ΠΎΠΆΠΈΠ΄Π°Π΅ΡΡ Π±ΠΎΠ»ΡΡΠ΅Π³ΠΎ.

Π§ΡΠΎΠ±Ρ ΠΎΡΠ²Π΅ΡΠΈΡΡ Π½Π° Π²ΠΎΠΏΡΠΎΡ *βΠΊΠ°ΠΊ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΡΠ΅ΡΡΡ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΈ ΡΠΈΠΏΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉ ΠΊΠΎΠ΄β*, ΠΏΡΠΈΠ΄Π΅ΡΡΡ Π·Π°Π³Π»ΡΠ½ΡΡΡ Π² ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΡΡΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ Π½Π° Π‘. ΠΠΎ ΡΠ°Π·ΠΎΠ±ΡΠ°ΡΡ Π΅Π΅ Π±ΡΠ΄Π΅Ρ Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ ΡΠ»ΠΎΠΆΠ½ΠΎ, ΠΏΠΎΡΡΠΎΠΌΡ Π΄Π°Π²Π°ΠΉΡΠ΅ ΠΏΠΎΠΏΡΠΎΠ±ΡΠ΅ΠΌ ΡΠ°Π·ΠΎΠ±ΡΠ°ΡΡΡΡ Ρ ΠΏΡΠΈΠΌΠ΅ΡΠΎΠΌ ΠΏΠΎΠΏΡΠΎΡΠ΅.
## Π€ΡΠ½ΠΊΡΠΈΡ sum(a, b)
Π‘ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΡΠ΅ΠΌ ΡΡΠ½ΠΊΡΠΈΡ ΡΡΠΌΠΌΡ ΠΎΡ Π΄Π²ΡΡ
ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ
:
```
```
ΠΠ΅ΡΠ΅Π΄ Π·Π°ΠΏΡΡΠΊΠΎΠΌ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ Ρ ΠΎΠΆΠΈΠ΄Π°Π» ΡΠ²ΠΈΠ΄Π΅ΡΡ ΠΏΡΠΈΠΌΠ΅ΡΠ½ΠΎ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΉ ΠΊΠΎΠ΄ Π½Π° Π‘:
```
```
ΠΠ΄Π½Π°ΠΊΠΎ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ ΠΎΠΊΠ°Π·Π°Π»ΡΡ cΡΡΠ΅ΡΡΠ²Π΅Π½Π½ΠΎ ΠΈΠ½ΡΠΌ (**ΠΊΠΎΠ΄ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ ΡΠΏΡΠΎΡΠ΅Π½**):
```
```
Π Π°ΡΡΠΌΠΎΡΡΠΈΠΌ, ΡΡΠΎ ΡΡΡ ΠΏΡΠΎΠΈΡΡ
ΠΎΠ΄ΠΈΡ. ΠΠΎ-ΠΏΠ΅ΡΠ²ΡΡ
, ΡΠ°ΠΊ ΠΊΠ°ΠΊ ΠΌΡ Π½Π΅ Π·Π½Π°Π΅ΠΌ ΡΠΈΠΏΡ Π²Ρ
ΠΎΠ΄Π½ΡΡ
ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ
, ΡΡΠ½ΠΊΡΠΈΡ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠ² ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ ΡΠΊΠ°Π·Π°ΡΠ΅Π»ΠΈ Π½Π° ΠΎΠ±ΡΠ΅ΠΊΡΡ ΠΊΠ»Π°ΡΡΠ° *PyObject*, ΠΏΠΎ ΡΡΡΠΈ ΡΡΠΎ Π²Π½ΡΡΡΠ΅Π½Π½ΠΈΠ΅ *CPython* ΡΡΡΡΠΊΡΡΡΡ. ΠΠ°Π»Π΅Π΅ **ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡΠ»ΠΎΠΆΠΈΡΡ ΡΡΠΈ ΠΎΠ±ΡΠ΅ΠΊΡΡ**, Π½ΠΎ ΠΊΠ°ΠΊ, Π΅ΡΠ»ΠΈ Π½Π°ΡΡΠΎΡΡΠΈΠ΅ ΡΠΈΠΏΡ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠ² Π½Π΅ΠΈΠ·Π²Π΅ΡΡΠ½Ρ Π²ΠΎ Π²ΡΠ΅ΠΌΡ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ: ΡΡΠΎ ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ ΡΠ΅Π»ΡΠ΅ ΡΠΈΡΠ»Π°, ΡΠΈΡΠ»Π° Ρ ΠΏΠ»Π°Π²Π°ΡΡΠ΅ΠΉ ΡΠΎΡΠΊΠΎΠΉ, ΡΠΏΠΈΡΠΊΠΈ ΠΈ Π²ΠΎΠΎΠ±ΡΠ΅ Π½Π΅ ΡΠ°ΠΊΡ, ΡΡΠΎ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΡ ΠΌΠΎΠΆΠ½ΠΎ ΡΠΊΠ»Π°Π΄ΡΠ²Π°ΡΡ, ΡΠΎΠ³Π΄Π° Π½ΡΠΆΠ½ΠΎ Π²Π΅ΡΠ½ΡΡΡ ΠΎΡΠΈΠ±ΠΊΡ. Π ΡΡΠΎ ΠΆΠ΅ Π΄Π΅Π»Π°Π΅Ρ Π² ΡΡΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ mypyc?
ΠΠ°ΠΊ ΠΎΠΊΠ°Π·Π°Π»ΠΎΡΡ, Π²ΡΠ΅ ΠΎΡΠ΅Π½Ρ ΠΏΡΠΎΡΡΠΎ: ΠΎΠ½ ΠΏΡΠΎΡΠΈΡ *CPython* ΡΠ°ΠΌΠΎΡΡΠΎΡΡΠ΅Π»ΡΠ½ΠΎ ΡΠ»ΠΎΠΆΠΈΡΡ ΡΡΠΈ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΡ. Π€ΡΠ½ΠΊΡΠΈΡ *PyNumber\_Add* β ΡΡΠΎ Π²Π½ΡΡΡΠ΅Π½Π½ΡΡ ΡΡΠ½ΠΊΡΠΈΡ *Π‘Python*, ΠΊΠΎΡΠΎΡΠ°Ρ Π΄ΠΎΡΡΡΠΏΠ½Π° ΠΈΠ· ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΡ, Π²Π΅Π΄Ρ ***Π‘Python* ΠΎΡΠ»ΠΈΡΠ½ΠΎ ΡΠΌΠ΅Π΅Ρ ΡΠΊΠ»Π°Π΄ΡΠ²Π°ΡΡ ΡΠ²ΠΎΠΈ ΠΎΠ±ΡΠ΅ΠΊΡΡ**.
ΠΠ·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΠ΅ CPython c Extension ΠΌΠΎΠΆΠ½ΠΎ ΠΈΠ·ΠΎΠ±ΡΠ°Π·ΠΈΡΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΌ Π΄ΠΈΠ°Π»ΠΎΠ³ΠΎΠΌ:
> β Π ΠΏΠΎΡΡΠΈΡΠ°ΠΉ-ΠΊΠ° ΠΌΠ½Π΅ ΡΡΠ½ΠΊΡΠΈΡ sum Π΄Π»Ρ A, B;
>
> β Π₯ΠΎΡΠΎΡΠΎ, Π½ΠΎ ΡΠΊΠ°ΠΆΠΈ ΡΠ½Π°ΡΠ°Π»Π°, ΡΠΊΠΎΠ»ΡΠΊΠΎ Π±ΡΠ΄Π΅Ρ A + B;
>
> β ΠΡΠ΄Π΅Ρ Π‘;
>
> β Π₯ΠΎΡΠΎΡΠΎ, ΡΠΎΠ³Π΄Π° Π΄Π΅ΡΠΆΠΈ ΠΎΡΠ²Π΅Ρ - Π‘.
ΠΠΎΡ ΡΠ°ΠΊΠΎΠΉ Π½Π΅Ρ
ΠΈΡΡΡΠΉ ΠΏΡΠΈΠ΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ ΠΏΡΠΈ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°: **ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΡΠ΅ΠΌ Π²ΡΠ΅, ΡΡΠΎ ΠΌΠΎΠΆΠ΅ΠΌ, Π° Π²ΡΠ΅ ΠΎΡΡΠ°Π»ΡΠ½ΠΎΠ΅ ΠΎΡΠ΄Π°Π΅ΠΌ ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠ°ΡΠΎΡΡ**.
ΠΠΎΠ½Π΅ΡΠ½ΠΎ, Π΄Π°Π½Π½ΡΠΉ ΠΏΡΠΈΠΌΠ΅Ρ Π²ΡΠ³Π»ΡΠ΄ΠΈΡ Π³ΡΠΎΡΠ΅ΡΠΊΠ½ΠΎ, Π½ΠΎ Π΄Π°ΠΆΠ΅ **Π½Π΅ΡΠΌΠΎΡΡΡ Π½Π° ΡΠ°ΠΊΡΡ Π½Π΅ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½ΠΎΡΡΡ**, mypyc ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ Π΄ΠΎΠ±ΠΈΡΡΡΡ ΡΡΡΠ΅ΡΡΠ²Π΅Π½Π½ΠΎΠ³ΠΎ **ΠΏΡΠΈΡΠΎΡΡΠ° ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ**, ΠΊΠ°ΠΊ Π² ΠΏΡΠΈΠΌΠ΅ΡΠ΅ Ρ ΡΠΎΡΡΠΈΡΠΎΠ²ΠΊΠΎΠΉ.
## Π€ΡΠ½ΠΊΡΠΈΡ sum(a: int, b: int)
ΠΡΠ°ΠΊ, Ρ Π½Π°Ρ ΠΏΠΎΠ»ΡΡΠΈΠ»ΠΎΡΡ ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠΎΠ²Π°ΡΡ python, ΠΈ ΠΌΡ ΡΠ°Π·ΠΎΠ±ΡΠ°Π»ΠΈΡΡ Ρ ΡΠ΅ΠΌ, ΠΊΠ°ΠΊ ΡΡΠΎ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ, Π° ΡΠ°ΠΊΠΆΠ΅ ΡΠ²ΠΈΠ΄Π΅Π»ΠΈ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΡΡ Π½Π΅ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½ΠΎΡΡΡ ΠΏΠΎΠ»ΡΡΠ΅Π½Π½ΠΎΠ³ΠΎ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ°. Π’Π΅ΠΏΠ΅ΡΡ ΠΏΠΎΠΏΡΠΎΠ±ΡΠ΅ΠΌ ΡΠ°Π·ΠΎΠ±ΡΠ°ΡΡΡΡ Π² ΡΠΎΠΌ, ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ ΡΡΠΎ ΡΠ»ΡΡΡΠΈΡΡ. ΠΡΠ΅Π²ΠΈΠ΄Π½ΠΎ, ΡΡΠΎ ΠΎΡΠ½ΠΎΠ²Π½Π°Ρ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ° Π·Π°ΠΊΠ»ΡΡΠ°Π΅ΡΡΡ Π²ΠΎ **ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²Π΅Π½Π½ΠΎΠΌ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΠΈ** *CPython - Extension*. ΠΠΎ ΠΊΠ°ΠΊ ΡΡΠΎ ΠΏΠΎΠ±ΠΎΡΠΎΡΡ?
ΠΠ»Ρ ΠΏΠΎΠ²ΡΡΠ΅Π½ΠΈΡ ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½ΠΎΡΡΠΈ, Π½ΡΠΆΠ½ΠΎ, ΡΡΠΎΠ±Ρ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΠ΅, ΠΏΠΎΠ»ΡΡΠΈΠ² ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅, ΠΌΠΎΠ³Π»ΠΎ ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ **Π΄ΠΎΠ»ΡΡΠ΅ ΠΎΡΡΠ°Π²Π»ΡΡΡ Π΅Π³ΠΎ Ρ ΡΠ΅Π±Ρ** Π±Π΅Π· ΠΎΠ±ΡΠ°ΡΠ΅Π½ΠΈΡ ΠΊ *CPython*. ΠΡΠ»ΠΈ Π±Ρ Ρ mypyc Π±ΡΠ»Π° ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΎ ΡΠΈΠΏΠ°Ρ
ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ
, ΡΠΎ ΠΎΠ½ Π±Ρ ΠΌΠΎΠ³ ΡΠ°ΠΌΠΎΡΡΠΎΡΡΠ΅Π»ΡΠ½ΠΎ ΠΏΡΠΎΠΈΠ·Π²Π΅ΡΡΠΈ ΡΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π±Π΅Π· Π²ΠΎΠ·Π²ΡΠ°ΡΠ° ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ. ΠΠΎ Π²ΡΠ²Π΅ΡΡΠΈ ΡΠΈΠΏΡ ΡΠ°ΠΌΠΎΡΡΠΎΡΡΠ΅Π»ΡΠ½ΠΎ mypyc Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ, ΠΎΠ½ Π΄Π°ΠΆΠ΅ **Π½Π΅ ΠΊΠΎΠ½ΡΡΠΎΠ»ΠΈΡΡΠ΅Ρ ΠΊΠΎΠ΄**, ΠΈΠ· ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ ΠΎΡΡΡΠ΅ΡΡΠ²Π»ΡΠ΅ΡΡΡ Π²ΡΠ·ΠΎΠ² ΡΡΠ½ΠΊΡΠΈΠΈ sum. Π‘ΠΎΠΎΡΠ²Π΅ΡΡΡΠ²Π΅Π½Π½ΠΎ, Π΅ΠΌΡ Π½ΡΠΆΠ½ΠΎ ΠΏΠΎΠΌΠΎΡΡ, ΠΏΡΠΎΡΡΠ°Π²ΠΈΠ² Π°Π½Π½ΠΎΡΠ°ΡΠΈΠΈ Π²ΡΡΡΠ½ΡΡ. ΠΠ°Π²Π°ΠΉΡΠ΅ ΠΏΠΎΡΠΌΠΎΡΡΠΈΠΌ, ΠΊΠ°ΠΊ ΠΏΠΎΠΌΠ΅Π½ΡΠ΅ΡΡΡ ΡΠ΅Π·ΡΠ»ΡΡΠΈΡΡΡΡΠ°Ρ Π‘-ΡΡΠ½ΠΊΡΠΈΡ, Π΅ΡΠ»ΠΈ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ Π°Π½Π½ΠΎΡΠ°ΡΠΈΡ ΡΠΈΠΏΠΎΠ²:
```
```
Π‘ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ Π½Π° C (*Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ ΠΎΡΠΈΡΠ΅Π½Π½ΡΠΉ*):
```
```
ΠΠ»Π°Π²Π½ΠΎΠ΅, ΡΡΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΌΠ΅ΡΠΈΡΡ: **ΡΡΠ½ΠΊΡΠΈΡ ΡΡΡΠ΅ΡΡΠ²Π΅Π½Π½ΠΎ ΠΏΠΎΠΌΠ΅Π½ΡΠ»Π°ΡΡ**, Π° Π·Π½Π°ΡΠΈΡ, ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ ΡΠ΅Π°Π³ΠΈΡΡΠ΅Ρ Π½Π° ΠΏΠΎΡΠ²Π»Π΅Π½ΠΈΠ΅ Π°Π½Π½ΠΎΡΠ°ΡΠΈΠΈ. ΠΠ°Π²Π°ΠΉΡΠ΅ ΡΠ°Π·Π±ΠΈΡΠ°ΡΡΡΡ, ΡΡΠΎ ΠΈΠ·ΠΌΠ΅Π½ΠΈΠ»ΠΎΡΡ.
Π’Π΅ΠΏΠ΅ΡΡ *CPyDef\_sum* ΠΏΠΎΠ»ΡΡΠ°Π΅Ρ Π½Π° Π²Ρ
ΠΎΠ΄ Π½Π΅ ΡΠΊΠ°Π·Π°ΡΠ΅Π»ΠΈ Π½Π° *PyObject*, Π° ΡΡΡΡΠΊΡΡΡΡ *CPyTagged*. ΠΡΠΎ Π²ΡΠ΅ Π΅ΡΠ΅ Π½Π΅ *int*, Π½ΠΎ ΡΠΆΠ΅ ΠΈ Π½Π΅ ΡΠ°ΡΡΡ *CPython*, Π° ΡΠ°ΡΡΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊ mypyc, ΠΊΠΎΡΠΎΡΡΡ ΠΎΠ½ Π΄ΠΎΠ±Π°Π²Π»ΡΠ΅Ρ Π² ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉ ΠΊΠΎΠ΄ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΡ. ΠΠ»Ρ Π΅Π΅ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ Π² ΡΠ°Π½ΡΠ°ΠΉΠΌΠ΅ ΡΠ½Π°ΡΠ°Π»Π° ΠΏΡΠΎΠ²Π΅ΡΡΠ΅ΡΡΡ ΡΠΈΠΏ, ΡΠ°ΠΊ ΡΡΠΎ ΡΠ΅ΠΏΠ΅ΡΡ ΡΡΠ½ΠΊΡΠΈΡ *sum* ΡΠ°Π±ΠΎΡΠ°Π΅Ρ ΡΠΎΠ»ΡΠΊΠΎ Ρ *int* ΠΈ ΠΎΠ±ΠΎΠΉΡΠΈ Π°Π½Π½ΠΎΡΠ°ΡΠΈΡ Π½Π΅ ΠΏΠΎΠ»ΡΡΠΈΡΡΡ.
ΠΠ°Π»Π΅Π΅ ΠΏΡΠΎΠΈΡΡ
ΠΎΠ΄ΠΈΡ Π²ΡΠ·ΠΎΠ² *CPyTaggetAdd* Π²ΠΌΠ΅ΡΡΠΎ *PyNumber\_Add*. ΠΡΠΎ ΡΠΆΠ΅ **Π²Π½ΡΡΡΠ΅Π½Π½ΡΡ ΡΡΠ½ΠΊΡΠΈΡ mypyc**. ΠΡΠ»ΠΈ Π·Π°Π³Π»ΡΠ½ΡΡΡ Π² [ΠΊΠΎΠ΄](https://github.com/python/mypy/blob/5e20a26b922e2f5b71425ea7f57d2b4cba5a9324/mypyc/lib-rt/int_ops.c#L136) *CPyTaggetAdd*, ΡΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ½ΡΡΡ, ΡΡΠΎ ΡΠ°ΠΌ ΠΏΡΠΎΠΈΡΡ
ΠΎΠ΄ΠΈΡ ΠΏΡΠΎΠ²Π΅ΡΠΊΠ° Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ΠΎΠ² Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ *a* ΠΈ *b*, ΠΈ Π΅ΡΠ»ΠΈ ΠΎΠ½ΠΈ ΡΠΊΠ»Π°Π΄ΡΠ²Π°ΡΡΡΡ Π² int, ΡΠΎ ΠΏΡΠΎΠΈΡΡ
ΠΎΠ΄ΠΈΡ ΠΏΡΠΎΡΡΠΎΠ΅ ΡΡΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅, Π° ΡΠ°ΠΊΠΆΠ΅ ΠΏΡΠΎΠ²Π΅ΡΠΊΠ° Π½Π° ΠΏΠ΅ΡΠ΅ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅:
```
```
Π’Π°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, Π½Π°Ρ Π΄ΠΈΠ°Π»ΠΎΠ³ *CPython - Extension* ΠΏΡΠ΅Π²ΡΠ°ΡΠ°Π΅ΡΡΡ **ΠΈΠ· Π°Π±ΡΡΡΠ΄Π½ΠΎΠ³ΠΎ Π² Π½ΠΎΡΠΌΠ°Π»ΡΠ½ΡΠΉ**:
> β Π ΠΏΠΎΡΡΠΈΡΠ°ΠΉ-ΠΊΠ° ΠΌΠ½Π΅ ΡΡΠ½ΠΊΡΠΈΡ sum Π΄Π»Ρ A, B;
>
> β Π₯ΠΎΡΠΎΡΠΎ, ΡΠΎΠ³Π΄Π° Π΄Π΅ΡΠΆΠΈ ΠΎΡΠ²Π΅Ρ Π‘.
## Π€ΡΠ½ΠΊΡΠΈΡ bubble\_sort(data: List\[int\])
ΠΠ°ΡΡΠ°Π»ΠΎ Π²ΡΠ΅ΠΌΡ Π²Π΅ΡΠ½ΡΡΡΡΡ ΠΊ ΡΡΠ½ΠΊΡΠΈΠΈ ΡΠΎΡΡΠΈΡΠΎΠ²ΠΊΠΈ, ΡΡΠΎΠ±Ρ ΠΏΡΠΎΠ²Π΅ΡΡΠΈ Π·Π°ΠΌΠ΅ΡΡ ΡΠΊΠΎΡΠΎΡΡΠΈ. ΠΠ·ΠΌΠ΅Π½ΠΈΠΌ Π½Π°ΡΠ°Π»ΡΠ½ΡΡ ΡΡΠ½ΠΊΡΠΈΡ, Π΄ΠΎΠ±Π°Π²ΠΈΠ² Π°Π½Π½ΠΎΡΠ°ΡΠΈΡ Π΄Π»Ρ *data*:
```
```
Π‘ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΡΠ΅ΠΌ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ ΠΈ Π·Π°ΠΌΠ΅ΡΠΈΠΌ Π²ΡΠ΅ΠΌΡ ΡΠΎΡΡΠΈΡΠΎΠ²ΠΊΠΈ:
| | | |
|---|---|---|
| ΠΠ΅Π· ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ | Π‘ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠ΅ΠΉ, Π±Π΅Π· Π°Π½Π½ΠΎΡΠ°ΡΠΈΠΈ ΡΠΈΠΏΠΎΠ² | Π‘ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠ΅ΠΉ ΠΈ Π°Π½Π½ΠΎΡΠ°ΡΠΈΠ΅ΠΉ ΡΠΈΠΏΠΎΠ² |
| real 5.68user 5.60sys 0.01 | real 2.78user 2.73sys 0.01 | real 1.32user 1.30sys 0.01 |
ΠΡΠ°ΠΊ, ΠΌΡ ΠΏΠΎΠ»ΡΡΠΈΠ»ΠΈ Π΅ΡΠ΅ Π΄Π²ΡΠΊΡΠ°ΡΠ½ΠΎΠ΅ ΡΡΠΊΠΎΡΠ΅Π½ΠΈΠ΅ ΠΎΡΠ½ΠΎΡΠΈΡΠ΅Π»ΡΠ½ΠΎ ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ, Π½Π΅ Π°Π½Π½ΠΎΡΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°, ΠΈ ΡΠ΅ΡΡΡΠ΅Ρ
ΠΊΡΠ°ΡΠ½ΠΎΠ΅ ΠΎΡΠ½ΠΎΡΠΈΡΠ΅Π»ΡΠ½ΠΎ ΠΎΡΠΈΠ³ΠΈΠ½Π°Π»ΡΠ½ΠΎΠ³ΠΎ\!

## ΠΠ°ΡΠ° ΡΠ»ΠΎΠ² ΠΎ mypyc
ΠΡΠ»ΠΈ Π²Ρ ΡΠΆΠ΅ Π±ΡΠΎΡΠΈΠ»ΠΈΡΡ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠΎΠ²Π°ΡΡ Π²Π°ΡΠΈ ΠΏΠ°ΠΊΠ΅ΡΡ, ΡΠΎ ΡΡΠΎΠΈΡ Π·Π°Π΄Π΅ΡΠΆΠ°ΡΡΡΡ Π½Π° ΠΏΠ°ΡΡ ΠΌΠΈΠ½ΡΡ, ΡΡΠΎΠ±Ρ Π΄ΠΎΡΠΈΡΠ°ΡΡ ΡΡΠΎΡ Π°Π±Π·Π°Ρ Π΄ΠΎ ΠΊΠΎΠ½ΡΠ°. ΠΠ»Π°Π²Π½ΡΠΌ Π½Π΅Π΄ΠΎΡΡΠ°ΡΠΊΠΎΠΌ *mypyc* ΠΏΠΎΠΊΠ° ΠΎΡΡΠ°Π΅ΡΡΡ ΡΡΠ°Π±ΠΈΠ»ΡΠ½ΠΎΡΡΡ: ΠΎΠ½ Π²ΡΠ΅ Π΅ΡΠ΅ Π² Π°Π»ΡΡΠ΅, ΡΠΎΡΠ½Π΅Π΅, ΡΠ΅ΠΉΡΠ°Ρ ΡΡΠΎ Π²ΠΎΠΎΠ±ΡΠ΅ Π½Π΅ ΡΠ°ΠΌΠΎΡΡΠΎΡΡΠ΅Π»ΡΠ½ΡΠΉ ΠΏΡΠΎΠ΅ΠΊΡ, Π° ΡΠ°ΡΡΡ *mypy*. Π‘ΠΎΠ±ΡΡΠ²Π΅Π½Π½ΠΎ ΠΎΠ½ ΠΈ ΡΠΎΠ·Π΄Π°Π²Π°Π»ΡΡ ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΠΎ ΠΏΠΎΠ΄ Π·Π°Π΄Π°ΡΡ ΡΠ²Π΅Π»ΠΈΡΠ΅Π½ΠΈΡ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ *mypy* ΠΈ Π΄Π»Ρ ΡΡΠΎΠΉ ΡΠ΅Π»ΠΈ ΠΎΠ½ ΡΠΆΠ΅ **Π±ΠΎΠ»Π΅Π΅ Π³ΠΎΠ΄Π° ΠΊΠ°ΠΊ ΡΡΠ°Π±ΠΈΠ»Π΅Π½**. ΠΠΎ ΠΊΠ°ΠΊ ΠΎΠ±ΡΠ΅Π΅ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ ΠΏΠΎ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ Π»ΡΠ±ΠΎΠ³ΠΎ python-ΠΊΠΎΠ΄Π°, ΠΎΠ½ Π΅ΡΠ΅ ΡΡΡΠΎΠ²Π°Ρ, ΠΎ ΡΠ΅ΠΌ Π°Π²ΡΠΎΡΡ ΠΏΡΠ΅Π΄ΡΠΏΡΠ΅ΠΆΠ΄Π°ΡΡ Π½Π° ΡΡΡΠ°Π½ΠΈΡΠ΅ ΠΏΡΠΎΠ΅ΠΊΡΠ°.
Π’Π°ΠΊΠΆΠ΅ ΡΡΡΠ΅ΡΡΠ²ΡΡΡ ΠΏΡΠΈΠ½ΡΠΈΠΏΠΈΠ°Π»ΡΠ½ΡΠ΅ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΡ, Π½Π°ΠΊΠ»Π°Π΄ΡΠ²Π°Π΅ΠΌΡΠ΅ Π½Π° ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΡΠ΅ΠΌΡΠΉ ΠΊΠΎΠ΄ ΠΈΠ»ΠΈ Π½Π° ΠΊΠΎΠ΄, Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΡΡΡΠΈΠΉ ΡΠΎ ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠΎΠ²Π°Π½Π½ΡΠΌ:
- ΠΡΠΈΠ½ΡΠ΄ΠΈΡΠ΅Π»ΡΠ½Π°Ρ ΠΏΡΠΎΠ²Π΅ΡΠΊΠ° ΡΠΈΠΏΠΎΠ² Π² ΡΠ°Π½ΡΠ°ΠΉΠΌΠ΅;
- Π ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΡΠ΅ΠΌΠΎΠΌ ΠΊΠΎΠ΄Π΅ Π·Π°ΠΏΡΠ΅ΡΠ°Π΅ΡΡΡ monkey patching;
- Mypy Ρ
ΡΠ°Π½ΠΈΡ ΠΊΠ»Π°ΡΡΡ Π² Π‘ ΡΡΡΡΠΊΡΡΡΠ°Ρ
Π΄Π»Ρ ΡΠ²Π΅Π»ΠΈΡΠ΅Π½ΠΈΡ ΡΠΊΠΎΡΠΎΡΡΠΈ Π΄ΠΎΡΡΡΠΏΠ° ΠΊ Π°ΡΡΠΈΠ±ΡΡΠ°ΠΌ, Π½ΠΎ ΡΡΠΎ ΠΏΡΠΈΠ²ΠΎΠ΄ΠΈΡ ΠΊ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ°ΠΌ ΡΠΎΠ²ΠΌΠ΅ΡΡΠΈΠΌΠΎΡΡΠΈ.
ΠΡΠΈ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΡ Π½ΠΎΡΡΡ **ΠΏΡΠΈΠ½ΡΠΈΠΏΠΈΠ°Π»ΡΠ½ΡΠΉ** Ρ
Π°ΡΠ°ΠΊΡΠ΅Ρ ΠΈ ΡΠ²Π»ΡΡΡΡΡ ΡΠ»Π΅Π΄ΡΡΠ²ΠΈΠ΅ΠΌ Π°ΡΡ
ΠΈΡΠ΅ΠΊΡΡΡΡ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠ°. ΠΠΎ ΠΈΠ· Π½ΠΈΡ
ΠΏΡΠΎΠΈΡΡΠ΅ΠΊΠ°ΡΡ Π΄ΡΡΠ³ΠΈΠ΅ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΡ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ ΠΌΠΎΠ΄ΡΠ»Ρ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΠΎΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ abc. ΠΠΎΠΌΠΈΠΌΠΎ ΡΡΠΎΠ³ΠΎ, Π΅ΡΡΡ Π±ΠΎΠ»ΡΡΠ°Ρ ΠΏΠΎΡΡΠΈΡ Π½Π΅Π΄ΠΎΡΠ°Π±ΠΎΡΠΎΠΊ ΠΈ Π±Π°Π³ΠΎΠ². Π§Π°ΡΠ΅ Π²ΡΠ΅Π³ΠΎ ΠΎΠ½ΠΈ ΠΏΡΠΈΠ²ΠΎΠ΄ΡΡ ΠΊ ΡΠΎΠΌΡ, ΡΡΠΎ ΠΊΠΎΠ΄ *gcc* ΠΎΡΠΊΠ°Π·ΡΠ²Π°Π΅ΡΡΡ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠΎΠ²Π°ΡΡ ΠΏΠΎΠ»ΡΡΠ΅Π½Π½ΡΠΉ Π‘ ΠΊΠΎΠ΄, ΠΏΡΠΈ ΡΡΠΎΠΌ, ΡΡΠΎΠ±Ρ ΠΏΠΎΠ½ΡΡΡ Π½Π°ΡΡΠΎΡΡΡΡ ΠΏΡΠΈΡΠΈΠ½Ρ ΠΎΡΠΈΠ±ΠΊΠΈ, ΠΏΡΠΈΡ
ΠΎΠ΄ΠΈΡΡΡ ΠΏΡΠΎΠΊΡΡΡΠΈΠ²Π°ΡΡ Π² Π³ΠΎΠ»ΠΎΠ²Π΅ Π½Π΅ΠΏΡΠΎΡΡΡΡ ΠΏΡΠΎΡΠ΅Π΄ΡΡΡ ΡΠ΅Π²Π΅ΡΡ ΠΈΠ½ΠΆΠΈΠ½ΠΈΡΠΈΠ½Π³Π°. ΠΠΎΠΊΠ° ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ ΡΠ°ΠΊΠΎΠ², ΡΡΠΎ ΠΏΡΠΈ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈΠ· ΠΌΠΎΠΈΡ
ΠΏΡΠΎΠ΅ΠΊΡΠΎΠ², Π±Π΅Π· ΠΏΡΠΎΠ±Π»Π΅ΠΌ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠΎΠ²Π°Π»ΠΎΡΡ ΠΏΡΠΈΠΌΠ΅ΡΠ½ΠΎ **20 % ΠΌΠΎΠ΄ΡΠ»Π΅ΠΉ**, Π·Π°ΡΠΎ ΠΊΠ°ΠΊΠΈΡ
Π»ΠΈΠ±ΠΎ ΠΏΡΠΎΠ±Π»Π΅ΠΌ ΠΏΡΠΈ ΡΠ°Π±ΠΎΡΠ΅ Ρ ΡΠΆΠ΅ ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠΎΠ²Π°Π½Π½ΡΠΌΠΈ ΠΌΠΎΠ΄ΡΠ»ΡΠΌΠΈ Ρ Π½Π΅ Π·Π°ΠΌΠ΅ΡΠΈΠ».
Π’Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅, Π±ΠΎΠ»ΡΡΠ°Ρ ΡΠ°ΡΡΡ ΡΠ»ΡΡΡΠ΅Π½ΠΈΠΉ Π² ΠΈΡ
*Roadmap* Π·Π°ΠΊΡΡΡΠ°, ΠΈ ΠΏΡΠΎΠ΅ΠΊΡ Π³ΠΎΡΠΎΠ²ΠΈΡΡΡ ΠΊ ΠΏΡΠ±Π»ΠΈΡΠ½ΠΎΠΌΡ [ΡΠ΅Π»ΠΈΠ·Ρ](https://github.com/mypyc/mypyc/issues/780).
## Nuitka
Π£ΠΆΠ΅ Π² ΠΏΡΠΎΡΠ΅ΡΡΠ΅ ΡΠ°Π±ΠΎΡΡ Π½Π°Π΄ ΡΡΠ°ΡΡΠ΅ΠΉ, Ρ ΡΠ·Π½Π°Π» ΠΏΡΠΎ Π΅ΡΠ΅ ΠΎΠ΄ΠΈΠ½ ΠΏΡΠΎΠ΅ΠΊΡ Ρ Π°Π½Π°Π»ΠΎΠ³ΠΈΡΠ½ΡΠΌΠΈ ΡΠ΅Π»ΡΠΌΠΈ. ΠΠ΅Ρ
Π°Π½ΠΈΠ·ΠΌ ΡΠ°Π±ΠΎΡΡ [Nuitka](https://nuitka.net/) ΡΠΈΠ»ΡΠ½ΠΎ Π½Π°ΠΏΠΎΠΌΠΈΠ½Π°Π΅Ρ ΠΎΠΏΠΈΡΠ°Π½Π½ΡΠΉ Π²ΡΡΠ΅. Π Π°Π·Π½ΠΈΡΠ° Π·Π°ΠΊΠ»ΡΡΠ°Π΅ΡΡΡ Π² ΡΠΎΠΌ, ΡΡΠΎ *Nuitka* ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΡΠ΅Ρ Python ΠΌΠΎΠ΄ΡΠ»Ρ Π² Π‘++ ΠΊΠΎΠ΄, ΠΊΠΎΡΠΎΡΡΠΉ ΡΠ°ΠΊΠΆΠ΅ ΡΠΎΠ±ΠΈΡΠ°Π΅ΡΡΡ Π² *Π‘Python Extension*. ΠΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΠΎ ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΡΠΎΠ±ΡΠ°ΡΡ Π²Π΅ΡΡ ΠΏΡΠΎΠ΅ΠΊΡ Π² **ΠΎΠ΄ΠΈΠ½ ΠΈΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΡΠΉ ΡΠ°ΠΉΠ»**, ΡΠΎΠ³Π΄Π° ΡΠΆΠ΅ ΡΠ°ΠΌ *CPython* ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ°Π΅ΡΡΡ ΠΊ ΠΏΡΠΎΠ΅ΠΊΡΡ ΠΊΠ°ΠΊ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠ°Ρ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° *libpython*.
*Nuitka* ΠΏΠΎΠΊΠ° Π½Π΅ ΡΡΠΈΡΡΠ²Π°Π΅Ρ Π°Π½Π½ΠΎΡΠ°ΡΠΈΡ ΡΠΈΠΏΠΎΠ², ΠΏΠΎΡΡΠΎΠΌΡ ΡΠ΅Π·ΡΠ»ΡΡΠΈΡΡΡΡΠΈΠΉ ΠΊΠΎΠ΄ ΠΈ ΡΠΊΠΎΡΠΎΡΡΡ ΡΠ°Π±ΠΎΡΡ Π½Π΅ Π·Π°Π²ΠΈΡΡΡ ΠΎΡ Π½Π°Π»ΠΈΡΠΈΡ Π°Π½Π½ΠΎΡΠ°ΡΠΈΠΉ. ΠΠΎΠ»ΡΡΠ΅Π½Π½Π°Ρ ΠΆΠ΅ ΡΠΊΠΎΡΠΎΡΡΡ Π² ΠΌΠΎΠ΅ΠΌ ΡΠ΅ΡΡΠ΅ **ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΠ΅Ρ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΡ mypy** Π½Π° Π½Π΅ Π°Π½Π½ΠΎΡΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠΌ ΠΊΠΎΠ΄Π΅.
## ΠΠ°Π²Π΅ΡΡΠ΅Π½ΠΈΠ΅
ΠΠ΅Π΄Π°Π²Π½ΠΎ ΠΎΠ΄ΠΈΠ½ ΠΌΠΎΠΉ ΠΊΠΎΠ»Π»Π΅Π³Π° Π²ΡΡΠΊΠ°Π·Π°Π» ΠΌΠ½Π΅Π½ΠΈΠ΅, ΡΡΠΎ *mypy* **ΡΠΈΠ»ΡΠ½ΠΎ ΡΡΠ»ΠΎΠΆΠ½ΡΠ΅Ρ** Π΅ΠΌΡ ΠΆΠΈΠ·Π½Ρ: ΠΈΠ· ΡΠ΅ΠΊΡΡΠ° ΠΎΡΠΈΠ±ΠΎΠΊ Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ½ΡΡΡ, βΡΠ΅Π³ΠΎ ΠΎΠ½ ΠΎΡ ΠΌΠ΅Π½Ρ Ρ
ΠΎΡΠ΅Ρβ, Π° Π°Π½Π°Π»ΠΈΠ·Π°ΡΠΎΡ ΠΈΠ· *PyCharm* Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ Π»ΡΡΡΠ΅. Π’Π΅ΠΏΠ΅ΡΡ Ρ ΠΏΠΎΠ½ΠΈΠΌΠ°Ρ, ΡΡΠΎ ΠΎΠ½ Π½Π΅Π΄ΠΎΠΎΡΠ΅Π½ΠΈΠ²Π°Π΅Ρ *mypy*. Π’Π°ΠΊ ΠΊΠ°ΠΊ ΠΎΠ½ **Π½Π°ΠΌΠ½ΠΎΠ³ΠΎ Π±ΠΎΠ»ΡΡΠ΅Π΅, ΡΠ΅ΠΌ ΠΏΡΠΎΡΡΠΎ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈΠΉ Π°Π½Π°Π»ΠΈΠ·Π°ΡΠΎΡ**. ΠΠΎ ΡΡΡΠΈ ΠΎΠ½ ΡΠ΅Π°Π»ΠΈΠ·ΡΠ΅Ρ ΠΏΠΎΠ΄ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ ΡΠ·ΡΠΊΠ°, ΠΏΠΎΡΠ΅Π½ΡΠΈΠ°Π» ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ Π² ΠΏΠ»Π°Π½Π΅ ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΠΈ ΡΠΈΠ»ΡΠ½ΠΎ ΠΏΡΠ΅Π²ΠΎΡΡ
ΠΎΠ΄ΠΈΡ ΠΎΠ±ΡΡΠ½ΡΠΉ python. ΠΠΎΡΡΠΎΠΌΡ Π²ΡΡΡΠ°Π½ΠΈΠ²Π°Π½ΠΈΠ΅ *mypy* Π² ΠΏΠ°ΠΉΠΏΠ»Π°ΠΉΠ½ ΠΏΡΠΎΠ΅ΠΊΡΠ° β ΠΈΠ½Π²Π΅ΡΡΠΈΡΠΈΡ Π½Π΅ ΡΠΎΠ»ΡΠΊΠΎ Π² ΠΏΠΎΠΈΡΠΊ ΠΎΡΠΈΠ±ΠΎΠΊ, Π½ΠΎ ΠΈ **Π±ΡΠ΄ΡΡΠΈΠΉ ΠΏΠ΅ΡΡΠΎΠΌΠ°Π½Ρ** ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ. ΠΠ½Π΅ ΠΎΡΠ΅Π½Ρ ΠΏΠΎΠ½ΡΠ°Π²ΠΈΠ»ΠΎΡΡ, ΡΡΠΎ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΠ΅ Ρ *CPython* ΠΎΡΡΡΠ΅ΡΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠ΅ΡΠ΅Π· ΠΌΠ΅Ρ
Π°Π½ΠΈΠ·ΠΌ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΠΉ ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠ°ΡΠΎΡΠ°, Π²Π΅Π΄Ρ ΡΡΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΡΠ΄Π΅Π»Π°ΡΡ Π²ΡΠ±ΠΎΡΠΎΡΠ½ΡΡ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΡ Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ Π½Π°Π³ΡΡΠΆΠ΅Π½Π½ΡΡ
ΠΌΠΎΠ΄ΡΠ»Π΅ΠΉ, ΠΎΡΡΠ°Π²ΠΈΠ² Π±ΠΎΠ»ΡΡΡΡ ΡΠ°ΡΡΡ ΠΊΠΎΠ΄Π° Π±Π΅Π· ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ. Π’Π°ΠΊΠΎΠΉ ΠΏΡΡΡ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ΅ΡΡΡ ΠΌΠ½Π΅ **Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΡΠΌ** (ΡΡΠΈΡΡΠ²Π°Ρ, ΡΡΠΎ *mypyc* Π΄ΠΎ ΡΠΈΡ
ΠΏΠΎΡ Π² Π°Π»ΡΡΠ΅). ΠΠΎΠ½Π΅ΡΠ½ΠΎ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π»ΠΈ *mypyc* Π½Π° ΠΏΡΠΎΠ΄Π°ΠΊΡΠ΅Π½Π΅, ΡΠ΅ΡΠ°ΡΡ Π²Π°ΠΌ, Π½ΠΎ Π΅ΡΠ»ΠΈ Π²Ρ ΡΠΆΠ΅ ΡΠΏΠ΅ΡΠ»ΠΈΡΡ Π² ΠΏΠΎΡΠΎΠ»ΠΎΠΊ ΠΏΠΎ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ ΠΈ ΠΏΠΎΠ΄ΡΠΌΡΠ²Π°Π΅ΡΠ΅ ΠΎ ΡΠΎΠΌ, ΡΡΠΎΠ±Ρ ΠΏΠ΅ΡΠ΅ΠΏΠΈΡΠ°ΡΡ ΠΊΠ°ΠΊΠΈΠ΅-ΡΠΎ ΡΠ°ΡΡΠΈ Π½Π° Π½ΠΈΠ·ΠΊΠΎΡΡΠΎΠ²Π½Π΅Π²ΡΠ΅ ΡΠ·ΡΠΊΠΈ, ΡΠΎ ΡΡΠΎΠΈΡ ΠΏΠΎΠΏΡΠΎΠ±ΠΎΠ²Π°ΡΡ Π·Π°ΠΏΡΡΡΠΈΡΡ *mypyc*, ΡΠ΅ΠΌ Π±ΠΎΠ»Π΅Π΅, ΡΡΠΎ ΡΠ΄Π΅Π»Π°ΡΡ ΡΡΠΎ ΠΏΡΠΎΡΡΠΎ, Π΅ΡΠ»ΠΈ Π²Ρ ΡΠΆΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΠ΅ mypy.
## P.S.
ΠΠ°Π΄Π΅ΡΡΡ, Π²Π°ΠΌ Π±ΡΠ»ΠΎ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ½ΠΎ ΡΠ·Π½Π°ΡΡ ΠΎ Π½ΠΎΠ²ΠΎΠΌ ΡΠΏΠΎΡΠΎΠ±Π΅ ΠΏΠΎΠ²ΡΡΠ΅Π½ΠΈΡ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ python, Π° ΡΠ°ΠΊΠΆΠ΅ Π³Π»ΡΠ±ΠΆΠ΅ ΡΠ°Π·ΠΎΠ±ΡΠ°ΡΡΡΡ Π² ΠΌΠ΅Ρ
Π°Π½ΠΈΠ·ΠΌΠ΅ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΈ ΡΠΈΠΏΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°. ΠΡΠ»ΠΈ ΡΠ΅ΠΌΠ° ΠΎΠΊΠ°ΠΆΠ΅ΡΡΡ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ½ΠΎΠΉ, ΡΠΎ Π² ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΉ ΡΡΠ°ΡΡΠ΅ ΠΏΠ»Π°Π½ΠΈΡΡΡ Π±ΠΎΠ»ΡΡΠ΅ ΡΠ°ΡΡΠΊΠ°Π·Π°ΡΡ ΠΏΡΠΎ *mypyc*, Π΅Π³ΠΎ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΡ ΠΈ ΡΠ°ΡΡΡΠ΅ ΠΎΡΠΈΠ±ΠΊΠΈ, Π° ΡΠ°ΠΊΠΆΠ΅, ΠΊΠ°ΠΊ ΠΈΡ
ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ±ΠΎΠΉΡΠΈ.
## UPD
Π ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΡΡ
ΠΏΠΎΠ΄ΡΠΊΠ°Π·Π°Π»ΠΈ, ΠΎΠ± Π΅ΡΠ΅ ΠΎΠ΄Π½ΠΎΠΌ python ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠ΅ - *Cython*, ΠΎΠΊΠ°Π·ΡΠ²Π°Π΅ΡΡΡ ΡΠ΅ΠΏΠ΅ΡΡ ΠΎΠ½ ΡΠΌΠ΅Π΅Ρ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠΎΠ²Π°ΡΡ python ΠΊΠΎΠ΄ Π½Π°ΠΏΡΡΠΌΡΡ (ΠΌΠΈΠ½ΡΡ ΡΡΡΠ½ΡΡ ΡΠ°Π·Ρ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΡ ΠΊΠΎΠ΄Π° Π² *cython*\-ΠΊΠΎΠ΄). Π‘ΡΠ΄Ρ ΠΏΠΎ Π·Π°ΠΌΠ΅ΡΠ°ΠΌ cython ΠΏΠΎΠΊΠ° [Π½Π΅ ΡΡΠΈΡΡΠ²Π°Ρ](https://github.com/cython/cython/issues/2587) Π°Π½Π½ΠΎΡΠ°ΡΠΈΡ ΡΠΈΠΏΠΎΠ², Π½ΠΎ Π²ΡΠ΅ΠΌΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ (*real 1.82*) ΠΎΠΊΠ°Π·Π°Π»ΠΎΡΡ ΠΏΠΎΡΠ΅ΡΠ΅Π΄ΠΈΠ½Π΅ ΠΌΠ΅ΠΆΠ΄Ρ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠΎΠΌ mypyc Π½Π° Π°Π½Π½ΠΎΡΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠΌ ΠΈ Π½Π΅ Π°Π½Π½ΠΎΡΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠΌ ΠΊΠΎΠ΄Π°. ΠΠΎ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ Π΅Π΅ Π΄ΠΎΠ±Π°Π²ΡΡ Π² Π±ΡΠ΄ΡΡΠ΅ΠΌ.
Π’Π΅Π³ΠΈ:
- [python](https://habr.com/ru/search/?target_type=posts&order=relevance&q=[python])
- [mypy](https://habr.com/ru/search/?target_type=posts&order=relevance&q=[mypy])
- [compiler](https://habr.com/ru/search/?target_type=posts&order=relevance&q=[compiler])
- [nuitka](https://habr.com/ru/search/?target_type=posts&order=relevance&q=[nuitka])
Π₯Π°Π±Ρ:
- [ΠΠ»ΠΎΠ³ ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ Exness](https://habr.com/ru/companies/exness/articles/)
- [ΠΡΡΠΎΠΊΠΎΠ½Π°Π³ΡΡΠΆΠ΅Π½Π½ΡΠ΅ ΡΠΈΡΡΠ΅ΠΌΡ](https://habr.com/ru/hubs/hi/)
- [Python](https://habr.com/ru/hubs/python/)
- [ΠΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅](https://habr.com/ru/hubs/programming/)
- [ΠΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΡ](https://habr.com/ru/hubs/compilers/)
\+27
162
[28](https://habr.com/ru/companies/exness/articles/542106/comments/)
[](https://habr.com/ru/companies/exness/profile/)
[Exness](https://habr.com/ru/companies/exness/profile/)
Tech professionals. Good people
[Π₯Π°Π±Ρ ΠΠ°ΡΡΠ΅ΡΠ°](https://career.habr.com/companies/exness)[Facebook](https://facebook.com/Exness.careers)[Instagram](https://instagram.com/exness_careers_)
[](https://habr.com/ru/users/zueve/)
15
ΠΠ°ΡΠΌΠ°
EΠ²Π³Π΅Π½ΠΈΠΉ ΠΡΠ΅Π²[@zueve](https://habr.com/ru/users/zueve/)
Π€ΠΈΠ»ΠΎΡΠΎΡΠΈΡ ΠΈ IT
ΠΠΎΠ΄ΠΏΠΈΡΠ°ΡΡΡΡ
Π₯Π°Π±Ρ Π΄ΠΎΡΡΡΠΏΠ΅Π½ 24/7 Π±Π»Π°Π³ΠΎΠ΄Π°ΡΡ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠ΅ Π΄ΡΡΠ·Π΅ΠΉ

Π₯Π°Π±Ρ ΠΡΡΡΡ Π΄Π»Ρ Π²ΡΠ΅Ρ
Π ΠΠΠΠΠΠ
ΠΡΠ°ΠΊΡΠΈΠΊΡΠΌ, Π₯Π΅ΠΊΡΠ»Π΅Ρ, SkyPro, Π°Π²ΡΠΎΡΡΠΊΠΈΠ΅ ΠΊΡΡΡΡ β ΡΠΎΠ±ΡΠ°Π»ΠΈ Π²ΡΠ΅Ρ
ΠΈ ΠΏΠΎΠΏΡΠΎΡΠΈΠ»ΠΈ ΡΠΊΠΈΠ΄ΠΊΠΈ. ΠΡΡΠ°Π»ΠΎΡΡ Π²ΡΠ±ΡΠ°ΡΡ\!
[ΠΠ΅ΡΠ΅ΠΉΡΠΈ](https://career.habr.com/courses/?erid=2VSb5wDLYUH&utm_source=habr&utm_medium=sponsorship_hub)
[ΠΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ 28](https://habr.com/ru/companies/exness/articles/542106/comments/)
## ΠΡΠ±Π»ΠΈΠΊΠ°ΡΠΈΠΈ
ΠΡΡΡΠΈΠ΅ Π·Π° ΡΡΡΠΊΠΈ
ΠΠΎΡ
ΠΎΠΆΠΈΠ΅
## ΠΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ
Π‘Π°ΠΉΡ
[exness-careers.com](https://exness-careers.com/)
ΠΠ°ΡΠ° ΡΠ΅Π³ΠΈΡΡΡΠ°ΡΠΈΠΈ
12 ΡΠ΅Π²ΡΠ°Π»Ρ 2020
ΠΠ°ΡΠ° ΠΎΡΠ½ΠΎΠ²Π°Π½ΠΈΡ
1 ΠΈΡΠ»Ρ 2008
Π§ΠΈΡΠ»Π΅Π½Π½ΠΎΡΡΡ
1 001β5 000 ΡΠ΅Π»ΠΎΠ²Π΅ΠΊ
ΠΠ΅ΡΡΠΎΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅
ΠΠΈΠΏΡ
ΠΡΠ΅Π΄ΡΡΠ°Π²ΠΈΡΠ΅Π»Ρ
[Inna\_russa](https://habr.com/ru/users/Inna_russa/)
ΠΠ°Ρ Π°ΠΊΠΊΠ°ΡΠ½Ρ
- [ΠΠΎΠΉΡΠΈ](https://habr.com/kek/v1/auth/habrahabr/?back=/ru/companies/exness/articles/542106/&hl=ru)
- [Π Π΅Π³ΠΈΡΡΡΠ°ΡΠΈΡ](https://habr.com/kek/v1/auth/habrahabr-register/?back=/ru/companies/exness/articles/542106/&hl=ru)
Π Π°Π·Π΄Π΅Π»Ρ
- [Π‘ΡΠ°ΡΡΠΈ](https://habr.com/ru/articles/)
- [ΠΠΎΠ²ΠΎΡΡΠΈ](https://habr.com/ru/news/)
- [Π₯Π°Π±Ρ](https://habr.com/ru/hubs/)
- [ΠΠΎΠΌΠΏΠ°Π½ΠΈΠΈ](https://habr.com/ru/companies/)
- [ΠΠ²ΡΠΎΡΡ](https://habr.com/ru/users/)
- [ΠΠ΅ΡΠΎΡΠ½ΠΈΡΠ°](https://habr.com/ru/sandbox/)
ΠΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ
- [Π£ΡΡΡΠΎΠΉΡΡΠ²ΠΎ ΡΠ°ΠΉΡΠ°](https://habr.com/ru/docs/help/)
- [ΠΠ»Ρ Π°Π²ΡΠΎΡΠΎΠ²](https://habr.com/ru/docs/authors/codex/)
- [ΠΠ»Ρ ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΉ](https://habr.com/ru/docs/companies/corpblogs/)
- [ΠΠΎΠΊΡΠΌΠ΅Π½ΡΡ](https://habr.com/ru/docs/docs/transparency/)
- [Π‘ΠΎΠ³Π»Π°ΡΠ΅Π½ΠΈΠ΅](https://account.habr.com/info/agreement/?hl=ru_RU)
- [ΠΠΎΠ½ΡΠΈΠ΄Π΅Π½ΡΠΈΠ°Π»ΡΠ½ΠΎΡΡΡ](https://account.habr.com/info/confidential/?hl=ru_RU)
Π£ΡΠ»ΡΠ³ΠΈ
- [ΠΠΎΡΠΏΠΎΡΠ°ΡΠΈΠ²Π½ΡΠΉ Π±Π»ΠΎΠ³](https://company.habr.com/ru/corporate-blogs/)
- [ΠΠ΅Π΄ΠΈΠΉΠ½Π°Ρ ΡΠ΅ΠΊΠ»Π°ΠΌΠ°](https://company.habr.com/ru/advertising/)
- [ΠΠ°ΡΠΈΠ²Π½ΡΠ΅ ΠΏΡΠΎΠ΅ΠΊΡΡ](https://company.habr.com/ru/native-special/)
- [ΠΠ±ΡΠ°Π·ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΡΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ](https://company.habr.com/ru/education-programs/)
- [Π‘ΡΠ°ΡΡΠ°ΠΏΠ°ΠΌ](https://company.habr.com/ru/hello-startup/)
ΠΠ°ΡΡΡΠΎΠΉΠΊΠ° ΡΠ·ΡΠΊΠ°
[Π’Π΅Ρ
Π½ΠΈΡΠ΅ΡΠΊΠ°Ρ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠ°](https://habr.com/ru/feedback/)
Β© 2006β2026, [Habr](https://company.habr.com/) |
| Readable Markdown | 
ΠΡΠΈΠ²Π΅Ρ, Π₯Π°Π±Ρ\!
Π― Ρ
ΠΎΡΡ ΡΠ°ΡΡΠΊΠ°Π·Π°ΡΡ ΠΎΠ± ΡΠ΄ΠΈΠ²ΠΈΡΠ΅Π»ΡΠ½ΠΎΠΌ ΡΠΎΠ±ΡΡΠΈΠΈ, ΠΎ ΠΊΠΎΡΠΎΡΠΎΠΌ Ρ ΡΠ·Π½Π°Π» ΠΏΠ°ΡΡ ΠΌΠ΅ΡΡΡΠ΅Π² Π½Π°Π·Π°Π΄. ΠΠΊΠ°Π·ΡΠ²Π°Π΅ΡΡΡ, ΠΎΠ΄Π½Π° ΠΏΠΎΠΏΡΠ»ΡΡΠ½Π°Ρ python-ΡΡΠΈΠ»ΠΈΡΠ° ΡΠΆΠ΅ Π±ΠΎΠ»Π΅Π΅ Π³ΠΎΠ΄Π° ΡΠ°ΡΠΏΡΠΎΡΡΡΠ°Π½ΡΠ΅ΡΡΡ Π² Π²ΠΈΠ΄Π΅ Π±ΠΈΠ½Π°ΡΠ½ΡΡ
ΡΠ°ΠΉΠ»ΠΎΠ², ΠΊΠΎΡΠΎΡΡΠ΅ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΡΡΡΡΡ ΠΏΡΡΠΌΠΎ ΠΈΠ· python. Π ΡΠ΅ΡΡ Π½Π΅ ΠΏΡΠΎ Π±Π°Π½Π°Π»ΡΠ½ΡΡ ΡΠΏΠ°ΠΊΠΎΠ²ΠΊΡ ΠΊΠ°ΠΊΠΈΠΌ-Π½ΠΈΠ±ΡΠ΄Ρ *PyInstaller*\-ΠΎΠΌ, Π° ΠΏΡΠΎ ΡΠ΅ΡΡΠ½ΡΡ *Ahead-of-time* ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΡ ΡΠ΅Π»ΠΎΠ³ΠΎ python-ΠΏΠ°ΠΊΠ΅ΡΠ°. ΠΡΠ»ΠΈ Π²Ρ ΡΠ΄ΠΈΠ²Π»Π΅Π½Ρ ΡΠ°ΠΊ ΠΆΠ΅ ΠΊΠ°ΠΊ ΠΈ Ρ, Π΄ΠΎΠ±ΡΠΎ ΠΏΠΎΠΆΠ°Π»ΠΎΠ²Π°ΡΡ ΠΏΠΎΠ΄ ΠΊΠ°Ρ.
ΠΠ±ΡΡΡΠ½Ρ, ΠΏΠΎΡΠ΅ΠΌΡ Ρ ΡΡΠΈΡΠ°Ρ ΡΡΠΎ ΡΠΎΠ±ΡΡΠΈΠ΅ ΠΏΠΎ-Π½Π°ΡΡΠΎΡΡΠ΅ΠΌΡ ΡΠ΄ΠΈΠ²ΠΈΡΠ΅Π»ΡΠ½ΡΠΌ. Π‘ΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ Π΄Π²Π° Π²ΠΈΠ΄Π° ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ: *Ahead-of-time (AOT)*, ΠΊΠΎΠ³Π΄Π° Π²Π΅ΡΡ ΠΊΠΎΠ΄ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΡΠ΅ΡΡΡ Π΄ΠΎ Π·Π°ΠΏΡΡΠΊΠ° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΠΈ *Just in time compiler (JIT)*, ΠΊΠΎΠ³Π΄Π° Π½Π΅ΠΏΠΎΡΡΠ΅Π΄ΡΡΠ²Π΅Π½Π½ΠΎ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΠΏΠΎΠ΄ ΡΡΠ΅Π±ΡΠ΅ΠΌΡΡ Π°ΡΡ
ΠΈΡΠ΅ΠΊΡΡΡΡ ΠΏΡΠΎΡΠ΅ΡΡΠΎΡΠ° ΠΎΡΡΡΠ΅ΡΡΠ²Π»ΡΠ΅ΡΡΡ Π²ΠΎ Π²ΡΠ΅ΠΌΡ Π΅Π΅ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ. ΠΠΎ Π²ΡΠΎΡΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ ΠΏΠ΅ΡΠ²ΠΎΠ½Π°ΡΠ°Π»ΡΠ½ΡΠΉ Π·Π°ΠΏΡΡΠΊ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΠΎΡΡΡΠ΅ΡΡΠ²Π»ΡΠ΅ΡΡΡ Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΠΎΠΉ ΠΌΠ°ΡΠΈΠ½ΠΎΠΉ ΠΈΠ»ΠΈ ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠ°ΡΠΎΡΠΎΠΌ.
ΠΡΠ»ΠΈ ΡΠ³ΡΡΠΏΠΏΠΈΡΠΎΠ²Π°ΡΡ ΠΏΠΎΠΏΡΠ»ΡΡΠ½ΡΠ΅ ΡΠ·ΡΠΊΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΏΠΎ ΡΠΈΠΏΡ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ, ΡΠΎ ΠΏΠΎΠ»ΡΡΠΈΠΌ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΉ ΡΠΏΠΈΡΠΎΠΊ:
- Ahead-of-time compiler: C, C++, Rust, Kotlin, Nim, D, Go, Dart;
- Just in time compiler: Lua, Π‘\#, Groovy, Dart.
*Π python ΠΈΠ· ΠΊΠΎΡΠΎΠ±ΠΊΠΈ Π½Π΅Ρ JIT ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠ°, Π½ΠΎ ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΠ΅ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ, ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΡΡΠΈΠ΅ ΡΠ°ΠΊΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ, ΡΡΡΠ΅ΡΡΠ²ΡΡΡ Π΄Π°Π²Π½ΠΎ*
Π‘ΠΌΠΎΡΡΡ Π½Π° ΡΡΡ ΡΠ°Π±Π»ΠΈΡΡ, ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΌΠ΅ΡΠΈΡΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΡΡ Π·Π°ΠΊΠΎΠ½ΠΎΠΌΠ΅ΡΠ½ΠΎΡΡΡ: **ΡΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ ΡΠΈΠΏΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π½ΡΠ΅ ΡΠ·ΡΠΊΠΈ Π½Π°Ρ
ΠΎΠ΄ΡΡΡΡ Π² ΠΎΠ±Π΅ΠΈΡ
ΡΡΡΠΎΠΊΠ°Ρ
**. ΠΠ΅ΠΊΠΎΡΠΎΡΡΠ΅ Π΄Π°ΠΆΠ΅ ΠΌΠΎΠ³ΡΡ ΡΠ°ΡΠΏΡΠΎΡΡΡΠ°Π½ΡΡΡΡΡ Ρ Π΄Π²ΡΠΌΡ Π²Π΅ΡΡΠΈΡΠΌΠΈ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠΎΠ²: Kotlin ΠΌΠΎΠΆΠ΅Ρ ΠΈΡΠΏΠΎΠ»Π½ΡΡΡΡΡ ΠΊΠ°ΠΊ Ρ JIT JavaVM, ΡΠ°ΠΊ ΠΈ Ρ AOT Kotlin/Native. Π’ΠΎ ΠΆΠ΅ ΡΠ°ΠΌΠΎΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΡΠΊΠ°Π·Π°ΡΡ ΠΏΡΠΎ Dart (Π²Π΅ΡΡΠΈΠΈ 2). A Π²ΠΎΡ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΈ ΡΠΈΠΏΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π½ΡΠ΅ ΡΠ·ΡΠΊΠΈ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΡΡΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ JIT-ΠΎΠΌ, ΡΡΠΎ Π²ΠΏΡΠΎΡΠ΅ΠΌ Π²ΠΏΠΎΠ»Π½Π΅ Π»ΠΎΠ³ΠΈΡΠ½ΠΎ.
> *ΠΡΠΈ Π·Π°ΠΏΡΡΠΊΠ΅ Π²ΠΈΡΡΡΠ°Π»ΡΠ½Π°Ρ ΠΌΠ°ΡΠΈΠ½Π° ΡΠ½Π°ΡΠ°Π»Π° Π½Π°ΠΊΠ°ΠΏΠ»ΠΈΠ²Π°Π΅Ρ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΎ ΡΠΈΠΏΠ°Ρ
ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ
, Π·Π°ΡΠ΅ΠΌ ΠΏΠΎΡΠ»Π΅ Π½Π°ΠΊΠΎΠΏΠ»Π΅Π½ΠΈΡ ΡΡΠ°ΡΠΈΡΡΠΈΠΊΠΈ, Π·Π°ΠΏΡΡΠΊΠ°Π΅ΡΡΡ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΡ Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ Π½Π°Π³ΡΡΠΆΠ΅Π½Π½ΡΡ
ΡΠ°ΡΡΠ΅ΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ. ΠΠΈΡΡΡΠ°Π»ΡΠ½Π°Ρ ΠΌΠ°ΡΠΈΠ½Π° ΠΎΡΡΠ»Π΅ΠΆΠΈΠ²Π°Π΅Ρ ΡΠΈΠΏΡ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠ² ΠΈ ΠΏΠ΅ΡΠ΅ΠΊΠ»ΡΡΠ°Π΅Ρ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΠΌΠ΅ΠΆΠ΄Ρ ΡΠΆΠ΅ ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠΎΠ²Π°Π½Π½ΡΠΌΠΈ ΠΈ Π½Π΅ ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠΎΠ²Π°Π½Π½ΡΠΌΠΈ ΡΡΠ°ΡΡΠΊΠ°ΠΌΠΈ ΠΊΠΎΠ΄Π° Π² Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ ΠΎΡ ΡΠ΅ΠΊΡΡΠΈΡ
Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ
.*
ΠΡΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠΈ JIT ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ ΡΠΈΠΏΡ Π½Π΅ ΠΎΡΠ΅Π½Ρ ΡΠΎ ΠΈ Π½ΡΠΆΠ½Ρ, Π²Π΅Π΄Ρ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΎ ΡΠΈΠΏΠ°Ρ
ΡΠΎΠ±ΠΈΡΠ°Π΅ΡΡΡ Π²ΠΎ Π²ΡΠ΅ΠΌΡ ΡΠ°Π±ΠΎΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ. ΠΠΎΡΡΠΎΠΌΡ Π²ΡΠ΅ ΠΏΠΎΠΏΡΠ»ΡΡΠ½ΡΠ΅ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΈ ΡΠΈΠΏΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π½ΡΠ΅ ΡΠ·ΡΠΊΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΡΠ°ΡΠΏΡΠΎΡΡΡΠ°Π½ΡΡΡΡΡ ΠΈΠΌΠ΅Π½Π½ΠΎ Ρ JIT ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠΎΠΌ. **ΠΠΎ ΠΊΠ°ΠΊ Π±ΡΡΡ Ρ AOT ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠ΅ΠΉ ΠΊΠΎΠ΄Π°, Π² ΠΊΠΎΡΠΎΡΠΎΠΌ Π½Π΅Ρ ΡΠΈΠΏΠΎΠ²?** ΠΠ΅Π½Ρ ΠΎΡΠ΅Π½Ρ Π·Π°ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠΎΠ²Π°Π» ΡΡΠΎΡ Π²ΠΎΠΏΡΠΎΡ, ΠΈ Ρ ΠΏΠΎΠ»Π΅Π· ΡΠ°Π·Π±ΠΈΡΠ°ΡΡΡΡ.
ΠΡΠ°ΠΊ, Π²Π΅ΡΠ½Π΅ΠΌΡΡ ΠΊ ΡΡΠΈΠ»ΠΈΡΠ΅, ΠΎ ΠΊΠΎΡΠΎΡΠΎΠΉ Π³ΠΎΠ²ΠΎΡΠΈΠ»ΠΎΡΡ Π² Π½Π°ΡΠ°Π»Π΅ ΡΡΠ°ΡΡΠΈ. Π Π΅ΡΡ ΠΏΡΠΎ [mypy](http://mypy-lang.org/) - Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠΏΡΠ»ΡΡΠ½ΡΠΉ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈΠΉ Π°Π½Π°Π»ΠΈΠ·Π°ΡΠΎΡ python-ΠΊΠΎΠ΄Π°.

Π‘ Π°ΠΏΡΠ΅Π»Ρ 2019 Π³ΠΎΠ΄Π° ΡΡΠ° ΡΡΠΈΠ»ΠΈΡΠ° ΡΠ°ΡΠΏΡΠΎΡΡΡΠ°Π½ΡΠ΅ΡΡΡ Π² ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠΌ Π²ΠΈΠ΄Π΅, ΠΎ ΡΠ΅ΠΌ ΡΠ°ΡΡΠΊΠ°Π·ΡΠ²Π°Π΅ΡΡΡ Π² [Π±Π»ΠΎΠ³Π΅](https://mypy-lang.blogspot.com/2019/04/mypy-0700-released-up-to-4x-faster.html) ΠΏΡΠΎΠ΅ΠΊΡΠ°. Π Π΄Π»Ρ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π΅ΡΠ΅ ΠΎΠ΄Π½Π° ΡΡΠΈΠ»ΠΈΡΠ° ΠΎΡ ΡΠ΅Ρ
ΠΆΠ΅ Π°Π²ΡΠΎΡΠΎΠ² β *mypyc*. ΠΠΎΠ³ΡΠ³Π»ΠΈΠ² Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ, Ρ Π½Π°ΡΠ΅Π» Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ Π±ΠΎΠ»ΡΡΡΡ ΡΡΠ°ΡΡΡ β[ΠΡΡΡ ΠΊ ΠΏΡΠΎΠ²Π΅ΡΠΊΠ΅ ΡΠΈΠΏΠΎΠ² 4 ΠΌΠΈΠ»Π»ΠΈΠΎΠ½ΠΎΠ² ΡΡΡΠΎΠΊ Python-ΠΊΠΎΠ΄Π°](https://dropbox.tech/application/our-journey-to-type-checking-4-million-lines-of-python)β ΠΏΡΠΎ ΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ ΠΈ ΡΠ°Π·Π²ΠΈΡΠΈΠ΅ mypy (Π½Π° Π₯Π°Π±ΡΠ΅ Π΄ΠΎΡΡΡΠΏΠ΅Π½ ΠΏΠ΅ΡΠ΅Π²ΠΎΠ΄: [ΡΠ°ΡΡΡ 1](https://habr.com/ru/company/ruvds/blog/468233/), [ΡΠ°ΡΡΡ 2](https://habr.com/ru/company/ruvds/blog/468235/), [ΡΠ°ΡΡΡ 3](https://habr.com/ru/company/ruvds/blog/468237/)). Π’Π°ΠΌ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ ΡΠ°ΡΡΠΊΠ°Π·ΡΠ²Π°Π΅ΡΡΡ ΠΎ ΡΠ΅Π»ΡΡ
ΡΠΎΠ·Π΄Π°Π½ΠΈΡ mypyc: ΡΡΠΎΠ»ΠΊΠ½ΡΠ²ΡΠΈΡΡ Ρ Π½Π΅Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎΠΉ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΡΡ mypy ΠΏΡΠΈ ΡΠ°Π·Π±ΠΎΡΠ΅ ΠΊΡΡΠΏΠ½ΡΡ
python-ΠΏΡΠΎΠ΅ΠΊΡΠΎΠ² Π² Dropbox, ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΈ Π΄ΠΎΠ±Π°Π²ΠΈΠ»ΠΈ ΠΊΠ΅ΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠΎΠ² ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ ΠΊΠΎΠ΄Π°, Π° Π·Π°ΡΠ΅ΠΌ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ Π·Π°ΠΏΡΡΠΊΠ° ΡΡΠΈΠ»ΠΈΡΡ ΠΊΠ°ΠΊ ΡΠ΅ΡΠ²ΠΈΡΠ°. ΠΠΎ ΠΈΡΡΠ΅ΡΠΏΠ°Π² ΠΎΡΠ΅Π²ΠΈΠ΄Π½ΡΠ΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΠΈ, ΡΡΠΎΠ»ΠΊΠ½ΡΠ»ΠΈΡΡ Ρ Π²ΡΠ±ΠΎΡΠΎΠΌ: ΠΏΠ΅ΡΠ΅ΠΏΠΈΡΠ°ΡΡ Π²ΡΠ΅ Π½Π° *go* ΠΈΠ»ΠΈ Π½Π° *cython*. Π ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ΅ ΠΏΡΠΎΠ΅ΠΊΡ ΠΏΠΎΡΠ΅Π» ΠΏΠΎ ΡΡΠ΅ΡΡΠ΅ΠΌΡ ΠΏΡΡΠΈ β **Π½Π°ΠΏΠΈΡΠ°Π½ΠΈΠ΅ ΡΠ²ΠΎΠ΅Π³ΠΎ AOT python-ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠ°**.
ΠΠ΅Π»ΠΎ Π² ΡΠΎΠΌ, ΡΡΠΎ Π΄Π»Ρ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎΠΉ ΡΠ°Π±ΠΎΡΡ *mypy* ΠΈ ΡΠ°ΠΊ Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΠΎΡΡΡΠΎΠΈΡΡ ΡΠΎ ΠΆΠ΅ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΎΠ΅ Π΄Π΅ΡΠ΅Π²ΠΎ, ΡΡΠΎ ΠΈ ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠ°ΡΠΎΡΡ Π²ΠΎ Π²ΡΠ΅ΠΌΡ ΠΈΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΊΠΎΠ΄Π°. Π’ΠΎ Π΅ΡΡΡ **mypy ΡΠΆΠ΅ βΠΏΠΎΠ½ΠΈΠΌΠ°Π΅Ρβ python**, Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ ΡΡΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΡΠΎΠ»ΡΠΊΠΎ Π΄Π»Ρ ΡΡΠ°ΡΠΈΡΡΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ Π°Π½Π°Π»ΠΈΠ·Π°, Π° Π²ΠΎΡ *mypyc* ΠΌΠΎΠΆΠ΅Ρ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²ΡΠ²Π°ΡΡ ΡΡΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ Π² ΠΏΠΎΠ»Π½ΠΎΡΠ΅Π½Π½ΡΠΉ Π±ΠΈΠ½Π°ΡΠ½ΡΠΉ ΠΊΠΎΠ΄.
ΠΡΠΌΠ°Ρ ΡΡΡ ΠΌΠ½ΠΎΠ³ΠΈΠ΅ ΡΠ΅ΡΠΈΠ»ΠΈ, ΡΡΠΎ ΡΠ°Π·ΠΎΠ±ΡΠ°Π»ΠΈΡΡ Π² Π²ΠΎΠΏΡΠΎΡΠ΅ ΡΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠΎΠ²Π°ΡΡ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΈ ΡΠΈΠΏΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉ python-ΠΊΠΎΠ΄. Python c Π²Π΅ΡΡΠΈΠΈ 3.4 ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅Ρ Π°Π½Π½ΠΎΡΠ°ΡΠΈΡ ΡΠΈΠΏΠΎΠ², Π° *mypy* ΠΊΠ°ΠΊ ΡΠ°Π· ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π΄Π»Ρ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ ΠΊΠΎΡΡΠ΅ΠΊΡΠ½ΠΎΡΡΠΈ Π°Π½Π½ΠΎΡΠ°ΡΠΈΠΉ. ΠΠΎΠ»ΡΡΠ°Π΅ΡΡΡ, python ΠΊΠ°ΠΊ Π±Ρ ΡΠΆΠ΅ ΠΈ Π½Π΅ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΈ ΡΠΈΠΏΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉ ΡΠ·ΡΠΊ, ΡΡΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΏΡΠΈΠΌΠ΅Π½ΠΈΡΡ AOT ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΡ. ΠΠΎ Π·Π°Π³Π²ΠΎΠ·Π΄ΠΊΠ° Π² ΡΠΎΠΌ, ΡΡΠΎ *mypyc* **ΠΌΠΎΠΆΠ΅Ρ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠΎΠ²Π°ΡΡ ΠΈ Π½Π΅Π°Π½Π½ΠΎΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉ ΠΊΠΎΠ΄**\!
## Π€ΡΠ½ΠΊΡΠΈΡ bubble\_sort
ΠΠ»Ρ ΠΏΡΠΈΠΌΠ΅ΡΠ° ΡΠ°ΡΡΠΌΠΎΡΡΠΈΠΌ ΡΡΠ½ΠΊΡΠΈΡ ΡΠΎΡΡΠΈΡΠΎΠ²ΠΊΠΈ βΠΏΡΠ·ΡΡΡΠΊΠΎΠΌβ. Π€Π°ΠΉΠ» *lib.py:*
```
def bubble_sort(data):
Β Β Β n = len(data)
Β Β Β for i in range(n - 1):
Β Β Β Β Β Β Β for j in range(n - i - 1):
Β Β Β Β Β Β Β Β Β Β Β if data[j] > data[j + 1]:
Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β buff = data[j]
Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β data[j] = data[j + 1]
Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β data[j + 1] = buff
Β Β Β return data
```
Π£ ΡΠΈΠΏΠΎΠ² Π½Π΅Ρ Π°Π½Π½ΠΎΡΠ°ΡΠΈΠΉ, Π½ΠΎ ΡΡΠΎ Π½Π΅ ΠΌΠ΅ΡΠ°Π΅Ρ *mypyc* Π΅Π΅ ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠΎΠ²Π°ΡΡ. Π§ΡΠΎΠ±Ρ Π·Π°ΠΏΡΡΡΠΈΡΡ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΡ, Π½ΡΠΆΠ½ΠΎ ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ *mypyc*. ΠΠ½ Π½Π΅ ΡΠ°ΡΠΏΡΠΎΡΡΡΠ°Π½ΡΠ΅ΡΡΡ ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΠΌ ΠΏΠ°ΠΊΠ΅ΡΠΎΠΌ, Π½ΠΎ Π΅ΡΠ»ΠΈ Ρ Π²Π°Ρ ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½ *mypy*, ΡΠΎ ΠΈ *mypyc* ΡΠΆΠ΅ ΠΏΡΠΈΡΡΡΡΡΠ²ΡΠ΅Ρ Π² ΡΠΈΡΡΠ΅ΠΌΠ΅! ΠΠ°ΠΏΡΡΠΊΠ°Π΅ΠΌ *mypyc*, ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΉ ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ:
```
> mypyc lib.py
```
ΠΠΎΡΠ»Π΅ Π·Π°ΠΏΡΡΠΊΠ° Π² ΠΏΡΠΎΠ΅ΠΊΡΠ΅ Π±ΡΠ΄ΡΡ ΡΠΎΠ·Π΄Π°Π½Ρ ΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅ Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΠΈ:
- `.mypy_cache` β *mypy* ΠΊΡΡ, mypyc Π½Π΅ΡΠ²Π½ΠΎ Π·Π°ΠΏΡΡΠΊΠ°Π΅Ρ mypy Π΄Π»Ρ ΡΠ°Π·Π±ΠΎΡΠ° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΠΈ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΡ AST;
- `build` β Π°ΡΡΠ΅ΡΠ°ΠΊΡΡ ΡΠ±ΠΎΡΠΊΠΈ;
- `lib.cpython-38-x86_64-linux-gnu.so` β ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΠΎ ΡΠ±ΠΎΡΠΊΠ° ΠΏΠΎΠ΄ ΡΠ΅Π»Π΅Π²ΡΡ ΠΏΠ»Π°ΡΡΠΎΡΠΌΡ. ΠΠ°Π½Π½ΡΠΉ ΡΠ°ΠΉΠ» ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ΅Ρ ΠΈΠ· ΡΠ΅Π±Ρ Π³ΠΎΡΠΎΠ²ΡΠΉ CPython Extension.
> *CPython Extension* β Π²ΡΡΡΠΎΠ΅Π½Π½ΡΠΉ Π² *CPython* ΠΌΠ΅Ρ
Π°Π½ΠΈΠ·ΠΌ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΡ Ρ ΠΊΠΎΠ΄ΠΎΠΌ, Π½Π°ΠΏΠΈΡΠ°Π½Π½ΡΠΌ Π½Π° Π‘/C++. ΠΠΎ ΡΡΡΠΈ ΡΡΠΎ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠ°Ρ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ°, ΠΊΠΎΡΠΎΡΡΡ *CPython* ΡΠΌΠ΅Π΅Ρ Π·Π°Π³ΡΡΠΆΠ°ΡΡ ΠΏΡΠΈ ΠΈΠΌΠΏΠΎΡΡΠ΅ Π½Π°ΡΠ΅Π³ΠΎ ΠΌΠΎΠ΄ΡΠ»Ρ *lib*. Π§Π΅ΡΠ΅Π· Π΄Π°Π½Π½ΡΠΉ ΠΌΠ΅Ρ
Π°Π½ΠΈΠ·ΠΌ ΠΎΡΡΡΠ΅ΡΡΠ²Π»ΡΠ΅ΡΡΡ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΠ΅ Ρ ΠΌΠΎΠ΄ΡΠ»ΡΠΌΠΈ, Π½Π°ΠΏΠΈΡΠ°Π½Π½ΡΠΌΠΈ Π½Π° python.
ΠΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΡ ΡΠΎΡΡΠΎΠΈΡ ΠΈΠ· Π΄Π²ΡΡ
ΡΠ°Π·:
1. ΠΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΡ python ΠΊΠΎΠ΄Π° Π² ΠΊΠΎΠ΄ Π‘;
2. ΠΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΡ Π‘ Π² Π±ΠΈΠ½Π°ΡΠ½ΡΠΉ *.so* ΡΠ°ΠΉΠ», Π΄Π»Ρ ΡΡΠΎΠ³ΠΎ *mypyc* ΡΠ°ΠΌ Π·Π°ΠΏΡΡΠΊΠ°Π΅Ρ gcc (*gcc* ΠΈ *python-dev* ΡΠ°ΠΊΠΆΠ΅ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±ΡΡΡ ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½Ρ).
Π€Π°ΠΉΠ» `lib.cpython-38-x86_64-linux-gnu.so` ΠΈΠΌΠ΅Π΅Ρ ΠΏΡΠ΅ΠΈΠΌΡΡΠ΅ΡΡΠ²ΠΎ ΠΏΠ΅ΡΠ΅Π΄ *lib.py* ΠΏΡΠΈ ΠΈΠΌΠΏΠΎΡΡΠ΅ Π½Π° ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠ΅ΠΉ ΠΏΠ»Π°ΡΡΠΎΡΠΌΠ΅, ΠΈ ΠΈΡΠΏΠΎΠ»Π½ΡΡΡΡΡ ΡΠ΅ΠΏΠ΅ΡΡ Π±ΡΠ΄Π΅Ρ ΠΈΠΌΠ΅Π½Π½ΠΎ ΠΎΠ½.
ΠΡ ΠΈ Π΄Π°Π²Π°ΠΉΡΠ΅ ΡΡΠ°Π²Π½ΠΈΠΌ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΡ ΠΌΠΎΠ΄ΡΠ»Ρ Π΄ΠΎ ΠΈ ΠΏΠΎΡΠ»Π΅ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ. ΠΠ»Ρ ΡΡΠΎΠ³ΠΎ ΡΠΎΠ·Π΄Π°Π΄ΠΈΠΌ ΡΠ°ΠΉΠ» *main.py* Ρ ΠΊΠΎΠ΄ΠΎΠΌ Π·Π°ΠΏΡΡΠΊΠ° ΡΠΎΡΡΠΈΡΠΎΠ²ΠΊΠΈ:
```
import lib
data = lib.bubble_sort(list(range(5000, 0, -1)))
assert data == list(range(1, 5001))
```
ΠΠΎΠ»ΡΡΠΈΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠ½ΠΎ ΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΡ:
| | |
|---|---|
| ΠΠΎ | ΠΠΎΡΠ»Π΅ |
| real 5.68user 5.60sys 0.01 | real 2.78user 2.73sys 0.01 |
ΠΠΆΠΈΠ΄Π°Π΅ΠΌΠΎ ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉ ΠΊΠΎΠ΄ **ΠΎΠΊΠ°Π·Π°Π»ΡΡ Π±ΡΡΡΡΠ΅Π΅ (~ Π² 2 ΡΠ°Π·Π°)**, ΡΡΠΎ Π½Π΅ΠΏΠ»ΠΎΡ
ΠΎ, ΡΠ°ΠΊ ΠΊΠ°ΠΊ Π΄Π»Ρ ΡΠ°ΠΊΠΎΠ³ΠΎ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ° Π½Π°ΠΌ ΠΏΠΎΡΡΠ΅Π±ΠΎΠ²Π°Π»ΠΎΡΡ Π·Π°ΠΏΡΡΡΠΈΡΡ Π»ΠΈΡΡ ΠΎΠ΄Π½Ρ ΠΊΠΎΠΌΠ°Π½Π΄Ρ. Π₯ΠΎΡΡ ΠΎΡ ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° ΠΏΡΠΈΠ²ΡΡΠ½ΠΎ ΠΎΠΆΠΈΠ΄Π°Π΅ΡΡ Π±ΠΎΠ»ΡΡΠ΅Π³ΠΎ.

Π§ΡΠΎΠ±Ρ ΠΎΡΠ²Π΅ΡΠΈΡΡ Π½Π° Π²ΠΎΠΏΡΠΎΡ *βΠΊΠ°ΠΊ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΡΠ΅ΡΡΡ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΈ ΡΠΈΠΏΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉ ΠΊΠΎΠ΄β*, ΠΏΡΠΈΠ΄Π΅ΡΡΡ Π·Π°Π³Π»ΡΠ½ΡΡΡ Π² ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΡΡΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ Π½Π° Π‘. ΠΠΎ ΡΠ°Π·ΠΎΠ±ΡΠ°ΡΡ Π΅Π΅ Π±ΡΠ΄Π΅Ρ Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ ΡΠ»ΠΎΠΆΠ½ΠΎ, ΠΏΠΎΡΡΠΎΠΌΡ Π΄Π°Π²Π°ΠΉΡΠ΅ ΠΏΠΎΠΏΡΠΎΠ±ΡΠ΅ΠΌ ΡΠ°Π·ΠΎΠ±ΡΠ°ΡΡΡΡ Ρ ΠΏΡΠΈΠΌΠ΅ΡΠΎΠΌ ΠΏΠΎΠΏΡΠΎΡΠ΅.
## Π€ΡΠ½ΠΊΡΠΈΡ sum(a, b)
Π‘ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΡΠ΅ΠΌ ΡΡΠ½ΠΊΡΠΈΡ ΡΡΠΌΠΌΡ ΠΎΡ Π΄Π²ΡΡ
ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ
:
```
def sum(a, b):
Β Β return a + b
```
ΠΠ΅ΡΠ΅Π΄ Π·Π°ΠΏΡΡΠΊΠΎΠΌ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ Ρ ΠΎΠΆΠΈΠ΄Π°Π» ΡΠ²ΠΈΠ΄Π΅ΡΡ ΠΏΡΠΈΠΌΠ΅ΡΠ½ΠΎ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΉ ΠΊΠΎΠ΄ Π½Π° Π‘:
```
int sum(int a, int b) {
Β Β Β return a + b;
}
```
ΠΠ΄Π½Π°ΠΊΠΎ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ ΠΎΠΊΠ°Π·Π°Π»ΡΡ cΡΡΠ΅ΡΡΠ²Π΅Π½Π½ΠΎ ΠΈΠ½ΡΠΌ (**ΠΊΠΎΠ΄ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ ΡΠΏΡΠΎΡΠ΅Π½**):
```
PyObject *CPyDef_sum(PyObject *cpy_r_a, PyObject *cpy_r_b){
Β Β Β Β return PyNumber_Add(cpy_r_a, cpy_r_b);
}
```
Π Π°ΡΡΠΌΠΎΡΡΠΈΠΌ, ΡΡΠΎ ΡΡΡ ΠΏΡΠΎΠΈΡΡ
ΠΎΠ΄ΠΈΡ. ΠΠΎ-ΠΏΠ΅ΡΠ²ΡΡ
, ΡΠ°ΠΊ ΠΊΠ°ΠΊ ΠΌΡ Π½Π΅ Π·Π½Π°Π΅ΠΌ ΡΠΈΠΏΡ Π²Ρ
ΠΎΠ΄Π½ΡΡ
ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ
, ΡΡΠ½ΠΊΡΠΈΡ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠ² ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ ΡΠΊΠ°Π·Π°ΡΠ΅Π»ΠΈ Π½Π° ΠΎΠ±ΡΠ΅ΠΊΡΡ ΠΊΠ»Π°ΡΡΠ° *PyObject*, ΠΏΠΎ ΡΡΡΠΈ ΡΡΠΎ Π²Π½ΡΡΡΠ΅Π½Π½ΠΈΠ΅ *CPython* ΡΡΡΡΠΊΡΡΡΡ. ΠΠ°Π»Π΅Π΅ **ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡΠ»ΠΎΠΆΠΈΡΡ ΡΡΠΈ ΠΎΠ±ΡΠ΅ΠΊΡΡ**, Π½ΠΎ ΠΊΠ°ΠΊ, Π΅ΡΠ»ΠΈ Π½Π°ΡΡΠΎΡΡΠΈΠ΅ ΡΠΈΠΏΡ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠ² Π½Π΅ΠΈΠ·Π²Π΅ΡΡΠ½Ρ Π²ΠΎ Π²ΡΠ΅ΠΌΡ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ: ΡΡΠΎ ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ ΡΠ΅Π»ΡΠ΅ ΡΠΈΡΠ»Π°, ΡΠΈΡΠ»Π° Ρ ΠΏΠ»Π°Π²Π°ΡΡΠ΅ΠΉ ΡΠΎΡΠΊΠΎΠΉ, ΡΠΏΠΈΡΠΊΠΈ ΠΈ Π²ΠΎΠΎΠ±ΡΠ΅ Π½Π΅ ΡΠ°ΠΊΡ, ΡΡΠΎ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΡ ΠΌΠΎΠΆΠ½ΠΎ ΡΠΊΠ»Π°Π΄ΡΠ²Π°ΡΡ, ΡΠΎΠ³Π΄Π° Π½ΡΠΆΠ½ΠΎ Π²Π΅ΡΠ½ΡΡΡ ΠΎΡΠΈΠ±ΠΊΡ. Π ΡΡΠΎ ΠΆΠ΅ Π΄Π΅Π»Π°Π΅Ρ Π² ΡΡΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ mypyc?
ΠΠ°ΠΊ ΠΎΠΊΠ°Π·Π°Π»ΠΎΡΡ, Π²ΡΠ΅ ΠΎΡΠ΅Π½Ρ ΠΏΡΠΎΡΡΠΎ: ΠΎΠ½ ΠΏΡΠΎΡΠΈΡ *CPython* ΡΠ°ΠΌΠΎΡΡΠΎΡΡΠ΅Π»ΡΠ½ΠΎ ΡΠ»ΠΎΠΆΠΈΡΡ ΡΡΠΈ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΡ. Π€ΡΠ½ΠΊΡΠΈΡ *PyNumber\_Add* β ΡΡΠΎ Π²Π½ΡΡΡΠ΅Π½Π½ΡΡ ΡΡΠ½ΠΊΡΠΈΡ *Π‘Python*, ΠΊΠΎΡΠΎΡΠ°Ρ Π΄ΠΎΡΡΡΠΏΠ½Π° ΠΈΠ· ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΡ, Π²Π΅Π΄Ρ ***Π‘Python* ΠΎΡΠ»ΠΈΡΠ½ΠΎ ΡΠΌΠ΅Π΅Ρ ΡΠΊΠ»Π°Π΄ΡΠ²Π°ΡΡ ΡΠ²ΠΎΠΈ ΠΎΠ±ΡΠ΅ΠΊΡΡ**.
ΠΠ·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΠ΅ CPython c Extension ΠΌΠΎΠΆΠ½ΠΎ ΠΈΠ·ΠΎΠ±ΡΠ°Π·ΠΈΡΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΌ Π΄ΠΈΠ°Π»ΠΎΠ³ΠΎΠΌ:
> β Π ΠΏΠΎΡΡΠΈΡΠ°ΠΉ-ΠΊΠ° ΠΌΠ½Π΅ ΡΡΠ½ΠΊΡΠΈΡ sum Π΄Π»Ρ A, B;
>
> β Π₯ΠΎΡΠΎΡΠΎ, Π½ΠΎ ΡΠΊΠ°ΠΆΠΈ ΡΠ½Π°ΡΠ°Π»Π°, ΡΠΊΠΎΠ»ΡΠΊΠΎ Π±ΡΠ΄Π΅Ρ A + B;
>
> β ΠΡΠ΄Π΅Ρ Π‘;
>
> β Π₯ΠΎΡΠΎΡΠΎ, ΡΠΎΠ³Π΄Π° Π΄Π΅ΡΠΆΠΈ ΠΎΡΠ²Π΅Ρ - Π‘.
ΠΠΎΡ ΡΠ°ΠΊΠΎΠΉ Π½Π΅Ρ
ΠΈΡΡΡΠΉ ΠΏΡΠΈΠ΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ ΠΏΡΠΈ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°: **ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΡΠ΅ΠΌ Π²ΡΠ΅, ΡΡΠΎ ΠΌΠΎΠΆΠ΅ΠΌ, Π° Π²ΡΠ΅ ΠΎΡΡΠ°Π»ΡΠ½ΠΎΠ΅ ΠΎΡΠ΄Π°Π΅ΠΌ ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠ°ΡΠΎΡΡ**.
ΠΠΎΠ½Π΅ΡΠ½ΠΎ, Π΄Π°Π½Π½ΡΠΉ ΠΏΡΠΈΠΌΠ΅Ρ Π²ΡΠ³Π»ΡΠ΄ΠΈΡ Π³ΡΠΎΡΠ΅ΡΠΊΠ½ΠΎ, Π½ΠΎ Π΄Π°ΠΆΠ΅ **Π½Π΅ΡΠΌΠΎΡΡΡ Π½Π° ΡΠ°ΠΊΡΡ Π½Π΅ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½ΠΎΡΡΡ**, mypyc ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ Π΄ΠΎΠ±ΠΈΡΡΡΡ ΡΡΡΠ΅ΡΡΠ²Π΅Π½Π½ΠΎΠ³ΠΎ **ΠΏΡΠΈΡΠΎΡΡΠ° ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ**, ΠΊΠ°ΠΊ Π² ΠΏΡΠΈΠΌΠ΅ΡΠ΅ Ρ ΡΠΎΡΡΠΈΡΠΎΠ²ΠΊΠΎΠΉ.
## Π€ΡΠ½ΠΊΡΠΈΡ sum(a: int, b: int)
ΠΡΠ°ΠΊ, Ρ Π½Π°Ρ ΠΏΠΎΠ»ΡΡΠΈΠ»ΠΎΡΡ ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠΎΠ²Π°ΡΡ python, ΠΈ ΠΌΡ ΡΠ°Π·ΠΎΠ±ΡΠ°Π»ΠΈΡΡ Ρ ΡΠ΅ΠΌ, ΠΊΠ°ΠΊ ΡΡΠΎ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ, Π° ΡΠ°ΠΊΠΆΠ΅ ΡΠ²ΠΈΠ΄Π΅Π»ΠΈ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΡΡ Π½Π΅ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½ΠΎΡΡΡ ΠΏΠΎΠ»ΡΡΠ΅Π½Π½ΠΎΠ³ΠΎ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ°. Π’Π΅ΠΏΠ΅ΡΡ ΠΏΠΎΠΏΡΠΎΠ±ΡΠ΅ΠΌ ΡΠ°Π·ΠΎΠ±ΡΠ°ΡΡΡΡ Π² ΡΠΎΠΌ, ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ ΡΡΠΎ ΡΠ»ΡΡΡΠΈΡΡ. ΠΡΠ΅Π²ΠΈΠ΄Π½ΠΎ, ΡΡΠΎ ΠΎΡΠ½ΠΎΠ²Π½Π°Ρ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ° Π·Π°ΠΊΠ»ΡΡΠ°Π΅ΡΡΡ Π²ΠΎ **ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²Π΅Π½Π½ΠΎΠΌ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΠΈ** *CPython - Extension*. ΠΠΎ ΠΊΠ°ΠΊ ΡΡΠΎ ΠΏΠΎΠ±ΠΎΡΠΎΡΡ?
ΠΠ»Ρ ΠΏΠΎΠ²ΡΡΠ΅Π½ΠΈΡ ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½ΠΎΡΡΠΈ, Π½ΡΠΆΠ½ΠΎ, ΡΡΠΎΠ±Ρ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΠ΅, ΠΏΠΎΠ»ΡΡΠΈΠ² ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅, ΠΌΠΎΠ³Π»ΠΎ ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ **Π΄ΠΎΠ»ΡΡΠ΅ ΠΎΡΡΠ°Π²Π»ΡΡΡ Π΅Π³ΠΎ Ρ ΡΠ΅Π±Ρ** Π±Π΅Π· ΠΎΠ±ΡΠ°ΡΠ΅Π½ΠΈΡ ΠΊ *CPython*. ΠΡΠ»ΠΈ Π±Ρ Ρ mypyc Π±ΡΠ»Π° ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΎ ΡΠΈΠΏΠ°Ρ
ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ
, ΡΠΎ ΠΎΠ½ Π±Ρ ΠΌΠΎΠ³ ΡΠ°ΠΌΠΎΡΡΠΎΡΡΠ΅Π»ΡΠ½ΠΎ ΠΏΡΠΎΠΈΠ·Π²Π΅ΡΡΠΈ ΡΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π±Π΅Π· Π²ΠΎΠ·Π²ΡΠ°ΡΠ° ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ. ΠΠΎ Π²ΡΠ²Π΅ΡΡΠΈ ΡΠΈΠΏΡ ΡΠ°ΠΌΠΎΡΡΠΎΡΡΠ΅Π»ΡΠ½ΠΎ mypyc Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ, ΠΎΠ½ Π΄Π°ΠΆΠ΅ **Π½Π΅ ΠΊΠΎΠ½ΡΡΠΎΠ»ΠΈΡΡΠ΅Ρ ΠΊΠΎΠ΄**, ΠΈΠ· ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ ΠΎΡΡΡΠ΅ΡΡΠ²Π»ΡΠ΅ΡΡΡ Π²ΡΠ·ΠΎΠ² ΡΡΠ½ΠΊΡΠΈΠΈ sum. Π‘ΠΎΠΎΡΠ²Π΅ΡΡΡΠ²Π΅Π½Π½ΠΎ, Π΅ΠΌΡ Π½ΡΠΆΠ½ΠΎ ΠΏΠΎΠΌΠΎΡΡ, ΠΏΡΠΎΡΡΠ°Π²ΠΈΠ² Π°Π½Π½ΠΎΡΠ°ΡΠΈΠΈ Π²ΡΡΡΠ½ΡΡ. ΠΠ°Π²Π°ΠΉΡΠ΅ ΠΏΠΎΡΠΌΠΎΡΡΠΈΠΌ, ΠΊΠ°ΠΊ ΠΏΠΎΠΌΠ΅Π½ΡΠ΅ΡΡΡ ΡΠ΅Π·ΡΠ»ΡΡΠΈΡΡΡΡΠ°Ρ Π‘-ΡΡΠ½ΠΊΡΠΈΡ, Π΅ΡΠ»ΠΈ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ Π°Π½Π½ΠΎΡΠ°ΡΠΈΡ ΡΠΈΠΏΠΎΠ²:
```
def sum(a: int, b: int):
Β Β return a + b
```
Π‘ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ Π½Π° C (*Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ ΠΎΡΠΈΡΠ΅Π½Π½ΡΠΉ*):
```
PyObject *CPyDef_sum(CPyTagged cpy_r_a, CPyTagged cpy_r_b) {
Β Β Β CPyTagged cpy_r_r0;
Β Β Β PyObject *cpy_r_r1;
Β Β Β cpy_r_r0 = CPyTagged_Add(cpy_r_a, cpy_r_b);
Β Β Β cpy_r_r1 = CPyTagged_StealAsObject(cpy_r_r0);
Β Β Β return cpy_r_r1;
}
```
ΠΠ»Π°Π²Π½ΠΎΠ΅, ΡΡΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΌΠ΅ΡΠΈΡΡ: **ΡΡΠ½ΠΊΡΠΈΡ ΡΡΡΠ΅ΡΡΠ²Π΅Π½Π½ΠΎ ΠΏΠΎΠΌΠ΅Π½ΡΠ»Π°ΡΡ**, Π° Π·Π½Π°ΡΠΈΡ, ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ ΡΠ΅Π°Π³ΠΈΡΡΠ΅Ρ Π½Π° ΠΏΠΎΡΠ²Π»Π΅Π½ΠΈΠ΅ Π°Π½Π½ΠΎΡΠ°ΡΠΈΠΈ. ΠΠ°Π²Π°ΠΉΡΠ΅ ΡΠ°Π·Π±ΠΈΡΠ°ΡΡΡΡ, ΡΡΠΎ ΠΈΠ·ΠΌΠ΅Π½ΠΈΠ»ΠΎΡΡ.
Π’Π΅ΠΏΠ΅ΡΡ *CPyDef\_sum* ΠΏΠΎΠ»ΡΡΠ°Π΅Ρ Π½Π° Π²Ρ
ΠΎΠ΄ Π½Π΅ ΡΠΊΠ°Π·Π°ΡΠ΅Π»ΠΈ Π½Π° *PyObject*, Π° ΡΡΡΡΠΊΡΡΡΡ *CPyTagged*. ΠΡΠΎ Π²ΡΠ΅ Π΅ΡΠ΅ Π½Π΅ *int*, Π½ΠΎ ΡΠΆΠ΅ ΠΈ Π½Π΅ ΡΠ°ΡΡΡ *CPython*, Π° ΡΠ°ΡΡΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊ mypyc, ΠΊΠΎΡΠΎΡΡΡ ΠΎΠ½ Π΄ΠΎΠ±Π°Π²Π»ΡΠ΅Ρ Π² ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉ ΠΊΠΎΠ΄ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΡ. ΠΠ»Ρ Π΅Π΅ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ Π² ΡΠ°Π½ΡΠ°ΠΉΠΌΠ΅ ΡΠ½Π°ΡΠ°Π»Π° ΠΏΡΠΎΠ²Π΅ΡΡΠ΅ΡΡΡ ΡΠΈΠΏ, ΡΠ°ΠΊ ΡΡΠΎ ΡΠ΅ΠΏΠ΅ΡΡ ΡΡΠ½ΠΊΡΠΈΡ *sum* ΡΠ°Π±ΠΎΡΠ°Π΅Ρ ΡΠΎΠ»ΡΠΊΠΎ Ρ *int* ΠΈ ΠΎΠ±ΠΎΠΉΡΠΈ Π°Π½Π½ΠΎΡΠ°ΡΠΈΡ Π½Π΅ ΠΏΠΎΠ»ΡΡΠΈΡΡΡ.
ΠΠ°Π»Π΅Π΅ ΠΏΡΠΎΠΈΡΡ
ΠΎΠ΄ΠΈΡ Π²ΡΠ·ΠΎΠ² *CPyTaggetAdd* Π²ΠΌΠ΅ΡΡΠΎ *PyNumber\_Add*. ΠΡΠΎ ΡΠΆΠ΅ **Π²Π½ΡΡΡΠ΅Π½Π½ΡΡ ΡΡΠ½ΠΊΡΠΈΡ mypyc**. ΠΡΠ»ΠΈ Π·Π°Π³Π»ΡΠ½ΡΡΡ Π² [ΠΊΠΎΠ΄](https://github.com/python/mypy/blob/5e20a26b922e2f5b71425ea7f57d2b4cba5a9324/mypyc/lib-rt/int_ops.c#L136) *CPyTaggetAdd*, ΡΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ½ΡΡΡ, ΡΡΠΎ ΡΠ°ΠΌ ΠΏΡΠΎΠΈΡΡ
ΠΎΠ΄ΠΈΡ ΠΏΡΠΎΠ²Π΅ΡΠΊΠ° Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ΠΎΠ² Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ *a* ΠΈ *b*, ΠΈ Π΅ΡΠ»ΠΈ ΠΎΠ½ΠΈ ΡΠΊΠ»Π°Π΄ΡΠ²Π°ΡΡΡΡ Π² int, ΡΠΎ ΠΏΡΠΎΠΈΡΡ
ΠΎΠ΄ΠΈΡ ΠΏΡΠΎΡΡΠΎΠ΅ ΡΡΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅, Π° ΡΠ°ΠΊΠΆΠ΅ ΠΏΡΠΎΠ²Π΅ΡΠΊΠ° Π½Π° ΠΏΠ΅ΡΠ΅ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅:
```
if (likely(CPyTagged_CheckShort(left) && CPyTagged_CheckShort(right))) {
Β Β Β Β CPyTagged sum = left + right;
Β Β Β Β if (likely(!CPyTagged_IsAddOverflow(sum, left, right))) {
Β Β Β Β Β Β Β Β return sum;
Β Β Β Β }
}
```
Π’Π°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, Π½Π°Ρ Π΄ΠΈΠ°Π»ΠΎΠ³ *CPython - Extension* ΠΏΡΠ΅Π²ΡΠ°ΡΠ°Π΅ΡΡΡ **ΠΈΠ· Π°Π±ΡΡΡΠ΄Π½ΠΎΠ³ΠΎ Π² Π½ΠΎΡΠΌΠ°Π»ΡΠ½ΡΠΉ**:
> β Π ΠΏΠΎΡΡΠΈΡΠ°ΠΉ-ΠΊΠ° ΠΌΠ½Π΅ ΡΡΠ½ΠΊΡΠΈΡ sum Π΄Π»Ρ A, B;
>
> β Π₯ΠΎΡΠΎΡΠΎ, ΡΠΎΠ³Π΄Π° Π΄Π΅ΡΠΆΠΈ ΠΎΡΠ²Π΅Ρ Π‘.
## Π€ΡΠ½ΠΊΡΠΈΡ bubble\_sort(data: List\[int\])
ΠΠ°ΡΡΠ°Π»ΠΎ Π²ΡΠ΅ΠΌΡ Π²Π΅ΡΠ½ΡΡΡΡΡ ΠΊ ΡΡΠ½ΠΊΡΠΈΠΈ ΡΠΎΡΡΠΈΡΠΎΠ²ΠΊΠΈ, ΡΡΠΎΠ±Ρ ΠΏΡΠΎΠ²Π΅ΡΡΠΈ Π·Π°ΠΌΠ΅ΡΡ ΡΠΊΠΎΡΠΎΡΡΠΈ. ΠΠ·ΠΌΠ΅Π½ΠΈΠΌ Π½Π°ΡΠ°Π»ΡΠ½ΡΡ ΡΡΠ½ΠΊΡΠΈΡ, Π΄ΠΎΠ±Π°Π²ΠΈΠ² Π°Π½Π½ΠΎΡΠ°ΡΠΈΡ Π΄Π»Ρ *data*:
```
def bubble_sort(data: List[int]):
Β Β Β Β β¦
```
Π‘ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΡΠ΅ΠΌ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ ΠΈ Π·Π°ΠΌΠ΅ΡΠΈΠΌ Π²ΡΠ΅ΠΌΡ ΡΠΎΡΡΠΈΡΠΎΠ²ΠΊΠΈ:
| | | |
|---|---|---|
| ΠΠ΅Π· ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ | Π‘ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠ΅ΠΉ, Π±Π΅Π· Π°Π½Π½ΠΎΡΠ°ΡΠΈΠΈ ΡΠΈΠΏΠΎΠ² | Π‘ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠ΅ΠΉ ΠΈ Π°Π½Π½ΠΎΡΠ°ΡΠΈΠ΅ΠΉ ΡΠΈΠΏΠΎΠ² |
| real 5.68user 5.60sys 0.01 | real 2.78user 2.73sys 0.01 | real 1.32user 1.30sys 0.01 |
ΠΡΠ°ΠΊ, ΠΌΡ ΠΏΠΎΠ»ΡΡΠΈΠ»ΠΈ Π΅ΡΠ΅ Π΄Π²ΡΠΊΡΠ°ΡΠ½ΠΎΠ΅ ΡΡΠΊΠΎΡΠ΅Π½ΠΈΠ΅ ΠΎΡΠ½ΠΎΡΠΈΡΠ΅Π»ΡΠ½ΠΎ ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ, Π½Π΅ Π°Π½Π½ΠΎΡΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°, ΠΈ ΡΠ΅ΡΡΡΠ΅Ρ
ΠΊΡΠ°ΡΠ½ΠΎΠ΅ ΠΎΡΠ½ΠΎΡΠΈΡΠ΅Π»ΡΠ½ΠΎ ΠΎΡΠΈΠ³ΠΈΠ½Π°Π»ΡΠ½ΠΎΠ³ΠΎ\!

## ΠΠ°ΡΠ° ΡΠ»ΠΎΠ² ΠΎ mypyc
ΠΡΠ»ΠΈ Π²Ρ ΡΠΆΠ΅ Π±ΡΠΎΡΠΈΠ»ΠΈΡΡ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠΎΠ²Π°ΡΡ Π²Π°ΡΠΈ ΠΏΠ°ΠΊΠ΅ΡΡ, ΡΠΎ ΡΡΠΎΠΈΡ Π·Π°Π΄Π΅ΡΠΆΠ°ΡΡΡΡ Π½Π° ΠΏΠ°ΡΡ ΠΌΠΈΠ½ΡΡ, ΡΡΠΎΠ±Ρ Π΄ΠΎΡΠΈΡΠ°ΡΡ ΡΡΠΎΡ Π°Π±Π·Π°Ρ Π΄ΠΎ ΠΊΠΎΠ½ΡΠ°. ΠΠ»Π°Π²Π½ΡΠΌ Π½Π΅Π΄ΠΎΡΡΠ°ΡΠΊΠΎΠΌ *mypyc* ΠΏΠΎΠΊΠ° ΠΎΡΡΠ°Π΅ΡΡΡ ΡΡΠ°Π±ΠΈΠ»ΡΠ½ΠΎΡΡΡ: ΠΎΠ½ Π²ΡΠ΅ Π΅ΡΠ΅ Π² Π°Π»ΡΡΠ΅, ΡΠΎΡΠ½Π΅Π΅, ΡΠ΅ΠΉΡΠ°Ρ ΡΡΠΎ Π²ΠΎΠΎΠ±ΡΠ΅ Π½Π΅ ΡΠ°ΠΌΠΎΡΡΠΎΡΡΠ΅Π»ΡΠ½ΡΠΉ ΠΏΡΠΎΠ΅ΠΊΡ, Π° ΡΠ°ΡΡΡ *mypy*. Π‘ΠΎΠ±ΡΡΠ²Π΅Π½Π½ΠΎ ΠΎΠ½ ΠΈ ΡΠΎΠ·Π΄Π°Π²Π°Π»ΡΡ ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΠΎ ΠΏΠΎΠ΄ Π·Π°Π΄Π°ΡΡ ΡΠ²Π΅Π»ΠΈΡΠ΅Π½ΠΈΡ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ *mypy* ΠΈ Π΄Π»Ρ ΡΡΠΎΠΉ ΡΠ΅Π»ΠΈ ΠΎΠ½ ΡΠΆΠ΅ **Π±ΠΎΠ»Π΅Π΅ Π³ΠΎΠ΄Π° ΠΊΠ°ΠΊ ΡΡΠ°Π±ΠΈΠ»Π΅Π½**. ΠΠΎ ΠΊΠ°ΠΊ ΠΎΠ±ΡΠ΅Π΅ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ ΠΏΠΎ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ Π»ΡΠ±ΠΎΠ³ΠΎ python-ΠΊΠΎΠ΄Π°, ΠΎΠ½ Π΅ΡΠ΅ ΡΡΡΠΎΠ²Π°Ρ, ΠΎ ΡΠ΅ΠΌ Π°Π²ΡΠΎΡΡ ΠΏΡΠ΅Π΄ΡΠΏΡΠ΅ΠΆΠ΄Π°ΡΡ Π½Π° ΡΡΡΠ°Π½ΠΈΡΠ΅ ΠΏΡΠΎΠ΅ΠΊΡΠ°.
Π’Π°ΠΊΠΆΠ΅ ΡΡΡΠ΅ΡΡΠ²ΡΡΡ ΠΏΡΠΈΠ½ΡΠΈΠΏΠΈΠ°Π»ΡΠ½ΡΠ΅ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΡ, Π½Π°ΠΊΠ»Π°Π΄ΡΠ²Π°Π΅ΠΌΡΠ΅ Π½Π° ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΡΠ΅ΠΌΡΠΉ ΠΊΠΎΠ΄ ΠΈΠ»ΠΈ Π½Π° ΠΊΠΎΠ΄, Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΡΡΡΠΈΠΉ ΡΠΎ ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠΎΠ²Π°Π½Π½ΡΠΌ:
- ΠΡΠΈΠ½ΡΠ΄ΠΈΡΠ΅Π»ΡΠ½Π°Ρ ΠΏΡΠΎΠ²Π΅ΡΠΊΠ° ΡΠΈΠΏΠΎΠ² Π² ΡΠ°Π½ΡΠ°ΠΉΠΌΠ΅;
- Π ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΡΠ΅ΠΌΠΎΠΌ ΠΊΠΎΠ΄Π΅ Π·Π°ΠΏΡΠ΅ΡΠ°Π΅ΡΡΡ monkey patching;
- Mypy Ρ
ΡΠ°Π½ΠΈΡ ΠΊΠ»Π°ΡΡΡ Π² Π‘ ΡΡΡΡΠΊΡΡΡΠ°Ρ
Π΄Π»Ρ ΡΠ²Π΅Π»ΠΈΡΠ΅Π½ΠΈΡ ΡΠΊΠΎΡΠΎΡΡΠΈ Π΄ΠΎΡΡΡΠΏΠ° ΠΊ Π°ΡΡΠΈΠ±ΡΡΠ°ΠΌ, Π½ΠΎ ΡΡΠΎ ΠΏΡΠΈΠ²ΠΎΠ΄ΠΈΡ ΠΊ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ°ΠΌ ΡΠΎΠ²ΠΌΠ΅ΡΡΠΈΠΌΠΎΡΡΠΈ.
ΠΡΠΈ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΡ Π½ΠΎΡΡΡ **ΠΏΡΠΈΠ½ΡΠΈΠΏΠΈΠ°Π»ΡΠ½ΡΠΉ** Ρ
Π°ΡΠ°ΠΊΡΠ΅Ρ ΠΈ ΡΠ²Π»ΡΡΡΡΡ ΡΠ»Π΅Π΄ΡΡΠ²ΠΈΠ΅ΠΌ Π°ΡΡ
ΠΈΡΠ΅ΠΊΡΡΡΡ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠ°. ΠΠΎ ΠΈΠ· Π½ΠΈΡ
ΠΏΡΠΎΠΈΡΡΠ΅ΠΊΠ°ΡΡ Π΄ΡΡΠ³ΠΈΠ΅ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΡ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ ΠΌΠΎΠ΄ΡΠ»Ρ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΠΎΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ abc. ΠΠΎΠΌΠΈΠΌΠΎ ΡΡΠΎΠ³ΠΎ, Π΅ΡΡΡ Π±ΠΎΠ»ΡΡΠ°Ρ ΠΏΠΎΡΡΠΈΡ Π½Π΅Π΄ΠΎΡΠ°Π±ΠΎΡΠΎΠΊ ΠΈ Π±Π°Π³ΠΎΠ². Π§Π°ΡΠ΅ Π²ΡΠ΅Π³ΠΎ ΠΎΠ½ΠΈ ΠΏΡΠΈΠ²ΠΎΠ΄ΡΡ ΠΊ ΡΠΎΠΌΡ, ΡΡΠΎ ΠΊΠΎΠ΄ *gcc* ΠΎΡΠΊΠ°Π·ΡΠ²Π°Π΅ΡΡΡ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠΎΠ²Π°ΡΡ ΠΏΠΎΠ»ΡΡΠ΅Π½Π½ΡΠΉ Π‘ ΠΊΠΎΠ΄, ΠΏΡΠΈ ΡΡΠΎΠΌ, ΡΡΠΎΠ±Ρ ΠΏΠΎΠ½ΡΡΡ Π½Π°ΡΡΠΎΡΡΡΡ ΠΏΡΠΈΡΠΈΠ½Ρ ΠΎΡΠΈΠ±ΠΊΠΈ, ΠΏΡΠΈΡ
ΠΎΠ΄ΠΈΡΡΡ ΠΏΡΠΎΠΊΡΡΡΠΈΠ²Π°ΡΡ Π² Π³ΠΎΠ»ΠΎΠ²Π΅ Π½Π΅ΠΏΡΠΎΡΡΡΡ ΠΏΡΠΎΡΠ΅Π΄ΡΡΡ ΡΠ΅Π²Π΅ΡΡ ΠΈΠ½ΠΆΠΈΠ½ΠΈΡΠΈΠ½Π³Π°. ΠΠΎΠΊΠ° ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ ΡΠ°ΠΊΠΎΠ², ΡΡΠΎ ΠΏΡΠΈ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈΠ· ΠΌΠΎΠΈΡ
ΠΏΡΠΎΠ΅ΠΊΡΠΎΠ², Π±Π΅Π· ΠΏΡΠΎΠ±Π»Π΅ΠΌ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠΎΠ²Π°Π»ΠΎΡΡ ΠΏΡΠΈΠΌΠ΅ΡΠ½ΠΎ **20 % ΠΌΠΎΠ΄ΡΠ»Π΅ΠΉ**, Π·Π°ΡΠΎ ΠΊΠ°ΠΊΠΈΡ
Π»ΠΈΠ±ΠΎ ΠΏΡΠΎΠ±Π»Π΅ΠΌ ΠΏΡΠΈ ΡΠ°Π±ΠΎΡΠ΅ Ρ ΡΠΆΠ΅ ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠΎΠ²Π°Π½Π½ΡΠΌΠΈ ΠΌΠΎΠ΄ΡΠ»ΡΠΌΠΈ Ρ Π½Π΅ Π·Π°ΠΌΠ΅ΡΠΈΠ».
Π’Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅, Π±ΠΎΠ»ΡΡΠ°Ρ ΡΠ°ΡΡΡ ΡΠ»ΡΡΡΠ΅Π½ΠΈΠΉ Π² ΠΈΡ
*Roadmap* Π·Π°ΠΊΡΡΡΠ°, ΠΈ ΠΏΡΠΎΠ΅ΠΊΡ Π³ΠΎΡΠΎΠ²ΠΈΡΡΡ ΠΊ ΠΏΡΠ±Π»ΠΈΡΠ½ΠΎΠΌΡ [ΡΠ΅Π»ΠΈΠ·Ρ](https://github.com/mypyc/mypyc/issues/780).
## Nuitka
Π£ΠΆΠ΅ Π² ΠΏΡΠΎΡΠ΅ΡΡΠ΅ ΡΠ°Π±ΠΎΡΡ Π½Π°Π΄ ΡΡΠ°ΡΡΠ΅ΠΉ, Ρ ΡΠ·Π½Π°Π» ΠΏΡΠΎ Π΅ΡΠ΅ ΠΎΠ΄ΠΈΠ½ ΠΏΡΠΎΠ΅ΠΊΡ Ρ Π°Π½Π°Π»ΠΎΠ³ΠΈΡΠ½ΡΠΌΠΈ ΡΠ΅Π»ΡΠΌΠΈ. ΠΠ΅Ρ
Π°Π½ΠΈΠ·ΠΌ ΡΠ°Π±ΠΎΡΡ [Nuitka](https://nuitka.net/) ΡΠΈΠ»ΡΠ½ΠΎ Π½Π°ΠΏΠΎΠΌΠΈΠ½Π°Π΅Ρ ΠΎΠΏΠΈΡΠ°Π½Π½ΡΠΉ Π²ΡΡΠ΅. Π Π°Π·Π½ΠΈΡΠ° Π·Π°ΠΊΠ»ΡΡΠ°Π΅ΡΡΡ Π² ΡΠΎΠΌ, ΡΡΠΎ *Nuitka* ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΡΠ΅Ρ Python ΠΌΠΎΠ΄ΡΠ»Ρ Π² Π‘++ ΠΊΠΎΠ΄, ΠΊΠΎΡΠΎΡΡΠΉ ΡΠ°ΠΊΠΆΠ΅ ΡΠΎΠ±ΠΈΡΠ°Π΅ΡΡΡ Π² *Π‘Python Extension*. ΠΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΠΎ ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΡΠΎΠ±ΡΠ°ΡΡ Π²Π΅ΡΡ ΠΏΡΠΎΠ΅ΠΊΡ Π² **ΠΎΠ΄ΠΈΠ½ ΠΈΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΡΠΉ ΡΠ°ΠΉΠ»**, ΡΠΎΠ³Π΄Π° ΡΠΆΠ΅ ΡΠ°ΠΌ *CPython* ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ°Π΅ΡΡΡ ΠΊ ΠΏΡΠΎΠ΅ΠΊΡΡ ΠΊΠ°ΠΊ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠ°Ρ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° *libpython*.
*Nuitka* ΠΏΠΎΠΊΠ° Π½Π΅ ΡΡΠΈΡΡΠ²Π°Π΅Ρ Π°Π½Π½ΠΎΡΠ°ΡΠΈΡ ΡΠΈΠΏΠΎΠ², ΠΏΠΎΡΡΠΎΠΌΡ ΡΠ΅Π·ΡΠ»ΡΡΠΈΡΡΡΡΠΈΠΉ ΠΊΠΎΠ΄ ΠΈ ΡΠΊΠΎΡΠΎΡΡΡ ΡΠ°Π±ΠΎΡΡ Π½Π΅ Π·Π°Π²ΠΈΡΡΡ ΠΎΡ Π½Π°Π»ΠΈΡΠΈΡ Π°Π½Π½ΠΎΡΠ°ΡΠΈΠΉ. ΠΠΎΠ»ΡΡΠ΅Π½Π½Π°Ρ ΠΆΠ΅ ΡΠΊΠΎΡΠΎΡΡΡ Π² ΠΌΠΎΠ΅ΠΌ ΡΠ΅ΡΡΠ΅ **ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΠ΅Ρ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΡ mypy** Π½Π° Π½Π΅ Π°Π½Π½ΠΎΡΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠΌ ΠΊΠΎΠ΄Π΅.
## ΠΠ°Π²Π΅ΡΡΠ΅Π½ΠΈΠ΅
ΠΠ΅Π΄Π°Π²Π½ΠΎ ΠΎΠ΄ΠΈΠ½ ΠΌΠΎΠΉ ΠΊΠΎΠ»Π»Π΅Π³Π° Π²ΡΡΠΊΠ°Π·Π°Π» ΠΌΠ½Π΅Π½ΠΈΠ΅, ΡΡΠΎ *mypy* **ΡΠΈΠ»ΡΠ½ΠΎ ΡΡΠ»ΠΎΠΆΠ½ΡΠ΅Ρ** Π΅ΠΌΡ ΠΆΠΈΠ·Π½Ρ: ΠΈΠ· ΡΠ΅ΠΊΡΡΠ° ΠΎΡΠΈΠ±ΠΎΠΊ Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ½ΡΡΡ, βΡΠ΅Π³ΠΎ ΠΎΠ½ ΠΎΡ ΠΌΠ΅Π½Ρ Ρ
ΠΎΡΠ΅Ρβ, Π° Π°Π½Π°Π»ΠΈΠ·Π°ΡΠΎΡ ΠΈΠ· *PyCharm* Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ Π»ΡΡΡΠ΅. Π’Π΅ΠΏΠ΅ΡΡ Ρ ΠΏΠΎΠ½ΠΈΠΌΠ°Ρ, ΡΡΠΎ ΠΎΠ½ Π½Π΅Π΄ΠΎΠΎΡΠ΅Π½ΠΈΠ²Π°Π΅Ρ *mypy*. Π’Π°ΠΊ ΠΊΠ°ΠΊ ΠΎΠ½ **Π½Π°ΠΌΠ½ΠΎΠ³ΠΎ Π±ΠΎΠ»ΡΡΠ΅Π΅, ΡΠ΅ΠΌ ΠΏΡΠΎΡΡΠΎ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈΠΉ Π°Π½Π°Π»ΠΈΠ·Π°ΡΠΎΡ**. ΠΠΎ ΡΡΡΠΈ ΠΎΠ½ ΡΠ΅Π°Π»ΠΈΠ·ΡΠ΅Ρ ΠΏΠΎΠ΄ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ ΡΠ·ΡΠΊΠ°, ΠΏΠΎΡΠ΅Π½ΡΠΈΠ°Π» ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ Π² ΠΏΠ»Π°Π½Π΅ ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΠΈ ΡΠΈΠ»ΡΠ½ΠΎ ΠΏΡΠ΅Π²ΠΎΡΡ
ΠΎΠ΄ΠΈΡ ΠΎΠ±ΡΡΠ½ΡΠΉ python. ΠΠΎΡΡΠΎΠΌΡ Π²ΡΡΡΠ°Π½ΠΈΠ²Π°Π½ΠΈΠ΅ *mypy* Π² ΠΏΠ°ΠΉΠΏΠ»Π°ΠΉΠ½ ΠΏΡΠΎΠ΅ΠΊΡΠ° β ΠΈΠ½Π²Π΅ΡΡΠΈΡΠΈΡ Π½Π΅ ΡΠΎΠ»ΡΠΊΠΎ Π² ΠΏΠΎΠΈΡΠΊ ΠΎΡΠΈΠ±ΠΎΠΊ, Π½ΠΎ ΠΈ **Π±ΡΠ΄ΡΡΠΈΠΉ ΠΏΠ΅ΡΡΠΎΠΌΠ°Π½Ρ** ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ. ΠΠ½Π΅ ΠΎΡΠ΅Π½Ρ ΠΏΠΎΠ½ΡΠ°Π²ΠΈΠ»ΠΎΡΡ, ΡΡΠΎ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΠ΅ Ρ *CPython* ΠΎΡΡΡΠ΅ΡΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠ΅ΡΠ΅Π· ΠΌΠ΅Ρ
Π°Π½ΠΈΠ·ΠΌ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΠΉ ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠ°ΡΠΎΡΠ°, Π²Π΅Π΄Ρ ΡΡΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΡΠ΄Π΅Π»Π°ΡΡ Π²ΡΠ±ΠΎΡΠΎΡΠ½ΡΡ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΡ Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ Π½Π°Π³ΡΡΠΆΠ΅Π½Π½ΡΡ
ΠΌΠΎΠ΄ΡΠ»Π΅ΠΉ, ΠΎΡΡΠ°Π²ΠΈΠ² Π±ΠΎΠ»ΡΡΡΡ ΡΠ°ΡΡΡ ΠΊΠΎΠ΄Π° Π±Π΅Π· ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ. Π’Π°ΠΊΠΎΠΉ ΠΏΡΡΡ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ΅ΡΡΡ ΠΌΠ½Π΅ **Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΡΠΌ** (ΡΡΠΈΡΡΠ²Π°Ρ, ΡΡΠΎ *mypyc* Π΄ΠΎ ΡΠΈΡ
ΠΏΠΎΡ Π² Π°Π»ΡΡΠ΅). ΠΠΎΠ½Π΅ΡΠ½ΠΎ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π»ΠΈ *mypyc* Π½Π° ΠΏΡΠΎΠ΄Π°ΠΊΡΠ΅Π½Π΅, ΡΠ΅ΡΠ°ΡΡ Π²Π°ΠΌ, Π½ΠΎ Π΅ΡΠ»ΠΈ Π²Ρ ΡΠΆΠ΅ ΡΠΏΠ΅ΡΠ»ΠΈΡΡ Π² ΠΏΠΎΡΠΎΠ»ΠΎΠΊ ΠΏΠΎ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ ΠΈ ΠΏΠΎΠ΄ΡΠΌΡΠ²Π°Π΅ΡΠ΅ ΠΎ ΡΠΎΠΌ, ΡΡΠΎΠ±Ρ ΠΏΠ΅ΡΠ΅ΠΏΠΈΡΠ°ΡΡ ΠΊΠ°ΠΊΠΈΠ΅-ΡΠΎ ΡΠ°ΡΡΠΈ Π½Π° Π½ΠΈΠ·ΠΊΠΎΡΡΠΎΠ²Π½Π΅Π²ΡΠ΅ ΡΠ·ΡΠΊΠΈ, ΡΠΎ ΡΡΠΎΠΈΡ ΠΏΠΎΠΏΡΠΎΠ±ΠΎΠ²Π°ΡΡ Π·Π°ΠΏΡΡΡΠΈΡΡ *mypyc*, ΡΠ΅ΠΌ Π±ΠΎΠ»Π΅Π΅, ΡΡΠΎ ΡΠ΄Π΅Π»Π°ΡΡ ΡΡΠΎ ΠΏΡΠΎΡΡΠΎ, Π΅ΡΠ»ΠΈ Π²Ρ ΡΠΆΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΠ΅ mypy.
## P.S.
ΠΠ°Π΄Π΅ΡΡΡ, Π²Π°ΠΌ Π±ΡΠ»ΠΎ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ½ΠΎ ΡΠ·Π½Π°ΡΡ ΠΎ Π½ΠΎΠ²ΠΎΠΌ ΡΠΏΠΎΡΠΎΠ±Π΅ ΠΏΠΎΠ²ΡΡΠ΅Π½ΠΈΡ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ python, Π° ΡΠ°ΠΊΠΆΠ΅ Π³Π»ΡΠ±ΠΆΠ΅ ΡΠ°Π·ΠΎΠ±ΡΠ°ΡΡΡΡ Π² ΠΌΠ΅Ρ
Π°Π½ΠΈΠ·ΠΌΠ΅ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΈ ΡΠΈΠΏΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°. ΠΡΠ»ΠΈ ΡΠ΅ΠΌΠ° ΠΎΠΊΠ°ΠΆΠ΅ΡΡΡ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ½ΠΎΠΉ, ΡΠΎ Π² ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΉ ΡΡΠ°ΡΡΠ΅ ΠΏΠ»Π°Π½ΠΈΡΡΡ Π±ΠΎΠ»ΡΡΠ΅ ΡΠ°ΡΡΠΊΠ°Π·Π°ΡΡ ΠΏΡΠΎ *mypyc*, Π΅Π³ΠΎ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΡ ΠΈ ΡΠ°ΡΡΡΠ΅ ΠΎΡΠΈΠ±ΠΊΠΈ, Π° ΡΠ°ΠΊΠΆΠ΅, ΠΊΠ°ΠΊ ΠΈΡ
ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ±ΠΎΠΉΡΠΈ.
## UPD
Π ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΡΡ
ΠΏΠΎΠ΄ΡΠΊΠ°Π·Π°Π»ΠΈ, ΠΎΠ± Π΅ΡΠ΅ ΠΎΠ΄Π½ΠΎΠΌ python ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠ΅ - *Cython*, ΠΎΠΊΠ°Π·ΡΠ²Π°Π΅ΡΡΡ ΡΠ΅ΠΏΠ΅ΡΡ ΠΎΠ½ ΡΠΌΠ΅Π΅Ρ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠΎΠ²Π°ΡΡ python ΠΊΠΎΠ΄ Π½Π°ΠΏΡΡΠΌΡΡ (ΠΌΠΈΠ½ΡΡ ΡΡΡΠ½ΡΡ ΡΠ°Π·Ρ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΡ ΠΊΠΎΠ΄Π° Π² *cython*\-ΠΊΠΎΠ΄). Π‘ΡΠ΄Ρ ΠΏΠΎ Π·Π°ΠΌΠ΅ΡΠ°ΠΌ cython ΠΏΠΎΠΊΠ° [Π½Π΅ ΡΡΠΈΡΡΠ²Π°Ρ](https://github.com/cython/cython/issues/2587) Π°Π½Π½ΠΎΡΠ°ΡΠΈΡ ΡΠΈΠΏΠΎΠ², Π½ΠΎ Π²ΡΠ΅ΠΌΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ (*real 1.82*) ΠΎΠΊΠ°Π·Π°Π»ΠΎΡΡ ΠΏΠΎΡΠ΅ΡΠ΅Π΄ΠΈΠ½Π΅ ΠΌΠ΅ΠΆΠ΄Ρ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠΎΠΌ mypyc Π½Π° Π°Π½Π½ΠΎΡΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠΌ ΠΈ Π½Π΅ Π°Π½Π½ΠΎΡΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠΌ ΠΊΠΎΠ΄Π°. ΠΠΎ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ Π΅Π΅ Π΄ΠΎΠ±Π°Π²ΡΡ Π² Π±ΡΠ΄ΡΡΠ΅ΠΌ. |
| Shard | 134 (laksa) |
| Root Hash | 14843476518697139734 |
| Unparsed URL | com,habr!/ru/companies/exness/articles/542106/ s443 |