Spec-Zone.ru › Swift

REPL и отладчик

Сообщество Swift.org использует отладчик LLDB, чтобы предоставить богатый REPL и среду отладки для языка Swift. Swift тесно связан с версией Swift-компилятора, встроенной в отладчик. Тесная интеграция компилятора и отладчика позволяет точно инспектировать типы Swift, а также полностью использовать возможности вычисления выражений в контексте быстро развивающегося языка.

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

Почему объединить REPL и отладчик?

Несколько мотивирующих факторов способствовали решению использовать Swift-отладчик в качестве основы для Swift REPL.

  • Интегрированная отладка. Наиболее очевидным преимуществом является то, что Swift REPL также является полнофункциональным отладчиком. Легко объявить функцию, установить в ней точку останова и затем вызвать её. Когда выполнение останавливается на точке останова, все возможности отладчика сразу доступны.

      1> func answer() -> Int {
      2.     return 42
      3. }
      4> :b 2
      4> answer()
    Execution stopped at breakpoint.  Enter LLDB commands to investigate (type help for assistance.)
       1   	  func answer() -> Int {
    -> 2   	      return 42
       3   	  }
    
  • Восстановление после сбоя. Критические ошибки в Swift обычно приводят к немедленному завершению процесса, что имеет смысл для ошибок программиста в производственном коде, но нежелательно в интерактивном контексте. Swift REPL поддерживает исследование ошибок с помощью полного отладчика или размотку для немедленного восстановления.

      1> ["One", "Two"][2]
    fatal error: Array index out of range
    Execution interrupted. Enter Swift code to recover and continue.
    Enter LLDB commands to investigate (type :help for assistance.)
    
  • Надежное вычисление выражений. Поддержка полного спектра сценариев REPL в отладчике поставила высокую планку для вычислителя выражений. В результате, выражения в отладчике имеют доступ ко всему спектру возможностей языка Swift и могут свободно объявлять любые допустимые конструкции языка.

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

Поддержка Xcode Playground

Разработчики Swift могут подходить к языку различными способами. Помимо традиционного компилятора командной строки и интерактивного REPL, одним из самых ранних способов взаимодействия для многих разработчиков было использование игровых площадок в Xcode. До Swift 3.0 и Xcode 8 это было возможно только с версией Swift, включённой в Xcode. Проект Xcode Playground Support позволяет построить цепочку инструментов Swift, включающую все необходимое для интеграции с опытом игровых площадок Xcode 8. Поддержка Playground будет включена в соответствующие снимки. Скачайте снимок, установите его и выберите цепочку инструментов, чтобы работать с последними функциями Swift в игровых площадках Xcode.

Проект создаёт два фреймворка:

  • PlaygroundSupport. Этот фреймворк определяет API, к которому может быть явным образом обращён код игровой площадки для взаимодействия с Xcode. Например: это типично для игровых площадок, которые идентифицируют определённый вид для отображения в реальном времени анимации или взаимодействия, и когда игровые площадки автоматически переходят между страницами при выполнении определённых критериев.

  • PlaygroundLogger. Этот проект используется неявно для записи значений, представляющих интерес на строчно-базовом уровне, и передачи их Xcode. Вызовы автоматически вставляются в код игровой площадки, так что явное обращение не требуется.

The Swift Programming Language, Copyright © 2014-2025 Apple Inc.
Swift and the Swift logo are trademarks of Apple Inc.

Documentation for Swift 6.0.3


https://www.swift.org/documentation/lldb/

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API