Вы не можете сравнивать два языка (например, C и APL) как таковые с точки зрения производительности, поскольку производительность в значительной степени зависит от реализаций языков и используемых библиотек.Одна и та же программа на Си может быть медленной на одной платформе (читай: Windows) и быстрой на другой.Ключевым моментом является то, что производительность почти полностью является свойством данной реализации языка, а не свойством самого языка.
В случае APL можно разделить циклы ЦП, необходимые для данной операции, надве части: служебная информация интерпретатора (обработка токенов, составляющих программу APL) и примитивы (такие как сложение, уменьшение и т. д.).В большинстве интерпретаторов APL издержки интерпретатора довольно малы (это означает, что оптимизация в этой части не может получить большую производительность (иначе закон Амдала). В ранних APL (скажем, 1970) это было по-другому. Обработка примитивов APL в современных интерпретаторахреализован в C / C ++, так что часть циклов ЦП по производительности такая же, как и для C (опять же, имея в виду, что реализация может иметь значение).
Я провел несколько тестов на уровнеПримитивы APL (различные скалярные функции от простых (целочисленное сложение) до не очень простых (сложный arcus cosinus) и для их внешних произведений. Несколько неожиданный результат состоял в том, что производительность различных скалярных функций не определялась сложностью вычисляемой функциино по времени доступа к / из памяти (включая кеши) и по прогнозированию ветвления ЦП. Например, если вы выполняете ту же операцию APL в цикле, то вторая итерация обычно будет дваждыБыстро, как первая и последующая итерация стабилизировалась примерно после четвертой итерации (на процессоре i5-4570).
Измеренные значения сильно колебались, что делает старомодные показатели производительности (например, интерпретатор X).в два раза быстрее, чем интерпретатор Y), довольно бессмысленно.
Как правило, если средний векторный размер (т. е. X, X) вашей программы APL равен 20 или более, вы можете полностью игнорировать интерпретаторнакладные расходы, и программа APL имеет примерно такую же производительность, что и сопоставимая программа на языке C.
Случаи, когда APL быстрее, чем C (что невозможно в теории), часто можно отнести к использованию различных алгоритмов на Cи в APL.Типичным примером из реальной жизни является сортировка с использованием heapsort в одном случае и с быстрой сортировкой в другом.Это опять-таки разница в реализациях, а не разница самих языков.