См. наш SD-Obfuscator . Обрабатывает огромные системы файлов PHP. На сервере PHP нет требований времени выполнения. Нет дополнительных дополнительных затрат времени.
[EDIT май 2016]. В недавнем ответе было отмечено, что Zend не обрабатывает PHP5.5. SD-обфускатор PHP PHP.
Во многих случаях требуется точка с запятой.
Что если бы у вас было:
int *y;
int f = 1
*y = 2;
Это было бы проанализировано как
int *y;
int f = 1 * y = 2;
Так что без точек с запятой это неоднозначно.
Это очень хорошо, что компилятор C ++ не делает этого. Один из худших аспектов JavaScript - это точка с запятой. Представьте себе это:
return
(a + b);
Компилятор C ++ с радостью продолжит следующую строку, как и ожидалось, в то время как язык, который «вставляет» точки с запятой, как JavaScript, будет обрабатывать его как «return»; и пропустить "(a + b);".
Вместо того чтобы полагаться на исправление ошибок в компиляторе, используйте привычку использовать точки с запятой.
Во-первых, это только маленький пример; Вы уверены, что компилятор может разумно сказать вам, что не так для более сложного кода? Для любого куска кода? Могут ли все компиляторы разумно распознавать это одинаково, чтобы кусок кода C ++ мог быть гарантированно переносимым с пропущенными точками с запятой?
Во-вторых, C ++ был создан более десяти лет назад, когда вычислительные ресурсы - не то, что нужно. они сейчас. Даже сегодня сборка может занять значительное время. Точки с запятой помогают четко разграничить различные команды (для пользователя и для компилятора!) И помогают как программисту, так и компилятору понять, что происходит.
;
для удобства программиста. Если строка кода очень длинная, тогда мы можем нажать Enter и перейти ко второй строке, потому что у нас есть ;
для разделителя строк. Это соглашения о программировании. Должен быть разделитель строк.
Наличие точек с запятой (или разрывов строк, выберите один) делает компилятор намного проще, а сообщения об ошибках - более читабельными.
Но вопреки тому, что говорили другие люди, ни одна из форм разделителей (как абсолют ) строго не нужна.
Рассмотрим, например, Haskell, который не имеет ни того, ни другого. Даже текущая версия VB допускает разрывы строк во многих местах внутри оператора, как это делает Python. Ни один не требует продолжения строки во многих местах.
Например, VB теперь разрешает следующий код:
Dim result = From element in collection
Where element < threshold
Select element
Без разделителей операторов, без продолжений строк и, тем не менее, без двусмысленностей.
Теоретически это можно было бы продвинуть гораздо дальше. Все неясности могут быть устранены (опять же, посмотрите на Haskell), введя некоторые правила. Но опять же, это делает синтаксический анализатор намного более сложным (он должен быть контекстно-зависимым во многих местах, например, в вашем примере return
, который не может быть решен без предварительного знания возвращаемого типа функции). И опять же, это значительно усложняет вывод значимой диагностики, поскольку ошибочный разрыв строки может означать любую из нескольких вещей, поэтому компилятор не может знать , какую ошибку сделал пользователь, и даже где ] ошибка была допущена.
В программах на C точки с запятой являются разделителями операторов, а не разделителями. Возможно, вы захотите прочитать эту забавную статью .
+1 вам обоим.
Точка с запятой - это разделитель командной строки, в отличие от VB, python и т. Д. C и C ++ игнорируют пробелы в строках кода, включая символы возврата каретки! Первоначально это было связано с тем, что при появлении C компьютерные мониторы могли обрабатывать только 80 символов текста, а поскольку C ++ основан на спецификации C, он последовал их примеру.
Я мог бы опубликовать вопрос «Почему я должен постоянно получать ошибки об отсутствии \ символов в VB, когда я пытаюсь написать код в несколько строк, конечно, если VB знает о проблеме, он может вставить его?»
Автоматическая вставка как уже указывалось, может быть кошмаром, особенно для кода, который переносится на вторую строку.
Я не буду больше распространять потребность в символах точка с запятой по сравнению с символами продолжения строки, у них есть как преимущества, так и недостатки, и, в конце концов, это простой выбор дизайна языка (даже если он затрагивает всех пользователей).
Меня больше беспокоит предложение компилятора исправить код.
Если вы когда-либо видели изумительный инструмент (такой как ... гм, давайте подберем инструмент merge
) и то, как он выполняет свою автоматизированную работу, вы были бы очень рады, что компилятор не изменил код , В конечном счете, если бы компилятор знал, как исправить код, это означало бы, что он знал о ваших намерениях, и передача мысли еще не была реализована.
Что касается предупреждения ? Любой программист знает, что предупреждения должны рассматриваться как ошибки (а компиляция прекращается), в чем же преимущество?
int sdf = 1,df=2;
sdf=1 df =2
Я думаю, что общая проблема заключается в том, что без точки с запятой невозможно сказать, что на самом деле имел бы в виду программист (например, может быть, вторая строка была задана как sdf = 1 + df - 2;
с серьезными опечатками). Нечто подобное может произойти из-за совершенно произвольных опечаток и иметь какое-то намеренное значение, поэтому, в конце концов, может быть плохой идеей, чтобы компилятор молча «исправлял» ошибки.
Вы также, возможно, заметили, что вы часто получаете «ожидаемую точку с запятой», где настоящая проблема не в отсутствии точки с запятой, а в чем-то совершенно ином. Представьте себе искаженное выражение, из которого компилятор может обрести смысл, просто вставив точку с запятой и вставив точку с запятой.
Точка с запятой может показаться избыточной, но для программиста это простой способ подтвердить «да, это было мое намерение».
Кроме того, предупреждения вместо ошибок компилятора слишком слабые. Люди компилируют код с отключенными предупреждениями, игнорируют предупреждения, которые они получают, и AFAIK стандарт никогда не предписывает, о чем должен предупреждать компилятор.