Рассмотрим следующий фрагмент кода (Julia)Производительность первого против второго вызова функции
bar(x) = for i = 1:9999 x+x*x-x+x end # Define the "bar" function
print("First try: "); @time bar(0.5)
print("Second try: "); @time bar(0.5)
bar(x) = for i = 1:9999 x+x*x-x+x end # Redefine the same "bar" function
print("Third try: "); @time bar(0.5)
print("Fourth try: "); @time bar(0.6)
Выход
First try: elapsed time: 0.002738996 seconds (88152 bytes allocated)
Second try: elapsed time: 3.827e-6 seconds (80 bytes allocated)
Third try: elapsed time: 0.002907554 seconds (88152 bytes allocated)
Fourth try: elapsed time: 2.395e-6 seconds (80 bytes allocated)
Почему второй (и четвертый) попробовать так гораздо быстрее (и занимают меньше памяти), чем первая (и третья) попытка?
У Джулии есть, я понимаю, компилятор точно в срок. Таким образом, первый (и третий) запуск - это компиляция кода (с необходимыми для этого выделениями), а во втором (и четвертом) запусках выполняется только скомпилированный ранее код. –
Вне темы: что произойдет, если вы повторно запустите код, не изменяя его? Python создает файлы .pyc (вид скомпилированного исходного кода). Если файлы pyc по-прежнему соответствуют исходному файлу, ему не придется снова перекомпилировать его (ну, не все снова). => быстрее –
О, хорошо. Это имеет смысл. Я бы подумал, что компиляция произойдет при определении функции, а не в первый раз для запуска. Я думаю, вы можете сделать ответ из своего комментария. Спасибо @Paul –