Historias
Slashboxes
Comentarios
 
Este hilo ha sido archivado. No pueden publicarse nuevos comentarios.
Mostrar opciones Umbral:
Y recuerda: Los comentarios que siguen pertenecen a las personas que los han enviado. No somos responsables de los mismos.
  • Re:Estoy de acuerdo, pero...

    (Puntos:3, Inspirado)
    por pleyades (544) el Lunes, 01 Marzo de 2010, 18:08h (#1205999)
    ( http://barrapunto.com/ | Última bitácora: Viernes, 29 Diciembre de 2017, 18:26h )

    "Apesta" y "razones de peso", quizá sean palabras demasiado fuertes, pero he aquí mis razones.

    • Sin protección de memoria: Te pasas en un array y se va al cuerno... quizá dentro de 10 minutos. La aritmética de punteros debería ser asesinada, de una manera lenta y dolorosa.
    • No es hard typed, tipado fuerte, o como se traduzca
    • Asignaciones en línea if (a=b)
    • El switch con el break
    • Macros
    • Las llaves
    • Distinguir mayúsculas minúsculas

    Dejando a un lado las tres últimas, La mejor prueba de que son defectos del C es que la mayoría de los compiladores intentan subsanarlos con avisos.

    Un lenguaje de programación debe permitirte hacer cochinadas en la memoria, mover bytes etc, pero sólo si quieres y se lo dices explícitamente, no en un descuido. Y con el C puedes, en un descuido, fastidiarla. Y lo que es peor, una sobre escritura de memoria hace que el programa falle cada vez en un sitio, haciéndolo difícil de depurar.

    El C es un lenguaje demasiado próximo a la máquina. Sólo debería usarse para drivers y cosas de muy de bajo nivel del sistema operativo.

    [ Padre ]
    Puntos de inicio:    1  punto
    Moderación   +1  
    Modificador extra 'Inspirado'   0  
    Modificador por Bonus-Karma   +1  

    Total marcador:   3  
  • Re:Estoy de acuerdo, pero...

    (Puntos:2, Interesante)
    por faragon (17575) el Martes, 02 Marzo de 2010, 07:03h (#1206095)
    ( http://www.voluntariado.net/ | Última bitácora: Domingo, 10 Junio de 2012, 21:48h )

    El C es un lenguaje demasiado próximo a la máquina. Sólo debería usarse para drivers y cosas de muy de bajo nivel del sistema operativo.

    Vaya por delante que a mí C me parece un lenguage magnífico, ahora bien, en tu línea de argumentación, se ha de procurar elegir la mejor herramienta para un problema determinado, y C no es siempre la mejor, puesto que es mucho más caro desarrollar y depurar programas.

    Para el proceso de estructuras de datos, como árboles, listas, grafos, cualquier otra cosa que no sea C irá más lento, salvo que la implementación sea una castaña (p.e. puedes encontrar un algoritmo mal implementado en C que vaya más lento que el equivalente en Lisp compilado con SBCL).

    En aplicaciones comerciales de vida corta, en mi opinión lo más sensato, para poder competir es usar lenguajes más sencillos, como Java, o incluso scripting (python, ruby, perl, etc.). Sin embargo, en aplicaciones multiplataforma y con un tiempo de vida previsto muy prolongado, el C es una apuesta segura, siempre y cuando haya gente lo suficientemente cualificada para programar en el proyecto (evitar el uso de constantes "harcoded", consciencia del concepto de pila, aritmética de punteros, conocimiento "de verdad" de arquitectura de computadores, etc.).

    [ Padre ]
  • por Mu (11278) el Martes, 02 Marzo de 2010, 10:56h (#1206132)
    ( http://press.asqueados.net/ | Última bitácora: Jueves, 17 Abril de 2014, 09:50h )
    • La aritmética de punteros es la mayor magia del C. Puede que no te guste, pero para otra gente es una maravilla, y desde luego no se podría eliminar del lenguaje porque es su alma
    • ¿Estás seguro de que no se puede considerar como de tipado fuerte? Que yo sepa, cada variable tiene un tipo, al contrario que otros lenguajes como Python, PHP o Ruby. Otra cosa es que luego el lenguaje te permita hacer burradas.
    • Las asignaciones de la línea if sólo están haciendo lo que tú le has dicho. Una vez asimilas que = es asignar e == es comparar no te vuelves a confundir.
    • La sintaxis del switch sí te reconozco que siempre me ha parecido cutre, aunque tampoco te sé decir cómo lo haría, y no recuerdo ahora cómo se hacía en otros lenguajes que no tomen la sintaxis de C.
    • Las macros es cierto que no las uso mucho, aunque, ya que se supone que C++ apesta, éste las soluciona un poco con funciones inline. No obstante quiero señalar que las macros sirven para hacer optimizaciones que en otros lenguajes simplemente no se pueden hacer, no es en ningún caso un mecanismo necesario del lengauje.
    • Lo de las llaves perdóname pero es una tontería. Depende de la costumbre, una vez estás habituado parece la manera más natural. Es más, pensar en tener que escribir begin y end, o incluso leerlo, me da pereza. Al fin y al cabo es una representación bastante gráfica.
    • Lo de las mayúsculas y minúsculas tampoco es para tanto, puede dar lugar a errores, pero sólo si no sigues un estilo predefinido (gran error). Si siguies por ejemplo el estándar de Java, sabes perfectamente con qué letra vas a escribir, con la ventaja de que en muchos casos es natural llamarle a la clase "Casa" y al objeto que vas a instanciar "casa"


    Por el otro lado se te ha olvidado mencionar las cadenas de caracteres, cuyo manejo es bastante coherente pero muy, muy tedioso y peligroso si no tienes las cosas claras. Tampoco has dicho nada de tener el código repartido en ficheros .c y .h, algo que C++ sólo consigue hacerlo peor. Y en general que ciertas cosas son muy manuales y pueden llegar a ser toscas y tediosas.

    Al final vuelvo a lo mismo: el C es para lo que es (de nada por la tautología). No digo que te tengas que restringir a los drivers, pero sí que el C es bueno cuando se necesita trabajar codo a codo con la máquina, cuando hay requisitos de eficiencia o para manejar la memoria en plan trituradora. También depende del tipo de pensamiento de la persona.
    --
    Envíos descartados por Mu [barrapunto.com]
    [ Padre ]