Пуснат е езикът за програмиране Crystal 1.0. Издаването се отбелязва като първият значителен релиз, който обобщава 8 години работа и ознаменува стабилизацията на езика и готовността му за употреба в работни проекти. В клон 1.x ще се поддържа обратно съвместимост и е гарантирано, че не ще има промени в езика и стандартната библиотека, които да влияят негативно на съществуващия код.
Изданията 1.0.y ще включват само корективни поправки, докато версиите 1.x.0 ще предлагат нова функционалност и значителни промени, запазвайки съвместимостта с кода. Нови идеи и потенциално несъвместими промени ще се разработват в отделен клон, на базата на който впоследствие ще бъде формирано издание Crystal 2.0. Някои от възможностите на Crystal 1.0 са обявени за предварителни и въпреки наличието им в клон 1.0, те не попадат под официална поддръжка. Сред тези възможности са мононишност, работа на платформата Windows и използване на системи с ARM процесори.
Припомняме, че разработчиците на Crystal се опитват да съчетаят удобството на разработката с езика Ruby с висока производителност на приложения, характерна за езика C. Синтаксисът на Crystal е близък до Ruby, но не е напълно съвместим с него, въпреки че без преработка работят някои Ruby програми. Кодът на компилатора е написан на езика Crystal и се разпространява под лицензия Apache 2.0.
В езика се прилага статичен тип проверка, реализирана без необходимост от явно указване на типовете на променливите и аргументите на методите в кода. Програмите на Crystal се компилират в изпълними файлове, с изчисление на макроси и генериране на код по време на компилация. В програмите на езика Crystal е разрешено свързването на биндинги, написани на езика C. Паралелното изпълнение на кода се осъществява чрез ключовата дума „spawn“, която позволява стартиране на фонови задачи в асинхронен режим, без да блокира основния поток, в вид на леки потоци, наричани фибри (Fiber).
Стандартната библиотека осигурява голям набор от типични функции, включително средства за обработка на CSV, YAML и JSON, компоненти за създаване на HTTP сървъри и поддръжка на WebSocket. По време на разработката е удобно да се използва командата „crystal play“, която генерира уеб интерфейс (по подразбиране localhost:8080) за интерактивно изпълнение на код на Crystal.
Основни промени:
- В кортежите е разрешен индексът на елементите от различни типове, тъй като компилаторът разполага с информация за типа на всеки елемент. Например: tuple = {1, „hello“, ‘x’} v = tuple[0..1] # ще върне {1, „hello“} typeof(v) # => Tuple(Int32, String)
- В стринговите и символните литерали е забранено да се използват сурогатни съкращения в escape последователности Unicode, като „\uD834“. За кодиране на произволни стойности следва да се използва нотация „\x“.
- В стандартната библиотека е премахната значителна част от определения, макроси и методи, които преди това бяха обозначени като остарели. Включително методи Set, StaticArray#[], YAML.new, HTTP::Request, HTTP::WebSocket, Hash#delete_if, Process#kill и т.н.
- В макросите getter и property вече е задължително да се указва типът на връщане.
- Методът за закръгляне по подразбиране е променен на TIES_EVEN („закръгляне на банкира“, до най-близкото цяло число, а за гранични ситуации - до най-близкото четно число). В Number#round е добавен параметър RoundingMode, позволяващ избор на метод за закръгляне. Сред наличните методи са: TIES_EVEN, TIES_AWAY, TO_ZERO, TO_POSITIVE, TO_NEGATIVE.
- В колекциите е осигурена работа на Enumerable#flat_map и Iterator#flat_map с елементи от смесени типове.
- При сериализация на последователности Enum сега се използва представяне под формата на низ с подчертания.
- Типовете, определени в модула XML, са преминали от използване на struct на клас.
- С оглед на сигурността е прекратено декодирането на имената на бисквитките, както и кодиране и декодиране на стойности на бисквитки (прекодиране е оставено на рамките и приложенията). Методът HTTP::Cookies.from_headers е разделен на два варианта за сървъри и клиенти.
Източник: opennet.ru
