- Фантастика и фэнтези
- Ироническое фэнтези
- Стимпанк
- Детективная фантастика
- Киберпанк
- Попаданцы
- LitRPG
- Космоопера
- Технофэнтези
- Городская фантастика
- Русское фэнтези
- Юмористическая фантастика
- Космическая фантастика
- Боевое фэнтези
- Эпическая фантастика
- Зарубежная фантастика
- Книги магов
- Мистика
- Разная фантастика
- Разное фэнтези
- Любовное фэнтези
- Романтическая фантастика
- Городское фентези
- Историческая фантастика
- Историческое фэнтези
- Социально-философская фантастика
- Сказочная фантастика
- Иностранное фэнтези
- Романтическое фэнтези
- Ироническая фантастика
- Ужасы и Мистика
- Постапокалипсис
- Героическая фантастика
- Фэнтези
- Научная Фантастика
- Социально-психологическая
- Альтернативная история
- Боевая фантастика
- Разная литература
- Пословицы, поговорки
- Шахматы
- Визуальные искусства
- Фанфик
- Авто и ПДД
- Военное
- Отраслевые издания
- Гиды, путеводители
- Зарубежная образовательная литература
- Военная история
- Цитаты из афоризмов
- Современная литература
- Великолепные истории
- Начинающие авторы
- Современная зарубежная литература
- Боевые искусства
- Изобразительное искусство, фотография
- Кино
- Литература 19 века
- Недвижимость
- Музыка, музыканты
- Готические новеллы
- Истории из жизни
- Культура и искусство
- Спецслужбы
- Зарубежная прикладная литература
- Музыка, танцы
- Подростковая литература
- Прочее
- Военная техника, оружие
- Газеты и журналы
- Периодические издания
- Домоводство, Дом и семья
- Любовные романы
- Экономическая литература
- Научные и научно-популярные книги
- О животных
- Биохимия
- Культурология
- Юриспруденция
- Политика
- Психотерапия
- Языкознание
- Научпоп
- Медицина
- Психология, личное
- Радиотехника
- Филология
- Педагогика
- Образовательная литература
- Деловая литература
- Физика
- Науки: разное
- Химия
- Воспитание детей, педагогика
- Детская психология
- Зарубежная публицистика
- Биология
- Архитектура
- Зарубежная психология
- Науки о космосе
- Социология
- Математика
- География
- Беременность, ожидание детей
- Литературоведение
- Транспорт, военная техника
- Обществознание
- Зоология
- География
- Альтернативная медицина
- Иностранные языки
- Ветеринария
- Рефераты
- Астрология
- Биофизика
- Экология
- История Европы
- Учебники
- Шпаргалки
- Государство и право
- Ботаника
- Религиоведение
- История
- Техническая литература
- Прочая научная литература
- Психология
- Детективы и Триллеры
- Справочная литература
- Проза
- Новелла
- Юмор
- Проза
- Историческая проза
- Русская современная проза
- Советская классическая проза
- Повести
- Очерки
- Эссе
- Рассказы
- Зарубежная современная проза
- Сентиментальная проза
- Зарубежная классика
- Афоризмы
- Эпистолярная проза
- Феерия
- Семейный роман/Семейная сага
- Разное
- Антисоветская литература
- Магический реализм
- Русская классическая проза
- Современная проза
- О войне
- Контркультура
- Классическая проза
- Поэзия, Драматургия
- Детская литература
- Детская фантастика
- Детские остросюжетные
- Детские стихи
- Детские приключения
- Внеклассное чтение
- Учебная литература
- Зарубежные детские книги
- Бизнес
- Загадки
- Книги для подростков
- Школьные учебники
- Детский фольклор
- Книги для дошкольников
- Детские детективы
- Детская познавательная и развивающая литература
- Буквари
- Прочая детская литература
- Сказка
- Детская проза
- Детская образовательная литература
- Юмор
- Документальные книги
- Бизнес
- Внешнеэкономическая деятельность
- Тайм-менеджмент
- Кадровый менеджмент
- О бизнесе популярно
- Управление, подбор персонала
- Бизнес
- Менеджмент и кадры
- Продажи
- Экономика
- Ценные бумаги и инвестиции
- Малый бизнес
- Делопроизводство, офис
- Корпоративная культура, бизнес
- Банковское дело
- Финансы
- Зарубежная деловая литература
- Ораторское искусство / риторика
- Личные финансы
- Интернет-бизнес
- Поиск работы
- Государственное и муниципальное управление
- Бухучет и аудит
- Работа с клиентами
- Менеджмент
- Краткое содержание
- Личная эффективность
- Переговоры
- Приключения
- Старинная литература
- Религия и духовность
- Компьютеры и Интернет
- Блог
Читаем без скачивания Crystal Programming. Введение на основе проекта в создание эффективных, безопасных и читаемых веб-приложений и приложений CLI - Джордж Дитрих
Шрифт:
Интервал:
Закладка:
• Сбор мусора: Объекты хранятся в куче, и их память автоматически освобождается, когда они больше не используются. Существуют также объекты, созданные из структуры, размещенной во фрейме стека текущего выполняемого метода, и они перестают существовать, как только метод завершается. Таким образом, программисту не приходится иметь дело с ручным управлением памятью.
• Метапрограммирование: Хотя Crystal не является динамическим языком, он часто может вести себя так, как если бы он им был, благодаря мощному метапрограммированию во время компиляции. Программист может использовать макросы и аннотации вместе с информацией обо всех существующих типах (статическое отражение) для генерации или мутирования кода. Это обеспечивает множество динамических идиом и паттернов.
• Одновременное (Concurrent) программирование: Программа Crystal может создавать новые волокна (легкие потоки) для выполнения блокирующего кода, координируясь с каналами. Асинхронное программирование становится простым в рассуждении и следовании. Эта модель была в значительной степени вдохновлена Go и другими параллельными языками, такими как Erlang.
• Кроссплатформенные: программы, созданные с помощью Crystal, могут работать на Linux, MacOS и FreeBSD, нацеливание x86 или ARM (как 32-битный, так и 64-битный). Это включает в себя новые кремниевые чипы от Apple. Поддержка Windows экспериментально, она еще не готова. Компилятор также может производить небольшие статические двоичные файлы на каждой платформе без зависимостей для простоты распространения.
• Безопасность времени выполнения: Crystal является безопасным языком – это означает, что нет неопределенного поведения и скрытых сбоев, таких как доступ к массиву за его пределами, доступ к свойствам по null или доступ к объектам после того, как они уже были освобождены. Вместо этого они становятся либо исключениями во время выполнения, ошибками во время компиляции, либо не могут произойти из-за защиты во время выполнения. У программиста есть возможность повысить безопасность, используя явно небезопасные функции языка, когда это необходимо.
• Программирование низкого уровня: хотя Crystal безопасен, всегда есть вариант использовать небезопасные функции. Такие вещи, как работа с необработанными указателями, обращение к нативным библиотекам C или даже использование сборки непосредственно, доступны для смелых. Во многих общих библиотеках C есть безопасные обертки, готовые к использованию, что позволяет им использовать свои функции из кристаллической программы.
На первый взгляд Crystal очень похож на Ruby, и многие синтаксические примитивы одинаковы. Но Crystal пошел своим путем, черпая вдохновение из многих других современных языков, таких как Go, Rust, Julia, Elixir, Erlang, C#, Swift и Python. В результате он сохраняет большую часть хороших частей красивого синтаксиса Ruby, в то же время внося изменения в основные аспекты, такие как метапрограммирование и параллелизм.
Программы Crystal также БЫСТРЫЕ
С самого начала Crystal создавался как быстрый. Он следует тем же принципам, что и другие быстрые языки, такие как C. Компилятор может анализировать исходный код, чтобы узнать точный тип каждой переменной и расположение памяти перед выполнением. Затем он может создать быстрый и оптимизированный собственный исполняемый файл без необходимости что-либо угадывать во время выполнения. Этот процесс широко известен как предварительная компиляция.
Компилятор Crystal построен на основе LLVM, той же инфраструктуры компилятора, которая используется в Rust, Clang и Apple Swift. В результате Crystal извлекает выгоду из того же уровня оптимизации, что и эти языки, что делает его хорошо подходящим для приложений с интенсивными вычислениями, таких как машинное обучение, обработка изображений или сжатие данных.
Но не все приложения привязаны к процессору. В большинстве случаев на карту поставлены другие ресурсы, такие как сетевые коммуникации или локальный диск. Все вместе они известны как ввод-вывод. Crystal имеет модель параллелизма, аналогичную горутинам Go или процессам Erlang, где несколько операций могут выполняться за циклом событий, не блокируя процесс и не делегируя слишком много работы операционной системе. Эта модель идеально подходит для таких приложений, как веб-службы или инструменты управления файлами.
Использование эффективного языка, такого как Crystal, поможет вам снизить затраты на оборудование и улучшить восприятие реакции пользователей. Кроме того, это означает, что вы можете запускать все меньше и меньше экземпляров вашего приложения для обработки того же объема обработки.
Давайте взглянем на простую реализацию алгоритма сортировки выбором, написанную на Crystal:
def selection_sort(arr)
# Для каждого индекса элемента...
arr.each_index do |i|
# Найдите наименьший элемент после него
min = (i...arr.size).min_by { |j| arr[j] }
# Поменяйте местами позиции с наименьшим элементом
arr[i], arr[min] = arr[min], arr[i]
end
end
# Создайте перевернутый список из 30 тысяч элементов.
list = (1..30000).to_a.reverse
# Отсортируйте его, а затем распечатайте его голову и хвост select_sort(list)
p list[0...10]
p list[-10..-1]
В этом примере уже показаны некоторые интересные особенности Crystal:
• Прежде всего, он относительно небольшой. Основной алгоритм состоит всего из четырех строк.
• Это выразительно. Вы можете перебирать списки со специализированными блоками или использовать диапазоны.
• Не существует единого обозначения типа. Вместо этого компилятор выводит каждый тип, включая аргумент метода.
Удивительно, но этот же код действителен и в Ruby. Воспользовавшись этим, если мы возьмем этот файл и запустим его как Ruby Selection_sort.cr (обратите внимание, что Ruby не заботится о расширениях файлов), это займет около 30 секунд. С другой стороны, выполнение этой программы после ее компиляции с помощью Crystal в оптимизированном режиме занимает около 0,45 секунды, то есть в 60 раз меньше. Конечно, эта разница не одинакова для любой программы. Это зависит от того, с какой рабочей нагрузкой вы имеете дело. Также важно отметить, что Crystal требуется время для анализа, компиляции, при необходимости оптимизации и создания собственного исполняемого файла.
На следующем графике показано сравнение этого алгоритма сортировки выбором, написанного для разных языков. Здесь вы можете видеть, что Crystal соревнуется на вершине, проигрывая C и очень близко приближаясь к Go. Важно отметить, что Crystal — безопасный язык: он имеет полную поддержку обработки исключений, отслеживает границы массивов, чтобы избежать небезопасного доступа, а также проверяет переполнение при целочисленных математических операциях. С другой стороны, C — небезопасный язык, и он ничего из этого не проверяет. Безопасность достигается за счет незначительного снижения производительности, но, несмотря на это, Crystal остается очень конкурентоспособным:
Сортировка выбором в перевернутом списке из 30 тыс. элементов
Рисунок 1.2.