Linux Foundation займСтся open source Ρ‡ΠΈΠΏΠ°ΠΌΠΈ

Linux Foundation ΠΎΡ‚ΠΊΡ€Ρ‹Π»ΠΈ Π½ΠΎΠ²ΠΎΠ΅ Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ β€” CHIPS Alliance. Π’ Ρ€Π°ΠΌΠΊΠ°Ρ… этого ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° организация Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°Π·Π²ΠΈΠ²Π°Ρ‚ΡŒ ΡΠ²ΠΎΠ±ΠΎΠ΄Π½ΡƒΡŽ систСму ΠΊΠΎΠΌΠ°Π½Π΄ RISC-V ΠΈ Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΈ для создания процСссоров Π½Π° Π΅Ρ‘ основС. РасскаТСм ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅, Ρ‡Ρ‚ΠΎ происходит Π² этой сфСрС.

Linux Foundation займСтся open source Ρ‡ΠΈΠΏΠ°ΠΌΠΈ
/ Ρ„ΠΎΡ‚ΠΎ Gareth Halfacree CC BY-SA

ΠŸΠΎΡ‡Π΅ΠΌΡƒ появился CHIPS Alliance

ΠŸΠ°Ρ‚Ρ‡ΠΈ, Π·Π°Ρ‰ΠΈΡ‰Π°ΡŽΡ‰ΠΈΠ΅ ΠΎΡ‚ Meltdown ΠΈ Spectre, Π² Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… случаях ΡΠ½ΠΈΠΆΠ°ΡŽΡ‚ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ сСрвСров Π½Π° 50%. ΠŸΡ€ΠΈ этом всС Π΅Ρ‰Π΅ ΠΏΠΎΡΠ²Π»ΡΡŽΡ‚ΡΡ Π½ΠΎΠ²Ρ‹Π΅ Π²Π°Ρ€ΠΈΠ°Ρ†ΠΈΠΈ уязвимостСй, связанныС со спСкулятивным Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ΠΌ ΠΊΠΎΠΌΠ°Π½Π΄. Об ΠΎΠ΄Π½ΠΎΠΉ ΠΈΠ· Π½ΠΈΡ… стало извСстно Π² Π½Π°Ρ‡Π°Π»Π΅ ΠΌΠ°Ρ€Ρ‚Π° β€” спСциалисты ΠΏΠΎ Π˜Π‘ окрСстили Π΅Ρ‘ Spoiler. Π­Ρ‚Π° ситуация влияСт Π½Π° обсуТдСниС нСобходимости пСрСсмотра ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… Π°ΠΏΠΏΠ°Ρ€Π°Ρ‚Π½Ρ‹Ρ… Ρ€Π΅ΡˆΠ΅Π½ΠΈΠΉ ΠΈ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΎΠ² ΠΊ ΠΈΡ… Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅. Π’ частности, Intel ΡƒΠΆΠ΅ готовят Π½ΠΎΠ²ΡƒΡŽ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Ρƒ для своих процСссоров, Π½Π΅ ΠΏΠΎΠ΄Π²Π΅Ρ€ΠΆΠ΅Π½Π½ΡƒΡŽ Meltdown ΠΈ Spectre.

НС ΠΎΡΡ‚Π°Π»ΠΈΡΡŒ Π² сторонС ΠΈ Π² Linux Foundation. ΠžΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΡ запустила ΡΠΎΠ±ΡΡ‚Π²Π΅Π½Π½ΡƒΡŽ ΠΈΠ½ΠΈΡ†ΠΈΠ°Ρ‚ΠΈΠ²Ρƒ β€” CHIPS Alliance β€” участники ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ займутся Ρ€Π°Π·Π²ΠΈΡ‚ΠΈΠ΅ΠΌ процСссоров Π½Π° Π±Π°Π·Π΅ RISC-V.

КакиС ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Ρ‹ ΡƒΠΆΠ΅ Ρ€Π°Π·Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°ΡŽΡ‚

Π’ спискС участников CHIPS Alliance β€” Google, Western Digital (WD) ΠΈ SiFive. КаТдая ΠΈΠ· Π½ΠΈΡ… прСдставила свои собствСнныС Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ. РасскаТСм ΠΎ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΈΠ· Π½ΠΈΡ….

RISCV-DV

ΠŸΠΎΠΈΡΠΊΠΎΠ²Ρ‹ΠΉ ИВ-Π³ΠΈΠ³Π°Π½Ρ‚ ΠΏΠ΅Ρ€Π΅Π΄Π°Π» Π² open source ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡƒ для тСстирования процСссоров Π½Π° Π±Π°Π·Π΅ RISC-V. РСшСниС случайным ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚ΠΎΡΠΏΠΎΡΠΎΠ±Π½ΠΎΡΡ‚ΡŒ устройства: Ρ‚Π΅ΡΡ‚ΠΈΡ€ΡƒΡŽΡ‚ процСссы ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄Π°, стСка Π²Ρ‹Π·ΠΎΠ²ΠΎΠ², CSR-рСгистры ΠΈ Π΄Ρ€.

НапримСр, Π²ΠΎΡ‚ Ρ‚Π°ΠΊ выглядит класс, ΠΎΡ‚Π²Π΅Ρ‡Π°ΡŽΡ‰ΠΈΠΉ Π·Π° ΠΏΡ€ΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ простого тСста арифмСтичСских инструкций:

class riscv_arithmetic_basic_test extends riscv_instr_base_test;

  `uvm_component_utils(riscv_arithmetic_basic_test)
  `uvm_component_new

  virtual function void randomize_cfg();
    cfg.instr_cnt = 10000;
    cfg.num_of_sub_program = 0;
    cfg.no_fence = 1;
    cfg.no_data_page = 1'b1;
    cfg.no_branch_jump = 1'b1;
    `DV_CHECK_RANDOMIZE_WITH_FATAL(cfg,
                                   init_privileged_mode == MACHINE_MODE;
                                   max_nested_loop == 0;)
    `uvm_info(`gfn, $sformatf("riscv_instr_gen_config is randomized:n%0s",
                    cfg.sprint()), UVM_LOW)
  endfunction

endclass

По словам Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ², ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ° отличаСтся ΠΎΡ‚ Π°Π½Π°Π»ΠΎΠ³ΠΎΠ² Ρ‚Π΅ΠΌ, Ρ‡Ρ‚ΠΎ позволяСт ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ всС ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ Ρ‡ΠΈΠΏΠ°, Π²ΠΊΠ»ΡŽΡ‡Π°Ρ Π±Π»ΠΎΠΊ памяти.

ΠŸΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ» OmniXtend

Π­Ρ‚ΠΎ сСтСвой ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ» ΠΎΡ‚ WD, ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΠ²Π°ΡŽΡ‰ΠΈΠΉ ΠΊΠΎΠ³Π΅Ρ€Π΅Π½Ρ‚Π½ΠΎΡΡ‚ΡŒ кэша ΠΏΡ€ΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Π΅ Π΄Π°Π½Π½Ρ‹Ρ… ΠΏΠΎΠ²Π΅Ρ€Ρ… Ethernet. OmniXtend позволяСт ΠΎΠ±ΠΌΠ΅Π½ΠΈΠ²Π°Ρ‚ΡŒΡΡ сообщСниями Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ с кэшСм процСссора ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ Ρ€Π°Π·Π½ΠΎΠ³ΠΎ Ρ€ΠΎΠ΄Π° ускоритСлСй: GPU ΠΈΠ»ΠΈ FPGA. Он Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΡ‚ для создания систСм Π½Π° Π±Π°Π·Π΅ Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… Ρ‡ΠΈΠΏΠΎΠ² RISC-V.

ΠŸΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ» ΡƒΠΆΠ΅ поддСрТиваСтся Ρ‡ΠΈΠΏΠ°ΠΌΠΈ SweRV, ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΌΠΈ Π½Π° ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ Π΄Π°Π½Π½Ρ‹Ρ… Π² Π΄Π°Ρ‚Π°-Ρ†Π΅Π½Ρ‚Ρ€Π°Ρ…. SweRV β€” это 32-разрядный Π΄Π²ΡƒΡ…ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅Ρ€Π½Ρ‹ΠΉ супСрскалярный процСссор, Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½Π½Ρ‹ΠΉ ΠΏΠΎ 28-Π½Π°Π½ΠΎΠΌΠ΅Ρ‚Ρ€ΠΎΠ²ΠΎΠΌΡƒ тСхпроцСссу. ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅Ρ€ ΠΈΠΌΠ΅Π΅Ρ‚ Π΄Π΅Π²ΡΡ‚ΡŒ ΡƒΡ€ΠΎΠ²Π½Π΅ΠΉ, Ρ‡Ρ‚ΠΎ Π΄Π°Π΅Ρ‚ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Π·Π°Π³Ρ€ΡƒΠΆΠ°Ρ‚ΡŒ ΠΈ ΠΈΡΠΏΠΎΠ»Π½ΡΡ‚ΡŒ нСсколько ΠΊΠΎΠΌΠ°Π½Π΄ ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ. Устройство Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π½Π° частотС 1,8 Π“Π“Ρ†.

Π“Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€ Rocket Chip

РСшСниС ΠΎΡ‚ ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ SiFive, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ основали Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΈ RISC-V. Rocket Chip β€” это Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€ ядСр процСссора RISC-V Π½Π° языкС Chisel. Он прСдставляСт собой Π½Π°Π±ΠΎΡ€ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈΠ·ΠΎΠ²Π°Π½Π½Ρ‹Ρ… Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ для создания SoC.

Π§Ρ‚ΠΎ касаСтся Chisel, Ρ‚ΠΎ это язык описания Π°ΠΏΠΏΠ°Ρ€Π°Ρ‚ΡƒΡ€Ρ‹, основанный Π½Π° Scala. Он Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ Π½ΠΈΠ·ΠΊΠΎΡƒΡ€ΠΎΠ²Π½Π΅Π²Ρ‹ΠΉ ΠΊΠΎΠ΄ Π½Π° Verilog, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΡ‚ для ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Π½Π° ASIC ΠΈ FPGA. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, ΠΎΠ½ позволяСт ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΡ‹ ООП ΠΏΡ€ΠΈ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ RTL.

ΠŸΠ΅Ρ€ΡΠΏΠ΅ΠΊΡ‚ΠΈΠ²Ρ‹ альянса

ЭкспСрты говорят, Ρ‡Ρ‚ΠΎ ΠΈΠ½ΠΈΡ†ΠΈΠ°Ρ‚ΠΈΠ²Π° Linux Foundation сдСлаСт Ρ€Ρ‹Π½ΠΎΠΊ процСссоров Π±ΠΎΠ»Π΅Π΅ Π΄Π΅ΠΌΠΎΠΊΡ€Π°Ρ‚ΠΈΡ‡Π½Ρ‹ΠΌ ΠΈ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΌ для Π½ΠΎΠ²Ρ‹Ρ… ΠΈΠ³Ρ€ΠΎΠΊΠΎΠ². Π’ IDC ΠΎΡ‚ΠΌΠ΅Ρ‡Π°ΡŽΡ‚, Ρ‡Ρ‚ΠΎ рост популярности Ρ‚Π°ΠΊΠΈΡ… ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠ² ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ скаТСтся Π½Π° Ρ€Π°Π·Π²ΠΈΡ‚ΠΈΠΈ Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΉ машинного обучСния ΠΈ систСм ИИ Π² Ρ†Π΅Π»ΠΎΠΌ.

Linux Foundation займСтся open source Ρ‡ΠΈΠΏΠ°ΠΌΠΈ
/ Ρ„ΠΎΡ‚ΠΎ Fritzchens Fritz PD

Π Π°Π·Π²ΠΈΡ‚ΠΈΠ΅ open source процСссоров Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ‚ ΡΠ½ΠΈΠ·ΠΈΡ‚ΡŒ ΡΡ‚ΠΎΠΈΠΌΠΎΡΡ‚ΡŒ проСктирования кастомных Ρ‡ΠΈΠΏΠΎΠ². Однако это ΠΏΡ€ΠΎΠΈΠ·ΠΎΠΉΠ΄Π΅Ρ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² Ρ‚ΠΎΠΌ случаС, Ссли сообщСству Linux Foundation удастся ΠΏΡ€ΠΈΠ²Π»Π΅Ρ‡ΡŒ достаточноС количСство Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ².

АналогичныС ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Ρ‹

Π Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΎΠΉ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠ², связанной с ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΌ Π°ΠΏΠΏΠ°Ρ€Π°Ρ‚Π½Ρ‹ΠΌ обСспСчСниСм, Π·Π°Π½ΠΈΠΌΠ°ΡŽΡ‚ΡΡ ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΠΈ. ΠŸΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠΌ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ консорциум CXL, ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²ΠΈΠ²ΡˆΠΈΠΉ Π² сСрСдинС ΠΌΠ°Ρ€Ρ‚Π° стандарт Compute Express Link. ВСхнология являСтся Π°Π½Π°Π»ΠΎΠ³ΠΎΠΌ OmniXtend ΠΈ Ρ‚Π°ΠΊΠΆΠ΅ связываСт CPU, GPU, FPGA. Для ΠΎΠ±ΠΌΠ΅Π½Π° Π΄Π°Π½Π½Ρ‹ΠΌΠΈ стандарт ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ ΡˆΠΈΠ½Ρƒ PCIe 5.0.

Π•Ρ‰Π΅ ΠΎΠ΄ΠΈΠ½ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚, Π·Π°Π½ΠΈΠΌΠ°ΡŽΡ‰Π΅ΠΉΡΡ Ρ€Π°Π·Π²ΠΈΡ‚ΠΈΠ΅ΠΌ процСссорных Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΉ, β€” MIPS Open, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ появился Π² Π΄Π΅ΠΊΠ°Π±Ρ€Π΅ 2018 Π³ΠΎΠ΄Π°. Π˜Π½ΠΈΡ†ΠΈΠ°Ρ‚ΠΈΠ²Ρƒ создал стартап Wave Computing. Π Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ ΠΏΠ»Π°Π½ΠΈΡ€ΡƒΡŽΡ‚ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒ для ИВ-сообщСства доступ послСдним 32- ΠΈ 64-разрядным Π½Π°Π±ΠΎΡ€Π°ΠΌ ΠΊΠΎΠΌΠ°Π½Π΄ MIPS. Π‘Ρ‚Π°Ρ€Ρ‚ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° оТидаСтся Π² блиТайшиС мСсяцы.

Π’ Ρ†Π΅Π»ΠΎΠΌ open source ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ становится общСпринятым Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для ПО, Π½ΠΎ ΠΈ для ΠΆΠ΅Π»Π΅Π·Π°. ΠŸΠΎΠ΄ΠΎΠ±Π½Ρ‹Π΅ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Ρ‹ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚ ΠΊΡ€ΡƒΠΏΠ½Ρ‹Π΅ ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠΆΠΈΠ΄Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΡƒΠΆΠ΅ Π² блиТайшСм Π±ΡƒΠ΄ΡƒΡ‰Π΅ΠΌ Π½Π° Ρ€Ρ‹Π½ΠΊΠ΅ появится большС устройств, Π² основС ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π»Π΅ΠΆΠ°Ρ‚ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹Π΅ Π°ΠΏΠΏΠ°Ρ€Π°Ρ‚Π½Ρ‹Π΅ стандарты.

Π‘Π²Π΅ΠΆΠΈΠ΅ посты ΠΈΠ· нашСго ΠΊΠΎΡ€ΠΏΠΎΡ€Π°Ρ‚ΠΈΠ²Π½ΠΎΠ³ΠΎ Π±Π»ΠΎΠ³Π°:

ΠŸΠΎΡΡ‚Ρ‹ ΠΈΠ· нашСго Telegram-ΠΊΠ°Π½Π°Π»Π°:

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ: habr.com