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

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

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

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

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

## Примери

### Hello World
Ова е наједноставниот начин да биде напишана програмата Hello World во Кристал:
```crystal
puts "Hello World!"
```
Исто како во Руби.

Или користејќи објектно-ориентиран стил на програмирање :
```crystal
class Greeter
 def initialize(@name : String)
 end

 def salute
  puts "Hello #{@name}!"
 end
end

g = Greeter.new("world")
g.salute
```


### HTTP сервер

```crystal
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 ехо сервер

```crystal
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
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` .
```crystal
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
```


## Дополнителна литература
 
* 
* 
* 

## Наводи

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

* 
* Documentation
* 
* /r/crystal_programming subreddit
* Crystal Announcements

Категорија:Објектно-ориентирани програмски јазици
Категорија:Програмски јазици
Категорија:Статии со извори на германски (de)
Категорија:Софтвери од 2014 година
Категорија:Програмски јазици создадени во 1914 година
Категорија:Софтвери кои користат дозвола Апачи
Категорија:Слободни составувачи и толкувачи
Категорија:Вкрстеноплатформски софтвери
Категорија:Вкрстеноплатформски слободен софтвер
Категорија:Статично пишувани програмски јазици
Категорија:Истовремено програмски јазици
Категорија:Повеќе парадигмски програмски јазици