Должен ли я использовать классы ES6 или Lang при разработке Gnome Shell и расширений? - PullRequest
0 голосов
/ 05 сентября 2018

Я представляю простое расширение оболочки gnome, и в HACKING.md репозитория оболочки gnome говорится, что для инициализации класса мы должны использовать new Lang.Class() языковую среду.

Но, когда я проверяю официальные примеры репозитория расширений gnome-shell, каждое расширение использует синтаксис класса es6, отличный от new Lang.Class().

Итак, мой вопрос: должен ли я использовать синтаксис класса es6 для расширений оболочки и использовать инфраструктуру new Lang.Class() для внесения вклада в саму gnome-shell? Кроме того, где я могу получить больше информации о том, какой архитектурой является оболочка gnome и какие API я могу использовать? Я ищу в Google, и вся информация кажется сломанной или устаревшей, что очень разочаровывает таких наивных парней, как я.

Спасибо.

1 Ответ

0 голосов
/ 05 сентября 2018

https://gitlab.gnome.org/GNOME/gnome-shell/issues/530#note_308621

Ниже приведен ответ разработчика gnome-shell:

Итак, мой вопрос: должен ли я использовать синтаксис класса es6 для расширений оболочки и использовать новую платформу Lang.Class () для внесения вклада в саму gnome-shell?

На данный момент: да.

Поддержка классов ES6 в gjs все еще относительно нова, поэтому вы все еще находите много применений инфраструктуры Lang.Class, которая использовалась ранее. А в случае с gnome-shell есть дополнительное усложнение в виде расширений:

const Lang = imports.lang;

const Foo = new Lang.Class({
    Name: 'Foo'
});

// this works
class Bar extends Foo {}

class Baz {}

// this doesn't
var Quz = new Lang.Class({
    Name: 'Quz',
    Extends: Baz
});

План, конечно, состоит в том, чтобы портировать gnome-shell для использования классов ES6, но он сломает все расширения, которые все еще используют Lang.Class для наследования от класса, определенного в gnome-shell. Так что это не то, к чему мы должны постепенно проникать, а скорее явный переход с достаточной свободой действий для разработчиков расширений, чтобы адаптировать их код в случае необходимости (я надеюсь выбрать локальную ветку в начале цикла 3.32, поэтому постучите по дереву).

Итак, TL; DR:

Новые приложения или расширения должны окончательно использовать классы ES 6, и я бы порекомендовал разработчикам уже существующих серьезно подумать о портировании.

В более общих терминах: использование системы отслеживания проблем в качестве форума поддержки крайне неэффективно, потому что любые ответы, как правило, переходят в неизвестность, когда проблема закрыта, поэтому, вероятно, никто, кроме первоначального «репортера», не получит от них никакой выгоды. Это приводит к довольно плохому использованию времени разработчика (которое не тратится на исправление реальных проблем).

...