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

Историја
--------

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

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

Опис
----

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

Примери
-------

### 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. 1 2  
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. 1 2 3  
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*.

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

* Матична страница
* Documentation
* Crystal-lang на GitHub
* /r/crystal\_programming subreddit
* Crystal Announcements