Выпуск компилятора языка D 2.111

ΠžΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Π½ Ρ€Π΅Π»ΠΈΠ· DMD 2.111, эталонного компилятора для языка D. Код компилятора распространяСтся ΠΏΠΎΠ΄ свободной Π»ΠΈΡ†Π΅Π½Π·ΠΈΠ΅ΠΉ BSL (Boost Software License). ΠŸΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚ΡΡ систСмы Linux, Windows, macOS ΠΈ FreeBSD.

Π―Π·Ρ‹ΠΊ D ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ ΡΡ‚Π°Ρ‚ΠΈΡ‡Π΅ΡΠΊΡƒΡŽ Ρ‚ΠΈΠΏΠΈΠ·Π°Ρ†ΠΈΡŽ, ΠΎΠ±Π»Π°Π΄Π°Π΅Ρ‚ синтаксисом, схоТим с C/C++, ΠΈ обСспСчиваСт ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΡƒΠ΅ΠΌΡ‹Ρ… языков. Π―Π·Ρ‹ΠΊ D Ρ‚Π°ΠΊΠΆΠ΅ заимствуСт Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ возмоТности динамичСских языков, ΠΏΠΎΠ»Π΅Π·Π½Ρ‹Π΅ для ΠΏΠΎΠ²Ρ‹ΡˆΠ΅Π½ΠΈΡ эффСктивности Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΈ обСспСчСния бСзопасности. НапримСр, имССтся ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ°: ассоциативных массивов, косвСнного опрСдСлСния Ρ‚ΠΈΠΏΠΎΠ², автоматичСского управлСния ΠΏΠ°ΠΌΡΡ‚ΡŒΡŽ, срСдств ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ программирования, шаблонов, ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ² для мСтапрограммирования. ΠžΠΏΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎ доступСн сборщик мусора. Π’ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°Ρ… Π½Π° языкС D ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ Π½Π° языкС C, Π° Ρ‚Π°ΠΊΠΆΠ΅ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ Π½Π° C++ ΠΈ Objective-C.

Выпуск Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ измСнСния Π·Π° Π±ΠΎΠ»Π΅Π΅ Ρ‡Π΅ΠΌ ΠΏΠΎΠ»ΡƒΠ³ΠΎΠ΄ΠΎΠ²ΠΎΠΉ ΠΏΠ΅Ρ€ΠΈΠΎΠ΄, Π½Π΅ вошСдшиС Π² Ρ€Π΅Π»ΠΈΠ· 2.110, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ скорСС являлся ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚ΠΈΡ€ΡƒΡŽΡ‰ΠΈΠΌ ΠΈ содСрТащим Ρ‚ΠΎΠ»ΡŒΠΊΠΎ исправлСния. Π‘Ρ€Π΅Π΄ΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ Π² выпускС 2.111:

  • Π”ΠΎΠ±Π°Π²Π»Π΅Π½Π° функция профилирования Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ сборки, Π²ΠΊΠ»ΡŽΡ‡Π°Π΅ΠΌΠ°Ρ Ρ‡Π΅Ρ€Π΅Π· Ρ„Π»Π°Π³ Β«-ftime-traceΒ» Π² компиляторС DMD. ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ‚ΠΎΡ€ LDC ΡƒΠΆΠ΅ ΠΎΠ±Π»Π°Π΄Π°Π» этой Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ. Π’ΠΈΠ΄Π΅ΠΎ с руководством ΠΏΠΎ использовании time-trace.
  • Π€Π»Π°Π³ компилятора Β«-iΒ» Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅Ρ‚ ΠΈ Ρ„Π°ΠΉΠ»Ρ‹ Π½Π° языкС Π‘ΠΈ.
  • Π’ ΡˆΠ°Π±Π»ΠΎΠ½Π½Ρ‹Π΅ миксины Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Π° Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ использования синтаксиса присваивания: mixin MyMixinTemplate!(Args) myName; // старый ΡΡ‚ΠΈΠ»ΡŒ mixin myName = MyMixinTemplate!(Args); // Π½ΠΎΠ²Ρ‹ΠΉ ΡΡ‚ΠΈΠ»ΡŒ
  • Для ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² Β«extern(Objective-C)Β» Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ автоматичСски Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΡŽΡ‚ΡΡ сСлСкторы, Π΄Π°ΠΆΠ΅ Ссли Π½Π΅ ΡƒΠΊΠ°Π·Π°Π½ Π°Ρ‚Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ Β«@selectorΒ»: extern(Objective-C) extern class NSObject { static NSObject alloc(); // Generates as Β«allocΒ» NSObject init(); // Generates as Β«initΒ» } extern(Objective-C) class Fox : NSObject { bool fluffy; @property bool isFluffy() => fluffy; // Β«isFluffyΒ» @property void isFluffy(bool value) { fluffy = value; } // Β«setFluffy:Β» void yip(int a) @selector(Β«bark:Β») { // Β«bark:Β» // … } void doSomething(int a, int b, int c) { // Β«doSomething:b:c:Β» // … } }
  • Π”ΠΎΠ±Π°Π²Π»Π΅Π½ΠΎ placement-Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Β«newΒ» для ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹ΠΌ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ (Π±Π΅Π· GC). struct S { float d; int i; char c; } … S s; S* p = new (s) S(3.14, 42, β€˜X’); // place new object into s
  • НовоС ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово Β«__rvalueΒ», ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰Π΅Π΅ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ move-сСмантику. Использовано для добавлСния Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅Ρ‡Π½Ρ‹Ρ… ΠΏΡ€ΠΈΠΌΠΈΡ‚ΠΈΠ²ΠΎΠ² Β«moveΒ» ΠΈ Β«forwardΒ».
  • Π”ΠΎΠ±Π°Π²Π»Π΅Π½ Ρ„Π»Π°Π³ Β«-preview=saferΒ», ΠΏΡ€ΠΈ использовании ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ всС ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ примСняСмыС Π² ΠΊΠΎΠ΄Π΅ Β«@safeΒ» Π²ΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‚ΡΡ для всСго ΠΊΠΎΠ΄Π°, ΠΏΡ€ΠΈ этом Ρ‚Ρ€ΡƒΠ΄Π½ΠΎ исправимыС части (Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ Π²Ρ‹Π·ΠΎΠ² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ Β«@systemΒ») Π±ΡƒΠ΄ΡƒΡ‚ всё Π΅Ρ‰Ρ‘ Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½Ρ‹ Π² Ρ€Π΅ΠΆΠΈΠΌΠ΅ Safer D.
  • Π£Π»ΡƒΡ‡ΡˆΠ΅Π½Π° ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° классов Π΄Π°Π½Π½Ρ‹Ρ… Β«refΒ» ΠΈ Β«auto refΒ», ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒΡΡ ΠΊ Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΌ, Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½Ρ‹Ρ… ΠΈ статичСским ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΌ. ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ Β«auto refΒ» Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡ‚ΡŒΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ вмСстС.
  • Π’ΠΊΠ»ΡŽΡ‡Ρ‘Π½ Π²Ρ‹Π²ΠΎΠ΄ ошибок для Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… возмоТностСй, ΠΈΠΌΠ΅ΡŽΡ‰ΠΈΡ… статус ΡƒΡΡ‚Π°Ρ€Π΅Π²ΡˆΠΈΡ…. Π‘Ρ€Π΅Π΄ΠΈ Π½ΠΈΡ… Π·Π°ΠΌΠ΅Π½Π° Β«deleteΒ» Π½Π° Β«destroyΒ», «проваливания» Π² ΠΌΠ½ΠΎΠ³ΠΎΠ·Π½Π°Ρ‡Π½Ρ‹Ρ… Β«caseΒ», самоинициализация ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ….
  • Π£ΠΊΠΎΡ€ΠΎΡ‡Π΅Π½Π½Ρ‹ΠΉ синтаксис для опрСдСлСния ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΈ Π² конструкторах: struct Number { int x; void vf(int); this(int x) => vf(x); this(float x) => this(cast(int) x); }
  • Π’ runtime Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Ρ‹ Windows-Π±Π°ΠΉΠ½Π΄ΠΈΠ½Π³ΠΈ ΠΊ BCrypt.
  • Π’ стандартной Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ΅ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ ΠΈΠΌΠΏΠΎΡ€Ρ‚ ODBC 4.0 ΠΈ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½Ρ‹ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Unicode, вСрсия ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ Π±Ρ‹Π»Π° ΡƒΠ²Π΅Π»ΠΈΡ‡Π΅Π½Π° Π΄ΠΎ 16.
  • Новый API для Β«std.sumtypeΒ», Π³Π΄Π΅ появились Ρ‚Ρ€ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Β«has!TΒ», Β«get!TΒ» ΠΈ Β«tryGet!TΒ».
  • Π’ ΠΏΠ°ΠΊΠ΅Ρ‚Π½ΠΎΠΌ ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€Π΅ dub исправлСна ошибка с Β«cImportPathsΒ».

Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ ряда ΠΊΡ€ΡƒΠΏΠ½Ρ‹Ρ… ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠ² Π½Π° языкС D:

Π’ области Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΈΠ³Ρ€ (GameDev) Ρ€Π°Π·Π²ΠΈΠ²Π°ΡŽΡ‚ΡΡ нСсколько Π΄Π²ΠΈΠΆΠΊΠΎΠ²: HipremeEngine β€” кросс-ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ΅Π½Π½Ρ‹ΠΉ Π΄Π²ΠΈΠΆΠΎΠΊ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΠΎΠΌΠΈΠΌΠΎ основных дСсктопных систСм Windows/Linux/macOS ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ iOS/Android/Xbox/WebAssembly/PS Vita. Π”Ρ€ΡƒΠ³ΠΎΠΉ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ β€” Dagon, ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°Π΅Ρ‚ Ρ€Π°Π·Π²ΠΈΡ‚ΠΈΠ΅ 3D-Π΄Π²ΠΈΠΆΠΊΠ° с ΠΎΠ±ΡˆΠΈΡ€Π½Ρ‹ΠΌΠΈ возмоТностями Π³Ρ€Π°Ρ„ΠΈΠΊΠΈ.

Π’ области графичСских Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ, ΠΏΠΎΠΌΠΈΠΌΠΎ OpenGL, развиваСтся ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΡƒ Ρ‚Π°ΠΊΠΈΡ… Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ ΠΊΠ°ΠΊ SDL (Π²ΠΊΠ»ΡŽΡ‡Π°Ρ 3 ΠΈ 2 вСрсии) ΠΈ Sokol. Π Π°Π±ΠΎΡ‚Π° с графичСскими изобраТСниями (decoding/encoding) развиваСтся Π² ΠΏΠ°ΠΊΠ΅Ρ‚Π΅ gamut, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΡƒΠΌΠ΅Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ со мноТСством Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΎΠ². Π•ΡΡ‚ΡŒ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° ΠΊΠ°ΠΊ классичСских ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ PNG, JPEG ΠΈ BMP, Ρ‚Π°ΠΊ ΠΈ Π±ΠΎΠ»Π΅Π΅ соврСмСнных JPEG-XL, QOI ΠΈ QOIX.

Для построСния графичСских ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΡ… интСрфСйсов (GUI) сформирована новая экосистСма Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ gID, ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‰Π°Ρ обвязки ΠΊ ΠΌΠ½ΠΎΠ³ΠΈΠΌ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°ΠΌ, основанным Π½Π° GObject, Π²ΠΊΠ»ΡŽΡ‡Π°Ρ ΠΏΠΎΠ»Π½ΡƒΡŽ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΡƒ GTK 3/4, Arrow/Parquet ΠΈ Adw. ΠŸΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ ΠΈ список входящих Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉΡ‚ΠΈ Π² Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΈ. Π’Π°ΠΊΠΆΠ΅ Π½Π°Π±ΠΈΡ€Π°Π΅Ρ‚ ΠΏΠΎΠΏΡƒΠ»ΡΡ€Π½ΠΎΡΡ‚ΡŒ Π΄Π΅ΠΊΠ»Π°Ρ€Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΉ Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊ Fluid, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΡ‚ для примСнСния Π² ΠΈΠ³Ρ€Π°Ρ….

Π’ области Π²Π΅Π±-Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Π½Π° RISC-V Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π΅ продСмонстрирована Ρ€Π°Π±ΠΎΡ‚Π° Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊΠ° Serverino. Π­Ρ‚ΠΎΡ‚ минималистичный ΠΈ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ Π²Π΅Π±-Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊ Π±Π΅Π· Π΄Ρ€ΡƒΠ³ΠΈΡ… зависимостСй ΠΌΠΎΠΆΠ΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Π½Π° ΠΎΡ‡Π΅Π½ΡŒ слабых ΠΌΠ°ΡˆΠΈΠ½Π°Ρ…, Π²ΠΊΠ»ΡŽΡ‡Π°Ρ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ встраиваСмыС систСмы с нСбольшим ΠΎΠ±ΡŠΡ‘ΠΌΠΎΠΌ памяти.

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

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ: opennet.ru

Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ