Por favor, explique por qué y enumere qué idiomas tienen implementada la función (errónea) Hasta donde usted sabe.
Publique lo que considera una característica dañina, no lo que no le gusta.
programming-languages
bug
features
mistakes
conocidos
fuente
fuente
a = 1/0
- expresión básica, dañina. ;-)Respuestas:
Registre Globals en PHP
Información: http://php.net/manual/en/security.globals.php
Esta es, con mucho, la peor característica que se haya implementado por razones de legibilidad y seguridad. Básicamente, todos los parámetros GET recibidos se transforman en variables.
Por ejemplo con esta URL: /index.php?value=foobar
Puedes hacer lo siguiente:
Cuando estás leyendo código, es muy confuso saber de dónde viene la variable.
Además, si la función se usa incorrectamente, puede provocar un agujero de seguridad. Aquí hay un ejemplo de código de php.net que muestra cómo puede ser mal utilizado:
fuente
Permitir nulo por defecto, el error "billón" * dólar. Lo siento Tony Hoare. Casi todos los idiomas disponibles en el planeta.
Tony Hoare explica
* Ajusté la expresión acuñada por Tony Hoare para reflejar la pérdida real en estos días :-)
fuente
MACROS C y C ++. Si alguna vez tengo que ver otro error del compilador debido a que alguien elige un nombre de función estándar para su macro que arruina mi código, voy a gritar. Veamos el último ofensor:
Aaarg! ¿Qué has hecho con mi vector STL?
fuente
Fallthrough por defecto en las declaraciones de cambio C y C ++.
fuente
break
declaración, o alguien agregue un caso entre dos casos (o los vuelva a ordenar), sin darse cuenta de que hubo una falla entre ellos. No veo ninguna forma de que el fracaso sea mejor que la forma C # de requerir un descanso o un caso de goto, etc.Conversiones de tipo implícitas cuando los tipos que se convierten no tienen una relación obvia. Por ejemplo, convertir un azar, no numérico
string
en unint
, como en PHP.fuente
explicit
, que detiene las conversiones de tipo implícito, pero aún hay problemas.0
valor aleatorio para algún valor.goto : aunque está bien en casos raros, se usa con mayor frecuencia y conduce a programas difíciles de leer.
fuente
NINGUNA
El hecho de que una característica se use mal con frecuencia no la hace dañina.
En mi humilde opinión, todo el "se considera perjudicial" es la Reductio ad Hitlerum de las discusiones en lenguaje de programación.
La mayoría, si no todas, las características "dañinas" tienen, o tuvieron originalmente, un caso de uso muy válido o son simplemente métodos de conveniencia en primer lugar. Depende de los desarrolladores comprender los pros y los contras y codificar en consecuencia.
Si sus preguntas pretendieran ser algo similar a "qué características del lenguaje tienen dificultades comunes o efectos secundarios desafortunados", mi respuesta sería diferente.
[editar] Para ser claros: no me refiero al uso continuado de métodos obsoletos. Si los desarrolladores están depreciando / eliminando una característica, debe usar el reemplazo. Me refiero al concepto de que una parte actual del lenguaje se considera dañina porque a algunos no les gusta lo que alienta o la compensación que implica el uso que muchas personas discuten.
fuente
La autovivificación (u otra función bind-variable-on- (asignar | usar)) es la característica que descubrí que me da más errores.
fuente
PLEASE
en INTERCAL. No lo uses lo suficiente, se queja. Úselo demasiado, se queja.fuente
Aunque algunas personas no están de acuerdo con el hombre o con varias cosas que dice, mucho JavaScript de Douglas Crockford : The Good Parts es básicamente esta pregunta aplicada a JS. Entre las quejas de Crockford:
Alcance global de manera predeterminada para todo (DC muestra cómo usar funciones / objetos como espacios de nombres y delimitadores de alcance para resolver esto).
Declaraciones como
with
, cuyo comportamiento de falla es definir cosas en el espacio de nombres global. (¡Gah! ¡Es como si el lema de JS es que si fallas, fallas tan duro como puedas !)Comportamiento inesperado con el
==
operador, que básicamente requiere que siempre use el===
operador.Inserción de punto y coma.
Realmente un montón de JS debería considerarse dañino, tal vez incluso todo el lenguaje, pero las partes buenas son tan buenas que lo compensan (al menos para mí).
fuente
"Error en silencio" en Flash Player como comportamiento predeterminado
Ok, en realidad no es una característica del lenguaje en sí, pero aún está bastante relacionado.
De repente, su aplicación Flash / Flex deja de funcionar y nadie puede darle la más mínima pista de lo que sucedió. Sin mensaje de error, sin stacktrace, sin nada. Es solo que de repente la transición de la pantalla no ocurre (o sucede de una manera completamente incorrecta), o los botones ya no reaccionan a los clics, o los cuadros combinados están vacíos en lugar de estar llenos de algunas entradas.
Esa "característica" sola es responsable de varios informes de encogimiento de hombros y un montón de canas que he estado recibiendo. -.- Si bien mostrar un mensaje críptico en la cara del usuario tampoco es deseable, al menos puede ayudar al desarrollador a solucionar el problema.
Pero Flash Player te deja apuñalando en la oscuridad, dependiendo de la descripción del usuario (mientras que el problema puede originarse en una ubicación completamente diferente en el código que no tiene nada que ver con lo que el usuario estaba haciendo). Solo si usa el reproductor de depuración obtendrá la ventana emergente con un mensaje de error y un seguimiento de pila.
Sin embargo, puede ser bastante interesante ver películas incrustadas en flash en ciertos sitios de noticias y recibir mensajes repetidos sobre referencias nulas del SWF del reproductor incrustado utilizado. :RE
fuente
En C / C ++: las asignaciones también son expresiones COMBINADAS CON operadores de asignación = y comparación == muy similares. No es una característica dañina per se, pero es una forma fácil de introducir errores (a veces sutiles) al escribir incorrectamente el operador.
fuente
Acceda a los modificadores en Java con el paquete de idioma privado predeterminado y la convención de programación privada predeterminada.
fuente
Sustitución de variables no definidas por una cadena vacía con cáscara y sin ninguna advertencia:
rm -rf $nosuchvar/*
.fuente
${varname:-/dev/null}
puede ser una solución alternativa ...La capacidad de girar en sentido antihorario en LOGO. Wtf, vamos a girar
360 - x
grados en sentido horario .fuente
Detener el hilo de otro hilo
En Java y en otro lenguaje, puede detener un hilo de otro arbitrariamente sin dar tiempo para que el hilo que detuvo finalice correctamente. Esta capacidad ha quedado en desuso teniendo en cuenta la gran cantidad de problemas que podría traer en casi todas las situaciones.
fuente
Variable Variables en PHP
Solo porque
$can
no te refieres a ti$$should
fuente
use strict
) y una manera fácil de encenderla nuevamente en los casos exactos en los que lo desee (no strict 'refs'
).La
With
declaración en Delphi viene a la mente, aunque hay casos en que es muy útil.fuente
¡Matrices en AWK que comienzan en el índice 1 !
fuente
car
! : PEn Perl, el contexto escalar frente al contexto de lista puede ser complicado. Tiene algunos puntos buenos que hacen que ciertas operaciones sean convenientes, pero ocasionalmente te encuentras con algo terrible, como cambiar completamente el significado de un operador (potencialmente desde una distancia significativa en el código).
Eso no está bien.
(Surge de tratar de hacer algo que actúe como el operador de rango regular, por lo que puede decir algo como un bucle
next if /start_regex/ .. /end_regex/
).fuente
La sintaxis de importación relativa de Python 2.x. Supongamos que tengo un paquete
x.plugins
que agrega soporte para varias otras bibliotecas parax
. Y supongamos que tengo unsqlalchemy
módulox.plugins
para poder agregar soporte de sqlalchemyx
. ¿Qué crees que sucederá si agrego la siguiente línea a sqlalchemy.py?La respuesta es que el módulo intentará importarse a sí mismo. Lo que hace esta sintaxis es esencialmente hacer que sea imposible importar el paquete global sqlalchemy real. Python 2.5 agregó una forma de especificar que esta es una importación relativa:
... pero no es hasta Python 3 que se eliminó la primera sintaxis (aunque se puede deshabilitar en Python 2.6+ con
from __future__ import absolute_import
).fuente
sun.misc.unsafe es mi favorito de todos los tiempos; la colección de "necesitábamos esto para implementar cosas, pero realmente, realmente no creo que debas usarlo".
fuente
FORTRAN bloques comunes. Si cometió un simple error, una parte de una aplicación podría golpear a los globales de otra parte.
FORTRAN asignó la declaración goto / la declaración alter COBOL. Código auto modificable. ¡Peligro, advertencia, monstruos espaguetis voladores!
fuente
Orientación a objetos (de todos los idiomas escritos estáticamente). Apuesto a que esta característica tiene, y continuará, costar mucho más que punteros nulos. La orientación a objetos solo es buena en un mensaje dinámico que pasa el lenguaje. Por lo tanto, también debe eliminarse de lenguajes dinámicos como Python (ya que no utiliza el paso de mensajes sino llamadas de subrutinas convencionales).
fuente
magic_quotes
en PHP .Los desarrolladores sin experiencia confían en que esté habilitado y, por lo tanto, suponen que se escapen todas las entradas del usuario para su uso en una consulta SQL o confían en que esté deshabilitado y, por lo tanto, siempre escapan de su entrada.
Al suponer que está habilitado y luego ejecutar el código en un sistema donde no lo está, se abren grandes agujeros de inyección SQL.
Al suponer que está deshabilitado y no lo está, dará lugar a que las barras invertidas se almacenen realmente en la base de datos, causando cadenas feas / incorrectas.
Tampoco hay una forma extremadamente simple de manejar ambos casos: debe verificar si está habilitado usando
get_magic_quotes_gpc()
y luego aplicarstripslashes()
a todos los valores en las$_*
matrices, yaarray_map
que no es recursivo, necesita una función personalizada para esto.fuente
La función de lenguaje que permite a los programadores escribir código comentado sin comentarios o sin sentido.
fuente
salir un poco de las extremidades aquí - funciones nulas. una función siempre hace algo, por lo tanto, debe devolver el resultado o alguna otra información sobre su éxito o fracaso.
fuente
POKE en BÁSICO ...
fuente
Tendría que decir recolección de basura. No elimina la necesidad de pensar en la administración de la memoria, pero elimina la percepción de la necesidad de pensar en la administración de la memoria, que con demasiada frecuencia elimina el pensamiento real, y luego obtienes enormes recursos y no sabes por qué. Especialmente cuando el comportamiento de los GC generacionales modernos podría describirse sin demasiada hipérbole como "una gran pérdida de memoria por diseño" de todos modos.
fuente
C, y definitivamente C ++: aritmética de puntero. Permitir que las personas conviertan números enteros en direcciones de memoria es un problema.
¿Y tal vez incluso acceso bruto a punteros por completo?
En C ++ tiene referencias que hacen que los punteros sean casi completamente innecesarios. Para los casos restantes, los punteros inteligentes deben considerarse obligatorios.
Java también demuestra que puede crear un lenguaje de programación que use punteros sin permitir que las personas accedan al valor del puntero.
Aparte de
null
... pero esa es una historia diferente.fuente
for(int i=0;i<SIZE;++i) ++arr[i]
es más lento quefor(int*i=arr;i<arr+SIZE;++i)*i++
. Todo lo que Java logró demostrar es que necesitas un puntero, ¿o nunca lo has miradosun.misc.Unsafe
? Si no necesita punteros, explique cómo escribir una función de intercambio genérica utilizando Java. (por ejemplo, int a = 1, b = 2; swap (a, b); afirmar (a == 2 && b == 1);). Sin mencionar todos los problemas en c / c ++ que tendrías si tuvieras que usar referencias. ¿Cómo llamaría a una función virtual en una estructura opaca sin punteros?