Цикл типа swift generi c вызывает «Недопустимая инструкция: 4», а не успех или разумную ошибку компилятора - PullRequest
0 голосов
/ 06 февраля 2020

XCode 11.2.1 macOS Mojave 10.14.6

Рассмотрим следующий код:

public class Foo1<T> {
}

public class Foo2 : Foo1<Bar2> {
}

public class Bar1<T> {
}

public class Bar2 : Bar1<Foo2> {
}

Этот код при компиляции выдает неоднозначную ошибку компилятора "Недопустимая инструкция: 4". Он не помечен ни в одном исходном файле, а скорее выглядит так, как будто он связан с этапом «Объединить swiftmodule».

Обратите внимание, что типизация c образует цикл - Bar2 расширяет Bar1<Foo2>, и Foo2 расширяет Foo1<Bar2>, возвращая нас к Bar2. Я подозреваю, что это основная причина ошибки.

Теперь я не думаю, что то, что я пытаюсь сделать, логически противоречиво. Похоже, что отлично работает в Java. Тем не менее, я (неохотно) согласился бы, если бы Свифт запретил такие циклы. Однако, похоже, что код должен либо успешно скомпилироваться, либо компилятор должен сказать вам, что эта конструкция запрещена.

Есть веская причина, что ничего из этого не происходит, или я должен подать это куда-нибудь с Apple как баг?

...