Documentation for a newer release is available. View Latest

Ruby

Ruby 2.6

Ruby 2.6 ແມ່ນເວີຊັນທີ່ໝັ້ນຄົງຫຼ້າສຸດຂອງ Ruby. ມີການເພີ່ມຄຸນສົມບັດໃໝ່ ແລະ ການປັບປຸງຫຼາຍຢ່າງ ເພື່ອຮອງຮັບຄວາມຕ້ອງການທີ່ຫຼາກຫຼາຍ ແລະ ຂະຫຍາຍຕົວຂອງ Ruby. ດ້ວຍການອັບເດດຄັ້ງໃຫຍ່ນີ້ ຈາກ Ruby 2.5 ໃນ Fedora 29 ໄປເປັນ Ruby 2.6 ໃນ Fedora 30, ເຮັດໃຫ້ Fedora ກາຍເປັນແພລັດຟອມການພັດທະນາ Ruby ທີ່ດີກວ່າເກົ່າ.

ການປ່ຽນແປງທີ່ໂດດເດັ່ນລວມມີ:

  • ຕອນນີ້ມີການນຳໃຊ້ຕົວລວບລວມຄຳສັ່ງແບບ Just-In-Time (JIT) ໃນຂັ້ນເລີ່ມຕົ້ນແລ້ວ. ຕົວລວບລວມຄຳສັ່ງ JIT ມີຈຸດປະສົງເພື່ອປັບປຸງປະສິດທິພາບການເຮັດວຽກຂອງທຸກໆໂປຣແກຣມ Ruby. ຕົວລວບລວມຄຳສັ່ງ JIT ຂອງ Ruby ມີວິທີການເຮັດວຽກທີ່ແຕກຕ່າງຈາກພາສາອື່ນໆ ໂດຍການຂຽນລະຫັດ C ລົງໃນດິດ ແລະ ເອີ້ນໃຊ້ຂະບວນການຂອງຕົວລວບລວມຄຳສັ່ງ C ທົ່ວໄປ ເພື່ອສ້າງລະຫັດເນທີບ (native code).

    ຈຸດປະສົງຫຼັກຂອງການປ່ອຍ JIT ນີ້ແມ່ນເພື່ອໃຫ້ໂອກາດໃນການກວດສອບວ່າ ມັນສາມາດເຮັດວຽກກັບແພລັດຟອມຂອງທ່ານໄດ້ຫຼືບໍ່ ແລະ ເພື່ອຊອກຫາຄວາມສ່ຽງດ້ານຄວາມປອດໄພກ່ອນການປ່ອຍເວີຊັນ 2.6. ຕົວລວບລວມຄຳສັ່ງ JIT ຈະຮອງຮັບເມື່ອ Ruby ຖືກສ້າງດ້ວຍ GCC, Clang ຫຼື Microsoft VC++, ເຊິ່ງຕ້ອງມີພ້ອມໃນເວລາເຮັດວຽກ (runtime). ຖ້າບໍ່ດັ່ງນັ້ນ, ທ່ານຈະຍັງບໍ່ສາມາດໃຊ້ງານມັນໄດ້ໃນຕອນນີ້.

    ໃນ Ruby 2.6.0 preview3, ພວກເຮົາສາມາດເຮັດໃຫ້ປະສິດທິພາບໄວຂຶ້ນ 1.7 ເທົ່າ ເມື່ອທຽບກັບ Ruby 2.5 ໃນການທົດສອບການເຮັດວຽກຂອງ CPU ທີ່ເອີ້ນວ່າ Optcarrot. ປະສິດທິພາບໃນການເຮັດວຽກທີ່ໃຊ້ໜ່ວຍຄວາມຈຳສູງ ເຊັ່ນ ແອັບພລິເຄຊັນ Rails ກໍຈະຖືກປັບປຸງໃຫ້ດີຂຶ້ນເຊັ່ນກັນ.

  • ຕອນນີ້ມີໂມດູນທົດລອງໃໝ່ RubyVM::AST ແລ້ວ. ໂມດູນນີ້ມີເມັດທອດ parse ເຊິ່ງຈະວິເຄາະລະຫັດ ruby ທີ່ເປັນສະຕຣິງ (string) ແລະ ສົ່ງຄືນຄ່າເປັນໂນດ AST (Abstract Syntax Tree), ແລະ ເມັດທອດ parse_file ເຊິ່ງຈະວິເຄາະໄຟລ໌ລະຫັດ ruby ແລະ ສົ່ງຄືນຄ່າເປັນໂນດ AST. ນອກຈາກນີ້ ຍັງມີການແນະນຳຄລາດ RubyVM::AST::Node ອີກດ້ວຍ. ທ່ານສາມາດດຶງຂໍ້ມູນຕຳແໜ່ງ ແລະ ໂນດລູກ (children nodes) ຈາກອັອບເຈັກ Node ໄດ້. ຄຸນສົມບັດນີ້ແມ່ນຢູ່ໃນຂັ້ນທົດລອງ. ຄວາມເຂົ້າກັນໄດ້ຂອງໂຄງສ້າງໂນດ AST ແມ່ນຍັງບໍ່ທັນຮັບປະກັນ.

  • ຄຸນສົມບັດໃໝ່:

    • ເພີ່ມນາມແຝງ (alias) ໃໝ່ then ໃຫ້ກັບ Kernel#yield_self.

    • ເພີ່ມ Random.bytes.

    • ເພີ່ມ Binding#source_location. ເມັດທອດນີ້ຈະສົ່ງຄືນຕຳແໜ່ງທີ່ມາຂອງ binding, ເຊິ່ງເປັນອາເຣ (array) ທີ່ມີ 2 ອົງປະກອບຄື FILE ແລະ LINE.

    • ເພີ່ມຕົວເລືອກ :exception ເພື່ອໃຫ້ Kernel.#system ແຈ້ງຂໍ້ຜິດພາດ (raise error) ແທນທີ່ຈະສົ່ງຄືນຄ່າ false.

    • ການໃຊ້ else ໂດຍບໍ່ມີ rescue ຈະເຮັດໃຫ້ເກີດຂໍ້ຜິດພາດທາງໄວຍາກອນ (syntax error). [ຂັ້ນທົດລອງ]

    • ຊື່ຄົງທີ່ (Constant) ສາມາດເລີ່ມຕົ້ນດ້ວຍຕົວອັກສອນພິມໃຫຍ່ທີ່ບໍ່ແມ່ນ ASCII.

    • ມີການແນະນຳຊ່ວງແບບບໍ່ມີທີ່ສິ້ນສຸດ (endless range) (1..). ມັນເຮັດວຽກຄືກັບວ່າມັນບໍ່ມີຈຸດຈົບ.

ໄດ້ມີການປັບປຸງປະສິດທິພາບດັ່ງຕໍ່ໄປນີ້:

  • ເຮັດໃຫ້ Proc#call ໄວຂຶ້ນ ເພາະພວກເຮົາບໍ່ຈຳເປັນຕ້ອງສົນໃຈເລື່ອງ $SAFE ອີກຕໍ່ໄປ. ການທົດສອບ lc_fizzbuzz ສະແດງໃຫ້ເຫັນວ່າຄວາມໄວເພີ່ມຂຶ້ນ 40%.

  • ເຮັດໃຫ້ block.call ໄວຂຶ້ນ ໃນກໍລະນີທີ່ບລັອກ (block) ຖືກສົ່ງຜ່ານພາຣາມີເຕີ. Ruby 2.6 ປັບປຸງປະສິດທິພາບຂອງການເອີ້ນໃຊ້ບລັອກທີ່ສົ່ງຜ່ານມາ. ສາມາດສັງເກດເຫັນການປັບປຸງທີ່ດີຂຶ້ນເຖິງ 2.6 ເທົ່າ ຈາກການທົດສອບ micro-benchmarks.

  • ໄດ້ມີການແນະນຳ Transient Heap (theap). theap ແມ່ນການຈັດການ heap ສຳລັບອັອບເຈັກໃນໜ່ວຍຄວາມຈຳທີ່ມີອາຍຸສັ້ນ ເຊິ່ງຖືກຊີ້ໂດຍຄລາດສະເພາະ. ຕົວຢ່າງ: ການສ້າງອັອບເຈັກ Hash ຂະໜາດນ້ອຍ ແລະ ມີອາຍຸສັ້ນ ຈະໄວຂຶ້ນສອງເທົ່າ. ຈາກການທົດສອບ rdoc ເຫັນວ່າປະສິດທິພາບດີຂຶ້ນ 6-7%.

ການປ່ຽນແປງອື່ນໆທີ່ໂດດເດັ່ນຕັ້ງແຕ່ເວີຊັນ 2.5:

  • $SAFE ແມ່ນສະຖານະສາກົນຂອງຂະບວນການ (process global state) ແລະ ພວກເຮົາສາມາດຕັ້ງຄ່າເປັນ 0 ໄດ້ອີກຄັ້ງ.

  • ການສົ່ງຄ່າ safe_level ໄປໃຫ້ ERB.new ແມ່ນຖືກຍົກເລີກການນຳໃຊ້ (deprecated). trim_mode ແລະ eoutvar ຕອນນີ້ໄດ້ກາຍເປັນ keyword arguments.

  • ລວມ RubyGems 3.0.0.beta2 ເຂົ້າໄວ້ນຳກັນ.

  • ລວມ Bundler ເປັນ gem ມາດຕະຖານ (default gem).

ເບິ່ງ ປະກາດການປ່ອຍເວີຊັນຈາກຕົ້ນທາງ ສຳລັບຂໍ້ມູນລະອຽດເພີ່ມເຕີມກ່ຽວກັບການປ່ອຍເວີຊັນນີ້.