Ver Mensaje Individual
  #22  
Antiguo 15-05-2014
Avatar de mamcx
mamcx mamcx is offline
Moderador
 
Registrado: sep 2004
Ubicación: Medellín - Colombia
Posts: 3.939
Reputación: 27
mamcx Tiene un aura espectacularmamcx Tiene un aura espectacularmamcx Tiene un aura espectacular
Cita:
Empezado por nlsgarcia Ver Mensaje
¿Todos los lenguajes que usan como delimitador de bloques los caracteres {} estan mal diseñados?, ¿Es decir que C, C++, C#, Objetive-C, Java, JavaScript y el futuro M# están mal diseñados?, de ser así gran parte del software desarrollado a nivel mundial (Y por venir) tiene entonces un problema de base.
Eeee... no es obvio que es el caso? GRAN parte del software desarrollado a nivel mundial *efectivamente* tiene problemas de base. Eso es un hecho.

C/C++/Javascript tienen serios problemas que han costado millones de dólares en tiempos de codificación, depuración, crash, errores de seguridad, confiabilidad y todo lo demás, debido a sus defectos de diseño.

Claro, los problemas de delimitador son una fracción menor de sus problemas, pero es una muy buena correlación que si tiene {} imita/contiene (o innova nuevas!) malas practicas heredadas de C.

Como puse en el link sobre C, y el que haya hasta libro sobre C++ (no me resisto a acotar este *divertido* sumario):

Cita:
This book is the result of nearly two decades of minor frustrations, serious bugs, late nights, and weekends spent involuntarily at the keyboard. This collection consists of 99 of some of the more common, severe, or interesting C++ gotchas
Y lo mismo se puede sacar fácilmente sobre PHP, JavaScript y otros.

El problema es que sobre C/C++/JS recae gran parte de toda la infraestructura de software. Como dice el creador de C++:

http://en.wikiquote.org/wiki/Bjarne_Stroustrup

Cita:
C makes it easy to shoot yourself in the foot; C++ makes it harder, but when you do it blows your whole leg off.
Para notar:

1- La mejor implementación de un lenguaje OO? Smaltalk (no un C)
2- El MAS escalable? Erlang (no un C)
3- La mejor forma de escribir código de forma correcta? Haskell (quizas Eiffel? Ada?) (no un C)
4- El lenguaje mas flexible? Lisp (no un C)
5- La forma de escribir código para aplicaciones criticas? Ada. (no un C)

De los derivados de C, quizás Scala, C#, GO, Rust sean notables en cuanto a su diseño, pero eso básicamente lo logran imitando a uno de los anteriores (o uno de sus familiares), no a C. De C que se gana? Que es lo mejor que hay luego del ensamblador. Pero en diseño?

Creo que en parte es cultural. Simplemente, la gente de C/C++/Java/JS y similares no estan muy dispuestos a arreglar los defectos de los lenguajes. Es de notar C++: Cada nueva "version" es enruedar aun mas el lenguaje.. pero arreglar algo que tiene? Ni de locos.

Cita:
Empezado por nlsgarcia Ver Mensaje
En lo personal, no veo ningún problema en el uso de de las llaves {}, espacios o begin-end, como delimitadores de bloque
Técnicamente?, no hay ninguno. Incluso python tiene delimitadores (aunque hay lenguajes que NO tienen ninguno: LISP y familia).

El problema de muchos engendros que andan por ahí es que son delimitadores epilépticos. una veces sirven para lo que uno cree, excepto de formas bizarras cuando no. Un ejemplo de uno que *parece* que esta bien hecho es GO -ayuda que es el mas nuevo de la familia-. De notar? Fijense que tiene menos ruido que C/C++, y es un hecho conocido que todo programador que se respete en GO usa gofmt para formatear el código de forma consistente. Rust parece que también.


Cita:
Empezado por nlsgarcia Ver Mensaje
Sería interesante preguntarle a Anders Hejlsberg porque incluyo las llaves {} en C# dado
Nelson.
Eso es muy fácil. C# es un derivado de C, y originalmente un parecido de Java. Siendo tal el caso, no había de otra. Que Anders creyera que eso era *realmente* importante? Lo dudo. Es una hipótesis que se sustenta en el hecho que en la comunidad de implementadores de lenguajes, los derivados de C son los que están *mas por debajo* en la escala de lo que es ideal (no falta sino darle una vuelta larga a http://lambda-the-ultimate.org/ para ver lo que realmente les gustaría hacer...).

Ya que el chiste era parecerse a Java, se parece a Java. Pero cuando uno ve lo que han hecho con GO/Rust y otros que siguen la familia? Se nota que se *reduce* el uso de delimitadores. La *verdadera* pregunta es: Que hubiera hecho Anders si hubiera tenido TOTAL libertad?

----
Aquí una cosa para pensar: Porque, exactamente, es necesario tener delimitadores? Y de las verdaderas buenas razones que pudieran surgir: Porque, exactamente, debe aceptarse que hay que ponerlos, manualmente, siempre?

Porque la razón original, era para ayudar al lexer/parser. Osea, es una ayuda a la maquina. Como ayuda a la persona?

Como digo, es para pensar.
----
__________________
El malabarista.
Responder Con Cita