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

มีการเผยแพร่ภาษาการเขียนโปรแกรม Crystal 1.5 ซึ่งนักพัฒนาพยายามรวมความสะดวกสบายของการพัฒนาในภาษา Ruby เข้ากับลักษณะการทำงานของแอปพลิเคชันที่สูงของภาษา C ไวยากรณ์ของ Crystal ใกล้เคียงกับ Ruby แต่เข้ากันไม่ได้อย่างสมบูรณ์ แม้ว่าโปรแกรม Ruby บางโปรแกรมจะทำงานโดยไม่มีการแก้ไขก็ตาม รหัสคอมไพเลอร์เขียนด้วย Crystal และเผยแพร่ภายใต้ลิขสิทธิ์ Apache 2.0

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

ไลบรารีมาตรฐานมีชุดฟังก์ชันทั่วไปจำนวนมาก รวมถึงเครื่องมือสำหรับการประมวลผล CSV, YAML และ JSON, ส่วนประกอบสำหรับการสร้างเซิร์ฟเวอร์ HTTP และการสนับสนุน WebSocket ในระหว่างกระบวนการพัฒนา จะสะดวกในการใช้คำสั่ง "crystal play" ซึ่งสร้างเว็บอินเตอร์เฟส (localhost:8080 เป็นค่าเริ่มต้น) สำหรับการรันโค้ดแบบโต้ตอบในภาษา Crystal

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

  • คอมไพเลอร์ได้เพิ่มการตรวจสอบความสอดคล้องของชื่ออาร์กิวเมนต์ในการใช้งานวิธีนามธรรมและในคำจำกัดความ หากมีชื่อไม่ตรงกัน จะมีการออกคำเตือน: abstract class FooAbstract abstract def foo(number : Int32) : ไม่มี end class Foo < FooAbstract def foo(name : Int32) : Nil p name end end 6 | def foo(name : Int32) : Nil ^— คำเตือน: พารามิเตอร์ตำแหน่ง 'name' สอดคล้องกับพารามิเตอร์ 'number' ของเมธอดที่ถูกแทนที่ FooAbstract#foo(number : Int32) ซึ่งมีชื่อที่แตกต่างกันและอาจส่งผลต่อการส่งผ่านอาร์กิวเมนต์ที่มีชื่อ
  • เมื่อกำหนดอาร์กิวเมนต์ให้กับวิธีการที่ไม่ได้พิมพ์ให้กับค่าของตัวแปร ขณะนี้อาร์กิวเมนต์จะถูกจำกัดไว้ที่ประเภทของตัวแปรนั้น class Foo @x : Int64 def เริ่มต้น (x) @x = x # พารามิเตอร์ x จะถูกพิมพ์ @x end end
  • ช่วยให้คุณเพิ่มคำอธิบายประกอบให้กับพารามิเตอร์ของวิธีการหรือมาโคร def foo(@[อาจจะไม่ได้ใช้งาน] x); จบ #ตกลง
  • เพิ่มการรองรับการใช้ค่าคงที่เป็นดัชนีและชื่อในสิ่งอันดับ KEY = "s" foo = {s: "String", n: 0} ใส่ foo[KEY].size
  • มีการเพิ่มเมธอด File#delete ใหม่ลงใน File API สำหรับการลบไฟล์และไดเร็กทอรี และ Dir#delete? ซึ่งจะคืนค่าเป็นเท็จหากไฟล์หรือไดเร็กทอรีหายไป
  • การป้องกันเมธอด File.tempfile ได้รับการปรับปรุงให้ดีขึ้น ซึ่งขณะนี้ไม่อนุญาตให้มีอักขระ null ในบรรทัดที่สร้างชื่อไฟล์
  • เพิ่มตัวแปรสภาพแวดล้อม NO_COLOR ซึ่งปิดใช้งานการเน้นสีในเอาต์พุตคอมไพเลอร์และล่าม
  • การทำงานในโหมดล่ามได้รับการปรับปรุงอย่างมาก

ที่มา: opennet.ru

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