ภาษาคริสตัล
กระบวนทัศน์ | กระบวนทัศน์หลากหลาย: เชิงวัตถุ, ระหว่างการดำเนินงาน |
---|---|
ผู้ออกแบบ | Ary Borenszweig, Juan Wajnerman, Brian Cardiff |
ผู้พัฒนา | Manas Technology Solutions |
เริ่มเมื่อ | 19 มิถุนายน 2014[1] |
รุ่นเสถียร | |
ระบบชนิดตัวแปร | static, inferred, nominal, duck |
ภาษาโปรแกรม | คริสตัล |
แพลตฟอร์ม | IA-32 (i386), x86-64, AArch64[2] |
ระบบปฏิบัติการ | Linux, macOS, FreeBSD, OpenBSD[2] |
สัญญาอนุญาต | Apache License 2.0 |
นามสกุลของไฟล์ | .cr |
เว็บไซต์ | crystal-lang |
ได้รับอิทธิพลจาก | |
ภาษารูบี, ภาษาซี, ภาษารัสต์, ภาษาโก,[3] ภาษาซีชาร์ป,[3] ภาษาไพธอน[3] |
ภาษาคริสตัล (Crystal) เป็น ภาษาโปรแกรมเชิงวัตถุสำหรับใช้งานทั่วไป ไวยากรณ์ได้รับอิทธิพลจากภาษารูบี[4] การอนุมานชนิดข้อมูล ช่วยให้สามารถละการประกาศชนิดข้อมูลของตัวแปรได้[4] ภาษาคริสตัลพัฒนาและเผยแพร่เป็นซอฟต์แวร์เสรีและโอเพนซอร์สภายใต้สัญญาอนุญาตอะแพชี 2.0
ประวัติความเป็นมา
[แก้]การพัฒนาภาษาคริสตัลเริ่มต้นในเดือนมิถุนายน 2011 โดยมุ่งเป้าไปที่ความสวยงามและประสิทธิภาพสูงซึ่งเป็นจุดเด่นของภาษารูบี และความเร็วในการประมวลผลที่รวดเร็ว ประสิทธิภาพ และ ความปลอดภัยของชนิดข้อมูล อันเป็นจุดเด่นของภาษาคอมไพเลอร์[5] เดิมเรียกว่า Joy แต่ไม่นานก็เปลี่ยนชื่อเป็นชื่อปัจจุบัน[5]
เริ่มแรกคอมไพเลอร์ถูกเขียนด้วยภาษารูบี แต่ต่อมาถูกเขียนใหม่โดยภาษาคริสตัลเองในเดือนพฤศจิกายน 2013[6] เวอร์ชันแรกอย่างเป็นทางการ Crystal 0.1.0 เปิดตัวในเดือนมิถุนายน 2014 ภาษาคริสตัลเข้าไปอยู่ในดัชนี TIOBE ในเดือนกรกฎาคม 2016
ภาพรวม
[แก้]แม้ว่าไวยากรณ์ของภาษาคริสตัลจะได้รับอิทธิพลจากภาษารูบีแต่ลักษณะภาษาโปรแกรมพลวัต ของรูบีก็ได้ถูกละทิ้งออกไป และด้วยการใช้ LLVM ที่ส่วนหลัง ก็ทำให้สามารถสร้างรหัสเครื่อง ที่มีประสิทธิภาพได้[7][8] เมื่อเปรียบเทียบกับภาษาคอมไพเลอร์อื่นๆ การผสมผสานระหว่างการอนุมานชนิดข้อมูลขั้นสูงและชนิดยูเนียน ทำให้สามารถเขียนได้กระชับเหมือนอย่างภาษาสคริปต์ระดับสูง[9] ภาษาคริสตัลมีการเก็บขยะ ตัวแบบการทำงานแบบภาวะพร้อมกันของภาษาคริสตัลยืนพื้นการประมวลผลตามลำดับสื่อสาร (CSP) ซึ่งเป็นการใช้งานช่องสัญญาณและไฟเบอร์ที่เบาเครื่องสำหรับการสื่อสารระหว่างไฟเบอร์ ซึ่งได้รับแรงบันดาลใจจากภาษาโก
ตัวอย่าง
[แก้]Hello World
[แก้]ด้านล่างนี้เป็นตัวอย่างแบบง่ายที่สุดของ Hello World ในภาษาคริสตัล
puts "Hello World!"
สำหรับการเขียนโปรแกรมเชิงวัตถุในภาษาคริสตัลเขียนได้ดังนี้
class Greeter
def initialize(@name : String)
end
def salute
puts "Hello #{@name}!"
end
end
g = Greeter.new("World")
g.salute
เซิร์ฟเวอร์ HTTP
[แก้]require "http/server"
server = HTTP::Server.new do |context|
context.response.content_type = "text/plain"
context.response.print "Hello World! The time is #{Time.now}"
end
server.bind_tcp("0.0.0.0", 8080)
puts "Listening on http://0.0.0.0:8080"
server.listen
เซิร์ฟเวอร์ TCP echo
[แก้]require "socket"
def handle_client(client)
message = client.gets
client.puts message
end
server = TCPServer.new("localhost", 1234)
while client = server.accept?
spawn handle_client(client)
end
อ้างอิง
[แก้]- ↑ "Crystal 0.1.0 released!". crystal-lang. 19 June 2014.
- ↑ 2.0 2.1 "Crystal Platform Support". crystal-lang.org.
- ↑ 3.0 3.1 3.2
Borenszweig, Ary (June 16, 2016). "Crystal 0.18.0 released!". crystal-lang.org.
It's heavily inspired by Ruby, and other languages (like C#, Go and Python).
- ↑ 4.0 4.1 "Introduction". สืบค้นเมื่อ 2018-09-30.
- ↑ 5.0 5.1 María Inti David (2016-04-01). "The story behind #CrystalLang". คลังข้อมูลเก่าเก็บจากแหล่งเดิมเมื่อ 2018-09-30. สืบค้นเมื่อ 2018-09-30.
- ↑ Ary Borenzweig (2013-11-14). "Good bye Ruby Thursday". สืบค้นเมื่อ 2018-09-30.
- ↑ Ary Borenzweig (2015-03-04). "Internals". สืบค้นเมื่อ 2018-09-30.
- ↑ "Ruby のように書きやすく C のように速いプログラミング言語「Crystal」". DMM inside. 2018-05-30. สืบค้นเมื่อ 2018-09-30.
- ↑ "Union types". สืบค้นเมื่อ 2018-09-30.