การเปิดตัวภาษาโปรแกรม Crystal 1.16

มีการเผยแพร่ภาษาการเขียนโปรแกรม 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
ซื้อโฮสติ้งที่เชื่อถือได้สำหรับไซต์ที่มีการป้องกัน DDoS เซิร์ฟเวอร์ VPS VDS 🔥 ซื้อบริการเว็บโฮสติ้งที่เชื่อถือได้ พร้อมระบบป้องกัน DDoS และเซิร์ฟเวอร์ VPS/VDS | ProHoster