Изучение и понимание системы сборки Xcode

По моему скромному мнению, преимущество утиного ввода становится увеличенным, когда Вы придерживаетесь некоторых соглашений, таких как именование Вас переменные и методы последовательным способом. Беря пример от [1 115] Ken G, я думаю, что это читало бы лучше всего:

class SimpleResults {
    def mapOfListResults
    def total
    def categories
}

Скажем, Вы определяете контракт на некоторой операции, названной 'calculateRating (A, B)', где A и B придерживаются другого контракта. В псевдокоде это читало бы:

Long calculateRating(A someObj, B, otherObj) {

   //some fake algorithm here:
   if(someObj.doStuff('foo') > otherObj.doStuff('bar')) return someObj.calcRating());
   else return otherObj.calcRating();

}

, Если Вы хотите реализовать это в Java, и A и B должны реализовать некоторый интерфейс, который читает что-то вроде этого:

public interface MyService {
    public int doStuff(String input);
}

Кроме того, если Вы хотите обобщить Вас контракт для вычисления оценок (скажем, у Вас есть другой алгоритм для оценки вычислений), также необходимо создать интерфейс:

public long calculateRating(MyService A, MyServiceB);

С утиным вводом, можно угробить Ваш интерфейсы и просто положиться, что на времени выполнения, и A и B правильно ответят на Ваш doStuff() вызовы. Нет никакой потребности в определенном определении контракта. Это может работать на Вас, но это может также работать против Вас.

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

Примечание, которое это ухудшает особенно в Java, где синтаксис не является столь кратким, как это могло быть (по сравнению с Scala, например). Контрпример этого платформа Лифта , где они говорят, что количество SLOC платформы подобно направляющие , но тестовый код имеет меньше строк, потому что они не должны реализовывать проверки типа в тестах.

18
задан gks 31 March 2011 в 20:53
поделиться

1 ответ

При компиляции исходного файла компилятор продолжается через несколько фаз.

  1. Preprocessing - обрабатывает язык обработки макроса, что означает, что он заменит макросы в Вашем тексте по их определениям. Разделения .h и .m. В XCode можно посмотреть на вывод препроцессора .m файл путем выбора

    select .m file -> Product -> Perform Action -> Preprocess
    
  2. Compiling - Генерация кода и Оптимизация. Переводит код в промежуточный код низкого уровня. XCode позволяет Вам рассмотреть вывод блока .m файл путем выбора. Часто Вы видите этот файл, когда отладка, которую помещает код, что Вы не принадлежите

    select .m file -> Product -> Perform Action -> Assemble
    
  3. Assembling (производят .o) - преобразовывает (человекочитаемый) ассемблерный код в машинный код. Это создает файл целевого объекта, часто просто названный объектным файлом. Эти файлы имеют.o файл, заканчивающийся <глоток> [Мужественный] В XCode, you’ll находят эти объектные файлы в <product_name>.build/Objects-normal папка в каталоге производных данных Вашего проекта.

  4. Linking (производят .app, .a, .framework...) - символы твердости между объектными файлами и библиотеками. Компоновщик берет все объектные файлы и библиотеки и разрешает любые неизвестные символы. Это тогда кодирует в заключительный исполняемый файл, которым этот символ может быть найден в lib, и компоновщик тогда производит заключительный исполняемый файл

, Также можно использовать Report Navigator для получения дополнительной информации о процессе сборки

, источник здесь и здесь

0
ответ дан 28 September 2019 в 11:14
поделиться
Другие вопросы по тегам:

Похожие вопросы: