Cita:
Empezado por nlsgarcia
¿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
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
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.
----