Публикуя в полной реализации бесполезности этого, на данный момент на reddit происходит некоторая критика PHP (как обычно): PHP против Python — реальная разница , вызванная этим слегка забавным изображением . В то время как я могу принять пункты — технически это на самом деле намного сложнее обрабатывать ошибки равномерно в PHP и сообщество менее богато программистами, чем Python — соответствующая война пламени с Reddit удается пропустить другую точку, которая легче всего выражается в коде.
Какая самая значительная разница между этими двумя сценариями?
<?php $hits = 0; printf ("Hits: %sn", $hits); $hits++;
И контроллер web.py (абсолютно не предназначенный для критики — выбрал его, потому что он мне нравится — обсуждение применимо практически ко всему, что не относится к CGI, и, фактически, это на самом деле тоже ничего специфического для Python)…
#!/usr/bin/env python import web urls = ( '/.*', 'counter' ) hits = 0 class counter: def GET(self): global hits print "hits %s" % hits hits += 1 if __name__ == "__main__": web.run(urls, globals())
#!/usr/bin/env python import web urls = ( '/.*', 'counter' ) hits = 0 class counter: def GET(self): global hits print "hits %s" % hits hits += 1 if __name__ == "__main__": web.run(urls, globals())
В зависимости от того, как вы развернете последний (т.е. не как CGI), он будет фактически засчитан — т.е. состояние может сохраняться между запросами . Хотя это включает эту функцию, она также является потенциальным источником очень болезненной стрельбы в себя. Когда вы начинаете задаваться вопросом, могут ли слабые ссылки помочь устранить утечки памяти где-то в вашей большой кодовой базе , возникает чувство тяжести. Это карри, возможно, имело приятный вкус, но подождите до утра после… Помните те утечки памяти JScript — вы действительно хотите такую же забавную серверную часть?
«Но да, конечно, сэр. Конечно, ты умнее этого. Нет, один синглтон не может повредить, не так ли? Вы никогда не совершите эту глупую ошибку. Нет никогда. Даже в самые скучные дни »;)
Как это связано с ошибками и этим изображением ? Поскольку PHP «сбрасывается» после каждого запроса (см. Здесь или более подробно здесь ), на самом деле не всегда необходимо явно обрабатывать ошибки — при условии, что в вашем коде нет ничего фундаментально «сломанного», а это какая-то ошибка времени выполнения (например, db вниз), часто достаточно просто игнорировать проблему и ждать, пока система «исправится» — ничто не оставит PHP в состоянии, из которого он не может восстановиться. Это логично, что Дэмиен Кац делает намного лучше в кодах ошибок или исключений? Почему надежное программное обеспечение так сложно? — читать это — читать все это.
В любом случае — снова приносим извинения Python / web.py — просто следуя потоку reddit — в равной степени могли быть Rails, Catalyst или другие .