NNBD: наименьшая верхняя граница String и Null - PullRequest
0 голосов
/ 28 сентября 2019

Работая над патчем для некоторых проблем в Dart Analyzer, мне нужно понять, считается ли сам Null обнуляемым типом.

В настоящее время наименьшая верхняя граница, вычисляемая алгеброй типов Дартса для String и Null, равнаString.

Однако, по моему мнению, объединение типов String и Null является обнуляемой строкой.

Билет с патчем: https://github.com/dart-lang/sdk/issues/38585 Обратите внимание, что в патче все еще есть ошибкав расширении T к T?если замыкание возвращает и T, и ноль.

Бонусный вопрос (тикет https://github.com/dart-lang/sdk/issues/38623): Является ли сам Null обнуляемым типом и должен содержать суффикс '?'?

Мое мнение в качестве доказательстваиз-за противоречия (LUB - это функция с наименьшей верхней границей):

  • Предположим, что Null не обнуляется.
  • Это означает, что Null и Null? являются разными типами.
  • LUB(T, Null) = T ?, т.е. объединение T с нулем расширяет T до T?
  • Следовательно, LUB (Null, Null) = Null?
  • Это нарушает возврат LUB, что означаетчто LUN (Null, Null) = Null
  • Следовательно, предположение неверно.

1 Ответ

1 голос
/ 28 сентября 2019

Дарт пока не имеет необнуляемых типов.Таким образом, тип, записанный как String , представляет собой пустую строку.Тип Null считается подтипом любого типа, и поэтому наименьшая верхняя граница Null и (обнуляемый) String равна (обнуляемый) String.

Когда Дарт становится ненулевымтипы, которые будут меняться.Тогда написанный тип String будет не обнуляемым, а String? будет обнуляемым, и тогда наименьшая верхняя граница Null и String должна тогда (надеюсь!) Быть String?.Обнуляемые типы еще не доступны, но они разрабатываются и, как ожидается, будут выпущены ... хорошо, когда они будут готовы.

Если вы пытаетесь установить патч Dart Analyzer, вам нужнознать обо всех системах типов в одном и том же времени, потому что анализатор уже был изменен для распознавания некоторых необнуляемых типов, если вы передаете правильные флаги и надлежащий исходный код.

...