มีการเผยแพร่ภาษาการเขียนโปรแกรม Crystal 1.16 ซึ่งนักพัฒนาพยายามรวมความสะดวกสบายของการพัฒนาในภาษา Ruby เข้ากับลักษณะการทำงานของแอปพลิเคชันที่สูงของภาษา C ไวยากรณ์ของ Crystal ใกล้เคียงกับ Ruby แต่เข้ากันไม่ได้อย่างสมบูรณ์ แม้ว่าโปรแกรม Ruby บางโปรแกรมจะทำงานโดยไม่มีการแก้ไขก็ตาม รหัสคอมไพเลอร์เขียนด้วย Crystal และเผยแพร่ภายใต้ลิขสิทธิ์ Apache 2.0
ภาษาใช้การตรวจสอบประเภทแบบคงที่ ซึ่งนำมาใช้โดยไม่จำเป็นต้องระบุชนิดของตัวแปรและอาร์กิวเมนต์วิธีการในโค้ดอย่างชัดเจน โปรแกรม Crystal จะถูกคอมไพล์เป็นไฟล์ปฏิบัติการ โดยมีการประเมินแมโคร และสร้างโค้ดในเวลาคอมไพล์ ในโปรแกรม Crystal คุณสามารถเชื่อมต่อไบนดิ้งที่เขียนด้วยภาษา C ได้ การประมวลผลโค้ดแบบคู่ขนานจะดำเนินการโดยใช้คีย์เวิร์ด "spawn" ซึ่งช่วยให้คุณสามารถรันงานพื้นหลังในโหมดอะซิงโครนัสโดยไม่บล็อกเธรดหลักในรูปแบบของเธรดน้ำหนักเบาที่เรียกว่าไฟเบอร์
ไลบรารีมาตรฐานมีชุดฟังก์ชันทั่วไป รวมถึงเครื่องมือสำหรับประมวลผล CSV, YAML และ JSON ส่วนประกอบสำหรับการสร้างเซิร์ฟเวอร์ HTTP และการรองรับ WebSocket ในระหว่างการพัฒนา คุณสามารถใช้คำสั่ง "crystal play" ซึ่งจะสร้างอินเทอร์เฟซเว็บ (localhost:8080 โดยค่าเริ่มต้น) เพื่อการดำเนินการแบบโต้ตอบของโค้ด Crystal
การเปลี่ยนแปลงที่สำคัญ:
- เพิ่มการรองรับการทดลองสำหรับการรันเธรดน้ำหนักเบา (ไฟเบอร์) ในบริบทการดำเนินการที่แยกจากกัน (บริบทการดำเนินการ) ซึ่งช่วยให้สามารถดำเนินการงานแบบขนานได้อย่างมีประสิทธิภาพมากขึ้น การบล็อกเธรดในบริบทหนึ่งจะไม่นำไปสู่การหยุดการดำเนินการในอีกบริบทหนึ่ง mt_context = Fiber::ExecutionContext::MultiThreaded.new("worker-threads", 4) 10.times ทำ mt_context.spawn ทำ do_something จบ จบ gtk = Fiber::ExecutionContext::Isolated.new("Gtk") ทำ Gtk.main จบ gtk.wait
- วิธี Slice.literal มอบการอนุมานประเภทสำหรับองค์ประกอบที่มีอยู่ใน slice และเพิ่มการรองรับการทำงานในอินเทอร์พรีเตอร์
- แมโคร sizeof และ alignof ให้ข้อมูลเกี่ยวกับประเภทที่เสถียร
- มีการเพิ่มวิธีการใหม่ลงในไลบรารีมาตรฐาน: Indexable#find, #find!, EventLoop#wait_readable และ #wait_writable
- คอมไพเลอร์มีเวอร์ชันยาวของตัวเลือก "-o" "--output" และความสามารถในการระบุไดเร็กทอรีแทนไฟล์ก็ได้รับการนำมาใช้แล้ว (ชื่อไฟล์จะถูกเลือกตามชื่อไฟล์พร้อมโค้ด)
- ตอนนี้ตัวสร้างเอกสารมีความสามารถในการรวมวัตถุส่วนตัวและที่ได้รับการป้องกัน ตลอดจนวัตถุในการผูกไลบรารี (lib, fun, union, cstruct, external, type) ในเอกสารแล้ว
- ใน "File.match?" วิธีการ ได้มีการนำอัลกอริทึมการจับคู่เส้นทางไฟล์ใหม่มาใช้ ซึ่งได้ขจัดปัญหาและข้อจำกัดบางประการออกไป ตัวอย่างเช่น การหลบหนีอักขระ (หน้ากาก "\\t" ตรงกับ "\t" แต่ไม่ตรงกับอักขระ "t") การแยกเส้นทาง (หน้ากาก "a**" ตรงกับ "ab" แต่ล้มเหลวสำหรับ "ab/c" ในขณะที่หน้ากาก "**/a" ตรงกับ "a") รูปแบบซ้อนกัน (หน้ากาก "{[}]}" ตรงกับ "}") และช่วง (หน้ากาก "[a-]" ตรงกับ "-") ได้รับการจัดการอย่างถูกต้องแล้ว
- คำลงท้าย "?" ได้รับการยกเลิกแล้วในชื่อของพารามิเตอร์ในคำจำกัดความ (defs) แมโคร และบล็อก และ "!".
- ในวิธีการ Enumerable#sum และ #product การกำหนดประเภทผลตอบแทนโดยอัตโนมัติจะถูกเอาออกหากประเภทองค์ประกอบเป็น union เมื่อเรียกใช้วิธีการเหล่านี้ ตอนนี้คุณต้องระบุประเภทอย่างชัดเจน เช่น แทนที่จะ “[1, 10000000000_u64].sum” คุณควรเขียน “[1, 10000000000_u64].sum(0_u64)”
- HTTP::Request ช่วยให้แน่ใจว่ามีการแยกวิเคราะห์ส่วน URL อย่างถูกต้อง
- เพิ่มการสนับสนุนสำหรับชุดคอมไพเลอร์ LLVM 20
- การเรียกใช้ LLVM::ABI และ LLVM::TargetMachine#abi ไม่ได้รับการสนับสนุนอีกต่อไป
ที่มา: opennet.ru
