Когда флаттер создавал федеративные пакеты, мы говорили о том, чтобы дать пакету два номера версии. Мы решили эту проблему, создав два пакета.
Возможно, здесь два пакета:
package:kernel_api which is a series of abstract classes. The major version is only bumped when the interfaces for parsing kernel
файлы повреждены. package: kernel_parser, в котором есть функция, возвращающая конкретный экземпляр абстрактного класса из package: kernel_api, который можно использовать для анализа файлов ядра. Основная версия этого пакета обновляется всякий раз, когда формат ядра нарушается. На практике он может следовать второстепенным версиям Dart SDK (для его основной версии).
Это означает, что вы используете версию файла-формата в пакете, отличную от версии интерфейсов, используемых для чтения файлового формата. Если это имеет смысл :) https://github.com/dart-lang/sdk/issues/39167#issuecomment -547646728
После некоторого обсуждения этого в Орхусе между мной, @jonasfj, @johnniwinther, @stefantsov и @jensjoha, мы обдумывает идею перемещения общих частей анализатора и front_end в новый пакет (который, в частности, не будет зависеть от ядра). Это полностью отделит анализатор от ядра. Это не решило бы эту проблему напрямую, но уменьшило бы ее объем, отделив решение о том, как импортировать ядро (и какую версию импортировать) от каких-либо соображений анализатора. Затем мы могли бы рассмотреть такие варианты, как:
Flutter's transformer imports kernel directly from the SDK using a relative path
Kernel increments their major version number with every SDK release, so that Flutter can be assured they have a compatible version
ядра, поместив нужную версию в pubspec. Ядро публикует отдельный пакет для каждого выпуска SDK (например, от kernel_2_7 до go с Dart 2.7). Ядро разделено на два пакета в соответствии с предложением @ jonasfj выше.
В настоящее время я жду отзывов об этой идее от команд анализатора и клиентской части. https://github.com/dart-lang/sdk/issues/39167#issuecomment -547984002