βΉοΈ 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 | 2.8 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://www.pvsm.ru/python/361564 |
| Last Crawled | 2026-01-13 03:40:26 (2 months ago) |
| First Indexed | 2021-02-13 20:35:20 (5 years ago) |
| HTTP Status Code | 200 |
| Meta Title | ΠΠ°ΠΊ ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠΎΠ²Π°ΡΡ Python |
| Meta Description | ΠΡΠΈΠ²Π΅Ρ, Π₯Π°Π±Ρ!Π― Ρ ΠΎΡΡ ΡΠ°ΡΡΠΊΠ°Π·Π°ΡΡ ΠΎΠ± ΡΠ΄ΠΈΠ²ΠΈΡΠ΅Π»ΡΠ½ΠΎΠΌ ΡΠΎΠ±ΡΡΠΈΠΈ, ΠΎ ΠΊΠΎΡΠΎΡΠΎΠΌ Ρ ΡΠ·Π½Π°Π» ΠΏΠ°ΡΡ ΠΌΠ΅ΡΡΡΠ΅Π² |
| 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 Π½Π° Π°Π½Π½ΠΎΡΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠΌ ΠΈ Π½Π΅ Π°Π½Π½ΠΎΡΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠΌ ΠΊΠΎΠ΄Π°. ΠΠΎ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ Π΅Π΅ Π΄ΠΎΠ±Π°Π²ΡΡ Π² Π±ΡΠ΄ΡΡΠ΅ΠΌ.
ΠΠ²ΡΠΎΡ: EΠ²Π³Π΅Π½ΠΈΠΉ ΠΡΠ΅Π²
ΠΡΡΠΎΡΠ½ΠΈΠΊ |
| Markdown | - [ΠΠ»Π°Π²Π½Π°Ρ](https://www.pvsm.ru/)
- [ΠΡΡ
ΠΈΠ² Π½ΠΎΠ²ΠΎΡΡΠ΅ΠΉ](https://www.pvsm.ru/site-archive)
- [Android](https://www.pvsm.ru/android-os-news)
- [Google](https://www.pvsm.ru/google-company)
- [Apple](https://www.pvsm.ru/apple-company)
- [Microsoft](https://www.pvsm.ru/microsoft-company)
- [ΠΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΎΠ½Π½Π°Ρ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡΡ](https://www.pvsm.ru/information-security-news)
- [ΠΠ΅Π± β ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ°](https://www.pvsm.ru/web-development)
***
[](https://www.pvsm.ru/ "PVSM.RU - ΠΠΎΠ²ΠΎΡΡΠΈ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΎΠ½Π½ΡΡ
ΡΠ΅Ρ
Π½ΠΎΠ»ΠΎΠ³ΠΈΠΉ")
- - [ΠΠΎΠ²ΠΎΡΡΠΈ](https://www.pvsm.ru/cat/news "ΠΠΎΠ²ΠΎΡΡΠΈ (127532)")
- [ΠΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅](https://www.pvsm.ru/cat/programmirovanie "ΠΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ (10922)")
- [ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΎΠ½Π½Π°Ρ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡΡ](https://www.pvsm.ru/cat/informatsionnaya-bezopasnost "ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΎΠ½Π½Π°Ρ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡΡ (9485)")
- [ΠΡΠΎ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ½ΠΎ](https://www.pvsm.ru/cat/e-to-interesno "ΠΡΠΎ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ½ΠΎ (8856)")
- [ΠΠ°ΡΡΠ½ΠΎ-ΠΏΠΎΠΏΡΠ»ΡΡΠ½ΠΎΠ΅](https://www.pvsm.ru/cat/nauchno-populyarnoe "ΠΠ°ΡΡΠ½ΠΎ-ΠΏΠΎΠΏΡΠ»ΡΡΠ½ΠΎΠ΅ (8267)")
- [ΠΠ°Π΄ΠΆΠ΅ΡΡ ΠΈ ΡΡΡΡΠΎΠΉΡΡΠ²Π° Π΄Π»Ρ Π³ΠΈΠΊΠΎΠ²](https://www.pvsm.ru/cat/gadzhety-i-ustrojstva-dlya-gikov "ΠΠ°Π΄ΠΆΠ΅ΡΡ ΠΈ ΡΡΡΡΠΎΠΉΡΡΠ²Π° Π΄Π»Ρ Π³ΠΈΠΊΠΎΠ² (8035)")
- [Π’Π΅ΠΊΡΡΠΊΠ°](https://www.pvsm.ru/cat/tekuchka "Π’Π΅ΠΊΡΡΠΊΠ° (7204)")
- [javascript](https://www.pvsm.ru/cat/javascript "javascript (5926)")
- [diy ΠΈΠ»ΠΈ ΡΠ΄Π΅Π»Π°ΠΉ ΡΠ°ΠΌ](https://www.pvsm.ru/cat/diy-ili-sdelaj-sam "diy ΠΈΠ»ΠΈ ΡΠ΄Π΅Π»Π°ΠΉ ΡΠ°ΠΌ (4778)")
- [Π³Π°Π΄ΠΆΠ΅ΡΡ](https://www.pvsm.ru/cat/gadzhety "Π³Π°Π΄ΠΆΠ΅ΡΡ (4430)")
- [android](https://www.pvsm.ru/cat/android "android (4350)")
- [ΡΠΈΡΡΠ΅ΠΌΠ½ΠΎΠ΅ Π°Π΄ΠΌΠΈΠ½ΠΈΡΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅](https://www.pvsm.ru/cat/sistemnoe-administrirovanie "ΡΠΈΡΡΠ΅ΠΌΠ½ΠΎΠ΅ Π°Π΄ΠΌΠΈΠ½ΠΈΡΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ (4189)")
- [ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΠΏΡΠΎΠ΅ΠΊΡΠ°ΠΌΠΈ](https://www.pvsm.ru/cat/upravlenie-proektami "ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΠΏΡΠΎΠ΅ΠΊΡΠ°ΠΌΠΈ (4180)")
- [ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ°](https://www.pvsm.ru/cat/razrabotka "ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ° (3991)")
- [python](https://www.pvsm.ru/cat/python "python (3891)")
- [Π±ΡΠ΄ΡΡΠ΅Π΅ Π·Π΄Π΅ΡΡ](https://www.pvsm.ru/cat/budushhee-zdes "Π±ΡΠ΄ΡΡΠ΅Π΅ Π·Π΄Π΅ΡΡ (3874)")
- [open source](https://www.pvsm.ru/cat/open-source "open source (3794)")
- [ΠΈΡΠΊΡΡΡΡΠ²Π΅Π½Π½ΡΠΉ ΠΈΠ½ΡΠ΅Π»Π»Π΅ΠΊΡ](https://www.pvsm.ru/cat/iskusstvenny-j-intellekt "ΠΈΡΠΊΡΡΡΡΠ²Π΅Π½Π½ΡΠΉ ΠΈΠ½ΡΠ΅Π»Π»Π΅ΠΊΡ (3650)")
- [ΠΠ΅Π±-ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ°](https://www.pvsm.ru/cat/veb-razrabotka "ΠΠ΅Π±-ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ° (3648)")
- [ΠΊΠΎΡΠΌΠΎΠ½Π°Π²ΡΠΈΠΊΠ°](https://www.pvsm.ru/cat/kosmonavtika "ΠΊΠΎΡΠΌΠΎΠ½Π°Π²ΡΠΈΠΊΠ° (3580)")
- [Π Π°Π·ΡΠ°Π±ΠΎΡΠΊΠ° Π²Π΅Π±-ΡΠ°ΠΉΡΠΎΠ²](https://www.pvsm.ru/cat/razrabotka-veb-sajtov "Π Π°Π·ΡΠ°Π±ΠΎΡΠΊΠ° Π²Π΅Π±-ΡΠ°ΠΉΡΠΎΠ² (3471)")
- [Google](https://www.pvsm.ru/cat/google "Google (3446)")
- [ΠΠ΅Π»Π΅Π·ΠΎ](https://www.pvsm.ru/cat/zhelezo "ΠΠ΅Π»Π΅Π·ΠΎ (3385)")
- [linux](https://www.pvsm.ru/cat/linux "linux (3263)")
- [ΠΠ»Π³ΠΎΡΠΈΡΠΌΡ](https://www.pvsm.ru/cat/algoritmy "ΠΠ»Π³ΠΎΡΠΈΡΠΌΡ (3236)")
- ## ΠΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ
- [ΠΡΡΡΠΈΠΉ Ρ
ΠΎΡΡΠΈΠ½Π³ ΡΠ°ΠΉΡΠΎΠ² - REG.RU](https://reg.ru/?rlink=reflink-717)
- ΠΡΠΎΠΌΠΎΠΊΠΎΠ΄ 5% ΡΠΊΠΈΠ΄ΠΊΠΈ Π½Π° ΡΡΠ»ΡΠ³ΠΈ
- [39CC-C72F-6342-560A](https://reg.ru/?rlink=reflink-717)
- ## ΠΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ
- Ostrovityanin ΠΊ Π·Π°ΠΏΠΈΡΠΈ [Π£Π½ΠΈΠΊΠ°Π»ΡΠ½ΡΠΉ ΠΈΠ³ΡΠΎΠ²ΠΎΠΉ ΡΠ΅Π»Π΅ΡΠΎΠ½ Ρ Π΄Π²ΡΠΌΡ ΠΏΡΠΎΡΠ΅ΡΡΠΎΡΠ°ΠΌΠΈ Π·Π° 2 000 ΡΡΠ±Π»Π΅ΠΉ β ΡΠ°Π·Π±ΠΈΡΠ°Π΅ΠΌ ΠΏΠ»ΠΎΠ΄ ΠΈΠ½ΠΆΠ΅Π½Π΅ΡΠ½ΠΎΠ³ΠΎ Π³Π΅Π½ΠΈΡ ΠΈΠ· ΠΠΈΡΠ°Ρ](https://www.pvsm.ru/gadzhety/406760#comment-106257)
- ΠΠ΅Π½ΠΈΡ ΠΊ Π·Π°ΠΏΠΈΡΠΈ [ΠΡΠΎΠ΄Π°ΠΆΠΈ ΠΌΠ°ΡΠΈΠ½ ΠΏΡΠ΅ΠΌΠΈΡΠΌ-ΠΊΠ»Π°ΡΡΠ° Π² Π ΠΎΡΡΠΈΠΈ Π²ΡΡΠΎΡΠ»ΠΈ Π½Π° 47%: BMW Π΅Π΄Π²Π° Π½Π΅ ΡΡΠ°Π» Π»ΠΈΠ΄Π΅ΡΠΎΠΌ ΡΠ΅Π³ΠΌΠ΅Π½ΡΠ°](https://www.pvsm.ru/news/440131#comment-106254)
- Multychell ΠΊ Π·Π°ΠΏΠΈΡΠΈ [ΠΠΈΡΠ΅ΠΌ ΠΈΠ³ΡΡ Π½Π° LWJGL](https://www.pvsm.ru/java/297242#comment-106253)
- ΠΠ³ΠΎΡ ΠΊ Π·Π°ΠΏΠΈΡΠΈ [Π ΠΠΈΡΠ°Π΅ Π½Π°Π·Π²Π°Π»ΠΈ Π»ΡΡΡΠΈΠ΅ Π³ΠΈΠ±ΡΠΈΠ΄Ρ ΠΈ ΡΠ»Π΅ΠΊΡΡΠΎΠΌΠΎΠ±ΠΈΠ»ΠΈ 2025 Π³ΠΎΠ΄Π°. Π Π»ΠΈΠ΄Π΅ΡΠ°Ρ
β Aito M9 ΠΈ Zeekr 001, ΠΏΠΎΡΠ»Π΅Π΄Π½Π΅Π΅ ΠΌΠ΅ΡΡΠΎ β Ρ Voyah Free](https://www.pvsm.ru/news/438673#comment-106249)
- dattly ΠΊ Π·Π°ΠΏΠΈΡΠΈ [Π‘Π°ΠΌΠΌΠ°ΡΠΈ ΠΊΠ½ΠΈΠ³ΠΈ AI Value Creators, Π³Π»Π°Π²Π° 1](https://www.pvsm.ru/ai/419770#comment-106241)
- ΠΊΡΡΡΠΎ ΠΊ Π·Π°ΠΏΠΈΡΠΈ [Π£Π½ΠΈΠΊΠ°Π»ΡΠ½ΡΠΉ ΠΈΠ³ΡΠΎΠ²ΠΎΠΉ ΡΠ΅Π»Π΅ΡΠΎΠ½ Ρ Π΄Π²ΡΠΌΡ ΠΏΡΠΎΡΠ΅ΡΡΠΎΡΠ°ΠΌΠΈ Π·Π° 2 000 ΡΡΠ±Π»Π΅ΠΉ β ΡΠ°Π·Π±ΠΈΡΠ°Π΅ΠΌ ΠΏΠ»ΠΎΠ΄ ΠΈΠ½ΠΆΠ΅Π½Π΅ΡΠ½ΠΎΠ³ΠΎ Π³Π΅Π½ΠΈΡ ΠΈΠ· ΠΠΈΡΠ°Ρ](https://www.pvsm.ru/gadzhety/406760#comment-106240)
- ΠΠ½ΡΠΎΠ½ ΠΊ Π·Π°ΠΏΠΈΡΠΈ [Tank, ΠΊΠΎΡΠΎΡΡΠΉ Π»ΠΈΠ΄ΠΈΡΡΠ΅Ρ ΡΡΠ΅Π΄ΠΈ ΠΏΡΠ΅ΠΌΠΈΠ°Π»ΡΠ½ΡΡ
Π±ΡΠ΅Π½Π΄ΠΎΠ² Π² Π‘Π°Π½ΠΊΡ-ΠΠ΅ΡΠ΅ΡΠ±ΡΡΠ³Π΅, Π²ΠΏΠ΅ΡΠ²ΡΠ΅ Π·Π°ΠΊΡΡΠ» Π΄ΠΈΠ»Π΅ΡΡΠΊΠΈΠΉ ΡΠ΅Π½ΡΡ](https://www.pvsm.ru/news/436853#comment-106234)
- ΠΡΡΠ΅ΠΌ ΠΊ Π·Π°ΠΏΠΈΡΠΈ [ΠΠ±ΡΠΎΠ»ΡΡΠ½ΡΠΉ ΡΠ΅ΠΊΠΎΡΠ΄ Π·Π° Π²ΡΡ ΠΈΡΡΠΎΡΠΈΡ: ΠΎΠΊΡΡΠ±ΡΡ ΡΡΠ°Π» Π»ΡΡΡΠΈΠΌ ΠΌΠ΅ΡΡΡΠ΅ΠΌ Π΄Π»Ρ Π³ΠΈΠ±ΡΠΈΠ΄Π½ΡΡ
ΠΌΠ°ΡΠΈΠ½ Π² Π ΠΎΡΡΠΈΠΈ](https://www.pvsm.ru/news/436588#comment-106233)
- ΠΠ½Π°ΡΠΎΠ»ΠΈΠΉ ΠΊ Π·Π°ΠΏΠΈΡΠΈ [Π‘ΡΡΡ ΠΈΠ΄Π΅Ρ Π½Π° Π΄Π΅ΡΡΡΠΊΠΈ ΡΡΡΡΡ. Π Π ΠΎΡΡΠΈΠΈ ΡΠ΅ΠΊΠΎΡΠ΄Π½ΡΠ΅ ΠΏΡΠΎΠ΄Π°ΠΆΠΈ Π³ΠΈΠ±ΡΠΈΠ΄ΠΎΠ² ΠΈ ΡΠ»Π΅ΠΊΡΡΠΎΠΌΠΎΠ±ΠΈΠ»Π΅ΠΉ, ΡΠ°ΠΌΡΠ΅ ΠΏΠΎΠΏΡΠ»ΡΡΠ½ΡΠ΅ β Li Auto ΠΈ Zeekr](https://www.pvsm.ru/news/436760#comment-106232)
- ΠΠ»Π΅Π³ ΠΊ Π·Π°ΠΏΠΈΡΠΈ [1300 ΠΊΠΌ Π±Π΅Π· Π·Π°ΠΏΡΠ°Π²ΠΊΠΈ, Π±ΠΎΠ»Π΅Π΅ 200 ΠΊΠΌ Π±Π΅Π· Π±Π΅Π½Π·ΠΈΠ½Π°, Snapdragon 8255, ΡΡΠΈ ΡΠΊΡΠ°Π½Π° ΠΈ Π°ΡΠ΄ΠΈΠΎΡΠΈΡΡΠ΅ΠΌΠ° Boyah Sound. ΠΡΠ΅Π΄Π·Π°ΠΊΠ°Π·Ρ Π½Π° Exlantix ET5 Π² ΠΠΈΡΠ°Π΅ ΠΎΡΠΊΡΠΎΡΡ 13 Π½ΠΎΡΠ±ΡΡ](https://www.pvsm.ru/news/435756#comment-106229)
## Π Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡΠ΅ΠΌ
- [REG.RU Π½Π°Π΄Π΅ΠΆΠ½ΡΠΉ Ρ
ΠΎΡΡΠΈΠ½Π³](http://www.reg.ru/?rlink=reflink-717 "REG.RU - Π½Π°Π΄Π΅ΠΆΠ½ΡΠΉ Ρ
ΠΎΡΡΠΈΠ½Π³")
ΠΡΠΎΠΌΠΎΠΊΠΎΠ΄ Π½Π° ΡΠΊΠΈΠ΄ΠΊΡ 5% REG.RU
39CC-C72F-6342-560A
ΠΠ°Π²Π΅ΡΡ
# ΠΠ°ΠΊ ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠΎΠ²Π°ΡΡ Python
**[2021-02-12](https://www.pvsm.ru/date/2021/02/12 "ΠΠ°ΠΏΠΈΡΠΈ Π·Π° 2021-02-12")** **Π² 12:41****,** **admin**, ΡΡΠ±ΡΠΈΠΊΠΈ: [compiler](https://www.pvsm.ru/cat/compiler), [mypy](https://www.pvsm.ru/cat/mypy), [nuitka](https://www.pvsm.ru/cat/nuitka), [python](https://www.pvsm.ru/cat/python), [ΠΠ»ΠΎΠ³ ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ Exness](https://www.pvsm.ru/cat/blog-kompanii-exness), [Π²ΡΡΠΎΠΊΠ°Ρ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΡ](https://www.pvsm.ru/cat/vy-sokaya-proizvoditel-nost), [ΠΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΡ](https://www.pvsm.ru/cat/kompilyatory-2), [ΠΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅](https://www.pvsm.ru/cat/programmirovanie)

ΠΡΠΈΠ²Π΅Ρ\!
Π― Ρ
ΠΎΡΡ ΡΠ°ΡΡΠΊΠ°Π·Π°ΡΡ ΠΎΠ± ΡΠ΄ΠΈΠ²ΠΈΡΠ΅Π»ΡΠ½ΠΎΠΌ ΡΠΎΠ±ΡΡΠΈΠΈ, ΠΎ ΠΊΠΎΡΠΎΡΠΎΠΌ Ρ ΡΠ·Π½Π°Π» ΠΏΠ°ΡΡ ΠΌΠ΅ΡΡΡΠ΅Π² Π½Π°Π·Π°Π΄. ΠΠΊΠ°Π·ΡΠ²Π°Π΅ΡΡΡ, ΠΎΠ΄Π½Π° ΠΏΠΎΠΏΡΠ»ΡΡΠ½Π°Ρ 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.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**. ΠΡΠ»ΠΈ Π·Π°Π³Π»ΡΠ½ΡΡΡ Π² [ΠΊΠΎΠ΄](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.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* Π·Π°ΠΊΡΡΡΠ°, ΠΈ ΠΏΡΠΎΠ΅ΠΊΡ Π³ΠΎΡΠΎΠ²ΠΈΡΡΡ ΠΊ ΠΏΡΠ±Π»ΠΈΡΠ½ΠΎΠΌΡ [ΡΠ΅Π»ΠΈΠ·Ρ](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 Π½Π° Π°Π½Π½ΠΎΡΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠΌ ΠΈ Π½Π΅ Π°Π½Π½ΠΎΡΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠΌ ΠΊΠΎΠ΄Π°. ΠΠΎ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ Π΅Π΅ Π΄ΠΎΠ±Π°Π²ΡΡ Π² Π±ΡΠ΄ΡΡΠ΅ΠΌ.
*ΠΠ²ΡΠΎΡ: EΠ²Π³Π΅Π½ΠΈΠΉ ΠΡΠ΅Π²*
*[ΠΡΡΠΎΡΠ½ΠΈΠΊ](https://habr.com/ru/post/542106/?utm_source=habrahabr&utm_medium=rss&utm_campaign=542106 "ΠΠ°ΠΊ ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠΎΠ²Π°ΡΡ Python")*
[](https://www.pvsm.ru/python/361564/print/ "ΠΠ΅ΡΡΠΈΡ Π΄Π»Ρ ΠΏΠ΅ΡΠ°ΡΠΈ") [ΠΠ΅ΡΡΠΈΡ Π΄Π»Ρ ΠΏΠ΅ΡΠ°ΡΠΈ](https://www.pvsm.ru/python/361564/print/ "ΠΠ΅ΡΡΠΈΡ Π΄Π»Ρ ΠΏΠ΅ΡΠ°ΡΠΈ")
### Π Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΠΎΠ²Π°Π½Π½ΡΠΉ ΠΊΠΎΠ½ΡΠ΅Π½Ρ
[](https://www.pvsm.ru/python/393014)[ΠΠΎΡΠΆΠΎΠ²ΡΠΉ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡ := Π² Python](https://www.pvsm.ru/python/393014)
[](https://www.pvsm.ru/python/392164)[Π‘ΠΈΠΌΠΌΠ΅ΡΡΠΈΡΠ½Π°Ρ ΠΈΠ½Π΄Π΅ΠΊΡΠ°ΡΠΈΡ Π² Python](https://www.pvsm.ru/python/392164)
[](https://www.pvsm.ru/beautiful-soup/390285)[Π ΡΠΊΠΎΠ²ΠΎΠ΄ΡΡΠ²ΠΎ ΠΏΠΎ Π²Π΅Π±-ΡΠΊΡΠ΅ΠΉΠΏΠΈΠ½Π³Ρ Π½Π° Python](https://www.pvsm.ru/beautiful-soup/390285)
[](https://www.pvsm.ru/python/391773)[ΠΠ²ΠΎΠ»ΡΡΠΈΡ ΠΏΠΎΠ΄ΡΡΠ΅ΡΠ° Π² Python](https://www.pvsm.ru/python/391773)
[](https://www.pvsm.ru/amd/388512)[std fs Π² Rust ΠΌΠ΅Π΄Π»Π΅Π½Π½Π΅Π΅, ΡΠ΅ΠΌ Python? ΠΠ΅Ρ, ΡΡΠΎ Π°ΠΏΠΏΠ°ΡΠ°ΡΠ½ΡΠΉ Π±Π°Π³](https://www.pvsm.ru/amd/388512)
[](https://www.pvsm.ru/python/388904)[100 Π²ΠΎΠΏΡΠΎΡΠΎΠ² Π΄Π»Ρ ΠΏΠΎΠ΄Π³ΠΎΡΠΎΠ²ΠΊΠΈ ΠΊ ΡΠΎΠ±Π΅ΡΡ Python](https://www.pvsm.ru/python/388904)
[ΠΠ°ΠΆΠΌΠΈΡΠ΅, ΡΡΠΎΠ±Ρ ΠΎΡΠΌΠ΅Π½ΠΈΡΡ ΠΎΡΠ²Π΅Ρ.](https://www.pvsm.ru/python/361564#respond)
***
[](http://top.mail.ru/jump?from=2030102)
[](http://top100.rambler.ru/navi/2887880/)
[ΠΠ»Π°Π²Π½Π°Ρ](https://www.pvsm.ru/) \| [ΠΡΡ
ΠΈΠ² Π½ΠΎΠ²ΠΎΡΡΠ΅ΠΉ](https://www.pvsm.ru/site-archive "ΠΡΡ
ΠΈΠ² Π½ΠΎΠ²ΠΎΡΡΠ΅ΠΉ") \| [Android](https://www.pvsm.ru/android-os-news "Android") \| [Google](https://www.pvsm.ru/google-company "Google") \| [Apple](https://www.pvsm.ru/apple-company "Apple") \| [Microsoft](https://www.pvsm.ru/microsoft-company "Microsoft") \| [ΠΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΎΠ½Π½Π°Ρ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡΡ](https://www.pvsm.ru/information-security-news "ΠΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΎΠ½Π½Π°Ρ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡΡ") \| [ΠΠ΅Π± β ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ°](https://www.pvsm.ru/web-development "ΠΠ΅Π± β ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ°")
[ΠΡΠ±Π»ΠΈΠΊΠ°ΡΠΈΠΈ RSS](https://www.pvsm.ru/feed "RSS") \| [ΠΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ RSS](https://www.pvsm.ru/comments/feed "ΠΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ RSS")
Β© 2010-2026 PVSM.RU
ΠΡΠ΅ ΠΏΡΠ°Π²Π° Π½Π° ΠΌΠ°ΡΠ΅ΡΠΈΠ°Π»Ρ ΠΏΡΠΈΠ½Π°Π΄Π»Π΅ΠΆΠ°Ρ ΠΈΡ
Π°Π²ΡΠΎΡΠ°ΠΌ.
ΠΡΠ½ΠΎΠ²Π½ΡΠΌΠΈ ΠΌΠ°ΡΠ΅ΡΠΈΠ°Π»Π°ΠΌΠΈ ΡΠ°ΠΉΡΠ° ΡΠ²Π»ΡΡΡΡΡ
Π°ΡΡ
ΠΈΠ²Π½ΡΠ΅ ΠΊΠΎΠΏΠΈΠΈ ΠΌΠ°ΡΠ΅ΡΠΈΠ°Π»ΠΎΠ²
ΠΏΠΎ ΠΠ’ ΡΠ΅ΠΌΠ°ΡΠΈΠΊΠ΅ Π ΡΠ½Π΅ΡΠ°, Π²Π·ΡΡΡΠ΅
ΠΈΠ· ΠΎΡΠΊΡΡΡΡΡ
ΠΈ ΠΎΠ±ΡΠ΅Π΄ΠΎΡΡΡΠΏΠ½ΡΡ
ΠΈΡΡΠΎΡΠ½ΠΈΠΊΠΎΠ²
.

https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js |
| Readable Markdown | null |
| Shard | 92 (laksa) |
| Root Hash | 13201570603529966892 |
| Unparsed URL | ru,pvsm!www,/python/361564 s443 |