Разрешение вложенному перечислению, передаваемому как универсальный суперклассу, соответствовать протоколу, встроенному в его объявление, приводит к бесконечной компиляции - PullRequest
0 голосов
/ 02 ноября 2018

TL; DR

Я нашел ошибку в компиляторе Swift с вложенными перечислениями и соответствием протокола. Прокрутите вниз до Edit 3.

Оригинальный пост:

Я действительно расстроен ... Xcode 10 просто сломался на днях. Не уверен, что вызвало это. Я работал 10.14.0 и Xcode 10.0, и это работало до вчерашнего дня. Затем внезапно вентилятор кулера на моем Macbook Pro (2016 г., полностью работающий на пределе) начал сходить с ума, не останавливаясь, и я увидел экстремальную загрузку процессора в Activity Monitor .

Я попытался перезапустить XCode, и компьютер не помог. Поэтому я подумал, что не мешало бы установить Mojave 10.14.1. Это не помогло. Потом скачал Xcode 10.1, не помогло.

Я пытался удалить производные данные, перезапустить Xcode, многократно перезагружать Macbook, ничего не помогает. Мой проект XCode (это (с открытым исходным кодом и довольно маленький) [https://github.com/OpenZesame/Zupreme]), использующий Карфаген. Он зависает при сборке, задача 221 из 256.

enter image description here

В Activity Monitor Я вижу множество процессов с именем swift , о которых я не помню ранее.

enter image description here

Кто-нибудь еще испытывал эти проблемы? Я понимаю, что на самом деле я не даю вам ничего, чтобы продолжить здесь, так как я почти уверен, что случайное начало появляться в Mojave 10.14.0 и Xcode 10.0, который работает уже довольно давно ...

Прямо сейчас я загружаю файл Xcode_10.1.xip с портала разработчика, чтобы выполнить чистую установку. Я также пытаюсь удалить все проекты, созданные с помощью Carthage, из папки Carthage/Build/ и построить их заново. Я сообщу результаты немного позже.

Редактировать 1:

Чтобы дать больше подробностей, я обнаружил, что это Compile Sources фаза сборки, которая никогда не заканчивается.

Кроме того, удаление и перестройка моих зависимостей в Карфагене не помогли. Все еще жду, когда мой Mac распакует Xcode_10.1.xip, скачанный с портала разработчика. Я сообщу, когда попробую эту чистую установку.

Редактировать 2:

Я работал над веткой функций, когда у меня была эта проблема. Все мои изменения компилировались во время моей разработки. Я не получил никаких ошибок компиляции. Теперь я попытался вернуться в свою ветку develop, и вуаля, она снова работает. Таким образом, быстрый компилятор никогда не заканчивал ни успехом, ни неудачей. Я открыл PR, содержащий изменения, которые я сделал в моей базе кода, и буду искать их, чтобы увидеть, что приводит к сбою компилятора swift. PR является публичным и может быть найден здесь, если кому-то интересно

Редактировать 3:

Я нашел ошибку, это действительно ошибка с быстрым компилятором, как это предлагается в комментариях. Так что это была красная сельдь, она не имела ничего общего с Xcode 10, я смог воспроизвести ту же ошибку в Xcode 9.4.1.

Несколько строк кода ниже приводят к тому, что компилятор swift никогда не завершает работу, даже с ошибкой компиляции:

protocol EmptyProtocol {}
class AbstractFoobar<Foo> {}
// This kills the swift compiler
final class SomeFoobar: AbstractFoobar<SomeFoobar.Foo> {
    enum Foo: EmptyProtocol {}
}

Пока что я решил это, переместив соответствие в EmptyProtocol в расширение, которое решает ошибку!

// But this works, moving the protocol conformance out to an extension
final class SomeFoobar2: AbstractFoobar<SomeFoobar2.Foo> {
    enum Foo {}
}
extension SomeFoobar2.Foo: EmptyProtocol {}

Отслеживайте статус ошибки здесь: https://bugs.swift.org/browse/SR-9160

...