Ruby
Ruby 2.7
Fedora 32 ມາພ້ອມກັບ Ruby ເວີຊັນ 2.7. ດ້ວຍການອັບເດດຄັ້ງໃຫຍ່ນີ້ຈາກ Ruby 2.6, ເຮັດໃຫ້ Fedora ກາຍເປັນແພລດຟອມການພັດທະນາ Ruby ທີ່ດີກວ່າເກົ່າ.
ການປ່ຽນແປງຕັ້ງແຕ່ Ruby 2.6:
Ruby 2.7 ມາພ້ອມກັບຄຸນສົມບັດໃໝ່ໆ ແລະ ການປັບປຸງປະສິດທິພາບຫຼາຍຢ່າງ.
ການປັບປຸງປະສິດທິພາບ
-
JIT [ແບບທົດລອງ]
-
ກົນລະຍຸດແຄຊ໌ຂອງ Fiber ໄດ້ຖືກປ່ຽນແປງ ແລະ ການສ້າງ fiber ແມ່ນມີຄວາມໄວຂຶ້ນ.
-
Module#name,true.to_s,false.to_s, ແລະnil.to_sຕອນນີ້ຈະສົ່ງຄ່າກັບເປັນ ສະຕຣິງທີ່ຄົງທີ່ (frozen String) ສະເໝີ. ສະຕຣິງທີ່ສົ່ງກັບມາຈະເປັນຄ່າເດີມສະເໝີສຳລັບອັອບເຈັກນັ້ນໆ. [ແບບທົດລອງ] -
ປະສິດທິພາບຂອງ
MonitorແລະMonitorMixinໄດ້ຖືກປັບປຸງ. -
ປະສິດທິພາບຂອງ
CGI.escapeHTMLໄດ້ຖືກປັບປຸງ. -
ແຄຊ໌ເມທອດແບບ
Per-call-site, ເຊິ່ງມີມາຕັ້ງແຕ່ເວີຊັນ 1.9, ໄດ້ຖືກປັບປຸງ: ອັດຕາການເອີ້ນໃຊ້ແຄຊ໌ (cache hit rate) ເພີ່ມຂຶ້ນຈາກ 89% ເປັນ 94%. -
ເມທອດ
RubyVM::InstructionSequence#to_binaryສ້າງໄຟລ໌ໄບນາຣີທີ່ຄອມໄພລ໌ແລ້ວ. ຂະໜາດຂອງໄບນາຣີແມ່ນຫຼຸດລົງ.
ການປ່ຽນແປງທີ່ໜ້າສົນໃຈອື່ນໆ
-
ບາງໄລບຣາຣີມາດຕະຖານໄດ້ຖືກອັບເດດ.
-
Bundler 2.1.2
-
RubyGems 3.1.2
-
Racc 1.4.15
-
CSV 3.1.2
-
REXML 3.2.3
-
RSS 0.2.8
-
StringScanner 1.0.3
-
ບາງໄລບຣາຣີອື່ນໆທີ່ບໍ່ມີເວີຊັນຕົ້ນສະບັບກໍໄດ້ຖືກອັບເດດຄືກັນ.
-
-
ໄລບຣາຣີຕໍ່ໄປນີ້ຈະບໍ່ໄດ້ຖືກລວມເຂົ້າໃນແພັກເກດ gems ອີກຕໍ່ໄປ. ໃຫ້ຕິດຕັ້ງ gems ທີ່ກ່ຽວຂ້ອງເພື່ອໃຊ້ງານຄຸນສົມບັດເຫຼົ່ານີ້.
-
CMath (cmath gem)
-
Scanf (scanf gem)
-
Shell (shell gem)
-
Synchronizer (sync gem)
-
ThreadsWait (thwait gem)
-
E2MM (e2mmap gem)
-
-
profile.rbໄດ້ຖືກຖອນອອກຈາກໄລບຣາຣີມາດຕະຖານ. -
ຍົກລະດັບ
stdlibເປັນ gems ເລີ່ມຕົ້ນ-
Gems ເລີ່ມຕົ້ນຕໍ່ໄປນີ້ໄດ້ຖືກເຜີຍແຜ່ລົງໃນ rubygems.org ແລ້ວ
-
benchmark
-
cgi
-
delegate
-
getoptlong
-
net-pop
-
net-smtp
-
open3
-
pstore
-
singleton
-
-
Gems ເລີ່ມຕົ້ນຕໍ່ໄປນີ້ໄດ້ຖືກຍົກລະດັບສະເພາະໃນ ruby-core ເທົ່ານັ້ນ, ແຕ່ຍັງບໍ່ທັນ ໄດ້ຖືກເຜີຍແຜ່ລົງໃນ rubygems.org.
-
monitor
-
observer
-
timeout
-
tracer
-
uri
-
yaml
-
-
-
ການໃຊ້
Proc.newແລະprocໂດຍບໍ່ມີບລັອກ (block) ໃນເມທອດທີ່ຖືກເອີ້ນໃຊ້ພ້ອມກັບບລັອກ ຈະມີການແຈ້ງເຕືອນແລ້ວໃນຕອນນີ້. -
ການໃຊ້ lambda ໂດຍບໍ່ມີບລັອກໃນເມທອດທີ່ຖືກເອີ້ນໃຊ້ພ້ອມກັບບລັອກ ຈະເຮັດໃຫ້ເກີດຂໍ້ຜິດພາດ (exception).
-
ອັບເດດເວີຊັນ Unicode ແລະ ເວີຊັນ Emoji ຈາກ 11.0.0 ເປັນ 12.0.0.
-
ອັບເດດເວີຊັນ Unicode ເປັນ 12.1.0, ເພີ່ມການຮອງຮັບ U+32FF SQUARE ERA NAME REIWA.
-
Date.jisx0301,Date#jisx0301, ແລະDate.parseຮອງຮັບລັດຊະການໃໝ່ຂອງຍີ່ປຸ່ນ. -
ຕ້ອງການຄອມໄພເລີ (compiler) ທີ່ຮອງຮັບ C99.
ລາຍລະອຽດການປ່ຽນແປງ
ການຈັບຄູ່ຮູບແບບ [ແບບທົດລອງ]
ການຈັບຄູ່ຮູບແບບ (Pattern matching), ຄຸນສົມບັດທີ່ຖືກໃຊ້ຢ່າງກວ້າງຂວາງໃນພາສາຂຽນໂປຣແກຣມ ແບບຟັງຊັນ (functional programming), ໄດ້ຖືກນຳສະເໜີໃນຖານະຄຸນສົມບັດແບບທົດລອງ. ມັນສາມາດກວດສອບອັອບເຈັກ ແລະ ກຳນົດຄ່າຂອງມັນໄດ້ ຖ້າຫາກກົງກັບຮູບແບບທີ່ກຳນົດໄວ້.
require "json"
json = <<END
{
"name": "Alice",
"age": 30,
"children": [{ "name": "Bob", "age": 2 }]
}
END
case JSON.parse(json, symbolize_names: true)
in {name: "Alice", children: [{name: "Bob", age: age}]}
p age #=> 2
end
ການປັບປຸງ REPL
irb, ສະພາບແວດລ້ອມແບບໂຕ້ຕອບທີ່ແນບມານຳ (REPL; Read-Eval-Print-Loop), ຕອນນີ້ຮອງຮັບການແກ້ໄຂແບບຫຼາຍບັນທັດແລ້ວ. ມັນເຮັດວຽກໂດຍ reline, ເຊິ່ງເປັນໄລບຣາຣີ ທີ່ເຮັດວຽກຮ່ວມກັບ readline ໄດ້ ແລະ ຖືກຂຽນດ້ວຍພາສາ Ruby ແທ້ໆ. ນອກຈາກນັ້ນ ມັນຍັງຮອງຮັບການເຊື່ອມຕໍ່ກັບ rdoc ອີກດ້ວຍ. ໃນ irb ເຈົ້າສາມາດສະແດງເອກະສານອ້າງອີງ ສຳລັບຄລາດ (class), ໂມດູນ (module), ຫຼື ເມທອດ (method) ຕ່າງໆໄດ້.
ການບີບອັດ GC
ເວີຊັນນີ້ໄດ້ນຳສະເໜີ ການບີບອັດ GC (Compaction GC) ເຊິ່ງສາມາດຈັດລຽງພື້ນທີ່ໜ່ວຍຄວາມຈຳ ທີ່ກະຈັດກະຈາຍໃຫ້ເປັນລະບຽບຄືນໃໝ່ໄດ້.
ໂປຣແກຣມ Ruby ບາງຢ່າງທີ່ເຮັດວຽກແບບຫຼາຍເທຣດ (multi-threaded) ອາດເຮັດໃຫ້ໜ່ວຍຄວາມຈຳ ກະຈັດກະຈາຍ, ເຊິ່ງສົ່ງຜົນໃຫ້ມີການໃຊ້ໜ່ວຍຄວາມຈຳສູງ ແລະ ຄວາມໄວຫຼຸດລົງ.
ເມທອດ GC.compact ໄດ້ຖືກນຳມາໃຊ້ເພື່ອບີບອັດ heap. ຟັງຊັນນີ້ຈະບີບອັດອັອບເຈັກ ທີ່ຍັງໃຊ້ງານຢູ່ໃນ heap ເພື່ອໃຫ້ໃຊ້ຈຳນວນໜ້າ (pages) ຫຼຸດລົງ, ແລະ ເຮັດໃຫ້ heap ຮອງຮັບລະບົບ CoW (copy-on-write) ໄດ້ດີຂຶ້ນ.
ການແຍກອາຄິວເມັນຕາມຕຳແໜ່ງ ແລະ ຄຳສຳຄັນ
ການປ່ຽນອາຄິວເມັນຄຳສຳຄັນ (keyword arguments) ແລະ ອາຄິວເມັນຕາມຕຳແໜ່ງ (positional arguments) ໂດຍອັດຕະໂນມັດແມ່ນບໍ່ແນະນຳໃຫ້ໃຊ້ແລ້ວ, ແລະ ການປ່ຽນແປງນີ້ຈະຖືກຖອນອອກໃນ Ruby 3.
ການປ່ຽນແປງ
-
ເມື່ອມີການເອີ້ນໃຊ້ເມທອດໂດຍສົ່ງ Hash ເປັນອາຄິວເມັນສຸດທ້າຍ, ໂດຍທີ່ບໍ່ໄດ້ສົ່ງຄຳສຳຄັນໃດໆ, ແລະ ເມທອດນັ້ນຮອງຮັບຄຳສຳຄັນ, ຈະມີການແຈ້ງເຕືອນເກີດຂຶ້ນ. ເພື່ອໃຫ້ Hash ຍັງຖືກປະຕິບັດ ຄືກັບເປັນຄຳສຳຄັນຕໍ່ໄປ, ໃຫ້ເພີ່ມຕົວດຳເນີນການ double splat (
**) ເພື່ອຫຼີກເວັ້ນ ການແຈ້ງເຕືອນ ແລະ ເພື່ອໃຫ້ແນ່ໃຈວ່າຈະເຮັດວຽກໄດ້ຖືກຕ້ອງໃນ Ruby 3.def foo(key: 42); end; foo({key: 42}) # warned def foo(**kw); end; foo({key: 42}) # warned def foo(key: 42); end; foo(**{key: 42}) # OK def foo(**kw); end; foo(**{key: 42}) # OK -
ເມື່ອມີການສົ່ງຄຳສຳຄັນໃຫ້ກັບເມທອດທີ່ຮອງຮັບຄຳສຳຄັນ, ແຕ່ສົ່ງອາຄິວເມັນຕາມຕຳແໜ່ງ ບໍ່ຄົບຕາມທີ່ຕ້ອງການ, ຄຳສຳຄັນເຫຼົ່ານັ້ນຈະຖືກຖືວ່າເປັນອາຄິວເມັນຕາມຕຳແໜ່ງອັນສຸດທ້າຍ ແລະ ຈະມີການແຈ້ງເຕືອນເກີດຂຶ້ນ. ໃຫ້ສົ່ງອາຄິວເມັນເປັນ Hash ແທນຄຳສຳຄັນ ເພື່ອຫຼີກເວັ້ນການແຈ້ງເຕືອນ ແລະ ເພື່ອຄວາມຖືກຕ້ອງໃນ Ruby 3.
def foo(h, **kw); end; foo(key: 42) # warned def foo(h, key: 42); end; foo(key: 42) # warned def foo(h, **kw); end; foo({key: 42}) # OK def foo(h, key: 42); end; foo({key: 42}) # OK -
ເມື່ອເມທອດຮອງຮັບຄຳສຳຄັນບາງຢ່າງແຕ່ບໍ່ຮອງຮັບ keyword splat, ແລະ ມີການສົ່ງ Hash ຫຼື keyword splat ທີ່ມີທັງຄີ (key) ແບບ Symbol ແລະ ບໍ່ແມ່ນ Symbol, Hash ນັ້ນຈະຍັງຖືກແຍກສ່ວນຢູ່ ແຕ່ຈະມີການແຈ້ງເຕືອນເກີດຂຶ້ນ. ເຈົ້າຈຳເປັນຕ້ອງອັບເດດໂຄ້ດ ໃຫ້ສົ່ງ Hash ແຍກກັນ ເພື່ອໃຫ້ເຮັດວຽກໄດ້ຖືກຕ້ອງໃນ Ruby 3.
def foo(h={}, key: 42); end; foo("key" => 43, key: 42) # warned def foo(h={}, key: 42); end; foo({"key" => 43, key: 42}) # warned def foo(h={}, key: 42); end; foo({"key" => 43}, key: 42) # OK -
ຖ້າເມທອດບໍ່ໄດ້ຮອງຮັບຄຳສຳຄັນ, ແຕ່ຖືກເອີ້ນໃຊ້ດ້ວຍຄຳສຳຄັນ, ຄຳສຳຄັນເຫຼົ່ານັ້ນຈະຖືກ ປະຕິບັດຄືກັບ Hash ຕາມຕຳແໜ່ງ ໂດຍບໍ່ມີການແຈ້ງເຕືອນ. ຮູບແບບນີ້ຈະຍັງຄົງໃຊ້ງານ ໄດ້ຕໍ່ໄປໃນ Ruby 3.
def foo(opt={}); end; foo( key: 42 ) # OK -
ອະນຸຍາດໃຫ້ໃຊ້ຄ່າທີ່ບໍ່ແມ່ນ Symbol ເປັນຄີຂອງອາຄິວເມັນຄຳສຳຄັນໄດ້ ຖ້າຫາກເມທອດນັ້ນ ຮອງຮັບຄຳສຳຄັນແບບໃດກໍໄດ້ (arbitrary keywords).
def foo(**kw); p kw; end; foo("str" => 1) #=> {"str"=>1} -
ອະນຸຍາດໃຫ້ໃຊ້
**nilໃນການກຳນົດເມທອດ ເພື່ອລະບຸຢ່າງຊັດເຈນວ່າເມທອດນັ້ນ ບໍ່ຮອງຮັບຄຳສຳຄັນ. ການເອີ້ນໃຊ້ເມທອດດັ່ງກ່າວດ້ວຍຄຳສຳຄັນຈະເຮັດໃຫ້ເກີດArgumentError.def foo(h, **nil); end; foo(key: 1) # ArgumentError def foo(h, **nil); end; foo(**{key: 1}) # ArgumentError def foo(h, **nil); end; foo("str" => 1) # ArgumentError def foo(h, **nil); end; foo({key: 1}) # OK def foo(h, **nil); end; foo({"str" => 1}) # OK -
ການສົ່ງ keyword splat ທີ່ວ່າງເປົ່າ ໃຫ້ກັບເມທອດທີ່ບໍ່ຮອງຮັບຄຳສຳຄັນ ຈະບໍ່ເປັນການສົ່ງ Hash ທີ່ວ່າງເປົ່າອີກຕໍ່ໄປ, ເວັ້ນເສຍແຕ່ Hash ທີ່ວ່າງເປົ່ານັ້ນຈຳເປັນສຳລັບພາຣາມິເຕີ ທີ່ບັງຄັບໄວ້, ເຊິ່ງໃນກໍລະນີນັ້ນຈະມີການແຈ້ງເຕືອນເກີດຂຶ້ນ. ໃຫ້ຖອນ double splat ອອກ ເພື່ອສົ່ງເປັນ Hash ຕາມຕຳແໜ່ງແທນ.
h = {}; def foo(*a) a end; foo(**h) # [] h = {}; def foo(a) a end; foo(**h) # {} and warning h = {}; def foo(*a) a end; foo(h) # [{}] h = {}; def foo(a) a end; foo(h) # {}
ຖ້າເຈົ້າຕ້ອງການປິດການແຈ້ງເຕືອນການຍົກເລີກການໃຊ້ງານເຫຼົ່ານີ້, ກະລຸນາໃຊ້ ຄຳສັ່ງ (command-line argument) -W:no-deprecated ຫຼື ເພີ່ມ Warning[:deprecated] = false ລົງໃນໂຄ້ດຂອງເຈົ້າ.
ເບິ່ງລາຍລະອຽດເພີ່ມເຕີມກ່ຽວກັບເວີຊັນນີ້ໄດ້ທີ່ ປະກາດການເປີດຕົວຈາກຕົ້ນທາງ.
Jekyll 4.0
ຕົວສ້າງໜ້າເວັບແບບສະແຕຕິກ (static page generator) Jekyll ແລະ ປລັກອິນຕ່າງໆ ໄດ້ຖືກອັບເດດເປັນເວີຊັນ 4.0.0. ເວີຊັນນີ້ມີການປ່ຽນແປງຕໍ່ໄປນີ້ເມື່ອທຽບກັບເວີຊັນ 3.8:
-
ການປັບປຸງປະສິດທິພາບຢ່າງຫຼວງຫຼາຍ
-
ການປັບປຸງໂຄ້ດໃຫ້ສະອາດ ແລະ ແກ້ໄຂບັກ
-
ການປ່ຽນແປງເລັກນ້ອຍອື່ນໆ ທີ່ບໍ່ສາມາດເຮັດວຽກຮ່ວມກັບເວີຊັນກ່ອນໜ້ານີ້ໄດ້
ສຳລັບຂໍ້ມູນເພີ່ມເຕີມກ່ຽວກັບ Jekyll 4.0.0, ເບິ່ງໄດ້ທີ່ https://jekyllrb.com/news/2019/08/20/jekyll-4-0-0-released/.
Want to help? Learn how to contribute to Fedora Docs ›