Мне просто любопытно, компилируется ли Objective-C в код C или среда выполнения Objective-C работает как слой абстракции над программой? Заранее извините, если не знаю о чем говорю!
Вопрос
Как компилируется Objective-C?
- Да. И нет. Может быть. Я никогда не разбирал его на части, но концептуально это препроцессор C в сочетании с огромным количеством поддержки во время выполнения. Я думаю, что на практике они интегрировали некоторые функции в компилятор C. Hot Licks 06.03.2014
Ответы
Ответ 1 · рейтинг 9 · Merlevede
Компиляция Objective-C в C не имеет смысла, потому что тогда потребуется разобрать код C и скомпилировать его.
Objective-C компилируется в машинный код. Помните, что язык (Objective-C, C, C++) только определяет правила для правильного написания кода. Компилятор проверяет правильность вашего кода и компилирует его, т. е. переводит в исполняемый код.
Кроме того, не путайте язык Objective-C и среду выполнения Objective-C. Язык определяет синтаксис, среда выполнения позволяет запускать скомпилированный код (как вы говорите, это слой, но он не компилируется каждый раз с вашей программой).
РЕДАКТИРОВАТЬ:
Среда выполнения реализует основное поведение компьютерного языка. Среда выполнения содержит скомпилированный код функций подобно библиотеке. В C, например, когда вы вызываете printf(), ваш код компилируется в машинный код и связывается с библиотекой, содержащей реализацию этой функции; что делает этот машинный код, так это передает параметры в исполняемый код в библиотеке.
Ответ 2 · рейтинг 15 · uliwitness
Небольшой урок истории:
И C++, и Objective C изначально начинались как препроцессоры для C. Таким образом, вы набирали свой код ObjC, и он эффективно выполнял поиск и замену по коду и переводил команды Objective-C в прямой код C, который использовал немного вспомогательная библиотека (вещи в objc/runtime.h и подобных файлах).
По мере того, как язык становился все более сложным, он был преобразован в полноценный синтаксический анализатор, который заменял/расширял синтаксический анализатор в компиляторе C на один, специфичный для Objective-C. Таким образом, хотя было бы вполне возможно скомпилировать Objective-C в чистый C, современные компиляторы ObjC больше не делают этого.
Ответ 3 · James Harnett
Если говорить строго из Xcode, код компилируется компилятором LLVM. Здесь приведена дополнительная информация о компиляторе LLVM. Вы сможете найти дополнительную информацию о том, как работает компилятор LLVM, в Интернете с помощью простого поиска в Google.
Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.
Похожие материалы
- Законен ли этот оператор присваивания структуры C?
- Ошибка сборки PIC16f877a
- Постоянное множественное хранилище типа "ключ-значение" GWAN
- Обновление текста, отображаемого на терминале
- В Cocoa Bindings программное изменение значения NSTextField не приводит к обновлению модели.
- Внедрить UITableView из другого класса ControllerClass в качестве подпредставления