Hace 3 años | Por nomeves a lkml.org
Publicado hace 3 años por nomeves a lkml.org

Después del anuncio de Google para añadir compatibilidad parcial de Rust en Android, también ha llegado la noticia de que Rust llega al Kernel de Linux. Aun en una fase muy temprana en forma de abstracciones y portados.

Comentarios

D

#26
Es normal que sea así. Si quieres que el análisis estático del compilador pueda forzar determinadas restricciones en el código, el código debe de tener dicha información. El programador ha de anotarla.

friguron_

#32 Oh claro, nunca dije que no fuera normal, pero creo que debe iterarse esa anotación. De hecho leyendo el libro y artículos por ahi, medio hablan de que en el pasado era más completa y la simplificaron (la anotación) y que según cómo todaviá podrían iterar esto y simplificar ciertos aspectos en ciertas situaciones, que estaría por ver...

Pero el tema llaves, apostrofes y demás, en cuanto te despistas puede salir una ensalada ININTELIGIBLE de veras... No me creo que no
pudieran haber inventado una anotación algo más humana con una segunda cabecera de la función, ni idea, yo qué sé... Es como que le dejaron al programador hacer el diseño, y el tío salió con eso y estiraron ese chicle con esa sintaxis hasta más allá de donde hubiera sido necesario, y a lo mejor otro enfoque en fases más iniciales podría haber sido creado...

Más que nada, es que no es intuitivo de leer, para nada puedes deducir qué hace tal o cual código, te rompe bastante la cabeza, en 25 años de carrera, nunca me había pasado con ningún lenguaje, de no empezar a sentirte mínimamente productivo hasta que no te has roto la cabeza por horas... Llama la atención... Y la eterna sensación de que estás haciendo una cagada, y que si funciona es de chiripa, porque has estado peleando con el compilador y su "capricho" (necesario, vale, no es el tema) y no con tu propio código que quería hacer cierta cosa y de repente, me ha pasado que olvidé qué quería hacer yo, y estuve recargando mi código con sintaxis que a veces ni comprendo para hacer callar al compilador. Esta sensacion es malísima.

saqueador

#26 Es mucho mejor que el compilador no te ponga restricciones, te compile a la primera y después se vayan los punteros de fiesta.

friguron_

#41 Hombre, habrá un punto medio entre sintaxis "hablemos en inglés" y "RUST". Just this. Mi queja no es la anotación previa que necesita el compilador (es genial informar de estas mierditas en tiempo de compilación), sino lo incomprensible y nada intuitiva que es la misma.

Los momentos de frustración épica, donde yo sé lo que quiero hacer en mi cabeza, y no puedo plasmar mi idea decódigo, ni tampoco mi idea de anotación de manera intuitiva porque la sintaxis me supera, es horrible. Y cuando crees haberlo resuelto, se corrige el mensaje original que tenías y salta otro warning/error nuevo, y cuando tapas este nuevo con un apaño (que dudas que esté bien), aparece otro y así... Sensación de poner tiritas para conformar al compilador (intentando seguir sus indicaciones, ojo, nada de tiritas locas), pero igualmente, cuando llevas 2 o 3 tiritas sugeridas por el compilador, dudas de si lo has hecho bien, porque has escrito cosas que no comprendes (a nivel sintáctico)

De repente como newbie, el compilador te despista A SACO hacia sus mierdas (vale, sí necesarias) con mensajes que son 0 intuitivos muchas veces, y ni leyendo el libro ni la ayuda, consigues sacar lo que querías.
Yo muchas veces he refactorizado a saco mi idea (con éxito, ojo), cuando igual como la quería implementar originalmente ya estaba bien, pero la sintaxis adicional que me exigía el compilador no me lo dejó hacer de manera fácil (ya digo, por ser newbie).

Me da cierto alivio ver que para nada soy el único que siente que es muy áspero este lenguaje en este tema...
Y ojo yo he hecho AÑOS de desarrollo en C aspero para microcontroladores, sin ningun tipo de control de memoria, todo a mano por uno mismo, quicir, no es la primera vez que me enfrento a punteros, referencias y movidas complejas así... al contrario...

But still, es llamativo, simplemente sentirse así, con un feeilng diametralmente opuesto a Swift, que en 2 tardes literalmente te sientes INCREIBLEMENTE PRODUCTIVO (es un ejemplo).
A Rust seguiré dándole vueltas hasta que tal vez me salga más intuitivo... Pero con el poco tiempo libre de la vida moderna, tengo poca fe, y me da rabia que así sea...

Itilvte

#47 Rust nos muestra el espejo de nuestras limitaciones, mientra nos tienta con la promesa de un poder absoluto, pone a caldo nuestro ego cuando no somos capaces de comprender extraños jeroglíficos que nos escupe a la cara el compilador...

de todas formas si pretendes hacer cosas complicadas con muchas referencias compartidas, rust no te lo pone nada fácil, es mejor pasar a otras abstracciones, como punteros inteligentes, arenas, sistemas de actores... que te den más libertad de interconexión de elementos sin que los tiempos de vida ni las garantías de posesión te pongan la zancadilla cada dos por tres. Cosas como listas doblemente enlazadas o grafos, no te va a dejar si no...

Hay un tutorial muy chulo que implementa una lista enlazada una y otra vez de diferentes maneras en rust, desde las que no funcionan, y aprendes por qué, hasta la mejor que se puede hacer. https://rust-unofficial.github.io/too-many-lists/

por otro lado, te recomiendo mucho el libro "programming rust" de o'reilly, (la segunda edición saldrá en junio creo), es una joya didáctica y complementa muy bien al "the book"

D

Sólo lo utilizarán para módulos.

Algún día admitirán C++.

Con su pan se lo coman.

x

#5 Jamas se usara c++, ya se probo y no aporto nada.

D

#10
Nunca se ha probado
PD: te has comido todas las tildes.

x
D

#25
¿Dónde dice ahí que se probó C++ en el kernel?
Tampoco te has leído el correo, ¿verdad?
Sustituye «C++» por «Rust» y la respuesta cuadra igual.

Un correo de esos que ya no escribe.

D

#29
#30
Tú qué, ¿te lo pasas bien votando negativo mis comentarios? Piérdete.

x

#29 Meneame no es el foro adecuado.
Expon en la lista del kernel ( KERNEL ML ), es abierta, tus opiniones sobre usar c++ en linux, ...

R

#29 Extraído del enlace del anterior usuario:

In fact, in Linux we did try C++ once already, back in 1992.
It sucks. Trust me - writing kernel code in C++ is a BLOODY STUPID IDEA.


No sé dónde viene su odio por C++ (de hecho me gusta, al igual que Rust), pero sí que lo dijo

llorencs

#25 De este link. En el correo Linus dice algo curioso:

- you can write object-oriented code (useful for filesystems etc) in C,
without the crap that is C++.

¿Es realmente posible escribir código orientado a objetos en un lenguaje que no lo está?

#30 Es posible en cualquier lenguaje que permita el uso de punteros,como C o ASM.

c

#30 Por supuesto.
La OOP es una técnica, no un lenguaje.

llorencs

#54 Pero por ejemplo los lenguajes orientados a objetos, tienen esa estructura:

class A
}
Como se haría esa implementación sin eso. No es un coñazo tenerlo que "redefinir" desde 0? En base a otro comentario, lo harías a través de punteros.

No es mejor ir por procedimental si no lo tienes implementado en tu lenguaje?

Pero ahora que lo pienso, cogiendo Python, que es el lenguaje que conozco mejor. La implementación de ese class de arriba lo haría mediante diccionarios. Ya que los datos estan guardando en un atributo "mágico" llamado __dict__.

casiguapo

#55 por ejemplo con una estructura, donde se podrían definir los métodos como punteros a funciones

D

#25 Cat-V? LOS DE PLAN9 lol?

Mira que me descojono.

Ahí odian C++ y Rust. Y cualquier mierda que intente vender la moto desde los 90.

Shotokax

#3 es verdad, por lo de poner los tipos después de la variable justo al revés que en C. Yo también lo pensé. Pero luego lo de los símbolos "" en las cabeceras de las funciones lo veo enrevesado por ejemplo.

Shotokax

#9 vaya tontería. Ni que para ser amigable tuviera que parecerse a JavaScript o a un lenguaje interpretado necesariamente.

La sintaxis es el tema de paréntesis, declaraciones, signos de puntuación, etc.; no los errores.

https://en.wikipedia.org/wiki/Syntax_(programming_languages)

#45 gracias por la explicación. No he programado nunca a ese nivel. En mi opinión tanta "verbosidad" sobrecarga el código en cuanto a legibilidad, pero si hace la compilación más eficiente como dices a lo mejor merece la pena.

Penrose

Ojalá nim se popularice ¿le habéis echado un ojo?

ed25519

Tiene una sintaxis un poco parecida a ruby si no recuerdo mal la verdad, intutitva no es mucho

D

#1 #2 Yo diría que se parece a Pascal. Al menos la parte de definición de funciones.

m

#2: Su nombre significa "óxido", no te digo más.

thorpedo

#2 Ruby es un lenguaje bastante comprensible y si me apuras bonito

Itilvte

#60 Usa C o incluso ensamblador para un proyecto muy complejo si es lo que te gusta, nadie dice que no se pueda. Pero Rust ofrece herramientas y abstracciones modernas para hacer la gestión de la complejidad mucho más sencilla y con menos riesgo de cometer errores. Y eso no es ninguna bobada.

patandelsiglo21.5

Rust esta genial si se sabe lo que haces, de otra forma estarás sufriendo como sufre uno en otros lenguajes.

Itilvte

#11 Todos los rustaceos tienen que pasar el rito de leerse el libro de rust primero: https://doc.rust-lang.org/book/ , para no hacerse la picha un lío luego

l

#11 #28 Hay un sub de rust muy abandonado, no se si lo connociais?
rustrust

f

#28 Para los lectores ocasionales recomiendo leerse "Understanding Ownership", que explica de qué va el rollo.

D

#33
Más complejo y más lento es Rust.

Sustituye «C++» por «Rust» en los siguientes enlaces y los argumentos te valen igual, salvo del de probar C++ en 1992 con un kernel en pañales y un lenguaje de 1989 que no era ni estándar desarrollado y usado por mucha menos gente con muchos menos recursos:
http://vger.kernel.org/lkml/#s15-3
http://harmful.cat-v.org/software/c++/linus

Recordar que Rust es sólo para módulos. Ni se plantean utilizarlo en el núcleo.

saqueador

#39 De tu enlace:

C++ is a horrible language. It's made more horrible by the fact that a lot
of substandard programmers use it, to the point where it's much much
easier to generate total and utter crap with it.

D

#43
¡Anda! ¡igual que con Rust!

Shotokax

Por lo poco que he mirado de este lenguaje, la sintaxis no parece muy amigable para ser tan moderno.

e

#9 no lo digas muy alto, que tal vez a alguien se le ocurre hacerlo

F

#9 Qué tendrá que ver una cosa con la otra...

Find

#1 No es que no sea amigable, es que escoge muy bien a sus amigos

llorencs

Yo no entiendo que ventajas trae el funcionamiento funcional. Lo más funcional que he visto es lo poco que he hecho en JavaScript y la verdad que mi forma de pensar me orienta más hacia objetos y clases. Mi mente estructura mejor las cosas bajo clases/objetos que en el sistema funcional. ¿Qué ventajas tiene usar "lambdas" o "arrows" en JavaScript respecto a funciones normales? #_15

Itilvte

#18 En javascript no sé, pero en Rust se llaman Closures, y se diferencian de las funciones en que, por ejemplo pueden capturar variables externas de su contexto, en el que han sido definidas, y puedes controlar si se hacen dueñas de las variables que capturan, o sólo las referencian (in)mutablemente. Y según hagan una cosa u otra tienen un Trait asociado diferente, y es usado para aceptarlas como argumentos de funciones... y su sintaxis además en general es mucho más breve... `x| x+1` son anónimas y se pueden guardar en una variable.

llorencs

#34 En Python que es lo que uso principalmente también existen las closures. Pero nunca he entendido la utilidad. O no me he encontrado el caso en que usando cosas de esas me resolviera problemas. En Python de funciones anónimas solo se pueden usar expresiones, pero tiene el resto.

D

#37 Los decoradores se implementa usando closures y también es útil para aplicar una función de forma parcial y pasar la función resultante por ejemplo como argumento de otra función.

Itilvte

#37 Te entiendo, me pasa un poco igual, mi cerebro está más acostumbrado a pensar en procedural u objetos que funcional, pero Rust te pone a huevo usar esos 3 modos (y async, pero eso es otro cantar), y me está convenciendo poco a poco, para ciertas cosas es muy cómodo.

Los iteradores en Rust por ejemplo están muy bien integrados en el lenguaje y los puedes aplicar a las colecciones de la librería estandar, a las cadenas de texto... Son un paradigma funcional donde puedes encadenar funciones como si fuera un builder pattern, pero construyendo una salchicha de funciones, una cadena de montaje que se te compila a un código igual o incluso un pelín más rápido del que puedes haber hecho a mano, sin el overhead de tener que ir contando bucles en los elementos de una colección, y con la ventaja de poder se aplicado a colecciones en las que no puedes indexar... Y breves y concisos.

D

#20
C++ es un lenguaje multiparadigma. Las funciones como objeto.
Los functores deben ser tecnología alienígena.
En fin, ¿qué te crees que son en realidad los lenguajes funcionales y todas sus bonitas abstracciones sustrae-recursos?

saqueador

#21 Rust también es multiparadigma. No es un lenguaje funcional.

D

#23
Ya lo dijiste en #12.

llorencs

#_29 Lo dice en el segundo correo, en el 92.

llorencs

Me has quitado el ignore sin sentido? #_35

Si no te puedo contestar, te votaré negativo.

D

#38
Pues continúa votándome negativo y que te baje el karma. Los votos negativos no están para eso.

thorpedo

pues si te miras el código en Go..

saqueador

Muy buena noticia para Rust y para la evolución de los lenguajes. Sin duda el paradigma de los lenguajes mixtos imperativo/funcionales tipo Rust, Scala, F#, etc. se está consolidando.

D

#12
C++ también tiene lambdas y esas polladas.

saqueador

#15 C++ es el lenguaje más complicado que existe y por mucha diferencia. Por algo no lo han incluido.

D

#19
Las razones esgrimidas para no incluirlo no tienen que ver con ser el lenguaje más complicado, algo que tampoco es cierto. Por otra parte la implementación de un lenguaje es cosa del compilador.

saqueador

#22 Que sea menos compatible y más lento al compilar son consecuencias directas de su complejidad, emho. Y que a Linus no le mole, tambien.

trivi

#15 Que yo sepa en C++ las funciones siguen sin ser ciudadanos de primera clase.
Programación funcional no son solo las lambdas.

D

El hecho de adoptar Rust es por su relación entre seguridad y eficiencia, nada que ver con complejidad de uso ni otras bobadas que se han dicho por aquí.

Itilvte

#27 Pues para mí sí que tiene mucho que ver la complejidad de uso, ya que precisamente está muy bien pensado para poder soportar proyectos de una tremenda complejidad. Su sistema de módulos es maravilloso, cargo es sencillamente el mejor gestor de paquetes que podría desear y sus garantías de seguridad lo hacen más sólido y confiable.

D

#50 sí porque con C no se puede...

f

En Microsoft están introduciendo Rust para todo. Ahora mismo están rehaciendo los APIs de Windows en Rust, para ser llamados desde Rust.

analphabet

Bueno, a esto todavía le queda un largo camino si es que se llega a incluir en la rama oficial. El correo del meneo es el primero en un hilo donde habla gente importante del kernel, entre ellos Linus, poniendo pegas bastante bien razonadas.

f

Parece más complicada porque lo es. Se necesita decir más cosas.