ภาษาคริสตัล

ภาษาคริสตัล (Crystal) เป็น ภาษาโปรแกรมเชิงวัตถุสำหรับใช้งานทั่วไป ไวยากรณ์ได้รับอิทธิพลจากภาษารูบี การอนุมานชนิดข้อมูล ช่วยให้สามารถละการประกาศชนิดข้อมูลของตัวแปรได้ ภาษาคริสตัลพัฒนาและเผยแพร่เป็นซอฟต์แวร์เสรีและโอเพนซอร์สภายใต้สัญญาอนุญาตอะแพชี 2.0 

 ประวัติความเป็นมา 
การพัฒนาภาษาคริสตัลเริ่มต้นในเดือนมิถุนายน 2011 โดยมุ่งเป้าไปที่ความสวยงามและประสิทธิภาพสูงซึ่งเป็นจุดเด่นของภาษารูบี และความเร็วในการประมวลผลที่รวดเร็ว ประสิทธิภาพ และ ความปลอดภัยของชนิดข้อมูล อันเป็นจุดเด่นของภาษาคอมไพเลอร์ เดิมเรียกว่า Joy แต่ไม่นานก็เปลี่ยนชื่อเป็นชื่อปัจจุบัน

เริ่มแรกคอมไพเลอร์ถูกเขียนด้วยภาษารูบี แต่ต่อมาถูกเขียนใหม่โดยภาษาคริสตัลเองในเดือนพฤศจิกายน 2013 เวอร์ชันแรกอย่างเป็นทางการ Crystal 0.1.0 เปิดตัวในเดือนมิถุนายน 2014 ภาษาคริสตัลเข้าไปอยู่ในดัชนี TIOBE ในเดือนกรกฎาคม 2016

 ภาพรวม 
แม้ว่าไวยากรณ์ของภาษาคริสตัลจะได้รับอิทธิพลจากภาษารูบีแต่ลักษณะภาษาโปรแกรมพลวัต ของรูบีก็ได้ถูกละทิ้งออกไป และด้วยการใช้ LLVM ที่ส่วนหลัง ก็ทำให้สามารถสร้างรหัสเครื่อง ที่มีประสิทธิภาพได้ เมื่อเปรียบเทียบกับภาษาคอมไพเลอร์อื่นๆ การผสมผสานระหว่างการอนุมานชนิดข้อมูลขั้นสูงและชนิดยูเนียน ทำให้สามารถเขียนได้กระชับเหมือนอย่างภาษาสคริปต์ระดับสูง ภาษาคริสตัลมีการเก็บขยะ ตัวแบบการทำงานแบบภาวะพร้อมกันของภาษาคริสตัลยืนพื้นการประมวลผลตามลำดับสื่อสาร (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

 อ้างอิง 

 ดูเพิ่ม 

 การเขียนโปรแกรมเชิงวัตถุ
 ภาษารูบี
หมวดหมู่:ซอฟต์แวร์ในปี พ.ศ. 2557
หมวดหมู่:ภาษาโปรแกรมเชิงวัตถุ
หมวดหมู่:ภาษาโปรแกรม