Кристал (програмски јазик)

Кристал (изворно: Crystal) ― високо ниво за општа намена, објектно-ориентиран програмски јазик, дизајниран и развиен од Ари Боренсцвајг, Хуан Вајнерман, Брајан Кардиф и повеќе од 400 соработници. Со синтакса вдахната од јазикот Руби (Ruby), тој е составен јазик со проверка на статичко пишување, но определувањето на пишувањето на променливи или аргументите на методот е претежно непотребно. Пишувањата се решавани со напреден општ алгоритам за заклучување на пишувањето. Кристал моментално е во активен развој. Издаван е како бесплатен и софтвер со отворен код под лиценцата Apache верзија 2.0.
1 Историја
Работењето на јазикот започнало во јуни 2011 година, со цел да бидат споени елеганцијата и продуктивноста на Руби со брзината, ефикасноста и безбедноста на пишувањето составен јазик. Првично наречен Џој (Joy; во превод радост), брзо бил преименуван во Кристал (Crystal).
Составувачот Crystal најпрво бил напишан во Руби, но подоцна бил препишан во Кристал, со што станал самохостинг, согласно ноември 2023 година. Првата службена верзија била објавена во јуни 2014 година. Во јули 2016 година, Кристал се приклучил на индексот TIOBE.
2 Опис
Иако во синтаксата наликува на јазикот Руби, Кристал е составуван до многу поефикасен мајчин код користејќи LLVM заднина, по цена да ги спречи динамичните аспекти на Руби. Напредното заклучување за глобален тип што го користи составувачот Crystal, комбинирано со обединетото пишување, му дава повеќе чувство на јазик за скриптирање на повисоко ниво отколку многу други споредливи програмски јазици. Има автоматизирано собирање ѓубре и нуди Боемов собирач. Кристал поседува макро систем и поддржува генерики, како и преоптоварување на методот и операторот. Неговиот модел на истовременост е вдахнат од комуникациски проследувачки постапки и применува лесни влакна и канали (за меѓувлакнесто општење) вдахнат од Go.
3 Примери
3.1 Hello World
Ова е наједноставниот начин да биде напишана програмата Hello World во Кристал:<syntaxhighlight>
puts "Hello World!"
</syntaxhighlight>Исто како во Руби.
Или користејќи објектно-ориентиран стил на програмирање :<syntaxhighlight>
class Greeter
def initialize(@name : String)
end
def salute
puts "Hello #{@name}!"
end
end
g = Greeter.new("world")
g.salute
</syntaxhighlight>
3.2 HTTP сервер
<syntaxhighlight>
require "http/server"
server = HTTP::Server.new do |context|
context.response.
context.response.print "Hello world! The time is #{Time.local}"
end
server.bind_tcp("0.0.0.0", 8080)
puts "Listening on http://0.0.0.0:8080"
server.listen
</syntaxhighlight>
3.3 TCP ехо сервер
<syntaxhighlight>
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
</syntaxhighlight>
3.4 Заклучено пишување и обединето пишување
Следниот код дефинира низа која содржи различни пишувања без употреблив заеднички предок. Кристал автоматски создава обединето пишување од пишувањата на поединечните ставки.<syntaxhighlight>
desired_things = [:unicorns, "butterflies", 1_000_000]
p typeof(desired_things.first) # typeof returns the compile time type, here (Symbol | String | Int32)
p desired_things.first.class # the class method returns the runtime type, here Symbol
</syntaxhighlight>
3.5 Конкурентност
Каналите може да се користат за општење помеѓу влакна, кои се иницирани со користење на клучниот збор <code>spawn</code> .<syntaxhighlight>
channel = Channel(Int32).new
spawn do
puts "Before first send"
channel.send(1)
puts "Before second send"
channel.send(2)
end
puts "Before first receive"
value = channel.receive
puts value # => 1
puts "Before second receive"
value = channel.receive
puts value # => 2
</syntaxhighlight>
4 Дополнителна литература
***