В Юля, синтаксис для печати форматированную строку следующим образом:
@printf("Hello %d\n", 5)
Почему @е
макрос, а не функция? Это значит, что он может принимать переменное число аргументов?
Принимает переменное число аргументов не является проблемой для нормальной функции Джулия [1]. @е
- это макрос, так что он может анализировать и интерпретировать формат строки во время компиляции и генерации пользовательского кода для этой конкретной строки формата. Люди не могут понять, что c'функция S е
повторно разбирает и заново интерпретирует строку формата каждый раз, когда вы называете е
. Тот факт, что она's так же быстро, как это маленькое чудо безумного программирования указатель. Серьезно, просто посмотрите на ближайшей библиотеки libc'реализация С Е
. Это's полностью орехи.
Джулия использует другой подход: @е
- это макрос, который переводит строки формата в эффективные специфические для этого спецификацию формата кода. Если вы думаете об этом, в стиле printf строка формата это просто способ выразить функцию, которая принимает фиксированное количество и тип аргументов и печатает их определенным образом. Обратите внимание, что я сказал, что формат строки; есть функция, а не Е, который является концептуально функциональный генератор, превращая форматов в форматеры. Тот факт, что это все ломятся в функцию в C немного несоответствие объясняется, что единственный разумный вариант в с. В самом деле, из-за этого, до недавнего времени, это было довольно легко выстрелить себе в ногу при прохождении неправильное количество или тип аргументов в c'ы е. Это только лучше, потому что компиляторы были специальные регистр, чтобы понять семантику формата функции printf.
В теории, Юлия'ы @е
может быть выполнен быстрее, чем c момента ее создания'пользовательский код, но на практике, у меня было достаточно трудное время, соответствующий C, а уж избивать его. Но я думаю, что's из-за текущего дизайна нашей системы ввода-вывода и, как я'м через это, не ограничение. Ввода/вывода мелочи, хотя предстоит капитальный ремонт, и когда это произойдет, мы сможем биться с отформатирован печати, используя тот факт, что @е
- это макро.