Pregunta

explicar por qué y la lista de los idiomas que tienen el (mal) característica implementada En lo que sabes.

Publica lo que considera una característica perjudicial, no lo que le disgusta.

¿Fue útil?

Solución 2

Permitir nulo por defecto, el "billón" * error dólar. Lo sentimos, Tony Hoare. Casi todos los idiomas disponibles en el planeta.

de Tony Hoare explica

* ajusté la expresión acuñada por Tony Hoare para reflejar la pérdida real en estos días: -)

Otros consejos

Register Globals en PHP

Información: http://php.net/manual/en/security.globals. php

Esto es, con mucho, la peor función a implementar alguna por razones de legibilidad y razones de seguridad. Básicamente todo el parámetro GET recibida se transforman en variables.

Por ejemplo, con esta URL: /index.php?value=foobar

Se puede hacer lo siguiente:

<?php
echo $value; // return foobar
?>

Cuando usted está leyendo el código, es muy confuso saber dónde está la variable viene.

Además, si la función es mal utilizado, puede conducir a la falla de seguridad. Aquí está un ejemplo de código de php.net que muestra la forma en que pueden ser mal utilizados:

<?php
// define $authorized = true only if user is authenticated
if (authenticated_user()) {
    $authorized = true;
}

// Because we didn't first initialize $authorized as false, this might be
// defined through register_globals, like from GET auth.php?authorized=1
// So, anyone can be seen as authenticated!
if ($authorized) {
    include "/highly/sensitive/data.php";
}
?>

C y C ++ macros. Si alguna vez tengo que ver a otro error de compilación debido a que alguien elegir un nombre de función estándar para la macro que se enrosca hasta mi código voy a gritar. Vamos a ver el último infractor:

#define vector(int) new VARIANT[int];

Aaarg! ¿Qué han hecho con mi vector de STL!?

fallthrough por defecto en las instrucciones switch C y C ++.

conversiones de tipos implícitos cuando los tipos están convirtiendo entre no tienen ninguna relación obvia. Por ejemplo, la conversión de un string azar, no numérica en un int, como en PHP.

Goto : aunque bien en raras ocasiones, es más a menudo mal utilizado y lleva a la fuerza a leer los programas.

Ninguno

El hecho de que una característica se utilice incorrectamente con frecuencia no significa que sea perjudicial.

En mi humilde opinión el entero "se considera perjudicial" es la Reducción al Hitlerum de la programación de las discusiones del lenguaje.

La mayoría, si no todas, de las características "perjudiciales" tiene, o ha tenido un principio, un caso de uso muy válida o son simplemente métodos de conveniencia en el primer lugar. Corresponde a los desarrolladores a entender los pros y los contras y el código en consecuencia.

Si sus preguntas estaba destinado a ser algo en la línea de "¿qué características tiene el lenguaje trampas comunes o efectos secundarios desafortunados" mi respuesta sería diferente.

[editar] Para que quede claro: no me refiero a la continuación del uso de métodos obsoletos. Si los desarrolladores se deprecian / eliminar una característica que debe utilizar la sustitución. Me refiero al concepto de que una parte actual de la lengua se considera perjudicial porque algunos no lo hacen como lo que anima o la compensación involucrado en su uso que muchas personas discuten.

Autovivification (u otra variable bind-on-(Asignar | uso de las funciones)). Es la característica que he encontrado que me diera más bugs

PLEASE en INTERCAL. No utilice lo suficiente, se queja. Usarlo demasiado, se lamenta.

A pesar de que algunas personas no están de acuerdo con el hombre o varias cosas que dice, muchas de Douglas Crockford JavaScript: The Good Parts es, básicamente, esta pregunta se aplica a JS. Entre las quejas de Crockford:

  • Alcance global por defecto para todo (DC espectáculos cómo utilizar la función / objetos como espacios de nombres y delimitadores alcance de bregar en este.)

  • Las declaraciones como with, cuyo comportamiento de falla es definir las cosas en el espacio de nombres global. (Gah! Es como el lema JS es si no, entonces fallan tan duro como sea posible )

  • El comportamiento inesperado con el operador ==, que básicamente le exija usar siempre el operador ===.

  • inserción punto y coma.

Realmente una gran cantidad de JS debe considerarse perjudicial, tal vez incluso la totalidad idioma, pero las partes buenas son tan rematadamente bien que tipo de lo compensa (al menos para mí.)

"A falta de silencio" en Flash Player como el comportamiento por defecto

Ok, no es realmente una característica del lenguaje en sí mismo pero sigue siendo bastante estrechamente relacionados.

De repente, la aplicación de Flash / Flex deja de funcionar y nadie le puede dar la más mínima pista de lo que el f * ha sucedido. Ningún mensaje de error, sin StackTrace, nada de nada. Es que de repente la transición de la pantalla no sucede (o sucede de una manera completamente equivocada), o los botones no reaccionan a clics por más tiempo, o cuadros combinados están vacías en lugar de ser poblada con algunas entradas.

Eso "característica" por sí sola es responsable de varios informes href="https://stackoverflow.com/questions/2349378/new-programming-jargon-you-coined/2353466#2353466"> encogimiento de hombros y un montón de pelo gris que he estado recibiendo. -.- Mientras apareciendo algún mensaje críptico en la cara del usuario tampoco es deseable, puede al menos ayudar al desarrollador obtener el problema fijo.

pero deja Flash player puñaladas en la oscuridad, que dependen de la descripción del usuario (si bien el problema en realidad puede provenir de un lugar completamente diferente en el código que no tiene nada que ver con lo que el usuario estaba haciendo). Sólo si se utiliza el reproductor de depuración que en realidad obtener la ventana emergente con un mensaje de error y una StackTrace.

Sin embargo, puede ser muy interesante para ver películas en flash incrustados en determinados sitios de noticias y recibir mensajes repetidos sobre referencias nulas desde el reproductor de SWF incorporado utilizado. : D

En C / C ++: que las asignaciones son también expresiones combinado con la asignación muy similar = y == operadores de comparación. No es una característica perjudicial en sí, pero de manera fácil introducir errores (a veces sutiles) por escribir mal accidentalmente el operador.

int i = 10;

someCode();

if(i = 5)
{
    /* We don't want this block to be executed, but it is */
    moreCode();
}

Los modificadores de acceso en Java con omisión del paquete de idiomas privada y por defecto de convenciones de programación privado.

Sustitución de variables no definidas por una cadena vacía en cáscara sin ninguna advertencia:. rm -rf $nosuchvar/*

La capacidad de giro hacia la izquierda en LOGO. Wtf, deja sólo a su vez 360 - x grados en sentido horario.

Variables Variable en PHP

El hecho de que no se $can $$should

significa

La declaración With en Delphi viene a la mente, aunque hay casos cuando es útil.

Las matrices en AWK empieza en el índice 1

En Perl, contexto de la lista vs contexto escalar puede ser complicado. Tiene algunos buenos puntos que hacen que ciertas operaciones conveniente, pero de vez en cuando te encuentras con algo terrible, como cambiar por completo el significado de un operador (potencialmente de una distancia significativa en el código).

sub foo { (1..5) }
my @list = foo();           # (1,2,3,4,5)
my $length = scalar @list;  # 5. the length of the list.
my $length2 = scalar foo(); # '' (the empty string. because it's false)

Eso no es justo.

(Surge de tratar de hacer algo que actúa algo así como el operador regular de rango, por lo que puede decir algo en un bucle como next if /start_regex/ .. /end_regex/).

sintaxis relativa de las importaciones de Python 2.x. Supongamos que tengo un x.plugins paquete que añade soporte para varias otras bibliotecas para x. Y supongamos que tengo un módulo sqlalchemy en x.plugins para que pueda añadir soporte a sqlalchemy x. ¿Qué cree que ocurrirá si añado la siguiente línea al sqlalchemy.py?

import sqlalchemy

La respuesta es que el módulo intentará importar sí. Lo que hace esta sintaxis es esencialmente hacen que sea imposible para importar el paquete real sqlalchemy global. Python 2.5 añadió una forma de especificar que se trata de una importación relativo:

from . import sqlalchemy

... pero no es hasta Python 3 que la primera sintaxis realidad fue librado de (aunque se puede desactivar en Python 2.6+ con from __future__ import absolute_import).

sun.misc.unsafe es mi favorito Alltime; la colección de "Necesitábamos este implementar cosas, pero realmente, realmente no creo que se debe utilizar."

bloques comunes Fortran. Si ha cometido un error simple, de una parte de una aplicación podría darle una paliza globales de otra parte.

instrucción goto FORTRAN asignado / COBOL instrucción ALTER. Auto-modificación del código. Peligro, advertencia, los espaguetis del vuelo monstruos !!

La orientación a objetos (de todas las lenguas tipos estáticos). Voy a apostar esta característica tiene, y seguirá, a coste muy más de punteros nulos. Orientación a objetos sólo es bueno en una dinámica paso de mensajes idioma. Por lo tanto, debe suprimirse de los lenguajes dinámicos como Python también (ya que no utiliza el paso de mensajes, sino que llama subrutina convencional).

magic_quotes en PHP .

desarrolladores Inexpertos ya sea confiar en que esté habilitado y por lo tanto asumen toda la entrada del usuario con formato de escape para su uso en una consulta SQL o confiar en que esté desactivada y por lo tanto siempre escapar de su entrada.

Al asumir que está habilitado y luego ejecutar el código en un sistema en el que no es que abre grandes agujeros de inyección SQL ancho.

Cuando asumiendo que es discapacitado y no lo es, que dará lugar a barras invertidas que se almacena en la base de datos, haciendo que las cuerdas feas / incorrecto.

También hay manera no muy sencillo de manejar ambos casos - es necesario comprobar si está habilitado el uso de get_magic_quotes_gpc() y luego aplicar stripslashes() en todos los valores de las matrices $_* -. Desde array_map no es recursivo que necesita una función personalizada para este

La característica del lenguaje que permite a los programadores escribir código sin comentar o sin sentido, comentó.

salir un poco a un miembro aquí - funciones vacío. una función siempre hace algo, por lo tanto, o bien debe devolver el resultado o algún otro poco de información sobre su éxito o fracaso.

POKE en BASIC ...

Yo tendría que decir que la recolección de basura. No elimina la necesidad de pensar acerca de la gestión de memoria, pero elimina el percepción de la necesidad de pensar en la gestión de memoria, que con demasiada frecuencia elimina el pensamiento actual, y luego se obtiene enormes cerdos de recursos y no sé por qué. Especialmente cuando el comportamiento de los GC generacionales modernas podría describirse sin demasiado tanto la hipérbole como "una gran pérdida de memoria por diseño" de todos modos.

C, C ++ y definitivamente: Puntero aritmética. Permitiendo a la gente a números enteros se convierten en direcciones de memoria es buscar problemas.

Y tal vez incluso el acceso prima a los punteros en total?

En C ++ tiene referencias que hace punteros casi completamente innecesario. Para el resto de casos punteros inteligentes deben considerarse obligatoria.

Java también se demuestra que puede hacer un lenguaje de programación que utiliza punteros sin permitir el acceso a las personas el valor del puntero en sí.

Además de null ... pero eso es una historia diferente.

Licenciado bajo: CC-BY-SA con atribución
scroll top