การเปิดตัวภาษาโปรแกรม Julia 1.8

ภาษาการเขียนโปรแกรม Julia 1.8 วางจำหน่ายแล้ว โดยผสมผสานคุณสมบัติต่างๆ เช่น ประสิทธิภาพสูง การรองรับการพิมพ์แบบไดนามิก และเครื่องมือในตัวสำหรับการเขียนโปรแกรมแบบขนาน ไวยากรณ์ของ Julia ใกล้เคียงกับ MATLAB โดยยืมองค์ประกอบบางอย่างจาก Ruby และ Lisp วิธีการจัดการสตริงนั้นชวนให้นึกถึง Perl รหัสโครงการเผยแพร่ภายใต้ใบอนุญาต MIT

คุณสมบัติที่สำคัญของภาษา:

  • ประสิทธิภาพสูง: หนึ่งในเป้าหมายหลักของโครงการคือการบรรลุประสิทธิภาพที่ใกล้เคียงกับโปรแกรม C คอมไพเลอร์ Julia อิงตามโครงการ LLVM และสร้างรหัสเครื่องเนทีฟที่มีประสิทธิภาพสำหรับแพลตฟอร์มเป้าหมายจำนวนมาก
  • รองรับกระบวนทัศน์การเขียนโปรแกรมที่หลากหลาย รวมถึงองค์ประกอบของการเขียนโปรแกรมเชิงวัตถุและการทำงาน ไลบรารีมาตรฐานจัดเตรียมฟังก์ชันสำหรับ I/O แบบอะซิงโครนัส การจัดการกระบวนการ การบันทึก การทำโปรไฟล์ และการจัดการแพ็คเกจ เหนือสิ่งอื่นใด
  • การพิมพ์แบบไดนามิก: ภาษาไม่ต้องการคำจำกัดความที่ชัดเจนของประเภทสำหรับตัวแปร โดยเปรียบเทียบกับภาษาโปรแกรมสคริปต์ รองรับโหมดโต้ตอบ
  • ความสามารถเพิ่มเติมในการระบุประเภทอย่างชัดเจน
  • ไวยากรณ์ที่ยอดเยี่ยมสำหรับการคำนวณตัวเลข การคำนวณทางวิทยาศาสตร์ ระบบแมชชีนเลิร์นนิง และการสร้างภาพข้อมูล รองรับประเภทข้อมูลตัวเลขและเครื่องมือสำหรับการคำนวณแบบขนาน
  • ความสามารถในการเรียกใช้ฟังก์ชันโดยตรงจากไลบรารี C โดยไม่ต้องเพิ่มเลเยอร์เพิ่มเติม

การเปลี่ยนแปลงที่สำคัญใน Julia 1.8:

  • คุณสมบัติภาษาใหม่
    • ขณะนี้ฟิลด์ของโครงสร้างที่ไม่แน่นอนสามารถใส่คำอธิบายประกอบเป็นค่าคงที่เพื่อป้องกันไม่ให้มีการเปลี่ยนแปลงและอนุญาตการปรับให้เหมาะสม
    • คำอธิบายประกอบประเภทสามารถเพิ่มลงในตัวแปรโกลบอลได้
    • อาร์เรย์ n มิติที่ว่างเปล่าสามารถสร้างได้โดยใช้เครื่องหมายอัฒภาคหลายตัวภายในวงเล็บเหลี่ยม เช่น "[;;;]" จะสร้างอาร์เรย์ 0x0x0
    • ลองบล็อกสามารถเลือกมีบล็อกอื่นได้ ซึ่งจะดำเนินการทันทีหลังจากเนื้อหาหลัก หากไม่มีข้อผิดพลาดเกิดขึ้น
    • @inline และ @noinline สามารถวางไว้ภายในเนื้อหาของฟังก์ชันได้ ช่วยให้คุณสามารถใส่คำอธิบายประกอบฟังก์ชันที่ไม่ระบุตัวตนได้
    • ขณะนี้ @inline และ @noinline สามารถนำไปใช้กับฟังก์ชันในไซต์การโทรหรือบล็อกเพื่อบังคับให้รวมการเรียกใช้ฟังก์ชันที่เกี่ยวข้อง (หรือไม่รวมอยู่ด้วย)
    • อนุญาตให้ใช้ ∀, ∃ และ ∄ เป็นอักขระระบุ
    • เพิ่มการรองรับข้อกำหนด Unicode 14.0.0
    • สามารถใช้เมธอด Module(:name, false, false) เพื่อสร้างโมดูลที่ไม่มีชื่อ ไม่นำเข้า Base หรือ Core และไม่มีการอ้างอิงถึงตัวมันเอง
  • การเปลี่ยนแปลงของภาษา
    • ออบเจ็กต์งานที่สร้างขึ้นใหม่ (@spawn, @async ฯลฯ) ขณะนี้มี world_age สำหรับวิธีการจากงานหลักเมื่อสร้างขึ้น ช่วยให้สามารถดำเนินการได้อย่างเหมาะสมที่สุด ตัวเลือกการเปิดใช้งานก่อนหน้านี้มีให้ใช้งานโดยใช้เมธอด Base.involvest
    • ขณะนี้คำสั่งการจัดรูปแบบสองทิศทางที่ไม่สมดุลของ Unicode ถูกห้ามในสตริงและความคิดเห็นเพื่อหลีกเลี่ยงการแทรก
    • ขณะนี้ Base.ifelse ถูกกำหนดให้เป็นฟังก์ชันทั่วไปแทนที่จะเป็นฟังก์ชันในตัว ทำให้แพ็คเกจสามารถขยายคำจำกัดความได้
    • ทุกการกำหนดให้กับตัวแปรโกลบอลตอนนี้จะต้องผ่านการเรียกเพื่อแปลง (Any, x) หรือแปลง (T, x) ก่อน หากตัวแปรโกลบอลถูกประกาศให้เป็นประเภท T ก่อนที่จะใช้ตัวแปรโกลบอล ตรวจสอบให้แน่ใจว่าการแปลงค่าคงที่ (ใดๆ , x) === x เป็นจริงเสมอ มิฉะนั้นอาจทำให้เกิดพฤติกรรมที่ไม่คาดคิดได้
    • ฟังก์ชันในตัวตอนนี้คล้ายกับฟังก์ชันทั่วไปและสามารถระบุโดยทางโปรแกรมโดยใช้วิธีการได้
  • การปรับปรุงคอมไพเลอร์/รันไทม์
    • เวลาบูตลดลงประมาณ 25%
    • คอมไพเลอร์ที่ใช้ LLVM ได้ถูกแยกออกจากไลบรารีรันไทม์ไปยังไลบรารีใหม่ libjulia-codegen โหลดไว้ตามค่าเริ่มต้น ดังนั้นจึงไม่ควรมีการเปลี่ยนแปลงใดๆ ในระหว่างการใช้งานปกติ ในการปรับใช้ที่ไม่จำเป็นต้องมีคอมไพเลอร์ (เช่น อิมเมจระบบซึ่งมีโค้ดที่จำเป็นทั้งหมดถูกคอมไพล์ไว้ล่วงหน้า) ไลบรารีนี้ (และการพึ่งพา LLVM) สามารถละเว้นได้
    • การอนุมานแบบมีเงื่อนไขสามารถทำได้โดยการส่งอาร์กิวเมนต์ไปยังเมธอด ตัวอย่างเช่น สำหรับ Base.ifelse(isa(x, Int), x, 0) จะส่งกลับ ::Int แม้ว่าจะไม่ทราบประเภทของ x ก็ตาม
    • SROA (การแทนที่สเกลาร์ของมวลรวม) ได้รับการปรับปรุง: กำจัดการเรียก getfield ด้วยฟิลด์ส่วนกลางแบบถาวร กำจัดโครงสร้างที่ไม่แน่นอนด้วยฟิลด์ที่ไม่ได้เตรียมใช้งาน ปรับปรุงประสิทธิภาพและการจัดการการเรียก getfield ที่ซ้อนกัน
    • การอนุมานประเภทจะติดตามเอฟเฟกต์ต่างๆ—ผลข้างเคียงและการไม่ดรอป คำนึงถึงการเผยแพร่อย่างต่อเนื่อง ซึ่งช่วยปรับปรุงประสิทธิภาพเวลาคอมไพล์ได้อย่างมาก ในบางกรณี ตัวอย่างเช่น การเรียกใช้ฟังก์ชันที่ไม่สามารถอินไลน์ได้แต่ไม่ส่งผลต่อผลลัพธ์จะถูกละทิ้งขณะรันไทม์ กฎสำหรับเอฟเฟกต์สามารถเขียนทับได้ด้วยตนเองโดยใช้มาโคร Base.@assume_effects
    • การคอมไพล์ล่วงหน้า (ด้วยคำสั่งการคอมไพล์ล่วงหน้าที่ชัดเจนหรือเวิร์กโหลดที่ระบุ) ตอนนี้บันทึกโค้ดที่กำหนดประเภทมากขึ้น ส่งผลให้การดำเนินการในครั้งแรกเร็วขึ้น การรวมวิธีการ/ประเภทใหม่ใดๆ ที่จำเป็นสำหรับแพ็คเกจของคุณ โดยไม่คำนึงถึงวิธีการเหล่านั้นถูกกำหนดไว้ที่ใด ตอนนี้สามารถถูกแคชไว้ในไฟล์การคอมไพล์ล่วงหน้าได้ หากพวกมันถูกเรียกโดยวิธีการที่เป็นของแพ็คเกจของคุณ
  • การเปลี่ยนแปลงพารามิเตอร์บรรทัดคำสั่ง
    • ลักษณะการทำงานเริ่มต้นสำหรับการตรวจสอบการประกาศ @inbounds ขณะนี้เป็นตัวเลือกอัตโนมัติใน "--check-bounds=yes|no|auto"
    • ตัวเลือก "--strip-metadata" ใหม่เพื่อลบสตริงเอกสาร ข้อมูลตำแหน่งต้นทาง และชื่อตัวแปรโลคัลเมื่อสร้างอิมเมจระบบ
    • ตัวเลือกใหม่ "--strip-ir" เพื่อให้คอมไพลเลอร์ลบการแสดงซอร์สโค้ดระดับกลางเมื่อสร้างอิมเมจระบบ รูปภาพที่ได้จะใช้งานได้ก็ต่อเมื่อใช้ "--compile=all" หรือหากโค้ดที่จำเป็นทั้งหมดได้รับการคอมไพล์ล่วงหน้าแล้ว
    • หากระบุอักขระ "-" แทนชื่อไฟล์ โค้ดที่ปฏิบัติการได้จะถูกอ่านจากสตรีมอินพุตมาตรฐาน
  • การเปลี่ยนแปลงการสนับสนุนมัลติเธรด
    • Threads.@threads โดยค่าเริ่มต้นจะใช้ตัวเลือกการกำหนดเวลาใหม่ :dynamic ซึ่งแตกต่างจากโหมดก่อนหน้าตรงที่การวนซ้ำจะถูกกำหนดเวลาแบบไดนามิกในเธรดของผู้ปฏิบัติงานที่มีอยู่ แทนที่จะถูกกำหนดให้กับแต่ละเธรด โหมดนี้ช่วยให้กระจายลูปที่ซ้อนกันได้ดีขึ้นด้วย @spawn และ @threads
  • ฟังก์ชั่นห้องสมุดใหม่
    • Eachsplit(str) เพื่อดำเนินการ split(str) หลายครั้ง
    • allequal(itr) เพื่อทดสอบว่าองค์ประกอบทั้งหมดในตัววนซ้ำเท่ากันหรือไม่
    • hardlink(src, dst) สามารถใช้สร้างฮาร์ดลิงก์ได้
    • setcpuaffinity(cmd, cpus) เพื่อตั้งค่าความสัมพันธ์ของคอร์โปรเซสเซอร์กับกระบวนการที่เรียกใช้งาน
    • diskstat(path=pwd()) เพื่อรับสถิติดิสก์
    • แมโคร @showtime ใหม่เพื่อแสดงทั้งบรรทัดที่กำลังประเมินและรายงาน @time
    • เพิ่มมาโคร LazyString และlazy "str" ​​เพื่อรองรับการสร้างข้อความแสดงข้อผิดพลาดแบบ Lazy ในเส้นทางข้อผิดพลาด
    • แก้ไขปัญหาการทำงานพร้อมกันใน Dict และวัตถุที่ได้รับอื่นๆ เช่น คีย์ (:: Dict), ค่า (:: Dict) และชุด ขณะนี้สามารถเรียกใช้วิธีการวนซ้ำในพจนานุกรมหรือชุดได้ ตราบใดที่ไม่มีการเรียกที่แก้ไขพจนานุกรมหรือชุด
    • ขณะนี้ @time และ @timev มีคำอธิบายเพิ่มเติม ซึ่งช่วยให้คุณสามารถใส่คำอธิบายประกอบรายงานแหล่งที่มาของเวลาได้ เป็นต้น @time "กำลังประเมิน foo" foo()
    • range ใช้จุดหยุดหรือความยาวเป็นอาร์กิวเมนต์คำหลักเท่านั้น
    • ความแม่นยำและความแม่นยำยอมรับฐานเป็นคำหลักแล้ว
    • ขณะนี้ออบเจ็กต์ซ็อกเก็ต TCP มีวิธีการ closewrite และสนับสนุนการใช้โหมดเปิดครึ่งหนึ่ง
    • extrema ยอมรับข้อโต้แย้งเริ่มต้นแล้ว
    • ตอนนี้ Iterators.countfrom ยอมรับประเภทใดๆ ก็ตามที่กำหนดวิธีการ +
    • ตอนนี้ @time จัดสรร % ของเวลาที่ใช้ในการคอมไพล์ใหม่ด้วยประเภทที่เปลี่ยนแปลง
  • การเปลี่ยนแปลงไลบรารีมาตรฐาน
    • คีย์ที่มีค่า ตอนนี้ไม่มีสิ่งใดถูกลบออกจากสภาพแวดล้อมใน addenv
    • Iterators.reverse (และสุดท้าย) รองรับแต่ละบรรทัด
    • ฟังก์ชันความยาวสำหรับช่วงของบางประเภทจะไม่ตรวจสอบจำนวนเต็มล้นอีกต่อไป มีฟังก์ชันใหม่ check_length ซึ่งมีตรรกะควบคุมการถ่ายโอนบิต หากจำเป็น ให้ใช้ SaferIntegers.jl เพื่อสร้างประเภทช่วง
    • Iterators.Reverse iterator ดำเนินการกลับดัชนีแต่ละรายการหากเป็นไปได้
  • ผู้จัดการแพคเกจ
    • ตัวบ่งชี้ ⌃ และ ⌅ ใหม่ ถัดจากแพ็คเกจในสถานะ “pkg>” ซึ่งมีเวอร์ชันใหม่ให้ใช้งาน ⌅ บ่งชี้ว่าไม่สามารถติดตั้งเวอร์ชันใหม่ได้
    • อาร์กิวเมนต์ล้าสมัย::Bool ใหม่เป็น Pkg.status (--ล้าสมัยหรือ -o ในโหมด REPL) เพื่อแสดงข้อมูลเกี่ยวกับแพ็คเกจจากเวอร์ชันก่อนหน้า
    • อาร์กิวเมนต์ compat::Bool ใหม่เป็น Pkg.status (--compat หรือ -c ในโหมด REPL) เพื่อแสดงรายการ [compat] ใด ๆ ใน Project.toml
    • โหมด "pkg>compat" แบบใหม่ (และ Pkg.compat) สำหรับการตั้งค่ารายการความเข้ากันได้ของโครงการ จัดเตรียมตัวแก้ไขแบบโต้ตอบผ่าน "pkg>compat" หรือการควบคุมบันทึกโดยตรงผ่าน "pkg>Foo 0.4,0.5" ซึ่งสามารถโหลดบันทึกปัจจุบันผ่านการเติมแท็บให้สมบูรณ์ นั่นคือ "pkg> รองรับ Fo " ได้รับการอัปเดตเป็น "pkg>Foo 0.4,0.5" โดยอัตโนมัติเพื่อให้สามารถแก้ไขรายการที่มีอยู่ได้
    • ขณะนี้ Pkg พยายามดาวน์โหลดแพ็คเกจจากเซิร์ฟเวอร์แพ็คเกจเท่านั้น หากเซิร์ฟเวอร์ตรวจสอบรีจิสทรีที่มีแพ็คเกจอยู่
    • Pkg.instantiate จะส่งคำเตือนเมื่อ Project.toml ไม่ซิงค์กับ Manifest.toml โดยจะทำสิ่งนี้โดยอิงตามแฮชของ deps ของโปรเจ็กต์และเรกคอร์ดที่เข้ากันได้ (ช่องอื่นๆ จะถูกละเว้น) ในไฟล์ Manifest เมื่อทำการแก้ไข เพื่อให้สามารถตรวจพบการเปลี่ยนแปลงใดๆ ใน Project.toml deps หรือเรกคอร์ดที่เข้ากันได้โดยไม่ต้องทำการแก้ไขใหม่
    • หาก "pkg>add" ไม่พบแพ็คเกจที่มีชื่อที่กำหนด ตอนนี้จะแนะนำแพ็คเกจที่มีชื่อคล้ายกันที่สามารถเพิ่มได้
    • เวอร์ชันของ Julia ที่จัดเก็บไว้ใน Manifest จะไม่มีหมายเลขบิลด์อีกต่อไป ซึ่งหมายความว่าต้นแบบจะถูกเขียนเป็น 1.9.0-DEV
    • การทดสอบการยกเลิก "pkg>" จะถูกตรวจพบได้สม่ำเสมอมากขึ้น และจะถูกส่งกลับไปยัง REPL อย่างถูกต้อง
  • InteractiveUtils
    • มาโคร @time_imports ใหม่เพื่อรายงานเวลาที่ใช้ในการนำเข้าแพ็คเกจและการขึ้นต่อกันของแพ็คเกจ โดยเน้นเวลาคอมไพล์และคอมไพล์ใหม่เป็นเปอร์เซ็นต์ของการนำเข้า
  • พีชคณิตเชิงเส้น
    • โมดูลย่อย BLAS รองรับฟังก์ชัน BLAS spr! ระดับ 2 แล้ว
    • ขณะนี้ไลบรารีมาตรฐาน LinearAlgebra.jl เป็นอิสระอย่างสมบูรณ์จาก SparseArrays.jl ทั้งจากซอร์สโค้ดและมุมมองการทดสอบหน่วย ด้วยเหตุนี้ อาร์เรย์แบบกระจายจะไม่ถูกส่งคืนอีกต่อไป (โดยปริยาย) โดยวิธีการจาก LinearAlgebra ที่นำไปใช้กับวัตถุ Base หรือ LinearAlgebra สิ่งนี้นำไปสู่การเปลี่ยนแปลงที่สำคัญดังต่อไปนี้:
      • การต่อข้อมูลโดยใช้เมทริกซ์ "กระจัดกระจาย" พิเศษ (เช่น เส้นทแยงมุม) ตอนนี้ส่งคืนเมทริกซ์หนาแน่น ด้วยเหตุนี้ ฟิลด์ D1 และ D2 ของอ็อบเจ็กต์ SVD ที่สร้างขึ้นโดยการเรียก getproperty จึงเป็นเมทริกซ์ที่มีความหนาแน่นสูง
      • วิธีการที่คล้ายกัน (::SpecialSparseMatrix, ::Type, ::Dims) ส่งคืนเมทริกซ์ null ที่หนาแน่น ผลที่ตามมาคือผลคูณของเมทริกซ์ตรีทแยงมุมสอง สาม และสมมาตรซึ่งต่อกันทำให้เกิดเมทริกซ์หนาแน่น นอกจากนี้ การสร้างเมทริกซ์ที่คล้ายกันด้วยอาร์กิวเมนต์สามตัวจากเมทริกซ์ "กระจัดกระจาย" พิเศษจากเมทริกซ์ (ไม่คงที่) ในขณะนี้ล้มเหลวเนื่องจาก "ศูนย์(::ประเภท{เมทริกซ์{T}})"
  • พิมพ์ฉ
    • ขณะนี้ %s และ %c ใช้อาร์กิวเมนต์ความกว้างของข้อความเพื่อจัดรูปแบบความกว้าง
  • โปรไฟล์
    • การทำโปรไฟล์โหลด CPU จะบันทึกข้อมูลเมตา รวมถึงเธรดและงานต่างๆ Profile.print() มีอาร์กิวเมนต์ groupby ใหม่ที่อนุญาตให้คุณจัดกลุ่มเธรด งานหรือเธรดย่อย/งาน งาน/เธรด และอาร์กิวเมนต์เธรดและงานเพื่อจัดเตรียมการกรอง นอกจากนี้ เปอร์เซ็นต์การใช้งานจะถูกรายงานเป็นภาพรวมหรือต่อเธรด ขึ้นอยู่กับว่าเธรดไม่ได้ใช้งานในแต่ละตัวอย่างหรือไม่ Profile.fetch() รวมข้อมูลเมตาใหม่ตามค่าเริ่มต้น สำหรับความเข้ากันได้แบบย้อนหลังกับผู้ใช้ภายนอกของข้อมูลโปรไฟล์ คุณสามารถยกเว้นได้โดยการส่ง include_meta=false
    • โมดูล Profile.Allocs ใหม่ช่วยให้คุณสามารถโปรไฟล์การจัดสรรหน่วยความจำได้ การติดตามสแต็กของประเภทและขนาดของการจัดสรรหน่วยความจำแต่ละรายการจะถูกบันทึกไว้ และอาร์กิวเมนต์ Sample_rate ช่วยให้สามารถข้ามการจัดสรรตามจำนวนที่กำหนดได้ ช่วยลดค่าใช้จ่ายด้านประสิทธิภาพ
    • ขณะนี้ผู้ใช้สามารถเรียกใช้โปรไฟล์ CPU ที่มีระยะเวลาคงที่ในขณะที่งานกำลังทำงานอยู่โดยไม่ต้องโหลดโปรไฟล์ก่อน และรายงานจะแสดงในขณะที่ทำงาน บน MacOS และ FreeBSD ให้กด ctrl-t หรือโทร SIGINFO สำหรับแพลตฟอร์มอื่น ให้เปิดใช้งาน SIGUSR1 เช่น % ฆ่า -USR1 $julia_pid สิ่งนี้ไม่พร้อมใช้งานบน Windows
  • ตัวแทน
    • ตอนนี้ RadioMenu รองรับแป้นพิมพ์ลัดเพิ่มเติมสำหรับการเลือกตัวเลือกโดยตรง
    • ลำดับ "?(x, y" ตามด้วยการกด TAB จะแสดงวิธีการทั้งหมดที่สามารถเรียกด้วยอาร์กิวเมนต์ x, y, .... (ช่องว่างนำหน้าป้องกันไม่ให้คุณเข้าสู่โหมดวิธีใช้) "MyModule.?(x, y " จำกัดการค้นหาไว้ที่ "MyModule" การกด TAB กำหนดให้อย่างน้อยหนึ่งอาร์กิวเมนต์ต้องเป็นประเภทที่เฉพาะเจาะจงมากกว่า Any หรือใช้ SHIFT-TAB แทน TAB เพื่ออนุญาตวิธีการใดๆ ที่เข้ากันได้
    • ข้อผิดพลาดของตัวแปรโกลบอลตัวใหม่ช่วยให้คุณได้รับข้อยกเว้นล่าสุด ซึ่งคล้ายกับพฤติกรรมของคำตอบที่มีการตอบกลับครั้งล่าสุด การป้อนข้อผิดพลาดจะพิมพ์ข้อมูลข้อยกเว้นซ้ำ
  • อาร์เรย์ที่กระจัดกระจาย
    • ย้ายโค้ด SparseArrays จากที่เก็บ Julia ไปยังที่เก็บ SparseArrays.jl ภายนอก
    • ฟังก์ชันการต่อข้อมูลใหม่ sparse_hcat, sparse_vcat และ sparse_hvcat ส่งคืนประเภท SparseMatrixCSC โดยไม่คำนึงถึงประเภทของอาร์กิวเมนต์อินพุต นี่กลายเป็นสิ่งจำเป็นในการรวมกลไกในการติดเมทริกซ์หลังจากแยกโค้ด LinearAlgebra.jl และ SparseArrays.jl
  • เข้าสู่ระบบ
    • ระดับการบันทึกมาตรฐาน BelowMinLevel, Debug, ข้อมูล, คำเตือน, ข้อผิดพลาด และ AboveMaxLevel จะถูกส่งออกจากไลบรารีการบันทึกมาตรฐานแล้ว
  • Unicode
    • เพิ่มฟังก์ชัน isequal_normalized เพื่อตรวจสอบความเทียบเท่าของ Unicode โดยไม่ต้องสร้างสตริงที่ทำให้เป็นมาตรฐานอย่างชัดเจน
    • ขณะนี้ฟังก์ชัน Unicode.normalize ยอมรับคำสำคัญ Charttransform ซึ่งสามารถใช้เพื่อจัดเตรียมการแมปอักขระแบบกำหนดเองได้ และฟังก์ชัน Unicode.julia_chartransform ยังมีให้เพื่อสร้างการแมปที่ใช้เมื่อ Julia parser ทำให้ตัวระบุเป็นมาตรฐาน
  • ทดสอบ
    • ตอนนี้สามารถใช้ '@test_throws "some message" triggers_error()' เพื่อทดสอบว่าข้อความแสดงข้อผิดพลาดที่แสดงมีข้อผิดพลาด "บางข้อความ" หรือไม่ โดยไม่คำนึงถึงประเภทข้อยกเว้นเฉพาะเจาะจง นอกจากนี้ยังสนับสนุนนิพจน์ทั่วไป รายการสตริง และฟังก์ชันที่ตรงกันอีกด้วย
    • @testset foo() สามารถใช้เพื่อสร้างชุดทดสอบจากฟังก์ชันที่กำหนดได้แล้ว ชื่อกรณีทดสอบคือชื่อของฟังก์ชันที่ถูกเรียก ฟังก์ชันที่ถูกเรียกอาจมี @test และคำจำกัดความ @testset อื่นๆ รวมถึงการเรียกไปยังฟังก์ชันอื่นๆ ในขณะที่บันทึกผลการทดสอบระดับกลางทั้งหมด
    • TestLogger และ LogRecord ถูกส่งออกจากไลบรารีทดสอบมาตรฐานแล้ว
  • กระจาย
    • ขณะนี้ SSHManager รองรับเธรดผู้ปฏิบัติงานด้วย wrapper csh/tcsh ผ่านเมธอด addprocs() และพารามิเตอร์ shell=:csh
  • การเปลี่ยนแปลงอื่นๆ
    • GC.enable_logging(true) สามารถใช้เพื่อบันทึกการดำเนินการรวบรวมขยะแต่ละครั้งพร้อมเวลาและจำนวนหน่วยความจำที่รวบรวม

ที่มา: opennet.ru

เพิ่มความคิดเห็น