Все текущие основные компиляторы выполняют оптимизацию последнего вызова довольно хорошо (и делали больше десятилетия), даже для взаимно рекурсивных вызовов , таких как:
int bar(int, int);
int foo(int n, int acc) {
return (n == 0) ? acc : bar(n - 1, acc + 2);
}
int bar(int n, int acc) {
return (n == 0) ? acc : foo(n - 1, acc + 1);
}
Разрешение компилятору сделать оптимизация проста: Просто включите оптимизацию для скорости:
/O2
или /Ox
. -O3
простой способ проверить, сделал ли компилятор оптимизацию, состоит в том, чтобы выполнить вызов, который иначе привел бы к переполнению стека — или рассмотрение вывода блока.
Как интересный исторический очерк, оптимизация последнего вызова для C была добавлена к GCC в ходе тезис диплома Mark Probst. Тезис описывает некоторые интересные протесты в реализации. Это стоит считать.
Установщики Python для OS X python.org включают приложение под названием «Python Launcher.app», которое делает именно то, что вы хотите. Он устанавливается в / Applications / Python nn / для nn> 2.6 или / Applications / MacPython nn / для 2.5 и ранее. На его панели предпочтений вы можете указать, какой исполняемый файл Python запускать; это может быть любой путь в командной строке, включая установленный Apple по адресу /usr/bin/python2.5. Вам также необходимо убедиться, что .py связан с «Python Launcher»; вы можете использовать команду Finder Get Info, чтобы сделать это, как описано в другом месте. Однако имейте в виду, что это может быть угрозой безопасности, если загруженные скрипты .py автоматически запускаются вашим браузером (-ами). (Обратите внимание, что поставляемый Apple Python в версии 10.5 не включает "Python Launcher.app").
Ассоциации файлов выполняются с помощью «Get Info». Вы выбираете файл .PY, выбираете меню «Файл»; Пункт меню Get Info.
В середине страницы Get Info находится «Открыть с помощью».
Вы можете выбрать Python Launcher. Есть Изменить все .. кнопка, которая изменяет ассоциацию для всех файлов .py
.
Стив, добавьте следующее в начало вашего скрипта python:
#!/usr/bin/env python
Это должно быть первой строкой файла.
Затем сделайте файл исполняемым следующим образом:
daves-macbookpro ~: chmod +x foo.py
Тогда все, что вам нужно сделать, чтобы запустить это, это ввести
./foo.py