The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

Релиз фреймворка Qt 5.8

23.01.2017 16:21

После полугода разработки состоялся релиз кроссплатформенного фреймворка Qt 5.8, продолжившего развитие ветки Qt 5.x. Исходные тексты компонентов Qt поставляются под лицензиями LGPLv3 и GPLv2, инструменты Qt для разработчиков, такие как Qt Creator и qmake, а также некоторые модули поставляются под лицензией GPLv3. Выпуск примечателен началом реализации идей, предложенных в рамках инициативы Qt Lite, нацеленной на предоставление возможности формирования сборок Qt, содержащих только необходимые компоненты.

Основные изменения:

  • Включены наработки по обеспечению гранулированной сборки, позволяющие собирать модули, выборочно активируя только необходимую функциональность. Отныне Qt позволяет не только манипулировать подключением отдельных модулей, но и управлять составом модулей. Отключённая функциональность не включается в сборку, что позволяет создавать урезанные конфигурации, пригодные для использования на встраиваемых системах с ограниченным размером оперативной памяти и хранилища. По предварительным оценкам по сравнению с Qt 5.6 новая система сборки позволяет уменьшить размер статически связанного приложения Qt Quick более чем на 60%;
  • С целью избавления Qt Quick от привязки к OpenGL и обеспечения независимости от графического API значительно переработана архитектура графической подсистемы, что дало возможность применения эффективных программных методов отрисовки на системах, не поддерживающих OpenGL. Кроме программной отрисовки (QT_QUICK_BACKEND=software) также подготовлен бэкенд для DirectX 12 (QT_QUICK_BACKEND=d3d12). Функциональность модуля Qt Quick 2D Renderer интегрирована в Qt Declarative;
  • В движке выполнения QML реализована новая инфраструктура кэширования, позволяющая кэшировать QML-файлы в предкомпилированном бинарном представлении. Кэширование дало возможность значительно ускорить повторную загрузку QML-приложений и сократить потребление памяти. Поддержка упреждающей компиляции Qt Quick будет продолжена в рамках коммерческого продукта Qt Quick Compiler;
  • В Qt Quick Controls 2 добавлены новые QML-типы Dialog, DialogButtonBox, MenuSeparator, RoundButton и ToolSeparator, а также экспериментальные типы MenuBar, Menu, SystemTrayIcon, ColorDialog, FontDialog, MessageDialog, FileDialog и FolderDialog;
  • Обработка событий мыши и тачпада унифицирована и перенесена в единый класс QQuickPointerEvent;
  • Браузерный движок Qt Webengine синхронизирован с кодовой базой Chromium 53. Добавлены средства для вывода web-страниц на печать и обеспечена возможность использования QML API для определения собственных вариантов диалогов, контекстных меню и всплывающих подсказок. Также добавлен интерфейс для просмотра исходного текста страницы (view-source:) и некоторые обработчики URL "chrome:";
  • Переведены в разряд полностью поддерживаемых некоторые модули, ранее помеченные как экспериментальные (Technology Preview):
    • Wayland Compositor - многопоточная система отрисовки для встраиваемых устройств, использующая протокол Wayland. Модуль может использоваться для создания собственных композитных серверов Wayland, применяя QML или C++ API. Имеется поддержка стандарта XDG-Shell и возможность работы в системах с несколькими экранами. В качестве примера применения Qt Wayland Compositor развивается рабочий стол Grefsen;
    • SCXML - фреймворк с реализацией State Chart API;
    • Serial Bus - модуль для для организации доступа приложений к различным промышленным интерфейсам при помощи шин CANBus и ModBus;
  • В состав включён экспериментальный модуль Qt Speech, предоставляющий средства для синтеза речи. Речевое сопровождение может применяться для повышения доступности приложений для людей с ограниченными возможностями или для реализации новых средств фонового информирования пользователя, что особенно востребовано для вывода уведомлений в приложениях для автомобильных информационно-развлекательных систем. В Linux преобразование текста в речь осуществляется при помощи библиотеки Speech Dispatcher (libspeechd), а на других платформах через штатный API операционной системы;
  • Добавлен экспериментальный модуль Qt Network Authentication с реализаций протоколов аутентификации OAuth 1 и OAuth 2;
  • В модули Qt Network и Web Sockets добавлена полноценная поддержка наборов шифров TLS PSK. В Qt Network теперь можно настроить применение собственных параметров Diffie-Hellman. В QNetworkAccessManager появилась поддержка HTTP/2;
  • В модуле Qt Bluetooth появилась поддержка профиля BTLE Peripheral на платформах macOS и iOS, и профиля BTLE Central на платформе WinRT;
  • Обеспечена экспериментальная возможность сборки для устройств Apple на базе tvOS и watchOS. Для tvOS доступно большинство возможностей Qt, поддерживаемых для iOS should also work on tvOS. Для watchOS пока предоставляются только неграфические функции Qt;
  • Проведена работа по стабилизации и расширению производительности модуля Qt 3D;
  • В Qt Charts добавлен новый тип диаграмм Candlestick и реализована возможность использования API QOpenGLTextureBlitter;
  • Для встраиваемых систем, поддерживаемых в наборе Qt for Device Creation, улучшена поддержка конфигураций с несколькими экранами при использовании QPA-плагина eglfs и добавлена возможность поворота содержимого экрана на 90 и 180 градусов;
  • Объявлен устаревшим модуль Qt Script, который будет удалён в одном из будущих выпусков.




  1. Главная ссылка к новости (http://blog.qt.io/blog/2017/01...)
  2. OpenNews: В Qt появится поддержка синтезатора речи
  3. OpenNews: Выпуск Qt 5.7.1 и интегрированной среды разработки Qt Creator 4.2
  4. OpenNews: Разработчики Qt представили проект Qt Lite
  5. OpenNews: Релиз фреймворка Qt 5.7
Лицензия: CC BY 3.0
Короткая ссылка: https://opennet.ru/45901-qt
Ключевые слова: qt
При перепечатке указание ссылки на opennet.ru обязательно


Обсуждение (62) Ajax | 1 уровень | Линейный | +/- | Раскрыть всё | RSS
  • 1.1, Аноним (-), 16:30, 23/01/2017 [ответить] [﹢﹢﹢] [ · · · ]  
  • –12 +/
    А первые controls'ы всё так же крашат? Или они всё, полностью про них забыли и сосредуточены с скоростью улитки на Controls 2?
     
     
  • 2.2, BlackRaven86 (ok), 16:40, 23/01/2017 [^] [^^] [^^^] [ответить]  
  • +7 +/
    А первые controls'ы всё так же крашат?

    Не слышал про крэши первых контролов.

    >  сосредуточены с скоростью улитки на Controls 2

    Толсто. Но пилят активно вторые, да.

     
     
  • 3.29, Аноним (-), 19:58, 23/01/2017 [^] [^^] [^^^] [ответить]  
  • –6 +/
    Еще как крэшат, там со сборщиком мусора беда
     
     
  • 4.40, Отражение луны (ok), 23:27, 23/01/2017 [^] [^^] [^^^] [ответить]  
  • +2 +/
    Ошибка у тебя в коде.
     
  • 3.51, Аноним (-), 10:33, 24/01/2017 [^] [^^] [^^^] [ответить]  
  • +/
    Они сами настоятельно не рекомендуют использовать Controls 1, там всё на виджетах работает
     
  • 3.53, Аноним (-), 10:37, 24/01/2017 [^] [^^] [^^^] [ответить]  
  • +/
    Впихни Control 1, например tooltip или combobox в ListView. После удаления и добавления элемента первый упадет, второй заглючит. Ибо их нельзя совмещать. Controls 2 - найтивные qml'евские, не тормозят, не глючат и не падают. Но до сих пор охватывают малую долю интерфейсных примитивов.
     

  • 1.3, Qt Power (?), 17:01, 23/01/2017 [ответить] [﹢﹢﹢] [ · · · ]  
  • +23 +/
    Божественный тулкит и фреймворк. Единственный в своем роде. Альтернатив никогда не было, и в будущем не предвидится. А после появления Qt Lite он стал лучший во всем. И это хорошо.
     
     
  • 2.48, бедный буратино (ok), 07:43, 24/01/2017 [^] [^^] [^^^] [ответить]  
  • +11 +/
    забыл добавить *хочу от этого тулкита ребёнка!*
     
     
  • 3.67, aliceklipper (ok), 21:16, 30/01/2017 [^] [^^] [^^^] [ответить]  
  • +/
    Этот тулкит настолько крут, что я хотел бы переспать с ним и наделать кучу маленьких тулкитиков. Так лучше.
     

  • 1.4, Аноним (-), 17:05, 23/01/2017 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    > С целью избавления Qt Quick от привязки к OpenGL и обеспечения независимости от графического API значительно переработана  архитектура графической подсистемы

    Интересно, что они специально для ветки 5.0 перерабатывали вывод графики и в результате избавились от программного рендеринга. Теперь вот обратно возвращают.

     
     
  • 2.5, Аноним (-), 17:19, 23/01/2017 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Да уж странно, молча и без объяснений.

    И вообще что-то отчётливо стала прослеживаться тенденция делать основной упор на разработку всяких кутэквиков и кумеэлей, в ущерб всему остальному, причём также молча и без объяснений зачем прикладывать такие большие усилия на разработку того чем практически никто не пользуется.

     
     
  • 3.10, anonymous (??), 17:47, 23/01/2017 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Да, на виджеты практически забили. Баги уже годами висят.
     
     
  • 4.30, Аноним (-), 19:59, 23/01/2017 [^] [^^] [^^^] [ответить]  
  • +/
    На виджетах, если я не ошибаюсь, реализованы Qt Quick Controls 1
     
     
  • 5.36, equeim (ok), 20:22, 23/01/2017 [^] [^^] [^^^] [ответить]  
  • +/
    Нет, они на QML/Qt Quick. Но могут использовать стили из Qt Widgets (кривовато, правда).
     
     
  • 6.52, Аноним (-), 10:33, 24/01/2017 [^] [^^] [^^^] [ответить]  
  • +/
    > Нет, они на QML/Qt Quick. Но могут использовать стили из Qt Widgets
    > (кривовато, правда).

    В состав Qt Quick Controls 2 был добавлен экспериментальный модуль Qt Labs Platform, содержащий нативные для платформы компоненты QML. При отсутствии нативных компонентов на данной платформе, в качестве запасного варианта используется реализация на Qt Widgets.

     
  • 3.13, Аноним (-), 17:49, 23/01/2017 [^] [^^] [^^^] [ответить]  
  • +/
    Тут то как раз все понятно. Бизнес не может заниматься всем - ресурсов не хватит, но свою нишу занять нужно, поэтому акцентируют внимание на том, что могут (одно-два направления). В данном случае на наиболее активно растущем рынке (где проще занимать нишу), а именно мобильных приложений.
     
     
  • 4.23, BlackRaven86 (ok), 18:51, 23/01/2017 [^] [^^] [^^^] [ответить]  
  • +/
    > а именно мобильных приложений.

    И встраиваемых решений.

     
  • 3.16, Аноним (-), 17:55, 23/01/2017 [^] [^^] [^^^] [ответить]  
  • +/
    Ага, никто не пользуется, весь KF пользуется.
     
  • 2.6, Аноним (-), 17:22, 23/01/2017 [^] [^^] [^^^] [ответить]  
  • +/
    В 6.0 наверное будут героически на псеводографический интерфейс для VR-шлемов переходить, а потом не менее героически возвращать возможность работать как раньше.
     
  • 2.22, BlackRaven86 (ok), 18:49, 23/01/2017 [^] [^^] [^^^] [ответить]  
  • +/
    Потому, что OpenGL хорошо работает не везде. Например, на виндовс с интеловскими затычками вместо видеокарт.
     
     
  • 3.43, Аноним (-), 00:53, 24/01/2017 [^] [^^] [^^^] [ответить]  
  • –2 +/
    > Потому, что OpenGL хорошо работает не везде.

    И уж конечно этого нельзя было предугадать ДО выпиливания. Даже зная, что под линукс единственный нормальный драйвер распространяется без исходников и его производителю приходится патчить каждые несколько релизов ядра.

     
     
  • 4.44, BlackRaven86 (ok), 01:53, 24/01/2017 [^] [^^] [^^^] [ответить]  
  • +/
    Под Linux все хорошо. Проблема в том, что QtQuick 2 требует OpenGL 2.0, который хорошо работает и на смартфонах, и на Linux, и на MacOS. А вот на виндовс для некоторых интеловских видеокарт драйвер не может OpenGL 2.0.
     

  • 1.7, Аноним (-), 17:23, 23/01/2017 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/
    Вот интересно, а как совмещаются такие казалось бы противоречивые понятия как "встраиваемые системы с ограниченным размером оперативной памяти и хранилища" и "Qt Quick"
     
     
  • 2.17, Аноним (-), 17:59, 23/01/2017 [^] [^^] [^^^] [ответить]  
  • –3 +/
    Совмещается с экранами с низким разрешением?
     
  • 2.41, Отражение луны (ok), 23:29, 23/01/2017 [^] [^^] [^^^] [ответить]  
  • +1 +/
    На самом деле довольно удачно
     

  • 1.8, Я (??), 17:26, 23/01/2017 [ответить] [﹢﹢﹢] [ · · · ]  
  • –1 +/
    что такое фреймворк и для чего он нужен?
     
     
  • 2.14, A.Stahl (ok), 17:51, 23/01/2017 [^] [^^] [^^^] [ответить]  
  • +/
    >фреймворк

    Это от английского frame и work: каркас/оправа и работа. А вместе это универсальный техпроцесс для производства разнообразных контейнеров. От мусорных пакетов, до махин вроде укрытия над ЧАЭС.

     
  • 2.15, Аноним (-), 17:51, 23/01/2017 [^] [^^] [^^^] [ответить]  
  • +/
    https://ru.wikipedia.org/wiki/%D0%A4%D1%80%D0%B5
     
  • 2.49, бедный буратино (ok), 07:46, 24/01/2017 [^] [^^] [^^^] [ответить]  
  • –1 +/
    это такой пакет, про который писал сам Фигурнов ещё в восемьдесят каком-то году
     

  • 1.9, Аноним (-), 17:35, 23/01/2017 [ответить] [﹢﹢﹢] [ · · · ]  
  • –2 +/
    >Объявлен устаревшим модуль Qt Script, который будет удалён в одном из будущих выпусков.

    Опять? Сколько можно его удалять, ещё во времена Qt4 его объявили устаревшим и написали что удалят в одном из следующих выпусков. Прошли годы и ... его до сих пор удаляют, удаляют, похоже этот процесс будет тянуться вечно.

     
     
  • 2.12, anonymous (??), 17:48, 23/01/2017 [^] [^^] [^^^] [ответить]  
  • –1 +/
    >>Объявлен устаревшим модуль Qt Script, который будет удалён в одном из будущих выпусков.
    > Опять? Сколько можно его удалять, ещё во времена Qt4 его объявили устаревшим
    > и написали что удалят в одном из следующих выпусков. Прошли годы
    > и ... его до сих пор удаляют, удаляют, похоже этот процесс
    > будет тянуться вечно.

    А замена ему есть?

     
     
  • 3.24, BlackRaven86 (ok), 18:52, 23/01/2017 [^] [^^] [^^^] [ответить]  
  • +2 +/
    >>>Объявлен устаревшим модуль Qt Script, который будет удалён в одном из будущих выпусков.
    >> Опять? Сколько можно его удалять, ещё во времена Qt4 его объявили устаревшим
    >> и написали что удалят в одном из следующих выпусков. Прошли годы
    >> и ... его до сих пор удаляют, удаляют, похоже этот процесс
    >> будет тянуться вечно.
    > А замена ему есть?

    QtQML/QtJSEngine.

     
  • 2.19, Аноним (-), 18:19, 23/01/2017 [^] [^^] [^^^] [ответить]  
  • –8 +/
    Qt - для неторопливых. Qt сам по себе неторопливый, судя по скорости отрисовки своих т. н. "виджетов".
     
     
  • 3.28, Аноним (-), 19:46, 23/01/2017 [^] [^^] [^^^] [ответить]  
  • +1 +/
    С разморозкой тебя, как говорят на ЛОРе. Может у тебя и плазма до сих пор падает?
     
  • 3.31, Аноним (-), 20:02, 23/01/2017 [^] [^^] [^^^] [ответить]  
  • +/
    Поэтому от виджетов и отказались
     
  • 3.33, Аноним (-), 20:10, 23/01/2017 [^] [^^] [^^^] [ответить]  
  • +/
    Ну дык юзай Tk, он мгновенно всё рисует. А вот GTK уже не так быстро. Примерно так же как и Qt.
     
  • 3.42, BlackRaven86 (ok), 00:40, 24/01/2017 [^] [^^] [^^^] [ответить]  
  • +/
    Используйте QML.
     

  • 1.11, Аноним (-), 17:47, 23/01/2017 [ответить] [﹢﹢﹢] [ · · · ]  
  • +5 +/
    Прекрасная новость! Пошел праздновать.
     
  • 1.18, Дуплик (ok), 18:12, 23/01/2017 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Вот интересно, когда релизнется Qt 6 с фаршем вроде C++14 и C++17, побегут ли KDE'шники переписывать KDE на него?
     
     
  • 2.35, Аноним (-), 20:22, 23/01/2017 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Да.
     
  • 2.45, Вареник (?), 03:22, 24/01/2017 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Конечно.
     
  • 2.61, Аноним (-), 23:03, 24/01/2017 [^] [^^] [^^^] [ответить]  
  • +/
    > побегут ли KDE'шники переписывать KDE на него?

    Справедливости ради стоит заметить, что порт Qt4 -> Qt5 делается левой ногой вполсилы... в 95% случаев можно обойтись автозаменой. Перекатывание с kdelibs на kdeframeworks процесс не сильно связанный со сменой версии Qt, это скорее внутренние заморочки KDE-шников.

    Вот переход Qt3 -> Qt4 местами был настолько проблематичным, что некоторый софт не дожил. Что будет в Qt6 пока известно только телепатам :) Может moc уже наконец выкинут (вроде в Qt5 уже можно без moc), а может еще что-то выдумают.

     
     
  • 3.62, Аноним (-), 23:42, 24/01/2017 [^] [^^] [^^^] [ответить]  
  • +/
    > Может moc уже наконец выкинут

    Когда все [основные] плюсовые компиляторы начнут поддерживать рефлексию, чтобы, например, можно было в рантайме получать списки сигналов-слотов-свойств объекта, тогда и moc выкинут. Уж сколько moc-офобам повторяли, что он не только для сигналов со слотами, но воз и ныне там...

     
     
  • 4.63, Аноним (-), 08:37, 25/01/2017 [^] [^^] [^^^] [ответить]  
  • +/
    И, кстати, именно moc генерирует реализации методов, объявленных как сигналы, так что никуда он в обозримом будущем не денется.
     
     
  • 5.66, Аноним (-), 17:00, 26/01/2017 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Не факт. https://www.opennet.ru/opennews/art.shtml?num=42397
     

  • 1.21, A.Stahl (ok), 18:41, 23/01/2017 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    >Qt Lite

    Что-то я не могу найти как этим пользоваться. Или доки ещё нет? Или я вообще всё понял неправильно и это какая-то отдельная редакция Qt?

     
     
  • 2.32, Аноним (-), 20:04, 23/01/2017 [^] [^^] [^^^] [ответить]  
  • +/
    Тоже не нашел материала, но полагаю можно либы пересобрать в любой нужной комплектации
     
     
  • 3.34, A.Stahl (ok), 20:10, 23/01/2017 [^] [^^] [^^^] [ответить]  
  • +/
    Ну я сам Qt не собираю, а качаю стабильные версии через Qt maintenance tool.
    От простого факта возможности собрать множество мелких либ вместо одной большой мне не слишком радостно.
     
  • 2.46, анон (?), 05:35, 24/01/2017 [^] [^^] [^^^] [ответить]  
  • +/
    Потому что он пока существует в Qt for Device Creation, хз когда в опен сорс версию затащат.
     
     
  • 3.47, анон (?), 05:57, 24/01/2017 [^] [^^] [^^^] [ответить]  
  • +/
    Хотя я наврал.
    Из чейнжлога:
    > The -no-feature-* option family was integrated with the rest of the configuration system. Numerous existing features were made optional, and build problems in various reduced configurations were fixed. This is an ongoing effort known as "Qt Lite".

    Список фич в src/corelib/global/qfeatures.txt

     

  • 1.26, Аноним (-), 19:18, 23/01/2017 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    А что за ДЕ на скриншоте?
     
     
  • 2.39, Аноним (-), 22:21, 23/01/2017 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Похоже на QtCreator под Ubuntu.
     
  • 2.68, axredneck (?), 23:46, 31/01/2017 [^] [^^] [^^^] [ответить]  
  • +/
    винда
    хотя если вопрос про IDE, а не DE, то Qt Creator
     

  • 1.50, V_ctor (?), 10:32, 24/01/2017 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    А вот скажите, милейшие, появилась ли в Qt возможность по быстрому собрать дистриб/полноценно_исполняемый_файл? Т.е. что бы по бырому накидал что-то , пару кнопок жмякнул и получил или свой исполняемый файл со всеми необходимыми библиотечками в одном каталоге или же статически скомпанованый , но так же ничего не требующий? Что бы вот как в давние времена в C++ Builder. Когда-то давно пытался ,но что-то не смог по быстрому. Нашел статью где говорилось что бы статически скомпоновать сначала надо все библиотеки для этого откомпилить. Компилил дня два, что-то недокомпилилось, сломалось, плюнул, забил. Но было жаль. Возможно я конечно неосилятор.
    Сейчас это можно как-то по простому сделать? Что бы накидал, отправил человеку и не переживать, что не запустится т.к. нет какой-то библиотеки у него, а он не шарит.
     
     
  • 2.54, Акроним (?), 12:30, 24/01/2017 [^] [^^] [^^^] [ответить]  
  • +/
    windeployqt
    macdeployqt
     
     
  • 3.57, V_ctor (?), 15:57, 24/01/2017 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Отлично выглядит как то что нужно. Но вот под линух бы? Что-то не нашел сходу.
     
     
  • 4.58, BlackRaven86 (ok), 17:18, 24/01/2017 [^] [^^] [^^^] [ответить]  
  • +/
    Под Linux пока нету.
     

  • 1.56, Аноним (-), 14:21, 24/01/2017 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/
    Если кто-то использует qt для написания под андроид, может ли поделиться информацией как изменился объем apk с этим обновлением?
     
     
  • 2.59, A.Stahl (ok), 17:19, 24/01/2017 [^] [^^] [^^^] [ответить]  
  • +/
    >как изменился объем apk

    Никак. Для этого нужно что-то делать, связанное с Qt Lite. А что именно -- данных в гугле пока нет.

     
     
  • 3.65, Qt user (?), 19:06, 25/01/2017 [^] [^^] [^^^] [ответить]  
  • +/
    Из dist/changes-5.8.0:

    - The -no-feature-* option family was integrated with the rest of the
       configuration system. Numerous existing features were made optional,
       and build problems in various reduced configurations were fixed.
       This is an ongoing effort known as "Qt Lite".

    Список features здесь:
    src/corelib/global/qfeatures.txt

     

  • 1.60, Аноним (-), 20:51, 24/01/2017 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Так они виджет для вэб-браузера в палитру вернули или нет?
     
  • 1.64, testt (ok), 10:23, 25/01/2017 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/
    >подготовлен бэкенд для DirectX 12

    Зачем эту микрософтовскую проприетарщину внедряют?

     

     Добавить комментарий
    Имя:
    E-Mail:
    Текст:



    Партнёры:
    PostgresPro
    Inferno Solutions
    Hosting by Hoster.ru
    Хостинг:

    Закладки на сайте
    Проследить за страницей
    Created 1996-2024 by Maxim Chirkov
    Добавить, Поддержать, Вебмастеру