Пожалуйста, объясните, почему и перечислите, на каких языках реализована (неправильная) функция Насколько вы знаете.
Публикуйте то, что вы считаете вредной особенностью, а не то, что вам не нравится.
Пожалуйста, объясните, почему и перечислите, на каких языках реализована (неправильная) функция Насколько вы знаете.
Публикуйте то, что вы считаете вредной особенностью, а не то, что вам не нравится.
a = 1/0
- основное выражение, вредно. ;-)Ответы:
Регистрация глобалов в PHP
Информация: http://php.net/manual/en/security.globals.php
Это, безусловно, худшая функция, которая когда-либо была реализована из соображений читабельности и безопасности. В основном все полученные параметры GET преобразуются в переменные.
Например, с этим URL: /index.php?value=foobar
Вы можете сделать следующее:
Когда вы читаете код, очень сложно узнать, откуда берется переменная.
Также, если функция используется не по назначению, это может привести к дыре в безопасности. Вот пример кода с php.net, который показывает, как его можно использовать неправильно:
источник
Разрешить Null по умолчанию, ошибка «триллион» * доллар. Извини, Тони Хоар. Почти все языки доступны на планете.
Тони Хоар объясняет
* Я скорректировал выражение, придуманное Тони Хоаром, чтобы отразить фактические потери в эти дни :-)
источник
C и C ++ MACROS. Если мне когда-нибудь придется увидеть еще одну ошибку компилятора из-за того, что кто-то выберет стандартное имя функции для своего макроса, которое испортит мой код, я буду кричать. Давайте посмотрим на последний обидчик:
Aaarg! Что вы сделали с моим вектором STL !?
источник
Прохождение по умолчанию в операторах переключения C и C ++.
источник
break
заявление или кто-то не добавит дело между двумя делами (или не переупорядочит их), не заметив, что между ними произошел сбой . Я не вижу способа, чтобы это было лучше, чем способ C #, требующий либо перерыва, либо перехода к делу, и т. Д.Неявные преобразования типов, когда типы, между которыми выполняется преобразование, не имеют очевидной связи. Например, преобразование случайного, не числового
string
вint
, как в PHP.источник
explicit
, которое останавливает неявные преобразования типов, но все еще есть проблемы.0
значение для некоторого значения.goto : хотя в редких случаях все в порядке, его чаще всего неправильно используют, что приводит к затруднению чтения программ.
источник
НИКТО
Тот факт, что функция часто используется неправильно, не делает ее вредной.
ИМХО все "считается вредным" - это Reductio ad Hitlerum дискуссий о языке программирования.
Большинство, если не все, «вредных» функций имеют или имели изначально очень приемлемый вариант использования или, во-первых, являются просто удобными методами. Это зависит от разработчиков, чтобы понять плюсы и минусы и код соответственно.
Если бы ваши вопросы должны были быть чем-то вроде «какие языковые особенности имеют общие подводные камни или нежелательные побочные эффекты», мой ответ был бы другим.
[править] Чтобы быть ясным: я не имею в виду дальнейшее использование устаревших методов. Если разработчики осуждают / удаляют функцию, вы должны использовать замену. Я имею в виду концепцию о том, что текущая часть языка считается вредной, поскольку некоторым не нравится то, что он поощряет, или компромисс, связанный с его использованием, который обсуждают многие.
источник
Автовивификация (или другая функция bind-variable-on- (assign | use)) - это функция, которая, как я обнаружил, дает мне больше ошибок.
источник
PLEASE
в INTERCAL. Не используйте это достаточно, это жалуется. Используйте это слишком много, это жалуется.источник
Хотя некоторые люди не согласны с человеком или различными вещами, которые он говорит, большая часть JavaScript Дугласа Крокфорда : «Хорошие части» в основном относится к JS. Среди жалоб Крокфорда:
Глобальная область видимости по умолчанию для всего (DC показывает, как использовать функцию / объекты в качестве пространств имен и разделителей области действия, чтобы разрешить это.)
Утверждения типа
with
, чье поведение отказа состоит в том, чтобы определять вещи в глобальном пространстве имен. (Гах! Это как девиз JS: если ты провалишься, то провалишься как можно сильнее !)Неожиданное поведение с
==
оператором, которое в основном требует от вас всегда использовать===
оператора.Точка с запятой.
На самом деле весь JS следует считать вредным, может быть, даже весь язык, но хорошие части настолько чертовски хороши, что это как бы компенсирует это (по крайней мере, для меня).
источник
«Сбой молча» в Flash Player как поведение по умолчанию
Хорошо, не совсем особенность самого языка, но все же довольно тесно связанная.
Внезапно ваше приложение Flash / Flex перестает работать, и никто не может дать вам ни малейшего намека на то, что произошло *. Нет сообщения об ошибке, нет трассировки стека, нет ничего. Просто внезапно переход экрана не происходит (или происходит совершенно неправильно), или кнопки больше не реагируют на нажатия, или комбинированные списки пусты вместо того, чтобы заполняться какими-то записями.
Одна эта «особенность» ответственна за несколько сообщений о пожимании плечами и целую кучу седых волос, которые я получаю. -.- Хотя появление нежелательного сообщения на лице пользователя также нежелательно, оно может, по крайней мере, помочь разработчику решить проблему.
Но Flash Player оставляет вас в темноте, полагаясь на описание пользователя (в то время как проблема может на самом деле происходить из совершенно другого места в коде, которое не имеет никакого отношения к тому, что делал пользователь). Только если вы используете Debug Player, вы получите всплывающее окно с сообщением об ошибке и трассировкой стека.
Тем не менее, может быть довольно интересно смотреть встроенные Flash-фильмы на определенных новостных сайтах и получать повторные сообщения о ссылках Null от используемого встроенного проигрывателя SWF. : D
источник
В C / C ++: присваивания также являются выражениями, сочетающимися с очень похожими операторами присваивания = и сравнения ==. Сама по себе не вредная особенность, но это способ легко вносить (иногда скрытые) ошибки, случайно вводя оператора в заблуждение.
источник
Доступ к модификаторам в Java с пакетом по умолчанию для частного языка и соглашения по умолчанию для частного программирования.
источник
Замена неопределенных переменных пустой строки в оболочке без каких - либо предупреждений:
rm -rf $nosuchvar/*
.источник
${varname:-/dev/null}
обходного пути ...Возможность поворота против часовой стрелки в логотипе. Wtf, давайте просто повернуть по часовой стрелке
360 - x
градусов.источник
Остановка темы из другой темы
В Java и на другом языке вы можете остановить поток от другого произвольно, не давая времени для потока, который вы остановили, завершиться правильно. Эта способность устарела, учитывая огромное количество проблем, которые могут возникнуть практически во всех ситуациях.
источник
Переменные Переменные в PHP
Просто потому, что ты
$can
не имеешь в виду$$should
источник
use strict
) и простой способ включить его снова в тех случаях, когда вы этого хотите (no strict 'refs'
).На
With
ум приходит заявление в Delphi, хотя бывают случаи, когда оно полезно.источник
Массивы в AWK, начиная с индекса 1 !
источник
car
! : PВ Perl скалярный контекст против списка может быть сложным. У него есть несколько хороших моментов, которые делают определенные операции удобными, но иногда вы сталкиваетесь с чем-то ужасным, например, полностью меняете значение оператора (возможно, из-за значительного расстояния в коде).
Это просто не правильно.
(Это происходит из-за попытки сделать что-то, что действует как оператор обычного диапазона, так что вы можете сказать что-то вроде цикла
next if /start_regex/ .. /end_regex/
).источник
Относительный импортный синтаксис Python 2.x. Предположим, у меня есть пакет, в
x.plugins
который добавлена поддержка различных других библиотекx
. И предположим, у меня естьsqlalchemy
модуль,x.plugins
чтобы я мог добавить поддержку sqlalchemyx
. Как вы думаете, что произойдет, если я добавлю следующую строку в sqlalchemy.py?Ответ в том, что модуль попытается импортировать сам. То, что делает этот синтаксис, по сути делает невозможным импорт реального глобального пакета sqlalchemy. В Python 2.5 добавлен способ указать, что это относительный импорт:
... но только в Python 3 первый синтаксис был фактически избавлен (хотя он может быть отключен в Python 2.6+ с помощью
from __future__ import absolute_import
).источник
sun.misc.unsafe - мой самый любимый; коллекция «нам нужно это для реализации вещей, но на самом деле, действительно, не думаю, что вы должны использовать это».
источник
Фортран общие блоки. Если вы допустили простую ошибку, одна часть приложения может заглушить глобалы другой части.
FORTRAN назначил оператор goto / оператор изменения COBOL. Самомодифицирующийся код. Опасность, предупреждение, летающие спагетти монстры !!
источник
Ориентация на объект (из всех статически типизированных языков). Держу пари, что эта функция будет стоить намного дороже, чем нулевые указатели. Ориентация на объект хороша только в динамическом языке передачи сообщений . Поэтому он должен быть удален из динамических языков, таких как Python (поскольку он не использует передачу сообщений, а вызывает обычный вызов подпрограммы).
источник
magic_quotes
в PHP .Неопытные разработчики либо полагаются на то, что он включен, и, таким образом, предполагают, что весь пользовательский ввод будет экранирован для использования в запросе SQL, либо полагаются на то, что он отключен, и поэтому всегда избегают своего ввода.
Если предположить, что он включен, а затем запустить код в системе, где его нет, он открывает широкие дыры в SQL-инъекциях.
Если предположить, что он отключен, а это не так, это приведет к тому, что обратная косая черта будет фактически сохранена в БД, что приведет к появлению уродливых / неправильных строк.
Также нет чрезвычайно простого способа справиться с обоими случаями - вам нужно проверить, включено ли оно с помощью,
get_magic_quotes_gpc()
а затем применить егоstripslashes()
ко всем значениям в$_*
массивах - посколькуarray_map
это не является рекурсивным, для этого вам нужна пользовательская функция.источник
Функция языка, которая позволяет программистам писать некомментированный или бессмысленно прокомментированный код.
источник
выходить немного на конечности здесь - void функции. функция всегда что-то делает, следовательно, она должна либо возвращать результат, либо какую-то другую информацию о своем успехе или неудаче.
источник
Тыкать в бейсике ...
источник
Я бы сказал, сбор мусора. Это не устраняет необходимость думать об управлении памятью, но устраняет ощущение необходимости думать об управлении памятью, которое слишком часто исключает реальную мысль, и тогда вы получаете огромные ресурсы и не знаете, почему. Особенно, когда поведение современных GC поколения можно без особой гиперболы описать как «одну большую утечку памяти».
источник
C и определенно C ++: арифметика указателей. Разрешение людям конвертировать целые числа в адреса памяти порождает проблемы.
А может быть, даже необработанный доступ к указателям в целом?
В C ++ у вас есть ссылки, которые делают указатели почти полностью ненужными. В остальных случаях умные указатели должны считаться обязательными.
Java также доказывает, что вы можете создавать язык программирования, который использует указатели, не позволяя людям получать доступ к самому значению указателя.
Помимо
null
... но это другая история.источник
for(int i=0;i<SIZE;++i) ++arr[i]
медленнее, чемfor(int*i=arr;i<arr+SIZE;++i)*i++
. Все, что удалось Java, это доказать, что вам нужен указатель, или вы никогда не смотрелиsun.misc.Unsafe
? Если вам не нужны указатели, объясните, как написать обобщенную функцию подкачки с использованием Java. (например, int a = 1, b = 2; swap (a, b); подтвердить (a == 2 && b == 1);). Не говоря уже о всех проблемах в c / c ++, которые у вас возникли бы, если бы вам пришлось использовать ссылки. Как бы вы вызвали виртуальную функцию для непрозрачной структуры без указателей?