2009-04-21 9 views
5

He estado buscando en L.in.oleum y estoy intrigado por su mezcla de construcciones de alto nivel (bucles, variables dinámicas) con poder ensamblador de bajo nivel (registros).¿Qué son buenos o interesantes lenguajes tipo Ensamblador, pero en un nivel superior?

¿Hay otros idiomas como Lino, que combinan la velocidad del ensamblador con funciones que mejoran la productividad?

EDIT: Me di cuenta de que este tipo de sonido parece un anuncio. Estoy genuinamente interesado en otros lenguajes similares a ensambladores, Lino es el único que conozco.

Respuesta

1

La mayoría de los compiladores C que aceptan ensamblaje en línea. Por supuesto, las partes optimizadas para ensamblaje no son de arquitectura cruzada, pero realmente no puedo imaginar un lenguaje de ensamblaje de arquitectura cruzada que sea efectivo de todos modos. Investigaré el linóleo, pero con la optimización de compiladores y plataformas muy diferentes, con entre 4 y cientos de registros, realmente no puedo ver que esto funcione muy bien.

Otra opción es C#/Java y su código de bytes. Pero aún cuestionaría la utilidad de optimizar las manos en esos.

+0

Supongo que con un buen ensamblaje en línea puede obtener mejores resultados en comparación con el ensamblaje puro, ya que el compilador realizará algunas optimizaciones. –

+0

Por lo general, el optimizador se queda fuera de los segmentos de ensamblaje en línea en el supuesto de que si se tomó la molestia de escribirlo, realmente lo quiso decir. Esto puede ser crítico en el firmware del sistema integrado donde es posible que desee utilizar una instrucción específica para obtener un efecto, o desperdiciar deliberadamente una ranura de retardo de la tubería para obtener un ciclo sincronizado correctamente. Su kilometraje variará, verifique su manual, y ciertamente es sólidamente una característica definida de implementación y no muy portátil. – RBerteig

+0

C# bytecode es MSIL, si no me equivoco, el lenguaje de CLR. Puedes hacer algunos ajustes al mismo, pero creo que el intérprete de C# hace un trabajo bastante decente ya. Lino es interesante de una manera experimental. Si nada más, obtiene un poco de uso práctico por su creador. Una vez que lo bueno es que es teóricamente portátil para cualquier sistema. – CodexArcanum

2

Puede intentar directamente usando LLVM.

Dado que hay muchas herramientas disponibles que lo crean/transforman, existe una buena posibilidad de poder hacer algo útil con él (aunque sin compatibilidad ide).

Si está atascado simplemente escriba lo que desee en C++ y compílelo con Clang manteniendo la forma intermedia.

Para una rápida indicación de si quizás te guste probar su online compiler

+0

+1 para juguetes en línea – SingleNegationElimination

2

Win32 en ensamblador: básicamente las cabeceras de ventanas para el ensamblador con algunas buenas macros de alto nivel:

http://www.masm32.com/

9

C-- es un lenguaje intermedio diseñado para ser generada principalmente por los compiladores, está en algún lugar entre C y ensamblador

+0

Uno puede decir que C es bastante bajo, pero no tan bajo. – pilsetnieks

0

El sistema z tiene HLASM que usamos para un poco de desarrollo. Agrega todo tipo de construcciones de lenguaje de alto nivel. Además de HLASM llevar el ensamblaje un poco hacia un lenguaje de alto nivel, creo que IBM tiene un producto interno basado en PL/I que baja C un poco hacia el ensamblaje :-)

0

Una vez usé PL/M y me pareció para mí estar solo un nivel por encima del ensamblaje. Era más como un lenguaje macro pero con algunos constructos de nivel superior como bucles y tal. Fue una experiencia interesante.

4

FORTH - no es completamente ensamblador pero se usa mucho y tiene un nivel muy bajo.

+0

+1: ¡No lo he usado mucho en la práctica, pero parece ser un buen "envoltorio" para el ensamblaje! –

0

LLVM es una buena respuesta.

Algunos otros idiomas interesantes son el bytecode de JVM y MSIL (el bytecode de la plataforma .Net). Ambos proporcionan sistemas basados ​​en pila, lo cual es una gran diferencia con respecto al ensamblaje x86.

-1

C es casi un ensamblaje, solo 100 veces más legible, y te ayuda cuando tienes muchas variables activas. Sin embargo, está cerca del lenguaje ensamblador. No hay ninguna operación en C que no corresponda casi directamente (o incluso directamente) al lenguaje ensamblador.

ASM: "hacer precisamente lo que digo, precisamente cómo lo digo"

C: "hacer lo que quiero decir, y se puede hacer un poco de reordenamiento limitado si es más rápido y no arruinar los resultados "

C es definitivamente el camino a seguir para cualquier cosa que no sean pequeños trozos que se ocupan directamente de la CPU o el hardware de alguna manera que es difícil de C (instrucciones especiales, por ejemplo). Incluso entonces, los buenos compiladores de C le proporcionan esas instrucciones especiales a través de intrínsecos.

Las CPU modernas son tan complejas que es difícil para un humano predecir qué efecto tendrá una secuencia de instrucciones. Un compilador puede microgestionar todas las latencias y rendimientos y usar consistentemente (cerca) las secuencias de instrucciones óptimas. Es casi seguro que un compilador de C supere con creces a un programador de ensamblaje humano en un código típico. Para los bucles ajustados, el ensamblaje optimizado para seres humanos puede superar a C, pero generalmente no por mucho.

+0

¿De verdad? ¿Solo un voto negativo? Gracias. Eso ayuda. – doug65536

Cuestiones relacionadas