Кристал (програмски јазик)
Парадигма: | Повеќекратна парадигма: Објектно-ориентирано, истовремено |
---|---|
Дизајнирано од: | Џо Колер, Ари Боренсцвајг Хуан Вајнерман, Брајан Кардиф |
Развивач: | Manas Technology Solutions |
Типови: | статично, заклучено, номинално, паткино |
Лиценци: | Apache License 2.0 |
Веб страница: | crystal-lang.org |
Кристал (изворно: Crystal) ― високо ниво за општа намена, објектно-ориентиран програмски јазик, дизајниран и развиен од Ари Боренсцвајг, Хуан Вајнерман, Брајан Кардиф и повеќе од 400 соработници.[1] Со синтакса вдахната од јазикот Руби (Ruby),[2] тој е составен јазик со проверка на статичко пишување, но определувањето на пишувањето на променливи или аргументите на методот е воглавно непотребно. Пишувањата се решавани со напреден општ алгоритам за заклучување на пишувањето.[3] Кристал моментално е во активен развој. Издаван е како бесплатен и софтвер со отворен код под лиценцата Apache верзија 2.0.
Историја
[уреди | уреди извор]Работењето на јазикот започнало во јуни 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
Наводи
[уреди | уреди извор]- ↑ „Contributors“. Посетено на 12 октомври 2023 – преку GitHub.
- ↑ 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).
- ↑ Brian J., Cardiff (9 септември 2013). „Type inference part 1“. crystal-lang.org.
- ↑ 4,0 4,1 4,2 David, María Inti (1 април 2016). „The story behind #CrystalLang“. manas.tech.
- ↑ Hsieh, Adler (20 септември 2015). „Why Crystal programming language?“. motion-express.com. Архивирано од изворникот на 2015-12-15. Посетено на 2023-10-12.
- ↑ Borenszweig, Ary (14 ноември 2013). „Good bye Ruby Thursday“. crystal-lang.org.
- ↑ Borenszweig, Ary (19 јуни 2014). „Crystal 0.1.0 released!“. crystal-lang.org.
Надворешни врски
[уреди | уреди извор]- Објектно-ориентирани програмски јазици
- Програмски јазици
- Софтвери од 2014 година
- Програмски јазици создадени во 1914 година
- Софтвери кои користат дозвола Апачи
- Слободни составувачи и толкувачи
- Вкрстеноплатформски софтвери
- Вкрстеноплатформски слободен софтвер
- Статично пишувани програмски јазици
- Истовремено програмски јазици
- Повеќе парадигмски програмски јазици