ຄ່າໃຊ້ຈ່າຍຂອງ indirection ໃນ Rust | Mewayz Blog Skip to main content
Hacker News

ຄ່າໃຊ້ຈ່າຍຂອງ indirection ໃນ Rust

ຄຳເຫັນ

2 min read Via blog.sebastiansastre.co

Mewayz Team

Editorial Team

Hacker News
<ຮ່າງກາຍ>

ລາຄາຂອງ Abstraction: ຄວາມເຂົ້າໃຈ Indirection in Rust

Rrust ເປັນພາສາທີ່ສ້າງຂຶ້ນຕາມຄຳສັນຍາທີ່ມີພະລັງ: ບໍ່ມີຕົວຕົນທີ່ມີລາຄາຖືກ. ມັນອະນຸຍາດໃຫ້ນັກພັດທະນາຂຽນລະຫັດລະດັບສູງ, ປອດໄພ, ແລະສະແດງອອກໂດຍບໍ່ມີການຈ່າຍຄ່າປັບໄຫມໃນເວລາແລ່ນ. ປັດຊະຍານີ້ແມ່ນຈຸດໃຈກາງຂອງເຫດຜົນທີ່ວ່າ Rust ດີເລີດໃນການຂຽນໂປລແກລມລະບົບ, ຈາກລະບົບປະຕິບັດການຈົນເຖິງເຄື່ອງຈັກເກມ. ຢ່າງໃດກໍຕາມ, ແນວຄວາມຄິດຂອງ "ທາງອ້ອມ" ນັ່ງຢູ່ທາງແຍກທີ່ຫນ້າປະທັບໃຈໃນການອອກແບບຂອງ Rust. ໃນຂະນະທີ່ມັກຈະເປັນສິ່ງຈໍາເປັນສໍາລັບຄວາມຍືດຫຍຸ່ນແລະຄວາມປອດໄພ, indirection ແມ່ນບໍ່ສະເຫມີໄປທີ່ບໍ່ມີຄ່າໃຊ້ຈ່າຍ, ແລະການໃຊ້ໃນທາງທີ່ຜິດຂອງມັນສາມາດທໍາລາຍຢ່າງງຽບໆກັບການປະຕິບັດທີ່ Rust ທີ່ມີຊື່ສຽງ. ສຳລັບແພລດຟອມເຊັ່ນ: Mewayz, ເປັນ OS ທຸລະກິດແບບໂມດູລາທີ່ປະສິດທິພາບ ແລະ ການນຳໃຊ້ຊັບພະຍາກອນທີ່ຄາດເດົາໄດ້ແມ່ນສຳຄັນທີ່ສຸດ, ການເຂົ້າໃຈຄ່າໃຊ້ຈ່າຍນີ້ບໍ່ແມ່ນທາງວິຊາການ—ມັນຈຳເປັນສຳລັບການສ້າງເຫດຜົນທາງທຸລະກິດທີ່ແຂງແຮງ, ສາມາດຂະຫຍາຍໄດ້.

ທາງອ້ອມແມ່ນຫຍັງ ແລະເປັນຫຍັງພວກເຮົາຕ້ອງການມັນ?

ການ​ຊີ້​ທາງ​ແມ່ນ​ເຕັກ​ນິກ​ການ​ຂຽນ​ໂປຣ​ແກຣມ​ທີ່​ທ່ານ​ອ້າງ​ເຖິງ​ບາງ​ສິ່ງ​ທີ່​ບໍ່​ແມ່ນ​ໂດຍ​ກົງ, ແຕ່​ຜ່ານ​ຊັ້ນ​ຕົວ​ກາງ. ໃນ Rust, ຮູບແບບທົ່ວໄປທີ່ສຸດແມ່ນຕົວຊີ້, ການອ້າງອິງ, ວັດຖຸລັກສະນະ, ແລະຕົວຊີ້ smart ເຊັ່ນ: `Box`, `Rc`, ຫຼື `Arc`. ເຄື່ອງມືເຫຼົ່ານີ້ແມ່ນຂາດບໍ່ໄດ້. ພວກເຂົາເປີດໃຊ້ພຶດຕິກໍາແບບເຄື່ອນໄຫວ, ການຈັດສັນ heap, ການເປັນເຈົ້າຂອງຮ່ວມກັນ, ແລະ polymorphism. ສໍາລັບຕົວຢ່າງ, ເປັນ `Vec>` ອະນຸຍາດໃຫ້ທ່ານສາມາດເກັບຮັກສາຄໍເລັກຊັນຂອງປະເພດທີ່ແຕກຕ່າງກັນທັງຫມົດທີ່ປະຕິບັດລັກສະນະ `Draw`, ຮູບແບບທົ່ວໄປໃນລະບົບ UI ຫຼືສະຖາປັດຕະ plugin. ຖ້າບໍ່ມີທາງອ້ອມ, ການຂຽນລະຫັດແບບໂມດູນແບບຍືດຫຍຸ່ນຈະເປັນເລື່ອງຍາກຢ່າງບໍ່ໜ້າເຊື່ອ.

"Abstraction ແມ່ນສິນລະປະຂອງການເຊື່ອງຄວາມຊັບຊ້ອນ, ແລະທາງອ້ອມແມ່ນເຄື່ອງມືຕົ້ນຕໍຂອງມັນ. ໃນ Rust, ສິ່ງທ້າທາຍແມ່ນເພື່ອຍຶດເອົາເຄື່ອງມືນີ້ໂດຍບໍ່ປ່ອຍໃຫ້ຄ່າໃຊ້ຈ່າຍຂອງ abstraction ກາຍເປັນພາສີ runtime."

ພາສີປະສິດທິພາບທີ່ເຊື່ອງໄວ້

ໃນຂະນະທີ່ສິ່ງທີ່ບໍ່ມີຕົວຕົນມັກຈະເປັນ "ຄ່າສູນ" ໃນແງ່ຂອງສິ່ງທີ່ເຈົ້າ ສາມາດ ຂຽນດ້ວຍຕົນເອງ, ເສັ້ນທາງອ້ອມຕົວມັນເອງຈະນໍາສະເໜີເຖິງສ່ວນເກີນທີ່ເຫັນໄດ້ຊັດເຈນ. ຄ່າໃຊ້ຈ່າຍນີ້ສະແດງອອກໃນຫຼາຍຂົງເຂດສຳຄັນ:

  • ການ​ເຂົ້າ​ເຖິງ​ຄວາມ​ຊົງ​ຈໍາ (Cache Misses): ການ​ເຮັດ​ຕາມ​ຕົວ​ຊີ້​ຮຽກ​ຮ້ອງ​ໃຫ້​ໂດດ​ໄປ​ຫາ​ທີ່​ຢູ່​ຫນ່ວຍ​ຄວາມ​ຈໍາ​ອື່ນ. ນີ້ສາມາດທໍາລາຍການດຶງຂໍ້ມູນ cache ຂອງ CPU ໄວ້ລ່ວງໜ້າໄດ້, ເຊິ່ງເຮັດໃຫ້ການອ່ານຊ້າລົງຢ່າງຫຼວງຫຼາຍເມື່ອປຽບທຽບກັບຂໍ້ມູນທີ່ຕິດຕໍ່ກັນ, ໃນແຖວ.
  • Dynamic Dispatch: ວັດຖຸລັກສະນະ (`dyn Trait`) ໃຊ້ຕາຕະລາງສະເໝືອນ (vtables) ເພື່ອແກ້ໄຂວິທີການໂທໃນເວລາແລ່ນ. ອັນນີ້ເພີ່ມສ່ວນເກີນຂະໜາດນ້ອຍສໍາລັບການຊອກຫາຕົວຊີ້ ແລະປ້ອງກັນບໍ່ໃຫ້ compiler inlining, ເຊິ່ງສາມາດເປັນຕົວຂ້າການເພີ່ມປະສິດທິພາບທີ່ສໍາຄັນສໍາລັບ hot loops.
  • Heap Allocation: ປະເພດເຊັ່ນ: `Box` ຫມາຍເຖິງການຈັດສັນ heap, ເຊິ່ງເປັນຄໍາສັ່ງທີ່ມີຂະໜາດຊ້າກວ່າການຈັດສັນ stack ແລະເພີ່ມຄວາມກົດດັນໃສ່ຜູ້ຈັດສັນ.
  • Indirection Chains: ຫຼາຍຊັ້ນຂອງ indirection (ເຊັ່ນ: `Box` ທີ່ປະກອບດ້ວຍ `Rc` ກັບໂຄງສ້າງທີ່ມີ `Vec` ຂອງ trait objects) ລວມຄ່າໃຊ້ຈ່າຍເຫຼົ່ານີ້, ເຮັດໃຫ້ເສັ້ນທາງເຂົ້າເຖິງຂໍ້ມູນຊ້າ ແລະບໍ່ສາມາດຄາດເດົາໄດ້.

ໃນ OS ທຸລະກິດເຊັ່ນ Mewayz, ບ່ອນທີ່ໂມດູນຕ້ອງການປະມວນຜົນຂໍ້ມູນ, ຈັດການຂັ້ນຕອນການເຮັດວຽກ, ແລະຕອບສະຫນອງຕໍ່ເຫດການທີ່ມີເວລາ latency ຕໍ່າ, ຄ່າໃຊ້ຈ່າຍຈຸນລະພາກເຫຼົ່ານີ້ສາມາດລວມເຂົ້າກັນໄດ້ໃນລະດັບ macro-lag, ມີຜົນຕໍ່ທຸກສິ່ງທຸກຢ່າງຈາກການສ້າງບົດລາຍງານຈົນເຖິງການອັບເດດ dashboard ໃນເວລາຈິງ.

ຍຸດທະສາດການຫຼຸດຜ່ອນໃນ Codebase ຂອງທ່ານ

ເປົ້າ​ໝາຍ​ບໍ່​ແມ່ນ​ເພື່ອ​ລົບ​ລ້າງ​ທາງ​ອ້ອມ—ນັ້ນ​ແມ່ນ​ບໍ່​ເປັນ​ໄປ​ໄດ້ ຫລື ບໍ່​ແມ່ນ​ຄວາມ​ປາ​ຖະ​ໜາ—ແຕ່​ໃຫ້​ນຳ​ໃຊ້​ມັນ​ຢ່າງ​ມີ​ຄວາມ​ຕັດ​ສິນ. ນີ້ແມ່ນຍຸດທະສາດຫຼັກ:

ອັນທຳອິດ, ມັກສິ່ງທົ່ວໄປຫຼາຍກວ່າວັດຖຸລັກສະນະ ຖ້າເປັນໄປໄດ້. Generics ໃຊ້ monomorphization, ສ້າງລະຫັດແຍກຕ່າງຫາກ, ເພີ່ມປະສິດທິພາບສໍາລັບແຕ່ລະປະເພດຊີມັງໃນເວລາລວບລວມ. ອັນນີ້ຮັກສາການສົ່ງສະຖິດ ແລະເປີດໃຊ້ງານ inlining. ອັນທີສອງ, ຮັບເອົາການອອກແບບທີ່ເນັ້ນໃສ່ຂໍ້ມູນ. ເກັບຮັກສາຂໍ້ມູນຢູ່ໃນ arrays ທີ່ຕິດກັນ, ເປັນມິດກັບ cache (`Vec`) ແທນທີ່ຈະເປັນຊຸດຄໍເລັກຊັນທີ່ເຊື່ອມຕໍ່ກັນ. ປະມວນຜົນຂໍ້ມູນໃນຊຸດ, ບໍ່ແມ່ນຜ່ານລະບົບຕ່ອງໂສ້ຂອງການໂທ virtual. ອັນທີສາມ, ໂປຣໄຟລ໌ຢ່າງບໍ່ຢຸດຢັ້ງ. ໃຊ້ເຄື່ອງມືເຊັ່ນ: 'cargo flamegraph' ເພື່ອລະບຸວ່າທາງອ້ອມແມ່ນຄໍຂວດທີ່ແທ້ຈິງ; ເລື້ອຍໆ, ຄ່າໃຊ້ຈ່າຍແມ່ນບໍ່ມີເຫດຜົນຈົນກ່ວາມັນຢູ່ໃນເສັ້ນທາງທີ່ສໍາຄັນ.

💡 DID YOU KNOW?

Mewayz replaces 8+ business tools in one platform

CRM · Invoicing · HR · Projects · Booking · eCommerce · POS · Analytics. Free forever plan available.

Start Free →

ການສ້າງລະບົບໂມດູລາ Lean ດ້ວຍ Mewayz

ຄວາມເຂົ້າໃຈອັນລະອຽດຂອງຄ່າໃຊ້ຈ່າຍທຽບກັບຄວາມຍືດຫຍຸ່ນນີ້ແຈ້ງໃຫ້ຮູ້ເຖິງສະຖາປັດຕະຍະກໍາຂອງເວທີເຊັ່ນ Mewayz ໂດຍກົງ. ເມື່ອອອກແບບໂມດູນສໍາລັບ Mewayz OS, ນັກພັດທະນາໄດ້ຖືກຊຸກຍູ້ໃຫ້ໃຊ້ generics ແລະ static dispatch ສໍາລັບ core, ການໂຕ້ຕອບທີ່ລະອຽດອ່ອນ - ເຊັ່ນທໍ່ການຫັນປ່ຽນຂໍ້ມູນຫຼືເຄື່ອງຈັກການຄິດໄລ່. ໃນຂະນະດຽວກັນ, ວັດຖຸລັກສະນະແລະການໂຫຼດແບບເຄື່ອນໄຫວຍັງຄົງດີເລີດສໍາລັບລະບົບ plugin ຜູ້ໃຊ້ທີ່ສາມາດຂະຫຍາຍໄດ້ໃນລະດັບສູງ, ເຊິ່ງຄວາມຍືດຫຍຸ່ນແມ່ນຄວາມຕ້ອງການຕົ້ນຕໍ. ໂດຍການຕັດສິນໃຈໂດຍເຈດຕະນາກ່ຽວກັບທາງອ້ອມ, ໂມດູນ Mewayz ສາມາດໃຫ້ທຸລະກິດທີ່ບໍ່ມີຕົວຕົນທີ່ມີປະສິດທິພາບທີ່ຕ້ອງການໂດຍບໍ່ຕ້ອງເສຍສະລະການປະຕິບັດທີ່ກໍານົດທີ່ເຂົາເຈົ້າອີງໃສ່. ຜົນໄດ້ຮັບແມ່ນ OS ທຸລະກິດແບບໂມດູລາທີ່ທັງວ່ອງໄວ ແລະ ມີປະສິດທິພາບໂດຍພື້ນຖານແລ້ວ, ເຊິ່ງຄ່າໃຊ້ຈ່າຍຂອງການບໍ່ມີຕົວຕົນແມ່ນການລົງທຶນທີ່ມີສະຕິສະເໝີ, ບໍ່ແມ່ນຄ່າທຳນຽມທີ່ເຊື່ອງໄວ້.

ຄຳຖາມທີ່ຖາມເລື້ອຍໆ

ລາຄາຂອງ Abstraction: ຄວາມເຂົ້າໃຈ Indirection in Rust

Rrust ເປັນພາສາທີ່ສ້າງຂຶ້ນຕາມຄຳສັນຍາທີ່ມີພະລັງ: ບໍ່ມີຕົວຕົນທີ່ມີລາຄາຖືກ. ມັນອະນຸຍາດໃຫ້ນັກພັດທະນາຂຽນລະຫັດລະດັບສູງ, ປອດໄພ, ແລະສະແດງອອກໂດຍບໍ່ມີການຈ່າຍຄ່າປັບໄຫມໃນເວລາແລ່ນ. ປັດຊະຍານີ້ແມ່ນຈຸດໃຈກາງຂອງເຫດຜົນທີ່ວ່າ Rust ດີເລີດໃນການຂຽນໂປລແກລມລະບົບ, ຈາກລະບົບປະຕິບັດການຈົນເຖິງເຄື່ອງຈັກເກມ. ຢ່າງໃດກໍຕາມ, ແນວຄວາມຄິດຂອງ "ທາງອ້ອມ" ນັ່ງຢູ່ທາງແຍກທີ່ຫນ້າປະທັບໃຈໃນການອອກແບບຂອງ Rust. ໃນຂະນະທີ່ມັກຈະເປັນສິ່ງຈໍາເປັນສໍາລັບຄວາມຍືດຫຍຸ່ນແລະຄວາມປອດໄພ, indirection ແມ່ນບໍ່ສະເຫມີໄປທີ່ບໍ່ມີຄ່າໃຊ້ຈ່າຍ, ແລະການໃຊ້ໃນທາງທີ່ຜິດຂອງມັນສາມາດທໍາລາຍຢ່າງງຽບໆກັບການປະຕິບັດທີ່ Rust ທີ່ມີຊື່ສຽງ. ສຳລັບແພລດຟອມເຊັ່ນ: Mewayz, ເປັນ OS ທຸລະກິດແບບໂມດູນທີ່ປະສິດທິພາບ ແລະ ການນຳໃຊ້ຊັບພະຍາກອນທີ່ຄາດເດົາໄດ້ແມ່ນສຳຄັນທີ່ສຸດ, ການເຂົ້າໃຈຄ່າໃຊ້ຈ່າຍນີ້ບໍ່ແມ່ນທາງວິຊາການ—ມັນເປັນສິ່ງຈໍາເປັນສຳລັບການສ້າງເຫດຜົນທາງທຸລະກິດທີ່ເຂັ້ມແຂງ, ສາມາດຂະຫຍາຍໄດ້.

ທາງອ້ອມແມ່ນຫຍັງ ແລະເປັນຫຍັງພວກເຮົາຕ້ອງການມັນ?

ການ​ຊີ້​ທາງ​ແມ່ນ​ເຕັກ​ນິກ​ການ​ຂຽນ​ໂປຣ​ແກຣມ​ທີ່​ທ່ານ​ອ້າງ​ເຖິງ​ບາງ​ສິ່ງ​ທີ່​ບໍ່​ແມ່ນ​ໂດຍ​ກົງ, ແຕ່​ຜ່ານ​ຊັ້ນ​ຕົວ​ກາງ. ໃນ Rust, ຮູບແບບທົ່ວໄປທີ່ສຸດແມ່ນຕົວຊີ້, ການອ້າງອິງ, ວັດຖຸລັກສະນະ, ແລະຕົວຊີ້ smart ເຊັ່ນ: `Box`, `Rc`, ຫຼື `Arc`. ເຄື່ອງມືເຫຼົ່ານີ້ແມ່ນຂາດບໍ່ໄດ້. ພວກເຂົາເປີດໃຊ້ພຶດຕິກໍາແບບເຄື່ອນໄຫວ, ການຈັດສັນ heap, ການເປັນເຈົ້າຂອງຮ່ວມກັນ, ແລະ polymorphism. ຕົວຢ່າງເຊັ່ນ, 'Vec' ຊ່ວຍໃຫ້ທ່ານສາມາດເກັບລວບລວມປະເພດຕ່າງໆທີ່ປະຕິບັດລັກສະນະ 'ແຕ້ມ', ຮູບແບບທົ່ວໄປໃນລະບົບ UI ຫຼືສະຖາປັດຕະຍະກໍາ plugin. ຖ້າບໍ່ມີທາງອ້ອມ, ການຂຽນລະຫັດແບບໂມດູນແບບຍືດຫຍຸ່ນຈະເປັນເລື່ອງຍາກຢ່າງບໍ່ໜ້າເຊື່ອ.

ພາສີປະສິດທິພາບທີ່ເຊື່ອງໄວ້

ໃນຂະນະທີ່ສິ່ງທີ່ບໍ່ມີຕົວຕົນມັກຈະເປັນ "ຄ່າສູນ" ໃນແງ່ຂອງສິ່ງທີ່ເຈົ້າສາມາດຂຽນດ້ວຍຕົນເອງ, ຕົວຊີ້ບອກທາງອ້ອມຕົວມັນເອງຈະແນະນຳການໃຊ້ຈ່າຍທີ່ເຫັນໄດ້ຊັດເຈນ. ຄ່າໃຊ້ຈ່າຍນີ້ສະແດງອອກໃນຫຼາຍຂົງເຂດສຳຄັນ:

ຍຸດທະສາດການຫຼຸດຜ່ອນໃນ Codebase ຂອງທ່ານ

ເປົ້າ​ຫມາຍ​ບໍ່​ແມ່ນ​ເພື່ອ​ລົບ​ລ້າງ indirection—ນັ້ນ​ແມ່ນ​ບໍ່​ເປັນ​ໄປ​ໄດ້​ຫຼື​ຄວາມ​ປາ​ຖະ​ຫນາ—ແຕ່​ການ​ນໍາ​ໃຊ້​ມັນ​ຢ່າງ​ສຸ​ຂະ​ພາບ. ນີ້ແມ່ນຍຸດທະສາດຫຼັກ:

ການສ້າງລະບົບ Modular Lean ດ້ວຍ Mewayz

ຄວາມເຂົ້າໃຈອັນລະອຽດຂອງຄ່າໃຊ້ຈ່າຍທຽບກັບຄວາມຍືດຫຍຸ່ນນີ້ແຈ້ງໃຫ້ຮູ້ເຖິງສະຖາປັດຕະຍະກໍາຂອງເວທີເຊັ່ນ Mewayz ໂດຍກົງ. ເມື່ອອອກແບບໂມດູນສໍາລັບ Mewayz OS, ນັກພັດທະນາໄດ້ຖືກຊຸກຍູ້ໃຫ້ໃຊ້ generics ແລະ static dispatch ສໍາລັບຫຼັກ, ການໂຕ້ຕອບທີ່ລະອຽດອ່ອນແລະປະສິດທິພາບເຊັ່ນ: ທໍ່ການຫັນປ່ຽນຂໍ້ມູນຫຼືເຄື່ອງຈັກການຄິດໄລ່. ໃນຂະນະດຽວກັນ, ວັດຖຸລັກສະນະແລະການໂຫຼດແບບເຄື່ອນໄຫວຍັງຄົງດີເລີດສໍາລັບລະບົບ plugin ຜູ້ໃຊ້ທີ່ສາມາດຂະຫຍາຍໄດ້ໃນລະດັບສູງ, ເຊິ່ງຄວາມຍືດຫຍຸ່ນແມ່ນຄວາມຕ້ອງການຕົ້ນຕໍ. ໂດຍການຕັດສິນໃຈໂດຍເຈດຕະນາກ່ຽວກັບທາງອ້ອມ, ໂມດູນ Mewayz ສາມາດໃຫ້ທຸລະກິດທີ່ບໍ່ມີຕົວຕົນທີ່ມີປະສິດທິພາບທີ່ຕ້ອງການໂດຍບໍ່ຕ້ອງເສຍສະລະການປະຕິບັດທີ່ກໍານົດທີ່ເຂົາເຈົ້າອີງໃສ່. ຜົນໄດ້ຮັບແມ່ນ OS ທຸລະກິດແບບໂມດູລາທີ່ທັງວ່ອງໄວ ແລະ ມີປະສິດທິພາບໂດຍພື້ນຖານແລ້ວ, ເຊິ່ງຄ່າໃຊ້ຈ່າຍຂອງການບໍ່ມີຕົວຕົນແມ່ນການລົງທຶນທີ່ມີສະຕິສະເໝີ, ບໍ່ແມ່ນຄ່າທຳນຽມທີ່ເຊື່ອງໄວ້.

ປັບປຸງທຸລະກິດຂອງທ່ານດ້ວຍ Mewayz

Mewayz ເອົາ 208 ໂມດູນທຸລະກິດເຂົ້າມາໃນເວທີດຽວ — CRM, ໃບແຈ້ງໜີ້, ການຄຸ້ມຄອງໂຄງການ, ແລະອື່ນໆອີກ. ເຂົ້າ​ຮ່ວມ 138,000+ ຜູ້​ໃຊ້​ທີ່​ເຮັດ​ໃຫ້​ຂະ​ບວນ​ການ​ເຮັດ​ວຽກ​ຂອງ​ເຂົາ​ເຈົ້າ​ງ່າຍ​ຂຶ້ນ.

ເລີ່ມຟຣີມື້ນີ້ →

Try Mewayz Free

All-in-one platform for CRM, invoicing, projects, HR & more. No credit card required.

Start managing your business smarter today

Join 6,209+ businesses. Free forever plan · No credit card required.

Ready to put this into practice?

Join 6,209+ businesses using Mewayz. Free forever plan — no credit card required.

Start Free Trial →

Ready to take action?

Start your free Mewayz trial today

All-in-one business platform. No credit card required.

Start Free →

14-day free trial · No credit card · Cancel anytime