Как стать автором
Обновить
85.02
ITSumma
Эксперты в производительности

GNOME 45 потеряет совместимость со старыми дополнениям

Время на прочтение2 мин
Количество просмотров2.1K


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

Это связано с переходом с собственной системы импорта для JavaScript runtime GJS (GNOME JavaScript от Mozilla) на стандартную систему импорта JavaScript-модулей (ESM). Это приведет к тому, что дополнения, разработанные для версий старше GNOME 45 перестанут работать в новой версии, а все дополнения, созданные для GNOME 45 и далее — не будут работать на более ранних версиях GNOME.

Теперь разработчикам для сохранения совместимости с разными выпусками GNOME нужно через каталог extensions.gnome.org загружать два варианта дополнения: один для старой версии, другой — для новой. Документацию по теме можно почитать тут.

Если кратко: отличия сводятся к тому, что для подключения, например, JavaScript-модулей и GObject-обвязок раньше использовался объект imports, а теперь надо использовать import:

// Before GNOME 45
const GLib = imports.gi.GLib;

// GNOME 45
import GLib from 'gi://GLib';

Для дальнейшей работы в GNOME 45 необходимо:

  • изменить код, связанный с загрузкой библиотек;
  • обеспечить присутствие в файле extension.js методов enable()/disable() в классе default;
  • при использовании prefs.js определить подкласс ExtensionPreferences с методом fillPreferencesWindow;
  • изменённую версию дополнения привязать к новыми выпускам GNOME Shell через параметр '"shell-version": [ "45" ]' в metadata.json;

Для старых версий GNOME можно сформировать отдельные варианты дополнений с помощью привязки к старым версиям через параметр shell-version в metadata.json.

По сути, обратная совместимость со старыми дополнениями будет потеряна из-за отказа GNOME от устаревшей системы импорта, архитектура которой тянется из довольно далекого прошлого и основана на особенностях раннего JavaScript, конкретно — на невозможности разбивать код на несколько файлов.

На заре JavaScript такой подход имел смысл: тогда нужды заливать большие файлы или сразу несколько файлов, относящихся к одному коду, не было. Когда JavaScript перерос «браузерный» ЯП и на нем стали писаться более массивные программы, проблему дробления файла кода на несколько частей решили в node.js и GJS, которые добавили свои собственные системы импорта для организации кода в несколько файлов. Единый стандарт модулей был разработан и предложен ECMAScript 6 еще в 2015 году, но на практике он не совместим с загрузкой через скрипты, так как модуль скрывает все, что не экспортируется явно, что приводит к потере данных при экспорте старым способом.

Разработчики GNOME просят сообщество сообщать обо всех ошибках и проблемах, связанных с новой системой.
Теги:
Хабы:
Всего голосов 3: ↑3 и ↓0+3
Комментарии3

Другие новости

Информация

Сайт
www.itsumma.ru
Дата регистрации
Дата основания
Численность
101–200 человек
Местоположение
Россия
Представитель
ITSumma