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

Кристал (изворно: Crystal) ― високо ниво за општа намена, објектно-ориентиран програмски јазик, дизајниран и развиен од Ари Боренсцвајг, Хуан Вајнерман, Брајан Кардиф и повеќе од 400 соработници.[1] Со синтакса вдахната од јазикот Руби (Ruby),[2] тој е составен јазик со проверка на статичко пишување, но определувањето на пишувањето на променливи или аргументите на методот е воглавно непотребно. Пишувањата се решавани со напреден општ алгоритам за заклучување на пишувањето.[3] Кристал моментално е во активен развој. Издаван е како бесплатен и софтвер со отворен код под лиценцата Apache верзија 2.0.

Кристал
Crystal
Парадигма:Повеќекратна парадигма: Објектно-ориентирано, истовремено
Дизајнирано од:Џо Колер, Ари Боренсцвајг Хуан Вајнерман, Брајан Кардиф
Развивач:Manas Technology Solutions
Типови:статично, заклучено, номинално, паткино
Лиценци:Apache License 2.0
Веб страница:crystal-lang.org

Историја

уреди

Работењето на јазикот започнало во јуни 2011 година,[4] со цел да бидат споени елеганцијата и продуктивноста на Руби со брзината, ефикасноста и безбедноста на пишувањето составен јазик.[5][4] Првично наречен Џој (Joy; во превод радост), брзо бил преименуван во Кристал (Crystal).[4]

Составувачот Crystal најпрво бил напишан во Руби, но подоцна бил препишан во Кристал, со што станал самохостинг, согласно ноември 2023 година.[6] Првата службена верзија била објавена во јуни 2014 година.[7] Во јули 2016 година, Кристал се приклучил на индексот TIOBE.

Опис

уреди

Иако во синтаксата наликува на јазикот Руби, Кристал е составуван до многу поефикасен мајчин код користејќи LLVM заднина, по цена да ги спречи динамичните аспекти на Руби. Напредното заклучување за глобален тип што го користи составувачот Crystal, комбинирано со обединетото пишување, му дава повеќе чувство на јазик за скриптирање на повисоко ниво отколку многу други споредливи програмски јазици. Има автоматизирано собирање ѓубре и нуди Боемов собирач. Кристал поседува макро систем и поддржува генерики, како и преоптоварување на методот и операторот. Неговиот модел на истовременост е вдахнат од комуникациски проследувачки постапки и применува лесни влакна и канали (за меѓувлакнесто општење) вдахнат од Go.[2]

Примери

уреди

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.local}"
end

server.bind_tcp("0.0.0.0", 8080)
puts "Listening on http://0.0.0.0:8080"
server.listen

TCP ехо сервер

уреди
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

Заклучено пишување и обединето пишување

уреди

Следниот код дефинира низа која содржи различни пишувања без употреблив заеднички предок. Кристал автоматски создава обединето пишување од пишувањата на поединечните ставки.

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

Конкурентност

уреди

Каналите може да се користат за општење помеѓу влакна, кои се иницирани со користење на клучниот збор spawn .

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

Дополнителна книжевност

уреди

 

  • St. Laurent, Simon; Balbaert, Ivo (February 1, 2019), Programming Crystal (P1.0. изд.), Pragmatic Bookshelf, ISBN 978-1-68050-286-2
  • Dietrich, George; Bernal, Guilherme (May 27, 2022), Crystal Programming, Packt Publishing, ISBN 978-1801818674
  • Wartala, Ramon (March 2016), „Die Ruby-artige Programmiersprache Crystal“ [The Ruby-like programming language Crystal], Linux Magazin (германски) (3/2016), ISSN 1432-640X

Наводи

уреди
  1. „Contributors“. Посетено на 12 октомври 2023 – преку GitHub.
  2. 2,0 2,1 Borenszweig, Ary (16 јуни 2016). „Crystal 0.18.0 released!“. crystal-lang.org. It's heavily inspired by Ruby, and other languages (like C#, Go and Python).
  3. Brian J., Cardiff (9 септември 2013). „Type inference part 1“. crystal-lang.org.
  4. 4,0 4,1 4,2 David, María Inti (1 април 2016). „The story behind #CrystalLang“. manas.tech.
  5. Hsieh, Adler (20 септември 2015). „Why Crystal programming language?“. motion-express.com. Архивирано од изворникот на 2015-12-15. Посетено на 2023-10-12.
  6. Borenszweig, Ary (14 ноември 2013). „Good bye Ruby Thursday“. crystal-lang.org.
  7. Borenszweig, Ary (19 јуни 2014). „Crystal 0.1.0 released!“. crystal-lang.org.

Надворешни врски

уреди