Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Lazarus, FreePascal, Kylix, etc. (https://www.clubdelphi.com/foros/forumdisplay.php?f=14)
-   -   ¿Qué IDE gratuito me recomiendan? (https://www.clubdelphi.com/foros/showthread.php?t=85840)

Casimiro Notevi 15-05-2014 01:11:33

Cita:

Empezado por nlsgarcia (Mensaje 476452)
Sería interesante preguntarle a Anders Hejlsberg por que incluyo las llaves {} en C# dado que el es el creador de Turbo Pascal y Delphi

He comentado otras veces que mi favorito, con mucha diferencia, es el lenguaje C.
Delphi (pascal) me gusta, aunque lo que más me fastidia es precisamente los comandos "tan" largos como begin end, con lo fácil que es {} :D

mamcx 15-05-2014 03:09:33

Cita:

Empezado por nlsgarcia (Mensaje 476452)
¿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 (Mensaje 476452)
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 (Mensaje 476452)
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.
----

Casimiro Notevi 15-05-2014 09:47:04

Bueno, no estoy de acuerdo en casi nada de lo que dices, como casi siempre :D

Todos esos problemas que citas con los proyectos que enlazas, no son problemas del lenguaje sino de los programadores.

Metes en el mismo saco a C, C++ y JS (¿javascript?), el que tengan una sintaxis parecida, al igual que php, no por ello son equiparables, C es C, punto. Y no tiene mucho que ver con C++ y muchísimo menos con javascript :eek:

Un proyecto bien hecho no tiene motivo de generar montones de problemas o incidencias sólo por el hecho de estar en C. Me remito a mí mismo :cool:, que conste que no me considero una eminencia ni un maestro en nada, solo procuro tener cuidado y revisar mucho lo que hago, pero antes de usar delphi (desde 1998) usaba únicamente lenguaje C (desde 1987 aproximadamente) y en esa década fueron muchos los programas que hice, algunos pequeños y otros "grandes" proyectos. Casi todos siguen operativos hoy en día, decenas de años después, y nunca me llaman por problemas.
Me parece ridículo culpar a C de los problemas, diciendo que tiene un problema de "base" :confused:

Ñuño Martínez 15-05-2014 14:48:34

Antes de continuar, decir que hace mucho que no leo ni miro siquiera cosas acerca de Python, así que hablo bastante de memoria.

El problema que le veo a Python no es simplemente estético, sino funcional. Es difícil escribirlo y aún más difícil leerlo. El ejemplo de Casimiro es bueno. Un despiste en la sangría y te genera un error en tiempo de ejecución muy difícil de rastrear.

Por otro lado el manejo de tipos de datos blando tampoco es santo de mi devoción. El modelo de objetos (que si no recuerdo mal, está a medio camino de los de JavaScript y PHP) tampoco me hace ni pizca de gracia.

Finalmente, aborrezco los lenguajes con colector de basuras por buenas razones.

Lo que sí recuerdo bien es la mala impresión que me dio desde el principio, y que por más cosas que leía acerca de él no desaparecía sino que aumentaba, hasta que decidí no volver a investigar nada más de él.

Por cierto:

Cita:

Empezado por Casimiro Notevi (Mensaje 476458)
Metes en el mismo saco a C, C++ y JS (¿javascript?), el que tengan una sintaxis parecida, al igual que php, no por ello son equiparables, C es C, punto. Y no tiene mucho que ver con C++ y muchísimo menos con javascript :eek:

Totalmente de acuerdo contigo, Casimiro.

C me gusta, pero sólo C; no C++, ni C#, ni demás morralla (JavaScript, PHP, Objective C, Go, Beans ...), y sólo me gusta para ciertas ocasiones, en las que quiero o necesito una aproximación de muy bajo nivel.

roman 15-05-2014 16:42:25

Cita:

Empezado por Ñuño Martínez (Mensaje 476473)
Un despiste en la sangría y te genera un error en tiempo de ejecución muy difícil de rastrear.

De hecho es todo lo contrario, a menos, claro, que no sepas lo que estás programando. La correcta anidación, independientemente del lenguaje que uses, sigue el orden lógico del pensamiento. Y Python, en este aspecto, evita precisamente que te apartes de ese orden.



Sinceramente da la impresión en algunos que simplemente muestran sus fobias a determinados lenguajes por una mera cuestión de cómo luce o por prejuicios personales. El lenguaje C ha sido y es la base de la gran mayoría de software importante, como dice nlsgarcia. Que académicamente haya lenguajes mejor diseñados, ni duda cabe, pero de ahí a poder decir que son mejores va mucho camino.

Por otro lado, tienden a hacer comparativas que ni siquiera tienen sentido. Una frase que incluya C y JavaScript sólo tiene validez si se trata de una lista de lenguajes porque viven en mundos distintos y uno no puede hacer lo que el otro. Compararlos es fútil.

Y por cierto, JavaScript es un lenguaje mucho más complejo de lo que parece. Incluso tiene esa herencia insertada que le gusta a Al González.

Atacan PHP porque piensan en el PHP de hace quince años y no saben o prefieren ignorar que PHP ha sido totalmente rediiseñado.

Creo que esto es lo más acertado que he leido aquí:

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, cada lenguaje tiene sus pro y sus contras, cada lenguaje tiene un campo de acción definido y es sobre ese hecho que debe o no ser utilizado, quizás como personas tengamos determinadas preferencias estéticas, pero al final un lenguaje es una herramienta para un fin, si cumple dicho fin en gran medida entonces es probablemente la herramienta indicada y no necesita ser estrictamente perfecta.

// Saludos

mamcx 15-05-2014 16:43:04

Cita:

Empezado por Ñuño Martínez (Mensaje 476473)
Un despiste en la sangría y te genera un error en tiempo de ejecución muy difícil de rastrear.

Obvio que saca un error. Pero se puede detectar leyendo el codigo, porque las reglas son claras. No es como en los lenguajes donde tienen marcadores defectuosos, donde como lees no es necesariamente como ejecuta:

Código PHP:

if si edad<20:
  print 
"estudia para el futuro"
print "eres un jovencito"
hazotracosa 

Dice *exactamente* que es lo que hace el codigo. Osea: Python hace lo correcto. Lo peor es lo que hace JS/C/C++: No como esta escrito necesariamente es lo que hace. Ese es el problema que estoy hablando: Que la sintaxis no refleja bien la semantica del lenguaje.


Cita:

Empezado por Ñuño Martínez (Mensaje 476473)
Finalmente, aborrezco los lenguajes con colector de basuras por buenas razones.

Y el problema? Es Javascript & PHP. De los menos mejor diseñados, y no asombra que tenga deficientes GC, asi como son deficientes en todo otras cosas. Contraste? El GC de Java, .NET, Haskell, Erlang, Nimrod, Obj-c (no es tanto un GC en si pero funciona igual), LuaJit, etc son excelentes y son MUCHO mas óptimos para los casos generales que hacerlo manual. Hay uno y solo un verdadero caso para que un lenguaje es mejor que no tenga un GC: Se requiere garantizar operación en hard realtime y control exacto del uso de la memoria.

Un GC es prácticamente un requerimiento para hacer codigo eficiente & correcto hoy dia y a futuro. (Ahora bien, RUST & C son las unicas opciones viables sin un GC hoy dia).

Casimiro Notevi 15-05-2014 16:50:58

Cita:

Empezado por mamcx (Mensaje 476480)
Código PHP:

if si edad<20:
  print 
"estudia para el futuro"
print "eres un jovencito"
hazotracosa 

Dice *exactamente* que es lo que hace el codigo. Osea: Python hace lo correcto. Lo peor es lo que hace JS/C/C++: No como esta escrito necesariamente es lo que hace. Ese es el problema que estoy hablando: Que la sintaxis no refleja bien la semantica del lenguaje.

Para nada se puede estar de acuerdo con eso.

Código:

if si edad<20
begin
            print "estudia para el futuro"
  print "estudia para el futuro"
      print "eres un jovencito"
end
    hazotracosa

Creo que de esa forma, con un inicio y final de bloque sí que no hay ninguna duda, ningún error, ningún despiste...

Cita:

Empezado por mamcx (Mensaje 476480)
Un GC es prácticamente un requerimiento para hacer codigo eficiente & correcto hoy dia y a futuro.

A mí me parece una solución creada para los malos programadores que se olvidan de liberar memoria :p

roman 15-05-2014 17:02:24

Bueno Casimiro, pero ejemplos como ese también te puedes encontrar a montones en lenguajes con delimitadores de bloque, tan mal indentados, sin cambios adecuados de línea, que rastrear cualquier error se torna imposible.

Lo que estás criticando realmente no crresponde al lenguaje sino a la forma de usarlo, que es lo mismo que tú mismo has mencionado anteriormente.

// Saludos

nlsgarcia 15-05-2014 19:01:37

mamcx,

Cita:

Empezado por mamcx
...GRAN parte del software desarrollado a nivel mundial *efectivamente* tiene problemas de base. Eso es un hecho...

El problema de la ingeniería de software es que no hay una forma efectiva de estandarizar la creación del software, partiendo de este punto el crear software es una combinación de arte y técnica lo cual si no se siguen buenos principios de diseño y programación se puede incurrir en grandes fallas difíciles de corregir y probablemente muy costosas dependiendo del ámbito de implementación del software, pero lo anterior es común a todos los lenguajes, el hecho de que un lenguaje tenga bases en C/C++ no implica que tenga ningún problema de base, solo implica que deben seguirse ciertos principios para su correcto uso, pero lo mismo aplica a todos los lenguajes si se quiere hacer software de calidad y resiliente a fallas.

Cita:

Empezado por mamcx
...No es como en los lenguajes donde tienen marcadores defectuosos, donde como lees no es necesariamente como ejecuta...Que la sintaxis no refleja bien la semántica del lenguaje...

Linux es quizás el SO más versátil y eficiente de la historia de la computación, se le puede usar en una miríada de dispositivos (MainFrame, MiniComputadores, Servidores, Computadores Portátiles y de Escritorio, SmartPhones y Sistemas Embebidos) y su lenguaje base es C, ¿Por que es tan exitoso y tan ampliamente usado algo hecho en C si este lenguaje supuestamente tiene fallas de base?, la respuesta esta en las buenas prácticas de diseño y programación aunado a extensas pruebas y seguimiento de la implementación, algo que debe ser común a la ingeniería del software en general independientemente del lenguaje utilizado.

En lo personal no creo que exista un lenguaje perfecto, pero si creo que los lenguajes actuales son perfectibles y prueba de ello es la evolución que han tenido los lenguajes basado en C/C++ y el impacto positivo de estos en todo el ámbito mundial del software por su efectividad y eficiencia, no por ser perfectos ni mucho menos.

Al final el que un software sea o no de calidad depende en última instancia del programador, el lenguajes escogido es solo una herramienta para un fin, su buen o mal uso depende estrictamente del programador :rolleyes:

Nelson.

mamcx 15-05-2014 19:03:19

Cita:

Empezado por Casimiro Notevi (Mensaje 476458)
Todos esos problemas que citas con los proyectos que enlazas, no son problemas del lenguaje sino de los programadores.

Si hace una app contable, y pones: Valor Factura (Decimal): Y el usuario pone: "A mi que me importa", y el sistema lo acepta, es error de quien?

Entiendo lo que dices. Hay lenguajes que para usarlos correctamente se necesita mayor disciplina de parte del programador. Pero los errores que muestra en http://www.andromeda.com/people/ddyer/topten.html son problemas del lenguaje.

Por ejemplo:

Código PHP:

int foo (a)
    { if (
a) return(1); } /* buggy, because [b]sometimes[/b] no value is returned  */ 

Algunas veces? Es eso un error del programador? El saber o no si *algunas veces* eso es o no valido?

Código PHP:

 struct eeh_type
    
{
            
uint16 size:          10;   /* 10 bits */
            
uint16 code:           6;   /* 6 bits */
    
}; 

Cita:

Depending on which C compiler, and which "endian" flavor of machine you are on, this might actually be implemented as
<10-bits><6-bits>
or as
<6-bits><10-bits>
Osea, que 6bits es realmente 10 bits? Es eso un error del programador?

Código PHP:

foo(pointer->memberpointer = &buffer[0]); 

Cita:

Works with gcc (and other compilers I used until I tried acc) and does not with acc. The reason is that gcc evaluates function arguments from left to right, while acc evaluates arguments from right to left.
Es eso un error del programador? Porque juraria al ver ese codigo que siempre se evalua de izq-der. Excepto cuando no?

http://www.slate.com/articles/techno...ly_simple.html
Código PHP:

if ((err SSLHashSHA1.final(&hashCtx, &hashOut)) != 0)
                goto 
fail

Es un error del programador? Uno imaginaria que el compilador debe decir que la sintaxis esta mala. Porque rayos es valido hacer un if decapitado?

Código PHP:

 int numbers[] = { 001,        // line up numbers for typographical clarity, lose big time 
                           
010,        // 8 not 10 
                           
014 };     // 12, not 14 
Not convinced ? Try atoi("000010"); 

Es esto un error del programador?

Cita:

Empezado por Casimiro Notevi (Mensaje 476458)
Metes en el mismo saco a C, C++ y JS (¿javascript?), el que tengan una sintaxis parecida, al igual que php, no por ello son equiparables

Es equiparable porque comparten el hecho de que son la misma familia, y tienen problemas de diseño. Ej:

http://www.standardista.com/javascri...cript-gotchas/
Código PHP:

    var bad  '<ul id="myId">
                   <li>some text</li>
                   <li>more text</li>
                </ul>'
// unterminated string error

    
var good '<ul id="myId">' +
                   
'<li>some text</li>' +
                   
'<li>more text</li>' +
               
'</ul>'//correct 

Visualmente el mismo código, uno es malo, el otro no. Flipen por la causa. Y de que sirvio sus delimitadores?

Y PHP? Siguiendo la tradición:

http://code.tutsplus.com/articles/ar...akes--net-2894

Código PHP:

$i 0;
while(
$i 20); {
  
//some code here
  
$i++;


Cita:

4. Missing Semicolon After a Break or a Continue
Que es el mismo lio en C, C++, JS.

Así que, no son comparables?

Y noten:

http://www.developerdrive.com/2011/1...coding-in-php/
Cita:

Unfortunately, a basic text editor won’t tell you if something isn’t right.

One of the most common, and basic, mistakes made when coding in PHP* is to either forget or misplace a quote, brace or semi-colon causing a syntax error
*Y C, C++...

Osea: Uno de los errores MAS comunes es precisamente el uso de los delimitadores. "Es culpa del programador", ok, pero entonces porque hay que tener algo que causa problemas todo el tiempo?

Es como tener un cuchillo, y que este afilado por el mango. Es culpa del usuario no ponerle un protector. La pregunta es: Y entonces porque se afila por el mango?

Y con respecto a la sintaxis, varios son el mismo problema: La función que se supone hacen los delimitadores no siempre se cumple, y en cambio, cargan al programador de la tarea de estar pendiente de ellos. Lo ironico es que algunos de esos problemas son el mismo en varios lenguajes, que como dicen, que rayos tiene que ver Js con C? Pues que tienen el mismo problema! Y no debería! Por lo menos que tengan problemas diferentes!

NO ESTOY EN CONTRA de los delimitadores. No me gustan los de C, pero eso es pura cosa estetica. Ahora bien, si son como los de VB o los de pascal y hay que usarlos a diestra y siniestra, tampoco me gusta mucho -pero al menos en pascal & VB hacen lo que deben-. Y ya que muchos casos no son necesarios, digo que estoy a favor de uso mas mesurado de lo mismo. En ese caso, el como lo hace GO me parece bien.

Cita:

Empezado por Casimiro Notevi (Mensaje 476458)
Nunca me llaman por problemas.
Me parece ridículo culpar a C de los problemas, diciendo que tiene un problema de "base" :confused:

Te hago una pregunta: Que tan seguro estas de que no tienen problemas (me refiero, del tipo que pongo aqui)? Correle http://valgrind.org/ a ver que te sale. Lo pregunto precisamente porque es muy posible que uno se confie de que hace las cosas bien, incluso a nivel fundamental, pero al correr un analisis se ven problemas que ni uno se imagina. Eso es algo que me ha tocado ver con obj-c donde al correr el chequeador se pillan errores que ni a leguas uno se imaginaria son un problema. Mucho de los exploits y bugs de seguridad que han costado millones son debido a que los programadores pusieron algo ahi, y el programa "funciona", pero esta mal programado y tiene una falla oculta. Por ejemplo, los Chequeos de rango son una fuenta inmensa de problemas potenciales. El caso del tipo de datos string (null terminated) es uno de los mas graves problemas que hay, como seguramente saben.


A lo que voy: C/C++/PHP/JS son del tipo de lenguajes que no garantizan que lo que uno escribe es lo que hacen. Es por eso que dan tanto lios, y cuesta tanto depurarlos y mantenerlos.


----
Y como contraste, ya que todo lenguaje tiene su carga de "Chanfle, esto no me lo esperaba!" aqui esa, pa que flipen:

http://stackoverflow.com/questions/1...nguage-feature :eek:

mamcx 15-05-2014 19:40:33

Cita:

Empezado por nlsgarcia (Mensaje 476490)
el hecho de que un lenguaje tenga bases en C/C++ no implica que tenga ningún problema de base, solo implica que deben seguirse ciertos principios para su correcto uso, pero lo mismo aplica a todos los lenguajes si se quiere hacer software de calidad y resiliente a fallas.

Realmente? En serio? Los buffer overflow son una de los problemas que estos tienen. Son un vector de ataque, causan crash, son jodidos de depurar y todo eso. Como se arregla?

https://en.wikipedia.org/wiki/Buffer...mming_language

Cita:

The choice of programming language can have a profound effect on the occurrence of buffer overflows. As of 2008, among the most popular languages are C and its derivative, C++, with a vast body of software having been written in these languages
......
Examples of such languages (que no tienen ese problema de base) include Ada (podria reemplazar a C/C++, sino fuera porque pailas, son mas populares), Eiffel, Lisp, Modula-2, Smalltalk, OCaml and such C-derivatives as Cyclone, Rust and D (todos estos, podrian reemplazar C/C++).
Cita:

Empezado por nlsgarcia (Mensaje 476490)
Por que es tan exitoso y tan ampliamente usado algo hecho en C si este lenguaje supuestamente tiene fallas de base?

Supuestamente? No, TIENEN fallas de base. Que se controlan, como dices, con disciplina y el hecho de que los programadores de linux, en especial de lo importante, son de alto nivel. EL asunto es: En su momento, aparte de C/C++, que opcion hay para hacer un OS?

Una analogia: Hay un ERP que es el mas usado y es muy potente. Sin embargo, Si se le meten decimales hay que estar muy seguros de poner "." y no ",". Si se pone ",", la vaina se jode y corrompe todo. Si se mete un null entre una cadena en el proceso de importacion de datos, se rompe la seguridad del sistema. Se puede hacer injeccion de SQL.

Entonces: No tiene problemas de base? Es lo mismo, para un lenguaje, un programador es un usuario. Si este tiene que estar pendiente de detalles bizarros, es lo mismo cuando un programa exige que para poder buscar, primero hay que reindexar, poner el chulito y luego buscar y no hacerlo antes de 2 secs despues del chulito. Culpa del usuario si la BD se corrompe... porque no esta mas pendiente?

P.D: Y ese es un ejemplo muy cercano a la realidad...

---

P.D 2: A veces me pregunto si los sistemas nos causan Sindrome de Estocolmo. Como lo tratan a uno, y uno los defiende!

Casimiro Notevi 15-05-2014 19:55:48

Cita:

Empezado por mamcx (Mensaje 476491)
Si hace una app contable, y pones: Valor Factura (Decimal): Y el usuario pone: "A mi que me importa", y el sistema lo acepta, es error de quien?

Del programador, sin duda.

Cita:

Empezado por mamcx (Mensaje 476491)
(c, c++, js)Es equiparable porque comparten el hecho de que son la misma familia, y tienen problemas de diseño. Así que, no son comparables?

No son comparables, para nada.

Cita:

Empezado por mamcx (Mensaje 476491)
Te hago una pregunta: Que tan seguro estas de que no tienen problemas

En que llevan funcionando decenas de años, todos los días, y cuando me encuentro a alguno de esos clientes me pregunta cómo me va la vida, si hago bicicleta, si me compré otra moto, etc. pero no me dicen que tengan problemas con los programas que les hice.

Casimiro Notevi 15-05-2014 20:09:04

Cita:

Empezado por mamcx (Mensaje 476494)
Realmente? En serio? Los buffer overflow son una de los problemas que estos tienen. Son un vector de ataque, causan crash, son jodidos de depurar y todo eso. Como se arregla? https://en.wikipedia.org/wiki/Buffer...mming_language
Supuestamente? No, TIENEN fallas de base. Que se controlan, como dices, con disciplina y el hecho de que los programadores de linux, en especial de lo importante, son de alto nivel. EL asunto es: En su momento, aparte de C/C++, que opcion hay para hacer un OS?
Una analogia: Hay un ERP que es el mas usado y es muy potente. Sin embargo, Si se le meten decimales hay que estar muy seguros de poner "." y no ",". Si se pone ",", la vaina se jode y corrompe todo. Si se mete un null entre una cadena en el proceso de importacion de datos, se rompe la seguridad del sistema. Se puede hacer injeccion de SQL.
Entonces: No tiene problemas de base? Es lo mismo, para un lenguaje, un programador es un usuario. Si este tiene que estar pendiente de detalles bizarros, es lo mismo cuando un programa exige que para poder buscar, primero hay que reindexar, poner el chulito y luego buscar y no hacerlo antes de 2 secs despues del chulito. Culpa del usuario si la BD se corrompe... porque no esta mas pendiente? P.D: Y ese es un ejemplo muy cercano a la realidad... --- P.D 2: A veces me pregunto si los sistemas nos causan Sindrome de Estocolmo. Como lo tratan a uno, y uno los defiende!

De verdad que yo en todo eso solamente veo culpabilidad del programador.
¿Que tiene que estar pendiente de muchas cosas?, pues sí, es un problema, pero también podía haber decidido ser peluquero y se quitaba esos problemas :D

ecfisa 15-05-2014 20:38:34

Cita:

Empezado por Casimiro Notevi (Mensaje 476496)
De verdad que yo en todo eso solamente veo culpabilidad del programador.

Estoy de acuerdo con eso. ^\||/
Cita:

Empezado por Casimiro Notevi (Mensaje 476496)
¿Que tiene que estar pendiente de muchas cosas?, pues sí, es un problema, pero también podía haber decidido ser peluquero y se quitaba esos problemas :D

Sobre esto no estoy tan seguro, pero puede ser... tal vez sea la causa de que anden tantos desorejados :D

Saludos :)

mamcx 15-05-2014 20:47:12

Cita:

Empezado por Casimiro Notevi (Mensaje 476496)
De verdad que yo en todo eso solamente veo culpabilidad del programador.
¿Que tiene que estar pendiente de muchas cosas?, pues sí, es un problema, pero también podía haber decidido ser peluquero y se quitaba esos problemas :D

Osea que estas de acuerdo con:

http://web.mit.edu/~simsong/www/ugh.pdf
Cita:

"Ken Thompson has an automobile which he helped design. Unlike most automobiles, it has neither speedometer, nor gas gauge, nor any of the other numerous idiot lights which plague the modern driver.

Rather, if the driver makes a mistake, a giant “?” lights up in the center of the dashboard. “The experienced driver,” says Thompson, “will usually know what’s wrong.”
:D

Casimiro Notevi 15-05-2014 22:05:45

Cita:

Empezado por mamcx (Mensaje 476500)
Osea que estas de acuerdo con:

No sé qué le estaban preguntando para contestar eso. Evidentemente no tiene sentido ni tiene nada que ver con lo que estamos hablando.

nlsgarcia 15-05-2014 22:47:56

mamcx,

Cita:

Empezado por mamcx
...Los buffer overflow son una de los problemas que estos tienen. Son un vector de ataque, causan crash, son jodidos de depurar y todo eso. ¿Como se arregla?...

Con buenas prácticas de diseño y programación aunado a extensas pruebas y seguimiento de la implementación, en resumen: Es responsabilidad del programador si este usa un lenguaje que no implementa internamente chequeo de límites de memoria el hacer todas las pruebas necesarias que validen el buen funcionamiento del software construido. C/C++ son herramientas muy poderosas para la programación, no implica que sean perfectas, pero ciertamente han probado ser sumamente efectivas y eficientes para el desarrollo de software desde su creación hasta el presente.

Cita:

Empezado por mamcx
...¿Supuestamente? No, TIENEN fallas de base. Que se controlan, como dices, con disciplina...

En toda tu exposición te has basado en el hecho de que si un lenguaje deriva de C/C++ tiene fallas de base, Pregunto:

1- ¿C# tiene problemas de Buffer Overflow? :confused: , creo que no si simplemente se usa código gestionado.

2- ¿Java y D tiene problemas de Buffer Overflow? :confused: , creo que los lenguajes modernos derivados de C/C++ se han construido sobre las lecciones aprendidas de sus antecesores, luego hablar que todos ellos tienen problemas de base por compartir un ancestro común creo que no es una apreciación muy justa con dichos lenguajes.

Cita:

Empezado por mamcx
...Examples of such languages (que no tienen ese problema de base) include Ada (podria reemplazar a C/C++, sino fuera porque pailas, son mas populares), Eiffel, Lisp, Modula-2, Smalltalk, OCaml and such C-derivatives as Cyclone, Rust and D (todos estos, podrian reemplazar C/C++)...

Pregunto: Cyclone, Rust y D son derivados modernos de C/C++ y todos ellos usan las llaves {} como delimitadores de bloque, es decir que según tu exposición estos lenguajes tienen irremediablemente un problema de base, luego ¿Como pueden reemplazar a C/C++ si tienen tal problema de base?. La respuesta es que el uso de las llaves {} no implica un problema de base, si así fuera todos los derivados de C/C++ ya hubieran hecho algo al respecto.

Cita:

Empezado por mamcx
...En su momento, aparte de C/C++, ¿que opción hay para hacer un OS?...

Es correcto ^\||/ , pero hoy en día Microsoft esta desarrollando un nuevo SO llamado Midori y este se construye sobre un lenguaje derivado de C#, que a su vez es derivado de C/C++ que es M#, Pregunto : ¿Por que se siguen usando derivados de C/C++ si tienen tantos problemas de base?, la respuesta es que son versiones mejoradas de sus antecesores, cada vez más potentes, especializadas y seguras, y por lo tanto mas confiables.

Cita:

Empezado por mamcx
...Hay un ERP que es el mas usado y es muy potente. Sin embargo, Si se le meten decimales hay que estar muy seguros de poner "." y no ",". Si se pone ",", la vaina se jode y corrompe todo. Si se mete un null entre una cadena en el proceso de importacion de datos, se rompe la seguridad del sistema. Se puede hacer injección de SQL...

Pregunto: ¿Todo lo anterior no es responsabilidad del programador?, ¿No se puede verificar el uso de punto o coma como separador de decimales?, ¿No se puede verificar en un String si este tiene caracteres Null para evitar riesgos de seguridad?.

Un programador debe conocer las fortalezas y debilidades del lenguaje que usa para hacer un mejor uso de el y construir software de calidad.

Si aceptamos la tesis de que todo lenguaje derivado de C/C++ tiene problemas de base entonces deberemos aceptar que la computación poco ha avanzado desde la aparición de C/C++ y es un hecho que ha sido todo lo contrario, los sistemas son cada vez más complejos, potentes y seguros no necesariamente perfectos, sin embargo el factor humano siempre esta presente en ellos y la complejidad creciente de los sistemas hace cada vez mas necesaria una mayor disciplina en el desarrollo de software de calidad.

Pregunto: ¿Si uniéramos las mejores características de todos los lenguajes actuales y se hiciera un lenguaje perfecto en todo sentido se eliminarían por completo las fallas de software, es decir: Los sistemas serían a prueba de fallas, eficientes, seguros y cumplirían a cabalidad las metas para los que fueron concebidos? :rolleyes:

Nelson.

mamcx 16-05-2014 03:45:59

Cita:

Empezado por Casimiro Notevi (Mensaje 476507)
No sé qué le estaban preguntando para contestar eso. Evidentemente no tiene sentido ni tiene nada que ver con lo que estamos hablando.

A proposito: La cita es del "Unix haters handbook". Una recolección de expertos en unix acerca de todos los lios de diseño de este. Esa cita es famosa por expresar la mentalidad común de la gente de *nix de despreciar al usuario por cometer errores, aun cuando defenderse de los tales requiere una serie de bizarros conocimientos del porque las cosas son como son. Es una de las lecturas recomendadas para todo programador.

mamcx 16-05-2014 04:45:57

Cita:

Empezado por nlsgarcia (Mensaje 476510)
mamcx,
Con buenas prácticas de diseño y programación

Eso aplica también a los lenguajes? Dirías, con los datos expuestos, que es el caso?

Cita:

Empezado por nlsgarcia (Mensaje 476510)
En toda tu exposición te has basado en el hecho de que si un lenguaje deriva de C/C++ tiene fallas de base..

Mmmm... el debate surgió en parte de que tener limitadores es mejor que no, y entonces puse como los que usan la familia C no son superiores, y de hecho, tienen fallas en su implementación. No quise dar a entender que todos en lo absoluto de sus descendientes son malos, solo expuse que los mas comunes comparten ese problema.

Luego se mezclo que es culpa de nosotros no saber que esos delimitadores traen errores, entonces hay puse ejemplos donde es culpa de los compiladores/sintax los errores. Pero eso fue mezclar 2 cosas diferentes, aunque conectadas...

En donde si quise dar a entender que están todos los de la familia C, es en que los marcadores (de bloque) que usan no aportan mucho al programador, que tener que usarlos es algo que se expone como un problema común en varias guías sobre los mismos (que se olvidan, que hay que estar seguro de cerrar y abrir donde es, etc), y que en ciertos lenguajes tienen problemas importantes. Eso si es mas universal.

Asi que, aparte de decirle al compilador algo que se puede automatizar -donde termina un bloque- (y que personalmente he implementado, y no es tan difícil), que ganancia da, aparte de algo estético o de pura costumbre? Ahí es donde no me han dado ningún argumento, solo el decir: Es que X es muy bueno, mire como todo el mundo lo usa e igual tenemos Google Chrome.

Es claro ahora? Ademas expuse que el caso de Go & Rust esta mucho mejor pensado el asunto.

Cita:

Empezado por nlsgarcia (Mensaje 476510)
(sobre el erp)
..
¿Todo lo anterior no es responsabilidad del programador?, ¿No se puede verificar el uso de punto o coma como separador de decimales?, ¿No se puede verificar en un String si este tiene caracteres Null para evitar riesgos de seguridad?.

Exacto! No es culpa del usuario!. Eso es lo que debato. Ahora bien: Porque no pensar LO MISMO con respecto a un lenguaje? En este caso, el usuario somos nosotros!

Cita:

Empezado por nlsgarcia (Mensaje 476510)
deberemos aceptar que la computación poco ha avanzado desde la aparición de C/C++ y es un hecho que ha sido todo lo contrario.... son cada vez más complejos, potentes y seguros

La computación ha avanzado. La forma de hacerlo? Ni de locos. Estamos haciendo software con las mismas ideas de mas de 60 años...

FALSO.

Estamos haciendo software *olvidando* muchos de los avances en como hacer software, que se conocen desde hace mas de 50 años.

Te pregunto:

- Sabes que es una función pura?
- Sabes que se puede reemplazar, en su totalidad o parcialmente, sin detener el programa, o sea corriendo, aun cuando este soportando una enorme carga de trabajo, un programa, sin fallas ni downtime? Y eso es algo que se puede hace decadas. Lo hacen? Yo no. Y eso que se que existe, pero es que ninguna de las herramientas que uso pueden hacerlo!
- Sabes que el bound checking, que C/C++ no tiene, fue inventado hace mas de 3 décadas? Están usando los programadores de C "computación avanzada"?
- Sabes que no hay porque, en pleno siglo 21, preocuparse por un Null Exception, porque eso esta resuelto, hace décadas también?
- Sabes que se puede verificar que un programa no tiene errores de acceso de memoria?
- Y que es posible garantizar que no hay deadlocks?
- Sabes que hay muchos GC mejores de lo que imaginas? Que pueden hacer código MAS rápido que los que usan memoria manual?
- Saben que lo ultimo que implementa C# 4/5, Java 8, estaba disponible para gente en 1980? Pero porque desafortunadamente C/C++/JS/PHP "ganaron" en números, todo ese software escrito durante todo ese tiempo (y aun ahora) no goza de ninguno de los avances en la computación -para programadores-?

Saben cual es el estado del arte en nuestra área? Que tanto atrás o delante estamos, en herramientas y tecnología, con respecto a como eran las cosas hace 20 años?

Cita:

Empezado por nlsgarcia (Mensaje 476510)
¿Si uniéramos las mejores características de todos los lenguajes actuales y se hiciera un lenguaje perfecto en todo sentido se eliminarían por completo las fallas de software

Poniendo en su sana perspectiva lo de perfecto? No te alcanzas a imaginar cuan cerca puede estar esa meta de lo que ahora piensas*.

* La respuesta pedante: Es NO. Combinar lenguajes no resuelve el problema. Sin embargo, por poner un ejemplo: Alguna vez has pensado porque puedes tener un valor NULL en cualquier momento? Y que tal si te dijera que es posible nunca, jamas, tener un NULL inesperado? Yo antes ni siquiera se me ocurriría tal cosa.

Asi aunque no es posible en su totalidad esa meta, ni C, C++, C#, Java, Python, Ruby, Delphi, Lua, y muchos otros lenguajes mas comunes son un ejemplo de que tan lejos se ha llegado, osea, hace varios años ya. Se podria decir que cada uno ha recibido solo un "pedazo" de esos avances, unos mas que otros.

Hay otros lenguajes que si están *mas* cerca. Pero no son populares. Es muy difícil. No tienen los números de su lado, o son muy bizarros en su sintaxis, o simplemente es muy difícil que un programador haga un cambio a algo nuevo. En especial si niega o ni siquiera puede concebir que existe un mejor camino. En especial lo segundo*.

* Por poner un ejemplo: Cuantos programadores VB se pasan a Pascal al darse cuenta lo mejor que es?

Naaaaa... miren cuanto software en VB esta hecho, y no le veo problemas.... Ademas si me esfuerzo mas, trabajo mas y escribo mas código hago lo mismo...

nlsgarcia 16-05-2014 08:54:28

mamcx

Cita:

Empezado por mamcx
...Eso aplica también a los lenguajes? Dirías, con los datos expuestos, que es el caso?...

Si.

Revisa esta información:
Cita:

...The choice of programming language can have a profound effect on the occurrence of buffer overflows. As of 2008, among the most popular languages are C and its derivative, C++, with a vast body of software having been written in these languages. C provides no built-in protection against accessing or overwriting data in any part of memory; more specifically, it does not check that data written to a buffer is within the boundaries of that buffer. The standard C++ libraries provide many ways of safely buffering data, and C++'s Standard Template Library (STL) provides containers that can optionally perform bounds checking if the programmer explicitly calls for checks while accessing data. For example, a vector's member function at() performs a bounds check and throws an out_of_range exception if the bounds check fails. However, C++ behaves just like C if the bounds check is not explicitly called. Techniques to avoid buffer overflows also exist for C...

Tomado de : Buffer overflow
Es por lo tanto responsabilidad del programador que use C/C++ conocer todo lo anterior para programar de forma eficiente y segura en dichos lenguajes.

Cita:

Empezado por mamcx
...Así que, aparte de decirle al compilador algo que se puede automatizar -donde termina un bloque-...¿que ganancia da, aparte de algo estético o de pura costumbre?...Ahí es donde no me han dado ningún argumento...

Determinan visualmente los bloques de código, algo que en términos prácticos es muy útil al momento de programar y depurar.

Cita:

Empezado por mamcx
...Estamos haciendo software con las mismas ideas de mas de 60 años...

Es correcto ^\||/ , la evolución ha sido lenta en ese sentido pero aun así el software es cada día más complejo y sofisticado que en el pasado.

Cita:

Empezado por mamcx
...Estamos haciendo software *olvidando* muchos de los avances en como hacer software, que se conocen desde hace mas de 50 años...

Quizás el programador promedio si, pero los programadores profesionales de grandes empresas a nivel mundial de desarrollo de software, energía, telecomunicaciones, finanzas y centros de investigación no estaría tan seguro :confused:

Cita:

Empezado por mamcx
Te pregunto:

1- Sabes que es una función pura?

2- Sabes que se puede reemplazar, en su totalidad o parcialmente, sin detener el programa, o sea corriendo, aun cuando este soportando una enorme carga de trabajo, un programa, sin fallas ni downtime? Y eso es algo que se puede hace decadas. Lo hacen? Yo no. Y eso que se que existe, pero es que ninguna de las herramientas que uso pueden hacerlo!


3- Sabes que el bound checking, que C/C++ no tiene, fue inventado hace mas de 3 décadas? Están usando los programadores de C "computación avanzada"?


4- Sabes que no hay porque, en pleno siglo 21, preocuparse por un Null Exception, porque eso esta resuelto, hace décadas también?


5- Sabes que se puede verificar que un programa no tiene errores de acceso de memoria?


6- Y que es posible garantizar que no hay deadlocks?


7- Sabes que hay muchos GC mejores de lo que imaginas? Que pueden hacer código MAS rápido que los que usan memoria manual?


8- Saben que lo ultimo que implementa C# 4/5, Java 8, estaba disponible para gente en 1980? Pero porque desafortunadamente C/C++/JS/PHP "ganaron" en números, todo ese software escrito durante todo ese tiempo (y aun ahora) no goza de ninguno de los avances en la computación -para programadores-?


9- Saben cual es el estado del arte en nuestra área? Que tanto atrás o delante estamos, en herramientas y tecnología, con respecto a como eran las cosas hace 20 años?

La respuesta general a todas las preguntas es : Si, sin embargo lo mismo se aplica a toda la tecnología en general, supongo que el proceso de conocimiento e implementación del mismo es lento en términos generales independientemente del área de conocmiento en cuestión, es algo más humano que técnico :rolleyes:

Cita:

Empezado por mamcx
...Hay otros lenguajes que si están *mas* cerca. Pero no son populares. Es muy difícil. No tienen los números de su lado, o son muy bizarros en su sintaxis, o simplemente es muy difícil que un programador haga un cambio a algo nuevo. En especial si niega o ni siquiera puede concebir que existe un mejor camino. En especial lo segundo*...

Estoy de acuerdo ^\||/ , sin embargo esto esta ligado a la respuesta anterior.

Cita:

Empezado por mamcx
...¿Poniendo en su sana perspectiva lo de perfecto?...La respuesta pedante: Es NO. Combinar lenguajes no resuelve el problema...

Es correcto ^\||/

Cita:

Empezado por mamcx
...No te alcanzas a imaginar cuan cerca puede estar esa meta de lo que ahora piensas...

:rolleyes:

Pregunto: ¿Te has puesto a pensar que con toda la base instalada de aplicaciones y conocimiento en C/C++ y sus lenguajes derivados no es aconsejable en términos prácticos el dar un salto brusco a los lenguajes que mencionas como más evolucionados?, todo se resume a lo práctico versus a lo ideal, sin importar cuan poderoso sea Erlang para manejar la concurrencia (Por ejemplo) si mi base instalada es de C#, seguirá siendo de C# o un derivado de este, con las excepciones del caso, lo mismo aplica a otros lenguajes :rolleyes:

En resumen: La fortaleza de C/C++ y sus derivados radica en sus extensas posibilidades de programación, no en su perfección de diseño, lo cual sumado a su gran base instalada, conocimiento acumulado y mejoras continuas hacen que estos lenguajes tengan asegurado un largo camino en el mundo de la computación del siglo 21.

Nelson.


La franja horaria es GMT +2. Ahora son las 11:30:31.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi