Tecnología, Internet y juegos
139 meneos
1997 clics
Rust parecía el lenguaje ideal para programar videojuegos. Este estudio acabó abandonándolo tras tres años centrados en él

Rust parecía el lenguaje ideal para programar videojuegos. Este estudio acabó abandonándolo tras tres años centrados en él

El estudio de videojuegos LogLog Games se da por vencido con Rust, al que siguen viendo muchas ventajas... para todo lo que no sean videojuegos. Uno de los principales retos fue la curva de aprendizaje del lenguaje: Rust es notoriamente complicado para principiantes y, aunque los desarrolladores de LogLog Games no eran precisamente inexpertos (escribieron más de 100.000 líneas de código en esos tres años), muchos de los problemas iniciales no desaparecieron con el tiempo.

| etiquetas: rust , no sirve , videojuegos
68 71 3 K 181
68 71 3 K 181
Comentarios destacados:                                  
#44 #38 No.

C no es un ensamblador con colorines. Y te lo dice alguien que tiene los huevos pelados de programar en C y en su día en ensamblador.

C proporciona un fácil acceso a ASM embebido, pero no es un "ensamblador con colorines". Basta que hayas tenido que escribir algún código en ensamblador para que te des cuenta.

Lo que ejecute la CPU cuando programamos en C preocupa más bien poco. Se encarga el compilador de ello. Igual que en Rust.
#38 No.

C no es un ensamblador con colorines. Y te lo dice alguien que tiene los huevos pelados de programar en C y en su día en ensamblador.

C proporciona un fácil acceso a ASM embebido, pero no es un "ensamblador con colorines". Basta que hayas tenido que escribir algún código en ensamblador para que te des cuenta.

Lo que ejecute la CPU cuando programamos en C preocupa más bien poco. Se encarga el compilador de ello. Igual que en Rust.
#44 Mira el microcodigo de hoy con los procesadores y lo entenderas.
#50 ¿ Qué coño tiene que ver el microcódigo de los procesadores con este tema ?

¿ Sabes como funciona una CPU microprogramada ?

Esa historia de la unidad de control, juego de instrucciones....

¿ Te recomiendo un libro ?
#56 Te recomiendo yo leerte en.wikipedia.org/wiki/Microcode para empezar.
#58 :palm: :palm:

El Microcódigo de las CPU no tiene absolutamente nada que ver en el tema que estamos tratando. Y sé perfectamente qué es, para qué sirve y en qué consiste.

Por lo que se ve, tú no.
#62 #58 Joder! Tenía yo ganas de volver a ver discusiones por estas cosas y no por política!! xD
Un abrazo a ambos
#58 deja de seguir insistiendo en algo que no tienes ni idea.

C era ensamblador con colorines en su nacimiento, cuando las máquinas eran simples y era "predecible" el output del binario, en el sentido de que la gente se podía imaginar que set de órdenes de ensamblador equivalían a cada orden de C. Pero no permitía ir al detalle al que iba ensamblador, podríamos decir entre muchas comillas que era casi "un macro" de assembler.

Eso dejó de ser así hace muchísimo, para…   » ver todo el comentario
#56 Quiero el nombre de ese libro, por curiosidad, porque me gusta el mundo de la programación a bajo nivel como hobby. Gracias
#56 quiero ese libro tanto como #147!
#40 creo que tienes que volver a clase de lenguajes de programación.

Yo no diría esto a alguien y después soltaría esto:

C es un lenguaje de alto nivel, tan alto nivel como Java o Python.

C no tiene nada que ver con Python. Es más, diria que se parece más al ensamblador que al Python.

O cosas como:

Dicho esto, tu afirmación de que “cuanto más alto nivel más ineficiente” es evidente absurda y por ello falsa. La eficiencia del código depende mucho más de los conocimientos

…   » ver todo el comentario
#44 No no, ojo, que haya compiladores que permitan empotrar ensamblador o linkers que permitan enlazar con ficheros en ensamblador compilados en proyectos de C no quiere decir que C de acceso a ensamblador. C no tiene nada de eso. Por otra parte, SI, un poco por accidente y epoca de creacion y otro mucho por requisitos de la industria, C es TAMBIEN un ( o mejor dicho EL ) ensamblador portable en el sentido de que permite, precisamente, trabajar casi casi con el mismo nivel que la…   » ver todo el comentario
#44. '...Lo que ejecute la CPU cuando programamos en C preocupa más bien poco. Se encarga el compilador de ello. Igual que en Rust...'

En lineas generales, pero cuando hablamos de programación de videojuegos lo que haga el compilador por su cuenta preocupa y ocupa. Esta misma noticia #0 de algún modo lo confirma.
#8 C es un lenguaje de alto nivel. Se parece al ensamblador como un huevo a una castaña.
#20 C es un ensamblador "con colorines". Lo jodido es que no estamos en una PDP11 y el estandar de C funciona como si lo fuera. Ni las CPUs hoy ejecutan un codigo amd64 puro.
#40. "...creo que tienes que volver a clase de lenguajes de programación..."

Y yo creo que deberias estudiarte el 'código fuente' de un compilador básico de C, ya te adelanto que te sorprenderás de lo acertado de mi comentario #8.

#38 #20. Con colorines, una gráfica forma de plantearlo.

#149. Efectivamente. Aparte de un compilador directo de lenguage ensamblador ningún otro lenguage está más cerca del propio ensamblador que el lenguage C, de ahí viene su eficiencia (bien empleado) y de ahí vienen los kernels de los sitemas operativos.
#38 si, claro, y visual basic es un ensamblador "en 3D".
#8 creo que tienes que volver a clase de lenguajes de programación.

Primero, como te ha dicho #20, C es un lenguaje de alto nivel, tan alto nivel como Java o Python.

Es una confusión muy común pensar que hay distintos niveles de “altura” en la clasificación de los lenguajes de programación, cuando en realidad solo hay dos; bajo nivel (Lenguaje máquina y ensamblador) y alto nivel (Cualquier otro).

Todo lo demás son charlatanería repetida mil veces por medios generalistas supuestamente…   » ver todo el comentario
#40 >cuando en realidad solo hay dos; bajo nivel (Lenguaje máquina y ensamblador) y alto nivel (Cualquier otro).

Eso en 1999. Hoy los procesadores desde amd64 no operan en registros directamente como pensarias. Hay microcodigo, y a efectos practicos segun el compilador (y no hablemos ya de cosas como el IR de LLVM) hacen que muchas veces el procesador opere de forma totalmente distinta a la que operaria un Z80 con instrucciones que se ejecutan de formal literal.
#48 Eso en 1999.
Eso en 1999, en 2025 y en 2125.

A no ser que le llames "alto nivel" a lo que a tí te salga de los cojones. ¿ Alguna vez en tu vida has visto algo codificado en ensamblador ?

Hoy los procesadores desde amd64 no operan en registros directamente como pensarias. Hay microcodigo,
Hay microcódigo desde hace eones. Los procesadores cableados son de usos muy específicos. Usamos CPU microprogramadas desde casi siempre.

y a efectos practicos segun el

…   » ver todo el comentario
#65 >¿ Alguna vez en tu vida has visto algo codificado en ensamblador ?

Solo gameboy con su Z80 modificado, i486, amd64, risc-v... nada, poco.

>Por otro lado si con LLVM te refieres a un entorno de ejecución de lenguaje intermedio al estilo Java, las CPU no ejecutan eso. El microcódigo no es para eso.
No.

>Las instrucciones ensamblador siempre se ejecutan "de forma literal".
Ya no.
#66 Solo gameboy con su Z80 modificado, i486, amd64, risc-v... nada, poco.
¿ Y qué parecido le encuentras con un código escrito en C ?

No.
No qué ?
A qué te refieres exactamente con "IR" y con "LLVM" hablando de ejecución de código ensamblador ??

Ya no.
Si, A no ser que estemos entendiendo por "forma literal" cosas distintas. Una instrucción ensamblador hace lo que hace, no unas veces una cosa y otras veces otra. Si yo hago un MOV, un CMP un CALL, un JMP.... hace un MOV, un CMP un CALL o un JMP.

Por cierto, leete el enlace a la Wikipedia que me has puesto. Te hace falta.
#68 Un MOV o un CMP quizás si que siempre se ejecuten igual, pero quizás una BEXTR (por decir algo), no. Y los pasos que el procesador va a seguir para ejecutarlo van a depender del microcódigo, que es lo que te están diciendo.

(pd. No tengo ni idea de si la instruccion BEXTR se ejecuta usando microcodigo o no, solo la he usado como ejemplo).
#48 #174 #181 ¿Alguna vez en vuestra vida habéis escrito una sola linea de código en C y en ensamblador?

No tienen absolutamente nada que ver, independientemente del juego de instrucciones que elijas para el ensamblador.

En ensamblador no hay ningún tipo de estructura de control, ni siquiera un simple condicional. Hay que hacerlo a manita con una comparación y un salto, CMP y JMP. Lo mismo para los bucles y cualquier otra estructura de control.

Decir que son muy parecidos es demostrar desconocimiento total de lo que es la programación.
#40 La eficiencia del código depende mucho más de los conocimientos del programador que del lenguaje elegido.
Y de la existencia y calidad del compilador
#40 Nop. Hay diferentes niveles en función de la distancia entre los conceptos que se manejan al enunciar los requisitos y los que se manejan al emplear el lenguaje e programación.
A mayor nivel, menor distancia
#77 Entonces C++ es de mayor nivel que Rust..
#40 No sé dónde habrás estudiado, pero con este discurso en mi clase no apruebas.
#40 bueno, C/C++, Zigg, Rust... Se suelen definir como me dio nivel porque te permiten (y obligan a) controlar la memoria (no tienen Garbage colector, Rust te permite controlarla de otra forma pero podríamos decir que "sabes" cuando va a reservarse, cuanta, cuando se liberará...).

Pero sí, todos son de alto nivel en el sentido de que la sintaxis y ordenes son las mismas, no varían con el hardware, abstrayendonos de pensar tan a bajo nivel (no controlas si se usa el set de instrucciones xx de los últimos procesadores, que caché está usando, ni nada de eso por ejemplo).
#8 #20 tenéis parte de razón los dos, y por eso C y C++ muchas veces se clasifican como lenguajes de nivel medio porque están más cerca del hardware y tienen menor nivel de abstracción que otros lenguajes, por ejemplo puedes manejar direcciones de memoria y registros. Preguntadle a Linus Torvalds si podéis tocarle el kernel de Linux en un lenguaje que no sea C a ver qué os dice.
#20 mñeh, si y no, si pero no; y eso es una de las bazas de C, suficientemente alto para trabajar con el en orden y decoro/abstraccion, suficientemente bajo para ser el ensamblador portable y no ocultar la maquina a los que no queremos perder esa nocion de la maauina en ningun momento ( si, aun teniendo presente el modelo abstraido en todo momento; muchos creen que son excluyentes y para nada es asi ). De hecho C es aun mas que eso, C tiene un nivel de abstraccion variable, se puede variar segun el codigo que escribas... y todo sin forzar nada, de forma totalmente natural.
#20 a ver, que un lenguaje ensamblador CISC x86/i686 no se parezca a C, no significa que C no sa parezca a lenguajes ensambladores de arquitecturas/instruction sets más limpios de tipo RISC .
No seamos tan categoricos , por favor. Vengo a Meneame a informarme y aprender, no a medir el tamaño de mi miembro viril con el de otros: eso no es una competición de quién sabe más.
Así que yo voto a favor de #8 :-P
#7 ...salvo que quieras hacer videojuegos...
#9 O nuevos motores.
#9 exacto. Es como si me compro una sandía y digo que no es buena porque no vale para implementar juegos.
La clave está aquí: "el ecosistema de Rust carece de herramientas maduras comparables a las que ofrecen Unity o Unreal Engine".
#6 comparar un lenguaje de programación con frameworks de videojuegos es como comparar peras con molletes.
#28 Python se usa por su ecosistema, no por el propio lenguaje, que es bastante filfa, por cierto.

Al que se le ocurrió el tema de los tabuladores había que fusilarlo.
#35 En eso estoy de acuerdo. Odio lo de los tabs, es un cancer a la hora de copiar o refactorizar codigo. Podian haber usado cualquier otro token.
#35 Cuando dices tabuladores, te refieres a tabuladores y/o espacios, no?

#42 Sabes que no tiene que ser tabs, no? Que problema encuentras al refactorizar código?
#35 ¿qué tema de los tabuladores?
#72 Borra uno en un sitio delicado. Guarda, coge el código al día siguiente y luego me cuentas
#73 también puedo borrar una línea completa.
¿Y?
#80 Hombre, borrar una línea accidentalmente es bastante más difícil que hacerlo con un tabulador al inicio de una línea. No te parece?
Y ni siquiera el IDE te va a notificar nada.
#86 ctrl-d en lugar de ctrl-s al salvar antes de cerrar. No es difícil.
#88 Para qué???

El código puede ser igual de válido sintácticamente con tab o sin tab.

Y puedes haber hecho muchos cambios después de borrar el tab accidentalmente.
#95 Mencionaba un error fácil de cometer.
Y en cualquier lenguaje, una línea desaparecida puede dejar una sintaxis perfectamente válida.
Y uno puede seguir trabajando tranquilamente hasta que un día le explota el error en la cara.
#100 No hablo de una línea. Hablo de un tabulador (que no se ve, una letra si se nota) al principio de una línea.
#73 para eso está el control de versiones
#35 Los lenguajes son filfa, como Python, o no tienen futuro ,.como Rust, o super guachis, como C++, según a ti te parezca.

Pues okey. Con esos argumentos me queda definitivamente claro todo xD
#35 Me ofrezco como tirador. Menuda cagada.
Para videojuegos y mucho más... C y C++ moderno.
#1. El que no entiende de cortoplacismos en este caso es el propio hardware. Cuanto más alto es el nivel del lenguaje menos eficiente es respecto al hardware que lo ejecuta tras el compilado o tras el intérprete.

#3. El C es practicamente ensamblador, alguien con mucha experiencia en C y ensamblador casi puede deducir que código fuente en ensamblador se va generando detrás del C, y el C++ una extensión orientada a objetos más lenta en cuanto al hardware y más rápida en cuando al desarrollo de software. Incluso es posible enfocar el lenguage C, sin objetos por defecto, orientándolo "a mano" a objetos.
#8 como alguien que empezó estudiando ingeniería informática aprendiendo C y ensamblador (gracias UGR), te digo que se parecen 0. Prueba a hacer el programa más simple del mundo y verás lo lejos que están.


Y te digo de paso, que ahora programo en C# la mayor parte del tiempo y puedo ver (y a veces lo hago por curiosidad) el código ensamblador que se ejecuta a partir de un código en C#. Si ves muchas veces esto puedes llegar a aprender que código ensamblador se va a generar. Lo cuál no quiere decir que ambos lenguajes estén cerca.

(también veo muchos vídeos de Nick Chapsas y lo hace constantemente)
#8 ¿En qué momento C++ es más lento que C?
#8 Creo que se te ha borrado el "OBOL" que va justo después del "C".
He escuchado que RUST es para desarrollos seguros pensando en el mediano y largo plazo. En un mundo de cortoplacistas, no va a funcionar.
Cuanto más complejos sean los tipos, más acopladas van a estar diferentes partes del código, más complejas y frecuentes serán las refactorizaciones (una de las razones mencionadas en el código) y por tanto más difícil será hacer evolucionar el código. Un poco está bien, tipos estáticos de toda la vida, pero si ya empezamos a meter aspectos de memoria en los tipos se lia todo.

Toda esa complejidad añadida en los tipos tiene sentido cuando merezca la pena (es decir, cuando se necesite seguridad de memoria sin penalizaciones de GC u otras cosas), para el resto del mundo, un lenguaje con recolección de memoria es lo más sencillo y sensato.

Todo el bombo y platillo que se da a rust está en gran medida injustificado
#4 Rust es bastante menos complicado de usar que C++, en varios órdenes de magnitud además. C++ es infumable.

El único problema aquí es que Rust es un lenguaje muy joven y no hay librerías maduras para un montón de cosas, como las que hay en C++, Java o Python.

El día que alguien desarrolle para Rust un motor de videojuegos, se acabó C++ porque quién va a querer hacer proyectos desde cero con un lenguaje mucho más complicado y que además es más inseguro. A igualdad de opciones Rust gana de calle.

En veinte años ni Cristo usará C ni C++ para proyectos que requieran lenguajes de bajo nivel. Ahora mismo esos lenguajes viven de la inercia de décadas de desarrollo de librerías, pero el futuro es claramente Rust.
#10 eso decían cuando estaba en la carrera.

Que COBOL era un cadáver esperando entierro y que c y c++ iban detrás

Un visionario.

Treinta años después ahí siguen
#12

"C++ es infumable" solo porque no sabes usarlo bien. Yo no lo he usado profesionalmente porque me tuve que pasar a JAVA. Pero C++ es el culmen.

"Que COBOL era un cadáver esperando entierro y que C y C++ iban detrás" Toda la infrastructura bancaria mundial funciona con COBOL en IBMs JCL. El dia que pasen toda esta mierda a algo mas moderno... como Kafka, .... dejan en la calle a miles de personas.
#13 el caso es que llevan cuarenta o cincuenta años jubilando a COBOL y el cabrón no se muere

Es lo que me decían hace 30, cuando entraba en la carrera y ahí sigue, sin que se adivine en el horizonte una fecha en la cual se pueda decir "pues adiós".
#59 pero no sigue por que se hagan nuevos desarrollos desde 0 con cobol, si no por que hay que mantener/expandir antiguos sistemas
#146 #59 Y JCL con una IBM370 (version moderna)... . En banca es lo que hay en los backends. Vamos, que a mi me estan intentado llevar de vuelta a cuando tenia 20 y algo en mi curro... y como que no.

COBOL no muere, JCL y las IBM no mueren, pero nadie se quiere meter en eso porque nunca sabes cuando te vas a quedar sin curro. Algo tiene que sustiruirlo, Kafka + Hadoop o algo asi? Lo he visto usado para manejo de registros.
#13 C++ mola, pero bien es cierto que Rust es más sencillo cuando no tienes sesgos.
A mi me costó un poco aprenderlo, porque todo el tema de los lifetimes, y como funcionan las referencias a memoria, con su sistema de propiedad se me hacía raro. Pero una vez que lo aprendes, dominarlos es menos complicado porque pegarte un tiro en el pie es mucho más difícil. Con C++ tienes más posibilidades de liarla con accesos a memoria, etc.
#12 ¿Qué siguen dónde? COBOL es un cadáver, nadie en el mundo empieza proyectos en ese lenguaje en ningún sitio y para nada. Existe en lugares donde ya estaba implementado y una migración no es conveniente y ya está, eso es todo.

C y C++ son otros dos que ya están empezando a ser despreciados también. Todas las herramientas de sistemas o los nuevos paradigmas y aplicaciones se están implementando en Rust o en Go, una de dos. C++ sólo sobrevive en lugares donde no hay librerías disponibles para esos menesteres, como por ejemplo los videojuegos, pero ya está. En cuanto a la inteligencia artificial, prácticamente dominada hoy en día por Python, es cuestión de tiempo que Rust empiece a desplegarse en todo el bajo nivel, reemplazando a C++.
#10 En las consolas la seguridad importa una mierda.
#16 Python sin C, C++ y BLAS/LAPACK (fortran) estaria muerto.
#17 No se refiere a la seguridad de que un tío entre y te robe los datos. En Rust, cuando hablan de seguridad, se refieren a que no te explote en la cara un puntero a NULL en tiempo de ejecución, cosa que por diseño en Rust es imposible.

Python tiene cien mil librerías que se gastan masivamente y que no tienen implementaciones internas de bajo nivel y por lo tanto no gastan C's ni FORTRANs. En cuanto a las que lo hacen, Rust está ya, ahora mismo, sustituyendo a C y C++ en esas librerías Python, por motivos más que evidentes.
#22 Buena suerte con Rust intentando reemplazar a BLAS/Lapack. Lo mismo en videojuegos de consolas donde la seguridad no impote. Si, accesos a memoria y toda la hostia. Pero hay fuzzers, valgrind y 10000 herramientas para evitar eso al menos en plataformas no de uso general como juegos en primera persona. Un navegador ya es otra cosa; y un así chromium en openbsd con unveil/pledge junto con su sandbox es mas seguro que Firefox con Rust.
#29 Y dale con "la seguridad no importe". Que no estamos hablando de "seguridad de hackers robándote los datos", que estamos hablando de que el programa pete por cualquier lado con punteros a NULL y errores jodidísimos de depurar y de arreglar que finalmente ves en tiempo de ejecución cuando tú querida aplicación en C++ ha llegado ya al cliente final. Esa es la seguridad que ofrece Rust, que ni C ni C++ jamás podrán ofrecer. Para eso se creó Rust y ahí radica toda su fuerza.

#32 Módulos que están ahora mismo, hoy, y en 2024 y en 2023 y en 2020 también estaban ya, cada vez más desarrollándose en Rust.
#22 El triunfo de Python se debe en gran medida a la facilidad de creación de módulos en C.
#17 Python, al ser interpretado, utiliza un interprete que puede estar escrito en diferentes lenguajes, de ahí que tengamos:
* CPython, el más estándar,
* JPython, sobre Java. En entornos Hadoop se ve bastante por temas de Scala.
* PyPy,
* RustPy,
* etc...

Y una larga lista. Evidentemente, el interprete subyacente afecta a las capacidades y rendimiento de Python, pero aun así hay para elegir según la aplicación.
#16
>C++ sólo sobrevive en lugares donde no hay librerías disponibles para esos menesteres, como por ejemplo los videojuegos, pero ya está

Ya quisieras. En videojuegos de PC y consola, multimedia, navegadores... es el rey.
#18 infinidad de librerías que usa python están implementadas en c o c++
#26 Y Fortan para algebra/calculo numerico.
#18 En videojuegos es donde más librerías base hacen falta y donde esas herramientas en Rust aún no están desarrolladas. En todo lo demás, sistemas, IA, navegadores como tú dices... Ni Cristo empieza un proyecto nuevo en C ni en C++. Actualízate.
#16 C sigue siendo el lenguaje de sistemas por excelencia.
Windows o Linux usan C.
#23 Windows es C++. Pero hablar de C es hablar de LA API de Unix, prototipos, estandares IEEE y el lenguaje que esta en todas partes, hasta en teleco . Es como hablar de ingles en negocios, ciencia y tecnologia. Toda la nueva terminologia y aparatos/estandares es en ingles.
#36 Bueno, C/C++.

C++ tiene la posibilidad de usar entremezclado codigo C.
#39 No, no es lo mismo, han divergido muchisimo, nada que ver.
#45 No he dicho que sean lo mismo. Digo que es común usar código C desde C++, el lenguaje incorpora facilidades para ello.
#36 Windows es C, no C++, C.
#16 en intérprete de Python está escrito en C. Creo que el de Java y JavaScript también. Hasta que no se pueda compilar Python a binario directamente, C y C++ seguirán siendo indispensables.
#41 Hasta que no se pueda compilar Python a binario directamente, C y C++ seguirán siendo indispensables.

Por qué, exactamente?
#16 Ya, buena suerte para la infrastructura de base de cualquier nuevo hardware fuera de C. Rust... bueeeno, pero Go ? sorry, no. C es un standard de la industria, va mas alla del lenguaje en si.
#10 ¿Quien ha hablado de C++? Por lo demás, Rust sólo puede presumir de sencillez comparandose con C++, porque no es un lenguaje nada sencillo por si mismo (y no dejan de complicarlo para tratar de paliar las desventajas que tiene su modelo, en lugar de aceptar que no tiene por qué servir para todo... )

En principio dudo que alguien escriba un gran motor de juegos en Rust. El modelo de Rust implica a menudo hacer copias,no es precisamente lo ideal cuando se quiere exprimir al máximo el…   » ver todo el comentario
#15 Bueno, también se decía que Python era una mierda y que por su diseño y sus características jamás sería usado para nada fuera de scripts sencillos. Hoy se usa para todo el análisis de datos y toda la IA. Igualmente Rust está sustituyendo a C y C++ en la implementación a bajo nivel, por debajo de Python, a muchas de esas herramientas de análisis de datos con un seguridad muy superior en tiempo de ejecución y con un rendimiento increíble que en no pocos casos supera a sus contrapartes en…   » ver todo el comentario
#19 Ya hay lenguajes alternativos a Rust, y no dejan de crearse nuevos lenguajes cada año, no vas a tener que esperar a 2050. Es ridículo pensar que si la seguridad de memoria es un requisito, Rust va a ser el único lenguaje que lo implemente y nadie más va a hacerlo
#25 También hay lenguajes alternativos a Python. Cuando se usen una milésima parte de lo que se usa Python, hablamos. Cuando esos lenguajes que supuestamente se están creando para solucionar los problemas de Rust se usen en cualquier sitio mínimamente relevante, como un navegador web o un sistema de orquestación de contenedores, hablamos.

Hay dos tipos de lenguajes de programación: los que la gente odia y los que nadie usa. C, C++, Rust, Python, Java y Go son odiados y el resto no los usa nadie :troll:
#28 Has olvidado C# y javascript; 5º y 6º en el índice TIOBE... que lo sepas.
#25 Ya existian ADA/Spark y MISRA C que poco tienen que envidiarle a Rust.
#19 con un seguridad muy superior en tiempo de ejecución
Un programa bien hecho en C es exactamente igual de seguro que uno bien hecho en Rust.

¿ A qué le llamas tú "guarrear" ?
#33 > Un programa bien hecho en C es exactamente igual de seguro que uno bien hecho en Rust.

No, lo siento, y eso que no me gusta Rust, pero Rust es mucho mas seguro que C en ese aspecto. Si hubieras dicho C++...
#43 ¿?

En qué es "mas inseguro" exactamente?

Recuerda que hablamos de programas bien hechos. No es una cuestión de gustos.

Si hubieras dicho C++...
C++ no es "más seguro" que C. El acceso a memoria es prácticamente igual.
#47 C++ tiene rutinas de manejo automatico de memoria. C, no, a no ser que uses o bien una libreria o cosas com BoehmGC.
#49 C++ tiene rutinas de manejo automatico de memoria
Hombre, hace tiempo que no uso C++ pero supongo que hay cosas que no han cambiado:

Si defino un puntero, puedo usarlo sin inicializarlo. Es C y C++. También puedo cambiar la dirección a la que apuntan sin restricciones...

O puedo no liberar nunca memoria reservada (new o malloc)

¿ Sigue siendo así ?

porque básicamente cuando dicen que es un "sistema inseguro" se refieren a eso.
#57 C++ ha cambiado mucho en 20 años. Tengo roguelikes desde el 2007 (no desde 1997) que no compilan con los GCC o clang de hoy. Ni de la rama 10, y la 8.4 a duras penas. Creo que debo usar GCC 4.8 para poder compilarlos.

Desde hace 10 años o así salvo programadores de videojuegos o cosas como FFMPEG nadie gestiona la memoria a mano en C++...
#60 La pregunta no es cuanto ha cambiado C++, sé que lo ha hecho.

Pero si siguen permitiéndose esas cosas que he indicado (y espero que sí) sigue siendo igual de inseguro. Que hayan incorporado medios para gestionar de otro modo la memoria no cambia nada.

Yo mismo he usado sistemas diseñados para lo mismo (como si fueran "microframework") en C... a costa de cierto rendimiento, claro.
#57 C++ moderno ha incluido infinidad de cosas de seguridad y alto nivel como smart pointers (unique_ptr, shared_ptr) o funciones lambda y muchas cosas más... dale un repaso al nuevo C++...
Ya no necesitas hacer new y delete... simplemente haces std::make_unique o std::make_shared y tienes el objeto creado en memoria dinámica igual que si hicieras new o malloc y encima no tienes que hacer delete, el smart pointer se encarga de liberar la memoria por ti si se te pasa borrarla...
#47 El ser humano es imperfecto, por mucho que tu quieras hacer algo perfecto, fallaras miserablemente. Eso significa que se necesita de herramientas que te automaticen la seguridad y fiabilidad porque por mucho que tu quieras ser el mas mejor de los programadores, la cagaras, incluso sin darte cuenta.
#70 Para eso están los test y las revisiones. Lo que se pretende es descargar la responsabilidad del programador en el lenguaje y eso a mí entender es desastroso.

Eso sí, eso permite aumentar la presión de entrega,reducir los test y producir código funcional más rápido. Código de mierda, pero funcional.

Rust es una buena idea para grandes empresas de sistemas. Si se dispone de tiempo y no hay presión, C sirve.
#76 Coincido, pero personalmente no tocaria c/c++ para nada hoy en dia si no es codigo legacy. Si tuviera que hacer algo nuevo usaria go/Rust/c# o algun otro con automatizaciones de seguridad.
#83 Me parece lógico.

Pero citar ahí a C# es como poner Java. Es un lenguaje "para otra cosa".
#83 Rust tiene la posibilidad ( aunque muy burda y antinaturalmente y jodiendo mas que ayudar ), pero intenta hacer algo de sistemas con esos lenguajes...

Ejemplo:

www.youtube.com/watch?v=kKZfGYvQ9kg

En este caso este software se ejecuta en paralelo y engarzado primero con la UEFI del sistema y luego con Windows 11 ( y su kernel NT ), ya no hablamos de un programa con su comienzo y final, monolitico,...

No quiero darmelas de nada pero... para sistemas, lo serio, C y ensamblador.
#47 En su diseño es más inseguro. Rust, por diseño no permite tener punteros a NULL, tampoco permite tener multiples referencias mutables a la misma posición de memoria.

Puedes hacerlo con C++? Por supuesto, puedes usar uno de los últimos estandar, creo que desde C++11 ya tienes smart pointers, por ejemplo. Pero dependes de que el programador con el que trabajas tenga una buena forma de trabajar. No todo depende de que tú seas bueno, depende de que el equipo sea consistente con la seguridad.…   » ver todo el comentario
#19 Está ZIG. Quizás demasiado nuevo. Te ofrece casi lo mismo que RUST pero sin la protección de memoria, lo que da mucha más libertad para hacerlo como quieras.

Tiene un fuerte enfoque en no tener cosas ocultas, para que sea fácil saber qué significa lo que lees. Eso le quita alguna funcionalidad.
#10 Es que Rust no es orientado a objetos. No tiene sentido compararlo con C++.

La comparación es con C
#21 ¿Y qué que no sea orientado a objetos? Rust es el sustituto de C++, efectivamente. El sustituto de C es Go.
#24 Como que "y qué"???

Sabes lo que aporta la orientación a objetos a la hora de desarrollar ???

Rust podría sustituir en todo caso a C. Jamás a C++.

Y realmente los leak de memoria se deben a las prisas o incompetencia de los programadores. Querer arreglar eso vía lenguaje de programación no me parece buena idea.
#27 Rust podría sustituir en todo caso a C. Jamás a C++

:palm:

los leak de memoria se deben a las prisas o incompetencia de los programadores. Querer arreglar eso vía lenguaje de programación no me parece buena idea.

:palm: :palm:
#30 Buenos argumentos....

Se nota que eres un gran programador..... que jamás ha escrito una línea en condiciones.


Explicame que es eso de "un lenguaje inseguro".... si eres capaz....
#37 tienes 10 años?
#52 No mejoran tus argumentos.... prueba otra vez.

Si no estás de acuerdo con lo que he afirmado será por algo más que por :palm: , digo yo...

Tu si que no debes tener ni 10 años...
#37 No había leído éste comentario antes.

Buenos argumentos.

Buenos son los que tú das: "Rust no puede sustituir a C++, sólo a C", "Python es una filfa de lenguaje", "los leaks de memoria en C y C++ es porque los programadores son incompetentes".

Todo porque lo dices tú. Qué sabrán los demás.

Se nota que eres un gran programador..... que jamás ha escrito una línea en condiciones.

Ya veo el tipo de programador que eres tú. Sin comentarios.
#27 Me estoy leyendo la discusión que lleváis, y quería entrar en éste comentario que no me ha gustado cómo te han contestado en #30:
Rust podría sustituir en todo caso a C. Jamás a C++
Realmente aunque Rust no sea OOP es tan capaz o más para desarrollar lo mismo que un programa hecho en C++, y de estructurarlo de manera muy similar. Evidentemente cada lenguaje tiene que tener la implementación hecha a su manera, no puedes copiar la estructura de un programa hecho en Javascript y…   » ver todo el comentario
#27 La programación orientada a objetos es solo un paradigma de programación mas, de entre tantos otros. Los lenguajes funcionales, por ejemplo, no suelen usar la programación orientada a objetos y son excelentes a la hora de desarrollar software. De hecho, hoy dia la programación orientada a objetos se considera algo desfasada y no recomendable para según que cosas. Quiero decir que Rust puede perfectamente sustituir a C++ sin problemas aunque no soporte ese paradigma de programación.
#74 La programación orientada a objetos es solo un paradigma de programación mas
Claro. Uno que ofrece grandes ventajas en muchos ámbitos. Por eso es la más usada.

. Los lenguajes funcionales, por ejemplo, no suelen usar la programación orientada a objetos
Casi todos los lenguajes oop tienen características que permiten cierto grado de programación funcional como las lambda


De hecho, hoy dia la programación orientada a objetos se considera algo desfasada

????
Quién la…   » ver todo el comentario
#82 >ierto grado de programación funcional como las lambda

Los lambda de Python comprados con CL o Scheme son un chiste.
#90 Es que ni Python, ni C++ ni Java pretenden ser Scheme.

Por eso son usados en muchos ámbitos y Scheme no.
#94 Scheme en GUIX en Inria FR como lenguaje tanto de la distro como de los programas para configurarla. Common Lisp se usa en sitios donde te pagan en un mes lo que en 12 en España. Son altamente especializados, y por desgracia con Allegro CL o LispWorks, pero todo dios usa SBCL para prototipos donde tiene un alto rendimiento pese a ser libre y no tener tanto apoyo comercial.
#96 Buena mezcla de paradigmas. Bien traído lo de Lisp.

Me gustaría verte desarrollar un programa de gestión con eso...

Los paradigmas tienen ámbitos de aplicación. Hay paradigmas más generales y paradigmas más específicos
#94 www.grammarly.com/blog/engineering/running-lisp-in-production/

Y tengo mas articulos por ahi. Son entornos poco de juguete, donde se exige una correctitud bestial y cosas que tardas un mes en CL tardas en C++ meses o si no anyos. De Python olvidate.
#99 Joder, Lisp.....

Ahora programa la gestión de un hotel con eso.... :palm:

Los paradigmas tienen ámbitos de aplicación. Y los hay que se adaptan más a distintos ámbitos y los que se adaptan menos.
#90 La referencia siempre es Haskell
#82 La programacion funcional esta cada vez mas implantada, de hecho cada vez mas lenguajes implementan paradigmas de la programacion funcional en detrimento de la programacion orientada a objetos. El hecho de los tipos inmutables es un ejemplo. Mi lenguaje de programacion favorito y en el que desarrollo gran parte de mi codigo es Elixir que no tiene nada de objetos a la vista y es una pura delicia programar en él. Que la gente no use Haskell te lo puedo comprar si te refieres a eso. La…   » ver todo el comentario
#93 cada vez mas lenguajes implementan paradigmas de la programacion funcional en detrimento de la programacion orientada a objetos.
Cada vez más lenguajes implementan paradigmas funcionales (es lo que he dicho antes), pero en detrimento de nada.
Ningún lenguaje ha perdido ninguna característica OOP por ello.

A qué te refieres con "tipos inmutables"??


La programacion orientada a objetos hoy dia se considera casi obsoleta

Quién lo considera obsoleto y por qué ??
Diseña un programa de gestión sin OOP y me cuentas.

C se considera obsoleto
Quién lo considera obsoleto y basándose en qué??
#93 La programacion orientada a objetos hoy dia se considera casi obsoleta
Sólo puedes estar trolleando con semejante afirmación. No hay ninguna otra opción.
#27 Puedes desarrollar lo de que no podría sustituir a C++ porque no es orientado a objetos?

Porque en Rust puedes montar structs (como en C, si), e implementarlos con partes publicas y privadas, creando Traits para permitir a otros implementar ciertas funcionalidades, que bien podrían valer para hacer gran parte de lo que se hace en C++.

Sobre que los leak son por prisas o incompetencia. Si, claro, y eso es parte del mundo en el que vivimos, la gente la caga. Programando, conduciendo, pilotando, diagnosticando. Y si hay tecnología que puede reducir errores programando para tener menos bugs, conduciendo para tener menos muertos, o diagnosticando para pillar enfermedades antes, lo lógico es que se usen dichas herramientas.
#10 C++ es infumable.
No. C++ no es infumable. Otra cosa es la curva de aprendizaje si no vienes de C.
C++ es "el lenguaje".

El único problema aquí es que Rust es un lenguaje muy joven
El no ser orientado a objetos es un handicap enorme para convertirse en un lenguaje de desarrollo general. Compararlo con C++, Java o Python es un error. La comparación debe hacerse exclusivamente con C.

se acabó C++ porque quién va a querer hacer proyectos desde cero con un

…   » ver todo el comentario
#31 Por ahi ya lo he dicho. Es de novatos creer que los programadores son seres de luz que nunca se equivocan y que con el suficiente esfuerzo el codigo en c/c++ sera exquisito. Eso es una chorrada de principiante. Primero, muchas veces cometes errores de los que no te das cuenta,muchas veces el lenguaje no tiene las herramientas para asegurarte que lo que has escrito esta bien. Segundo, la gente es gente, y cualquiera que haya programado mas de 100 lineas de codigo sabe que los proyectos…   » ver todo el comentario
#79 Por eso el hecho de que la seguridad este incrustada en el propio lenguaje es esencial para escribir mejor codigo
Disiento.
Y la experiencia demuestra que entre "más seguro" es el lenguaje, más mierda es el código.

Y peor aún, se pierden los buenos hábitos y se cogen vicios muy difícilmente corregibles.

El desplazar la seguridad al código puede hacer ahorrar dinero a la empresa, pero no lleva a código de más calidad. Todo lo contrario

Se perfectamente en qué consisten los fallos de gestión de memoria en C. Estoy cansado de pelearme con ellos.

Por eso es muy muy muy raro que los cometa. Pongo exquisito cuidado
#89 Cada uno tiene su opinion, pero mi experiencia me dice que un programador a las 12 de la noche con ojeras y fuego en los ojos depues de un par de dias de curro intenso no estara para exquisiteces. Yo prefiero que la herramienta por construccion no me deje hacer chorradas, pero cada cual tiene su librillo...
#98 Yo prefiero dormir.

El lenguaje no evitará que hagas chorradas en esas condiciones.

Eso sí, los errores con los punteros son infernales. Pocas bromas
#10 En veinte años igual usamos GNU/Hurd con hordas de demonios sobre un microkernel importando poco Rust ya que podras reiniciar los drivers de casi todo al vuelo y podras como usuario sin privilegios desde montar discos a hacer virguerias que hoy solo se logran con permisos de grupos.
#54 ya que podras reiniciar los drivers de casi todo al vuelo y podras como usuario sin privilegios desde montar discos a hacer virguerias que hoy solo se logran con permisos de grupos.

¿?
Si se requieren permisos para algo es por una razón. No "por accidente". La necesidad de permisos para cualquier acción sobre el sistema no tiene nada que ver con el lenguaje con que esté implementado ese sistema ni con la arquitectura de su kernel.
#63 Hurd es diferente. No necesita permisos de root para montar discos, ni para usar cosas analogas a FUSE en Linux por ejemplo para montar directorios remotos.
Usa espacios de nombre, cosa que tambien puedes ver en plan9. Nada que ver con un Unix clasico.
#64 Hurd es diferente.
En este aspecto no. No es diferente. Ni debe serlo.

No necesita permisos de root para montar discos,
Ni yo con GNU/Linux. En todo caso es una decisión de diseño del SO (una mala. debe poder restringirse el montaje)

ni para usar cosas analogas a FUSE
¿ Como cual ?
FUSE simplemente es un sistema de montaje a nivel de usuario.

para montar directorios remotos
Eso no tiene nada que ver con HURD. Tiene que ver con samba, nfs, ssh, iscsi.....

Usa espacios de nombre
Vaya, como GNU/Linux. O como crees que funciona LXC o Docker ?


Creo que no entiendes mucho de lo que hablas....
#67 Entiendo de sobra, el que no entiende eres tu. Los namespaces en Linux son un parche; en 9front y Hurd son intrinsecos. En Hurd puedes montar discos sin permisos sin parches cutre como FUSE o hacer virguerias con los namespaces puestos ad-hoc.

Si es diferente, y no has tocado una distro hurd un tu vida. Prueba a montar un FTP sin fuse y sin root en GNU o BSD y me comentas. Con hurd se puede con ftpfs ya que el propio diseño basado en servicios hace que los usuarios puedan tener sus propios directorios de montaje sin joder al resto.
#69 No uso FTP desde hace eones. Y no veo el problema de usar fuse.

Por cierto eso de ftpfs suena a sshfs
#78 sshfs que depende de FUSE y mas permisos.
#85 Que "más permisos" ?

Yo lo uso y ya.
#67 www.gnu.org/software/hurd/hurd/settrans.html
www.gnu.org/software/hurd/hurd/translator.html
Igualito que Linux o cualquier BSD con perms basados ya sea en grupos o en abortos como polkit, si, no veas.
#71 Quien ha dicho que "sea igual".
En Linux yo.puedo montar lo que me de la gana siendo un simple usuario, o no. Según decida.

Espero que con Hurd sea igual... (Y lo será)
#75 Simple usuario; no. Usuario perteneciendo a un grupo y antes con parches cutres como SUID. En Hurd no es como accedes a tus recursos. Por no haber no hay ni simlinks, si no operaciones con bind que permiten muchisimo mas que con un clonico GNU o BSD.
#81 Si. Simple usuario y sin suid ni siquiera fuse.

El tema de gestión de permisos es una simple cuestión de diseño del sistema. Nada más.

No tiene que ver con qué sea microkernel o no
#84 Usa FUSE: wiki.archlinux.org/title/SSHFS

Ahora comparalo con 9p en 9front y demas y tu cifrado al gusto encima.

> No tiene que ver con qué sea microkernel o no

En Hurd los demonios importan.
#87 Y qué que use FUSE ?

Además no entiendo el cambio de juego....

No estamos debatiendo sobre microkernel y kernels monolíticos.

Cuando Hurd sea verdaderamente funcional podremos hacer comparaciones fundamentadas
#10 C++, si pasas de cosas muy viejas y te fuerzas incluso a un subset del lenguaje ( ojo, esto incluye cosas normales como sobrecarga de operadores, excepciones,... ) es mas sencillo que Rust y otros. Y por cierto, Rust tiene mucho codigo de libreria, pero en la practica, no engañan a nadie, eso NO SON LIBRERIAS, hay que recompilar fuente siempre. Y claro, diran que ya estan en ello ( persiguiendo un "ABI" interno que tenga todos los metadatos necesarios para que se pueda linkar en…   » ver todo el comentario
#10 El día que alguien desarrolle para Rust un motor de videojuegos, se acabó C++
Ya hay motores de videojuegos desarrollados en Rust, pero creo que se está perdiendo el foco en la discusión en general respecto al lenguaje a utilizar para hacer videojuegos y el lenguaje del motor.

Godot está hecho en C/C++ pero puedes programar para él en muchos lenguajes, entre ellos Rust. El problema que no veo que nadie menciona es que para qué usar un lenguaje u otro.

A nivel de aficionado he…   » ver todo el comentario
Wipp express parecía el quitamanchas ideal para la ropa delicada. Esta familia acabó abandonándolo tras tres años centrado en él.
Lo del uso de imágenes generadas por IA de cosas tan básicas es ya por joder, seguro que era súper difícil y costoso encontrar una foto de una persona usando el ordenador.
#11 Xataka tiene como 40 portales temáticos, mucho de ellos centrados en tecnología, y lleva más de 20 años publicando a diario decenas de noticias ilustradas con "una persona usando un ordenador". La vedad es que tener a un ilustrador creando imágenes especificas para cada articulo con herramientas con IA, en vez de rebuscando novedades en bancos de imágenes tiene bastante sentido. Otra cosa es que a ti no te guste, por motivos político o éticos, que nadie use herramientas con IA y pienses que la gente los usa "por joder".
Nosotros usamos rust en el backend, pero entiendo perfectamente que no se use para videojuegos donde prima la eficiencia y flexibilidad sobre la seguridad.
#2 No he programado mucho en rust, pero ¿no se pordría solucionar lo que dice el artículo usando rust en unsafe mode para los prototipos?
comentarios cerrados

menéame