В этой статье есть несколько проблем. Помогите улучшить ее или обсудите эти проблемы на странице обсуждения . ( Узнайте, как и когда удалять эти сообщения ) |
Парадигма | мультипарадигмальный : потокобезопасный / параллельный / с общей памятью , функциональный , императивный , объектно-ориентированный ( на основе классов ), процедурный , функциональный |
---|---|
Разработано | Дэвид Николс |
Разработчик | Дэвид Николс |
Стабильный релиз | 1.16.1 / 2 июля 2023 г. (2023-07-02) |
Дисциплина печати | Динамичный, опционально сильный |
Язык реализации | C++ , Pthreads |
ОС | Кроссплатформенный |
Лицензия | Лицензия MIT , Стандартная общественная лицензия GNU , Стандартная общественная лицензия ограниченного применения GNU |
Расширения имени файла | .q , .qm ,.qtest |
Веб-сайт | www.qore.org |
Под влиянием | |
Perl , D , C++ , Java |
Qore — это интерпретируемый , высокоуровневый , универсальный динамический язык программирования со сборкой мусора , поддерживающий встраивание кода и изолирование с дополнительной строгой типизацией, а также уделяющий особое внимание фундаментальной поддержке многопоточности и масштабируемости SMP.
Qore уникален, поскольку это интерпретируемый скриптовый язык с фундаментальной поддержкой многопоточности (что означает, что одновременно может выполняться несколько частей одного и того же кода), а также потому, что он обеспечивает автоматическое управление памятью (что означает, что программистам не нужно явно выделять и освобождать память), а также поддерживает идиому RAII с деструкторами для управления ресурсами на основе области действия и программирования, безопасного с точки зрения исключений . [1] Это связано с уникальной реализацией Qore подсказок для сборки мусора .
Скрипты Qore обычно имеют следующие расширения:
.q
: для скриптов Qore.qm
: для пользовательских модулей Qore.qtest
: для тестовых скриптов QoreИсполняемые скрипты Qore в операционных системах типа Unix обычно начинаются с символа «хэшбэнг», указывающего имя файла интерпретатора, как показано ниже:
#!/usr/bin/env qore
Синтаксис Qore похож и вдохновлен следующими языками программирования: [2]
%new-style
синтаксиса Qore очень похож на Perl ; операторы foreach
, splice
, push
, pop
, chomp
регулярные выражения, совместимые с Perl5, и многое другое.%new-style
кодом Qore он выглядит более похожим на Java ; [3] ключевое synchronized
слово, instanceof
оператор, реализация объекта и классаon_exit
, on_success
, и on_error
предоставляют функциональность, учитывающую исключения, аналогичную операторам D scope(exit)
, scope(failure)
, позволяя размещать код очистки, учитывающий исключения, рядом с кодом, требующим очистки.map
, foldl
, foldr
, и select
с ленивым вычислением функциональных и списочных операторов и выраженийК основным типам относятся: boolean
, string
, integer
, float
, date
, binary
, [4] list
, hash
(ассоциативные массивы) и object
, [5] а также код code
для кода, используемый в качестве типа данных. [6]
Также поддерживаются сложные типы, такие как hash<string, bool>
, list<string>
, reference<list<string>>
а также типобезопасные хэши.
Несмотря на то, что Qore является интерпретируемым языком, он был разработан для поддержки многопоточности как фундаментального принципа проектирования. Все элементы Qore потокобезопасны, и язык в целом был разработан с учетом масштабируемости SMP. Поскольку все элементы языка были разработаны для поддержки многопоточности, программы и скрипты Qore не должны ограничивать себя подмножеством функциональности Qore, поэтому в Qore нет глобальной блокировки интерпретатора . [7]
Функциональность потоков в Qore обеспечивается библиотекой потоков POSIX операционной системы .
Qore имеет уникальный подход к сборке мусора, называемый prompt collection, который позволяет деструкторам запускаться немедленно, когда объекты выходят из области видимости, даже если у них есть рекурсивные ссылки на самих себя. Это позволяет Qore поддерживать идиому RAII , а также выполнять автоматическое управление памятью с помощью сборки мусора .
Qore был разработан для поддержки встраивания и изолирования логики в приложениях; это также применимо к приложениям, написанным в Qore, а также к приложениям, использующим общедоступный API C++ библиотеки Qore. Используя Program
класс, который представляет собой контейнер логики с элементами управления изолированием, можно создавать и уничтожать дискретные объекты во время выполнения, содержащие встроенный код для расширения или изменения поведения вашего приложения способами, определяемыми пользователем. [8]
Стандартная библиотека времени выполнения Qore поддерживает отображение данных, API для связи с базами данных (включая высокоуровневые API для операций SQL, управления схемами и действий DBA), клиентские API и реализации серверной инфраструктуры для многих протоколов, включая HTTP , REST (с проверкой схемы REST/генерацией кода, включая поддержку Swagger ), поддержку клиент/сервер SOAP (включая генерацию кода и сообщений), WebSocket , протоколы RPC , универсальные API-интерфейсы коннекторов, универсальные API-интерфейсы отображения данных, а также множество форматов файлов, протоколов обмена файлами и данными и т. д. [9]
Qore поддерживает тестирование с помощью модуля QUnit, который упрощает автоматизированное тестирование и процессы непрерывной интеграции для кода, написанного в Qore.
Репозиторий Git (ПО) Qore размещен на GitHub. Бинарные пакеты доступны в виде RPM, в MacPorts и в портах FreeBSD, а также для других операционных систем, включая Microsoft Windows ; см. General Source and Download Info на вики Qore для получения дополнительной информации.