Nano Hash - криптовалюты, майнинг, программирование

Swift: «Прервать ловушку: 6 — освобождаемый указатель не был выделен» с предложением class where

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

protocol DataContainer {
  typealias Data
}

protocol Foo {
  typealias FooBar: DataContainer
  typealias FooBaz: DataContainer
  typealias Schema
}

final class FooClass<F: Foo where F.Schema == F.FooBar.Data, F.Schema == F.FooBaz.Data> {}

Это довольно выразительное предложение where не компилируется с загадочным сообщением об ошибке:

Команда не выполнена из-за сигнала: Abort trap 6
...
swift(4946,0x7fff777c9300) malloc: *** ошибка для объекта 0x7fff5a5fbfe0: освобождаемый указатель не был выделен

что для меня абсолютно бессмысленно. Я подтвердил, что ошибка исчезает, когда я удаляю ограничение предложения where следующим образом:

final class FooClass<F: Foo> {}

Я знаю, что это долгий путь в темноте, но кто-нибудь сталкивался с этим?

И если да, то какой обходной путь вы нашли?


Приложение: этого можно было бы полностью избежать, если бы swift позволял выражать ограничение равенства внутри самого protocol вместо того, чтобы передавать ограничения в его реализацию. См. этот вопрос.

02.12.2015

  • Это загадочное сообщение об ошибке больше похоже на сбой компилятора Swift. Если это так, вам следует создать минимальный пример и сообщить об этом в Apple по адресу bugreport.apple.com. Что бы это ни стоило, я получаю другую ошибку 'Data' is not a member type of 'F.FooBar', которая имеет гораздо больше смысла. (Xcode 7.1.1) 02.12.2015
  • @JeremyP Я знаю, что это сбой компилятора. Это довольно очевидно по одному только его сообщению, не указывая на него. Под зашифрованным я подразумевал его нерелевантность для имеющегося кода. И я уже сообщил. Спасибо. 02.12.2015
  • Из текста вашего вопроса не было очевидно, что вы поняли, что у вас на руках сбой компилятора. Кстати, я не критиковал ваш вопрос и не предлагал вам не задавать его из-за этого, я просто пытался убедиться, что Apple знает о проблеме, чтобы ее можно было исправить. Неважно, неверен ваш код или нет, если он приводит к сбою компилятора, это ошибка в компиляторе. 02.12.2015
  • @JeremyP Прошу прощения за чрезмерную реакцию. В последнее время я был довольно разочарован быстрым из-за нескольких проблем с компилятором. Надеюсь, у тебя отличный день! 02.12.2015
  • Я использую Swift с момента объявления первой бета-версии, поэтому полностью понимаю ваше разочарование. Сбоев компилятора все еще слишком много, и часто может потребоваться некоторое время, чтобы найти строку, которая их вызывает. 02.12.2015

Ответы:


1

Хорошо. Итак, после еще нескольких грубой отладки я обнаружил, что если я использую те же type имена для ограниченных параметров, он компилируется.

Так, например,

protocol Foo {
  typealias FooBar
  typealias FooBaz
  typealias Data
}
final class FooClass<F: Foo where F.Data == F.FooBar.Data, F.Data == F.FooBaz.Data> {}

Это будет скомпилировано. Обратите внимание, что все, что я сделал, это изменил Schema на Data. Это определенно ошибка.

-РЕДАКТИРОВАТЬ: И сообщается соответственно.

02.12.2015
Новые материалы

Кластеризация: более глубокий взгляд
Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

Как написать эффективное резюме
Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

Частный метод Python: улучшение инкапсуляции и безопасности
Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

Как я автоматизирую тестирование с помощью Jest
Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..