Publicado hace 8 años por --478222-- a developers.slashdot.org

MenuetOS , un sistema operativo basado en x86 GUI escrito completamente en lenguaje ensamblador que es super rápido y puede caber en un disquete, ha alcanzado la versión 1.0 - después de casi una década y media de desarrollo. (Y sí, puede ejecutar el Doom). Más info: http://www.menuetos.net/

Comentarios

Xtampa2

#21 La versión 32-bits es GPL, la de 64 es la que tiene esa licencia que pones.

Kirchhoff

#23 La diferencia radica en que yo el programar lo veo como una herramienta, no como un fin. Allá cada cual.

conversador

#14 Debe de ser porque esta en contacto con los extraterrestres como El Niño de E.T.

D

Licencia:

1) Free for personal and educational use.
2) Contact menuetos.net for commercial use.
3) Redistribution, reverse engineering, disassembly or decompilation
prohibited without permission from the copyright holders.

Hasta donde yo sé, la tercera clausula es al menos parcialmente inválida en la UE, no pueden prohibirlo si se hace para mejorar la compatibilidad.

Mejor buscar uno con una licencia más favorable. En el 99'99% de los casos, seguro que un línux lo reemplaza fácilmente.

Kirchhoff

#3 Pues no sé yo que decirte. Yo mas bien lo que veo es que son personas que desaprovechan su talento, del cual no dudo, en realizar algo que más allá de para salir en un reportaje en algún medio especializado, va a valer para poco.

Podrían dedicarse, por ejemplo, usando los métodos actuales de programación que facilitan el trabajo, a desarrollar un software que sea capaz de localizar células intestinales cancerígenas, mediante un TAC. Entonces sí diría eso de "son los putos amos". Pero esto, lamentablemente, sólo sirve para decir "nos dijeron que no seríamos capaces y lo hemos hecho". A parte de eso, poca utilidad más tiene.

Y ahora freidme a negativos si queréis.

D

#2 Lo más probable es que el frigorífico sea x64

D

#3 Estos son programadores de verdad, el resto son putos usuarios de interfaces gráficos

héroes de nuestro tiempo.

conversador

Este "niño prodigio" creo que esta detrás del desarrollo de este proyecto

D

La página web es tan cutre que también debe haber sido escrita en ensamblador.

ur_quan_master

#13 los cojones. Me avalan 10 años manteniendo un framework para windows y unix escrito en c/c++.
Y ya que estamos, un offtopic para desahogarme: las boost son la montaña mas grande de mierda que se ha programado jamás.

m

¡¡Tiembla Windows 10!!
Bromas aparte hace tiempo que tengo curiosidad por probarlo, hay que tomarse el trabajo

D

#11 no hombre no... dónde vas a parar. Cuánto mejor es programar en ensamblador con el conjunto de instrucciones de hace 15 años, y crear un sistema operativo que tira 100% de CPU. Los 64 bits y las GPU son cosa de maricones.

Ormuzd

No es que quepa en un diskette de 1,45 Mb es que el S.O. ocupa solo 54.000 bytes. Podiras meter 30 veces este S.O. en un diskette.

Me he liado con los archivos para hacer pasarlo a un CD

Voy a probar a ver si se puede hacer "booteable" desde un USB

D

#39 Han diseñado un sistema operativo, no un pantallazo de la agencia tributaria...

D

Problema: solo para x86: CISC. Imposible portarlo sin empezar de cero.
Sería más intersante para RISC (ARM), para micros muy pequeños de muy bajo consumo que requieran un S.O. eficiente que les saque rendimiento a pocos Mhz.

D

#42 BIll Gates no dijo esa frase de la que está pensando. Lo niega diciendo que dijo muchas estupideces pero no esa y no existe ninguna fuente que lo demuestre

Jakeukalane

#12 si es que no entendía su letra desde el primer momento...

D

#52 hombre, es que no es mantenible lol además, dominar el ensamblador de una arquitectura tampoco me parece algo sobrehumano. Y bueno, que también hay gente cuyo trabajo se basa en comprender esas pequeñas particularidades. Pero vaya, que estoy de acuerdo contigo en que en general, el coste de mantener un programa escrito íntegramente en ensamblador es demasiado.

De hecho, esto me recuerda a lo que le pasó a OS/360, tiene su gracia: http://www.cosy.sbg.ac.at/~clausen/PVSE2006/printerfriendly.asp.htm

D

#12 hostia palmando asignaturas en 4º y este ha llegado a ser registrador de la propiedad....lo dudo

peperojoizquierdo

#47 Yo lo que he dicho es que #11 tiene toda la razón, y por tanto, la mayoría de las veces el código emitido por el compilador es mejor que el que pueda escribir un humano. Los procesadores actuales son máquinas muy complejas, con un montón de detalles que determinan cómo acaba ejecutándose el código y que, aunque la ejecución mantiene la semántica de tu programa, el orden en que se pueden acabar ejecutando tus instrucciones puede ser muy distinto al que tu piensas. Si eres capaz de estudiarte todos estos detalles y como interaccionan entre sí (para un procesador concreto, ya que para otro será una historia distinta), y estás dispuesto a pasar media vida optimizando tus instrucciones para un programa muy pequeño (para uno grande ya no sería viable para un humano), puede que acabes dando con un código mejor, pero vamos, hay que tener ganas lol

peperojoizquierdo

#100 Un movil de 250 pavos es capaz de ejecutar Android de modo fluido hoy día. Ni hablemos del rendimiento de uno de precio parecido al iPhone. No hemos tenido que esperar hasta 2060 . La apuesta de Android fue poder ejecutarse en multitud de arquitecturas, y eso lo consiguieron usando un a máquina virtual. Los de Google no tienen un pelo de tontos.

D

#38 eso no siempre es así, a veces tienes que darles pistas sobre cuál es el resultado más probable de una comparación, hacer prefetch de variables, etcétera. Y aparte de eso, cuando se pretende un código ultraminimalista, el compilador a veces no te puede ayudar. Sigue habiendo formas tremendamente retorcidas de optimizar un algoritmo en ensamblador que en un compilador no se pueden prever.

Hay por ahí gente que se dedica sólo a esto, vi por ahí alguna que otra demo impresionante en ensamblador de 16 bits que animaba de forma bastante fluida una celosía tridimensional con perspectiva, iluminación y sombreado. Y el código era ridículamente pequeño, cabía en un folio, sin hacer trampas.

peperojoizquierdo

#87 Se puede programar perfectamente y con calidad usando lenguajes de mayor nivel. Además, es más fácil y rápido.

Simún

Lo voy a instalar en mi frigorífico

D

#3 Vaya cantidad de tonterías acabas de decir. Y ahí lo tienes, con tus positivos. Te corregiría frase por frase, pero es mucho tiempo, estoy cansado, y no vale la pena que gaste mis energías y sabiduría en un desconocido de internet.

Kirchhoff

#27 No lo olvido. Mira mi avatar.

borteixo

#8 oye, que está escrita en C. Igual valía la pena hacerla en ASM.

anonimo234

#3 Lo que es de gilipollas es despreciar los avances existentes por querer ser más "hardcore". Con un lenguaje de alto nivel haces en una hora lo que tardarias un mes en ensamblador. Si Google hubiera contratado "programadores reales" para hacer Android en ensamblador, a lo mejor en 2030 tendríamos la versión 1.0 (pero iría más rápido, eso si).

D

#11 C es portable.

D

Muy bien, ahora necesito un lector se diskettes para experimentarlo en todo su esplendor.

editado:
diskettera, ya había olvidado el nombre del ingenio.

D

#68 No hace falta irse a extremos ridículos. Con un tipo de letra diferente, mayor tamaño y separación entre líneas ya ganaban mucho.

#69 Es como coger granos de arena de una playa uno a uno o con la mano. La segunda es más rápida pero se te pueden colar otras cosas, mientras que la primera es más lenta pero solo obtienes los granos. Eficiencia del código (siempre que se haga bien) frente a rapidez de desarrollo

d

Si ya existen problemas de seguridad en sistemas operativos programados casi enteramente en C o incluso C++, no me quiero ni imaginar la cantidad de bugs que se podrán explotar en un sistema operativo escrito completamente en ensamblador!

Ensamblador hoy día es una locura y poco productivo. No existe una gran ventaja de rendimiento frente a C actualmente.

PauMarí

#69 la manera más eficiente para decir que tienes hambre sería gruñir mientras te tocases la barriga pero usamos palabras que constituyen idiomas para evitar que en el pueblo de al lado no entiendan que tienes un cólico de narices, aquí ya pasamos de la eficacia a la potabilidad, la capa intermedia del lenguaje te asegura que los dos pueblos entiendan lo mismo.
Luego es cuando te vas al país de al lado y no entienden tu idioma, aquí ya es donde entra el java, que ya es otra capa encima del idioma para que los idiomas se entiendan entre ellos.
Resumiendo, de un gruñido cargado de información que debería bastar para que te den de comer pasas a una cantidad ingente de esfuerzos, recursos y conocimientos acumulados para consegui lo mismo, comer.

c0re

#12 #14 Igual hasta llega a presidente...

D

hay q ser masoquista lol

D

#12 Aprobó religión a mi me suspendieron en ella. lol

D

#51 Sí sí, mucho reírnos de los 64bits, pero luego resulta que IPv6 usa direcciones de 128-bit y no son tan excesivos.

Por cierto, según la Wikipedia:
"Se considera que, sin contar con la materia oscura, hay alrededor de 1072 hasta 1087 átomos en el universo"

1087 = 2289... o sea que todavía falta un trecho (una diferencia de 50 órdenes de magnitud, que se dice pronto).

i

#5 Pues cuando he visto la captura de Quake, he pensado que sí o sí tiene que correr Doom. Buscando ahora algún aparato antiguo donde instalar este S.O.

D

#21 de acuerdo respecto a lo de la licencia. De todos modos, yo creo que lo interesante aquí son los casos de uso que otros sistemas operativos no cubren.

peperojoizquierdo

#94 En ese caso si saben programar bien en ensamblador seguramente tendrá menos bugs que si lo hacen en C. Falso, en caso de que sepan programar bien en C. Además, los lenguajes de alto nivel tienen una semántica bien definida que te permite razonar sobre la corrección de tu programa, sin saber cual es exactamente el código de bajo nivel generado.

Sobre la asignación de registros, el una fase fundamental en cualquier buen compilador.

D

#17 la única parte de Linux en ensamblador es la que está bajo los directorios arch/, y se corresponde con el código específico de cada máquina. El grueso del sistema, lo que es la algoritmia gorda de Linux, está en C. No se puede comparar.

K

#53 Lenguaje cercano al lenguaje máquina (ensamblador) != código optimizado != programar de forma optimizada.

p

#101 Te pongo un ejemplo claro:

"Xvid is an open source MPEG-4 video codec, written in C with assembler optmizations for quality and speed"

Si se pudiera optimizar tanto en C como en ensamblador, no haría falta que los desarrolladores de Xvid añadieran código ensamblador al suyo en C ¿No es así?

Parece como si a alguno le partiera el alma que le digan que C no es el lenguaje más optimo, cosa normal si se hizo para facilitar y agilizar el desarrollo de programas de forma que se ha podido avanzar bastante gracias a la abstracción, pero la optimización es un grado de prioridad menor que la abstracción del código en este caso.

Mr.Worthington

Creo recordar que había un spin-off ruso de ese SO de su época libre que se llamaba Kolibri OS y que tenía algunas aplicaciones más que este.

D

#52 ¿Y quien crea los compiladores y les dice como compilar el código?

Vermel

Dejaré un vídeo para que lo veáis en marcha (no es de la versión 1.0, pero se acerca):

apetor

Uhmmm, a ver como digo todo lo que me viene a la cabeza y quede medio bien...

Quizá por falta de conocimientos o por repetir mitos y demás pero estamos confundiendo y mezclando cosas, y hay mitos hacia los dos lados de la discusión.

------------------------

Ensamblador, C, otros, lenguaje vs librería, código generado...:
+ Las rutinas escritas en ensamblador son, aun casi sin querer ir a hacer buen código, muy pequeñas, no hay instrucciones superfluas y hacen justo lo que deben, ni más ni menos.

+ Los lenguajes de alto nivel, aun poniendo el compilador en optimize for size ( a menudo, indirectamente mejor que optimizar para velocidad, salvo en algoritmos con mucho bucle, donde el desenrollo de bucles si ayuda ) desensamblas el código y a menudo te tiras las manos a la cabeza con la de instrucciones o construcciones superfluas que te encuentras ( y hablo de compiladores de MS, GCC,... quizá los de intel no pequen tanto, pero hace mucho que no veo código de eso ).

Por ejemplo, la gestión de marcos de pila para funciones, con un buen planning de registros y demás puedes evitarlo por completo en ensamblador, en x86-64 esto ha mejorado gracias a tener 16 registros normales en vez de 8 como en 32 bit, y el ABI ( el conjunto de convenciones de llamada, preservar registros, etc. ) aprovecha esos 16 registros, asique ya es algo más limpio, pero aún hay cosas mejorables.

NOTA: También es verdad que parte de este código superfluo es por seguir unos estándares y hacer que la interoperabilidad entre diferentes módulos/librerías sea posible, que la depurabilidad de las rutinas sea algo mejor, etc.

+ Antes ( época de primeros pentium y en adelante ) se programaba en ensamblador pensando en el pairing de instrucciones en el pipeline, evitando stalls ( periodos donde el procesador que ejecutaba varias instrucciones al mismo tiempo "paraba" un poco a esperar a que operaciones necesarias para poder hacer otras operaciones se completaran ) por cadenas de definición-uso muy cercanas, haciendo hinting a los saltos condicionales en bucles o incluso cambiando "if"s por indexación según multiplicandos ligados a condición... vamos, mucha "magia negra".

+ Hoy día todo esto lo hace el mismo procesador, no hay procesador que no funcione a nivel de microinstrucciones hoy día. Hay una circuitería que decodifica las instrucciones en micro-operaciones, las reordena y hace mil virguerías más y, por mal que este hecho todo, la cosa va muy fina ( al menos en x86 o x86-64 ).

* El problema no es tanto esa optimización enfermiza, el problema es la morralla que se evita usando ensamblador o al menos C. Hay muchos niveles de optimización:

+ Optimización en el diseño, sea en algoritmos o en la organización del código en sí, esto es lo más importante ( hacer diseños simples y compactos, organizar las matrices de manera que haya "shortcuts" matemáticos que optimicen el algoritmo a nivel conceptual, aplicar conocimientos teóricos, ... son ejemplos, sin más )

+ Optimización en el código. No hablo aun de si es C o ensamblador, hablo de que un bucle para recorrer un array puede hacerse peor o mejor incluso a nivel de pseudocódigo o "receta escrita". Esto es bastante importante y esta medio-difuso con el punto anterior, pero es diferente.

+ Optimización del código. Aquí es donde entra el lenguaje a utilizar, la calidad del código generado, usar ensamblador o no... esto no es tan importante por las micro-optimizaciones del código generado, lo que si que importa es el tamaño de las rutinas, donde el ensamblador gana siempre.
Pero luego están las optimizaciones del compilador como desenrollo de bucles, vectorización, reorganización de las instrucciones para evitar stalls,... y AQUI es donde los compiladores, la mayoría de las veces, ganan a la mayoría de gente que escribe en ensamblador ( me incluyo ), aunque hay excepciones.
Estas optimizaciones son a dos niveles, lo dicho en la frase anterior por un lado y algo similar a lo dicho en el punto anterior, o sea, podríamos decir que "arreglan un poco la mala programación del programador", cosas como quitar código redundante, plegar ramas de código que son comunes en cierta parte, cambiar la estructura de árbol del código para que haya menos condicionales,...

------------------------

"El código en ensamblador optimizado para procesadores de hoy dentro de unos años no es optimo" puffff, esto es falso en un 95% ( por decir algo ). Y es aplicable por igual al ensamblador como a lenguajes de alto nivel.

+ He leído algún comentario que habla de que si haces todo en ensamblador te encuentras con que al de poco tiempo, eso que has optimizado ya no es óptimo para un procesador más nuevo.
Esto no es así. A nivel de instrucciones, lo que hagas hoy para x86 o x86-64, más del 90% se va a mantener igual para muchos, muchos años y los procesadores nuevos ejecutaran esas instrucciones con mejor rendimiento. Punto.
Cuando se habla de optimizar para un procesador nuevo, hablamos sobre todo de cosas no tanto del sistema operativo o de aplicaciones en general, sino de optimizar solo los algoritmos matemáticos o movimientos de memoria bestias, etc. y esto se hace en juegos, apps multimedia, edición de imagen, software de simulación industrial, médica y de otros dominios.
Sean echas en C, C++, Fortran o en ensamblador, no cambia: los algoritmos se ponen en rutinas optimizadas para SSEx, AVX y otros juegos de instrucciones y se decide a cuales llamar ( funciones metidas en tablas de punteros que apuntan a una implementación determinada, puestas en fase de inicialización tras detectar las características o funcionalidades opcionales del procesador, detectadas usando la instrucción CPUID, consultas al SO,... ). Así, mi código, ya sea hecho en C o ensamblador, tiene un 95% del código fijo, que se ejecuta en cualquier procesaodor y, para el 5% restante, detecta si tengo un core 2 duo o un core i7 y, para ciertas rutinas o librerías, según esa detección, llama a rutinas optimizadas para juegos de instrucciones SSEx o AVX o lo que sea.

------------------------

Pero todo esto son temas a nivel de rutinas, y aquí hablamos de Sistemas Operativos completos:

+ El mayor problema no es si un SO esta hecho en ensamblador o en C, sino lo ligero que es a un nivel o dos de mayor abstracción, esto es: como de engordado está el SO.

Hoy día todo el mundo piensa "bah, si hay RAM de sobra", pero luego tienes máquinas de 4GBs paginando a disco... y si, vamos sobrados de RAM, pero la velocidad a la que crece la RAM va ahí-ahí con la velocidad a la que crece la mierda. No me malinterpretéis, esa mierda puede que no ocupe ni el 10% de la RAM, pero esa mierda es un cáncer, lo es, por varios temas: uso de CPU, generación de conflictos, seguridad ( a más superficie de código, más agujeros de seguridad ),...
El problema no es usar ensamblador vs lenguajes de alto nivel, el problema es que no hay un par de nazis ( nazis necesarios ) diciendo NO a muchas cosas: SDKs que son flor de un día y que requieren servicios, librerías, capas, parches, ponzoña ( no siempre usables según necesidad ).

Y el problema no está tanto en el kernel del SO, sino en el conjunto de todo en general. Por ejemplo, en kernel de NT que conozco un poco, aunque si esta algo engordado, esta bastante bien, pero todo lo que le rodea… pufff.

Si yo quiero navegar, jugar a juegos, mandar emails, hacer ofimática, etc. ¿ por que cojones tengo miles de ficheros que no se ni lo que son ? Es más, le daré la vuelta: solo quiero tener aquello que se necesita.

Este es el mal endémico de todo SO hoy día:

a) todo es una metástasis multinivel donde todo vale y todo se añade
b) mucha de esa morralla no es de quitar y poner a nuestro gusto.

La filosofía del ensamblador no es tanto optimización de código, sino CONTROL, quiero controlar casi casi cada puto byte que se va a ejecutar. Y esto se puede mantener suficientemente en C, pero no se mantiene, por no hablar de cuando ya te vas a toda la parafernalia de lenguajes y componentes y más mierdas que ejecuta nuestra maquina hoy día.

Y que nadie me venga diciendo que es por necesidad, NO, nos hemos ido por derroteros muy difíciles de retroceder... incluso a alguien que necesite, por ejemplo un lenguaje de scripting porque el desarrollo es más rápido, pues bien, que instale su python o lo que sea y lo use. No me refiero a eso ( que habría que ver si muchas de esas cosas no podían haberse hecho con una filosofía mucho más conservadora; ejemplo: LUA y otros ) sino al que todo está inflado y sucio en general, es el "Síndrome de Diógenes informático".

Para acabar: ¿ Sabéis una cosa que sin ser importante del todo si es indicativa de que no adolece del engorde de la mayoría de SOs ? MenuetOS ejecuta la mayoría de cosas, incluidas todas las aplicaciones y demás, en la cache L2 de muchos procesadores. ¿ Que os parece eso ? Es un poco por estar hecho en ensamblador y un mucho porque tiene LO JUSTO.

Hay una frase en el diseño que dice algo así como: un buen diseño no es aquel donde ya no queda nada que añadir, un buen diseño es aquel donde ya no queda nada que quitar.


Perdón por la chapa O;)

dudo

#70 Si google hubiese hecho un sistema operativo… pero compró una compañía que tenía una máquina virtual, y asi todos las apps de android van emuladas en un jit a lo java. Y así les llevará hasta el 2060 alcanzar el aprovechamiento de los dispositivos que alcanza apple en iOS con metal.

Capas sobre capas y mas capas, eso si se puede ejecutar android hasta en un mechero a pedales.
Un sistema operativo en tiempo real no es una broma, ni una machada, y en determinados ámbitos como el científico se necesita.

fgordillo

Ahhh!! Si se puede ejecutar el Doom, lo compro

D

#108 Yo interpreto el mensaje de #3 como una descripción histriónica de una aversión que tiene ciertos fundamentos. Porque las capas de abstracción tienen sus ventajas pero son proclives a acumular bastantes inconvenientes. Y dicho de otro modo, tú lo usabas para ejemplificar el bajo nivel de los comentarios, y a mí me pareció que el que lo redactó hizo algo ameno de un tema ya trillado.

No soy ni de lejos el más adecuado para opinar sobre esto, pero me parece que lo encomiable de GNU/Linux es más su idea de la reutilización del código que no la implementación de capas de abstracción.

Un saludo, y buenas noches.

PauMarí

#69 ... y la notícia viene a decir que han escrito un libro a base de gruñidos.
Unos opinarán que sería la manera más eficiente aunque muy laboriosa de hacerlo y otros que es un esfuerzo inútil habiendo como hay idiomas que simplifican la transmisión de información.

Ramanutha

#103 Yo lo he visto en teléfonos de 60 €, y no me parece que vaya lento.

eltercerhombre

#86 a ti te la pela como se hagan las cosas. Las quieres y punto.

A mi me la pela lo que tu quieras o lo que tu opines. Me la pelas.

Y no te sientas ofertas ofendido. Te entiendo perfectamente.

Pero mereces el mismo respeto que das.

DaniTC

#13 "potable". Depende de lo que uses.

D

#20 no puedo estar menos de acuerdo contigo, lo siento. El tiempo libre de cada uno es sagrado.

D

#20 Yo cuando alguien me pide un negativo, no me puedo contener.

dudo

#43 En asm puedes aprovechar el 100% del ordenador 64bits y gpu incluidas. Y no, ningun otro medio de programación aprovecha el 100%.

apetor

Uhmmm, a ver como digo todo lo que me viene a la cabeza y quede medio bien...

Quizá por falta de conocimientos o por repetir mitos y demás pero estamos confundiendo y mezclando cosas, y hay mitos hacia los dos lados de la discusión.

------------------------

Ensamblador, C, otros, lenguaje vs librería, código generado...:
+ Las rutinas escritas en ensamblador son, aun casi sin querer ir a hacer buen código, muy pequeñas, no hay instrucciones superfluas y hacen justo lo que deben, ni más ni menos.

+ Los lenguajes de alto nivel, aun poniendo el compilador en optimize for size ( a menudo, indirectamente mejor que optimizar para velocidad, salvo en algoritmos con mucho bucle, donde el desenrollo de bucles sí ayuda ) desensamblas el código y a menudo te tiras las manos a la cabeza con la de instrucciones o construcciones superfluas que te encuentras ( y hablo de compiladores de MS, GCC,... quizá los de intel no pequen tanto, pero hace mucho que no veo código de eso ).

Por ejemplo, la gestión de marcos de pila para funciones, con un buen planning de registros y demás puedes evitarlo por completo en ensamblador, en x86-64 esto ha mejorado gracias a tener 16 registros normales en vez de 8 como en 32 bit, y el ABI ( el conjunto de convenciones de llamada, preservar registros, etc. ) aprovecha esos 16 registros, asique ya es algo más limpio, pero aún hay cosas mejorables.

NOTA: También es verdad que parte de este código superfluo es por seguir unos estándares y hacer que la interoperabilidad entre diferentes módulos/librerías sea posible, que la depurabilidad de las rutinas sea algo mejor, etc.

+ Antes ( época de primeros pentium y en adelante ) se programaba en ensamblador pensando en el pairing de instrucciones en el pipeline, evitando stalls ( periodos donde el procesador que ejecutaba varias instrucciones al mismo tiempo "paraba" un poco a esperar a que operaciones necesarias para poder hacer otras operaciones se completaran ) por cadenas de definición-uso muy cercanas, haciendo hinting a los saltos condicionales en bucles o incluso cambiando "if"s por indexación según multiplicandos ligados a condición... vamos, mucha "magia negra".

+ Hoy día todo esto lo hace el mismo procesador, no hay procesador que no funcione a nivel de microinstrucciones hoy día. Hay una circuitería que decodifica las instrucciones en micro-operaciones, las reordena y hace mil virguerías más y, por mal que este hecho todo, la cosa va muy fina ( al menos en x86 o x86-64 ).

* El problema no es tanto esa optimización enfermiza, el problema es la morralla que se evita usando ensamblador o al menos C. Hay muchos niveles de optimización:

+ Optimización en el diseño, sea en algoritmos o en la organización del código en sí, esto es lo más importante ( hacer diseños simples y compactos, organizar las matrices de manera que haya "shortcuts" matemáticos que optimicen el algoritmo a nivel conceptual, aplicar conocimientos teóricos, ... son ejemplos, sin más )

+ Optimización en el código. No hablo aun de si es C o ensamblador, hablo de que un bucle para recorrer un array puede hacerse peor o mejor incluso a nivel de pseudocódigo o "receta escrita". Esto es bastante importante y esta medio-difuso con el punto anterior, pero es diferente.

+ Optimización del código. Aquí es donde entra el lenguaje a utilizar, la calidad del código generado, usar ensamblador o no... esto no es tan importante por las micro-optimizaciones del código generado, lo que sí que importa es el tamaño de las rutinas, donde el ensamblador gana siempre.
Pero luego están las optimizaciones del compilador como desenrollo de bucles, vectorización, reorganización de las instrucciones para evitar stalls,... y AQUI es donde los compiladores, la mayoría de las veces, ganan a la mayoría de gente que escribe en ensamblador ( me incluyo ), aunque hay excepciones.
Estas optimizaciones son a dos niveles, lo dicho en la frase anterior por un lado y algo similar a lo dicho en el punto anterior, o sea, podríamos decir que "arreglan un poco la mala programación del programador", cosas como quitar código redundante, plegar ramas de código que son comunes en cierta parte, cambiar la estructura de árbol del código para que haya menos condicionales,...

------------------------

"El código en ensamblador optimizado para procesadores de hoy dentro de unos años no es optimo" puffff, esto es falso en un 95% ( por decir algo ). Y es aplicable por igual al ensamblador como a lenguajes de alto nivel.

+ He leído algún comentario que habla de que si haces todo en ensamblador te encuentras con que al de poco tiempo, eso que has optimizado ya no es óptimo para un procesador más nuevo.
Esto no es así. A nivel de instrucciones, lo que hagas hoy para x86 o x86-64, más del 90% se va a mantener igual para muchos, muchos años y los procesadores nuevos ejecutaran esas instrucciones con mejor rendimiento. Punto.
Cuando se habla de optimizar para un procesador nuevo, hablamos sobre todo de cosas no tanto del sistema operativo o de aplicaciones en general, sino de optimizar solo los algoritmos matemáticos o movimientos de memoria bestias, etc. y esto se hace en juegos, apps multimedia, edición de imagen, software de simulación industrial, médica y de otros dominios.
Sean hechas en C, C++, Fortran o en ensamblador, no cambia: los algoritmos se ponen en rutinas optimizadas para SSEx, AVX y otros juegos de instrucciones y se decide a cuales llamar ( funciones metidas en tablas de punteros que apuntan a una implementación determinada, puestas en fase de inicialización tras detectar las características o funcionalidades opcionales del procesador, detectadas usando la instrucción CPUID, consultas al SO,... ). Así, mi código, ya sea hecho en C o ensamblador, tiene un 95% del código fijo, que se ejecuta en cualquier procesaodor y, para el 5% restante, detecta si tengo un core 2 duo o un core i7 y, para ciertas rutinas o librerías, según esa detección, llama a rutinas optimizadas para juegos de instrucciones SSEx o AVX o lo que sea.

------------------------

Pero todo esto son temas a nivel de rutinas, y aquí hablamos de Sistemas Operativos completos:

+ El mayor problema no es si un SO esta hecho en ensamblador o en C, sino lo ligero que es a un nivel o dos de mayor abstracción, esto es: como de engordado está el SO.

Hoy día todo el mundo piensa "bah, si hay RAM de sobra", pero luego tienes máquinas de 4GBs paginando a disco... y si, vamos sobrados de RAM, pero la velocidad a la que crece la RAM va ahí-ahí con la velocidad a la que crece la mierda. No me malinterpretéis, esa mierda puede que no ocupe ni el 10% de la RAM, pero esa mierda es un cáncer, lo es, por varios temas: uso de CPU, generación de conflictos, seguridad ( a más superficie de código, más agujeros de seguridad ),...
El problema no es usar ensamblador vs lenguajes de alto nivel, el problema es que no hay un par de nazis ( nazis necesarios ) diciendo NO a muchas cosas: SDKs que son flor de un día y que requieren servicios, librerías, capas, parches, ponzoña ( no siempre usables según necesidad ).

Y el problema no está tanto en el kernel del SO, sino en el conjunto de todo en general. Por ejemplo, en kernel de NT que conozco un poco, aunque sí esta algo engordado, esta bastante bien, pero todo lo que le rodea… pufff.

Si yo quiero navegar, jugar a juegos, mandar emails, hacer ofimática, etc. ¿ por que cojones tengo miles de ficheros que no se ni lo que son ? Es más, le daré la vuelta: solo quiero tener aquello que se necesita.

Este es el mal endémico de todo SO hoy día:

a) todo es una metástasis multinivel donde todo vale y todo se añade
b) mucha de esa morralla no es de quitar y poner a nuestro gusto.

La filosofía del ensamblador no es tanto optimización de código, sino CONTROL, quiero controlar casi casi cada puto byte que se va a ejecutar. Y esto se puede mantener suficientemente en C, pero no se mantiene, por no hablar de cuando ya te vas a toda la parafernalia de lenguajes y componentes y más mierdas que ejecuta nuestra maquina hoy día.

Y que nadie me venga diciendo que es por necesidad, NO, nos hemos ido por derroteros muy difíciles de retroceder... incluso a alguien que necesite, por ejemplo un lenguaje de scripting porque el desarrollo es más rápido, pues bien, que instale su python o lo que sea y lo use. No me refiero a eso ( que habría que ver si muchas de esas cosas no podían haberse hecho con una filosofía mucho más conservadora; ejemplo: LUA y otros ) sino al que todo está inflado y sucio en general, es el "Síndrome de Diógenes informático".

Para acabar: ¿ Sabéis una cosa que sin ser importante del todo sí es indicativa de que no adolece del engorde de la mayoría de SOs ? MenuetOS ejecuta la mayoría de cosas, incluidas todas las aplicaciones y demás, en la cache L2 de muchos procesadores. ¿ Que os parece eso ? Es un poco por estar hecho en ensamblador y un mucho porque tiene LO JUSTO.

Hay una frase en el diseño que dice algo así como: un buen diseño no es aquel donde ya no queda nada que añadir, un buen diseño es aquel donde ya no queda nada que quitar.


Perdón por la chapa O;)

D

creo que la cuestion que ha hecho a menuetOS famoso no es que sea en ensamblador, porque linux esta escrito en c con muchas instrucciones de ensamblador, y punteros y tal. Lo que hace reto a menuetOS es que se han fijado como limite ocupar un disco de 3.5

D

#11 uf, no estoy muy de acuerdo con eso, ¿eh?

peperojoizquierdo

#30 Pues #11 tiene toda la razón. Hay cosas que las máquinas hacen mejor que los humanos y emitir código es una de ellas

D

#3 tampoco creo que seamos micos. Bueno yo si lol

D

#76 boost es c++ . Y bueno . originariamente UNIX se escribio en C para portarlo entre maquinas.

p

#47 conoces alguna pagina de algoritmica?
Es un tema interesante, muy importante en programacion pero que se toca poco.
Es curios lo que pueden hacer algoritmos muy pequeños. Me acuerdo un programa de 4k en JScrip de 4 en raya y me ganaba. A la 3 o 4 vez me decia ahora si voy a poner interese y me ganaba, se me ponia una cara de tonto.
Luego ya le pillabas el truco. Es como el Jaque al pastor del ajedrez si no lo conoces te gana siempre.
En esta pagina he encontrado algoritmos que no conocia.
http://www.strchr.com/

Yo creo que hay optimizaciones que estan mas basadas en el micro que la puede hacer mejor el compi y otras que son más relacionadas con los algoritmos que se quieren hacer que el compilador no sabe mejorar, porque tampoco sabe muy bien que objetivo tiene el programador. Pero muchas de ellas se puedn hacer en lenguajes tipo C.

La optimizacion humana tambien puede ser contraproducente.

http://diegocg.blogspot.com/2011/06/error-procesador-demasiado-inteligente.html

sieteymedio

Para acabar estrellados contra unas maquinas que ya en el firmware tienen backdoors para que se meta la NSA...

AdobeWanKenobi

"Puede caber en un diskette"

D

Los sistemas operativos deberían estar escritos en brainfuck.

Kariyuga

#46 Bueno, apretujándolo todo bien arrejuntadito no sabes lo que puede llegar a caber en diskettes.

peperojoizquierdo

#54 Cuando un humano crea una herramienta es para utilizarla, no para volver a hacer las cosas desde cero sin utilizarla. Por otro lado, no se si has oído hablar del Machine Learning .

b

Son programadores Vascos?

D

#88 Muy ilustrativo. Gracias. Sirvan tus observaciones para descubrir los oscuros entresijos de una broma jocosa.

S

Y yo que pensaba que por saber formatear ya era un hacker.. Jajajja

d

#92 No critico que no te gusten las capas de abstracción, me parece perfecto que no te gusten, lo que me fastidia es que tratéis los avamces como retrocesos, muy habitual en la comunidad linuxera por cierto, si por muchos fuera seguiríamos en la cueva haciendo fuego con palos y piedras porque claro, es lo más "puro",
Y para terminar, nadie ha dicho que tu opinión sea de bajo nivel, es más, me parece una opinión muy útil y respetable sólo que no la comparto.

p

#101 En caso de que sepan programar bien en C sigue dependiendo del compilador generar el código sin bugs. Un compilador como el gcc es robusto y no generará errores, pero añadiendo varias lineas de código de protección ante fallos no previstos, por lo que igualmente el rendimiento será menor. Primero es la seguridad del código, después la optimización.

Evidentemente la asignación de registros es una de las partes principales de un compilador, sin embargo el compilador siempre optimiza sobre el programa en C. El único compilador que sería capaz de optimizarlo a lo máximo seria aquel capaz de analizar tu código, entender todo lo que hace, tirarlo a la papelera y escribir el suyo propio.

dudo

Yo en mi marcapasos sólo quiero MinuetOS. 💖

ur_quan_master

#77 si, son c++ envenenadas hasta el paroxismo de templates. Por eso decía que es offtopic.

K

#32 De verdad te crees o entiendes una mínima parte de todo eso que dices?

d

#121 Perfecto!¡

mr_b

#3 Te he votado negativo porque has dicho una soberana gilipollez. El código de aplicaciones no tiene que ser óptimo, tiene que ser mantenible. Y te aseguro que el ensamblador, cualquiera, dista bastante de ser mantenible. Además de que también tiene que ser portable y otra serie de características que no vienen al caso. Y eso sólo se consigue con lenguajes de alto nivel.

Además de que, hoy, cualquier compilador moderno es capaz de producir muchísimo mejor código ensamblador que cualquier desarrollador.

No hablemos ya de las capas esas de las que te quejas. Esas capas también están para algo. Qué casualidad, ¿no? Entre otras cosas para que un programador que quiera hacer un nuevo componente para el sistema operativo no tenga que escribir todo el código de todas las partes que necesita, sino que el propio sistema operativo se las de para facilitarle el trabajo. Y te aseguro que este sistema operativo, aunque esté hecho en ensamblador, también tiene todas esas capas.

Y lo peor de todo es que eres el comentario más votado. Ay…

D

#33 Bill Gates podría decir ahora que con 64 bits direccionas todo lo que haga falta

M

¿Está mal pedir que alguien nos explique de qué va la noticia a aquellos que no entendemos nada de programación?

Sofrito

#127 Aquí están las instrucciones para conectarte a internet:
http://www.menuetos.net/vbset.htm

Pero yo no lo he conseguido. Algo estaré haciendo mal

dudo

#54 el demonio.

pip

#116 escribir ASM es ineficaz en productividad, se tarda mucho y es difícil de mantener. Eso es obvio.
Pero no es verdad que un compilador "gane" a un programador de ASM que sepa lo que hace y hoy en día de hecho en algunos puntos se sigue usando.
Por ejemplo yo tengo librerías de matrices en ASM ARM porque simplemente en C no puedes usar bien la vectorización. El compilador de C (armcc o gcc) puede apañar a veces, pero tienes que ayudar mucho al compilador y ni de lejos es tan óptimo como ASM.
Como se hacen millones de cálculos con matrices por frame es un punto crítico y sigue saliendo a cuenta el ASM.
Otro ejemplo seria MMX, SSE,...son cosas que simplemente C no tiene forma de expresar y el compilador está limitado porque tiene que literalmente inventarse el código. No llega.
Otra cosa es que estas cosas estén en lo más profundo de las librerías o motores y un programador normal ni sepa que existen, pero ahí están.

1 2