De quien deriva C++?

Iniciado por x64core, 6 Diciembre 2011, 22:44 PM

0 Miembros y 1 Visitante están viendo este tema.

x64core

hola! :D
me hice esa pregunta...
de quien deriva el lenguaje C/C++ ? pues porque pensando si fuera de ASM... como es que un programa de C++ es
portable y se puede ejecutar en cualquier computadora... y ASM se programa para un tipo de microprocesador...
¿?

Eternal Idol

La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón

x64core

estoy algo cansado de leer x3 y mas en ingles :P pero gracias EI :) me lo leere mas tarde

CitarGIYF.
:xD

farresito

Deriva de B, pero esta programado desde 0. Es portable porque se han hecho compiladores de C para cada arquitectura y como es compatible, se puede compilar en cualquiera. El backend de C es ASM. (cada compilador hay que programarlo desde 0, pues son arquitecturas diferentes)

x64core

pues si eso me puse a pensar, que C debe tener varios compiladores para distintas arquitecturas, pero eso es a la hora del compilado y a la hora la ejecucion... si se compilo con uno de esos tantos compiladores que tiene C entonces seria lo mismo
porque los programas de C se ejecutan en todas las PCs no tendria porque tener varios compiladores para diferentes arquitecturas

y usa cosa... si es de otro lenguaje de alto nivel ( por lo que veo acerca de B ) ese lenguaje de quien deriva? :xD
osea todo deriva del lenguaje maquina... y el mas cercano es asm... osea todos derivan al final de asm...? :xD
pero entonces si fuese asi como es que el propio asm no es portable y sus derivaciones si :P

farresito

El proceso de compilado significa pasar de un lenguaje más comprensible para nosotros a lenguaje binario. Por lo tanto, cuando tu compilas, solo compilas para una arquitectura. Si quieres ejecutar en otra arquitectura, necesitas compilarlo otra vez en el compilador adecuado para tal arquitectura. Es portable porque no tienes que reescribir el código otra vez, solo compilarlo (a veces tienes que cambiar ciertas cosas, pero generalmente, poco).

Te confundes un poco con lo de derivado. C viene INFLUENCIADO de B, pero está reescrito otra vez. Yo si quiero puedo crear un lenguaje ahora mismo que no derive de ningún otro. Influenciado quiere decir que tiene ideas del lenguaje B pero no está copiado. Se usa el ensamblador para programarlo. El ensamblador no deriva del lenguaje máquina, ES EL LENGUAJE MÁQUINA. Solo que de modo que lo podamos entender. Si el procesador entiende 0001 1001 1010 0010, y para el procesador esto quiere decir sumar, nosotros representamos estos unos y zeros con una palabra, como por ejemplo, ADD. Y el ensamblador, cuando tu escribes la palabra ADD lo pasa a los zeros y unos.

El ensamblador no es portable porque cada procesador entiende los unos y zeros de distinto modo. 0001 1001 1010 0010 puede ser entendido por un procesador de la arquitectura x86 como ADD, pero por uno de la arquitectura ARM como MUL (multiplicar), por ejemplo. Cada compilador de C lo pasa a un ensamblador distinto, uno para cada arquitectura distinta, y este ensamblador, a la vez, lo convierte en binario.

Si tu compilases un programa en C para arquitectura x86, el compilador lo pasaría a ensamblador y, este, a binario. Entonces, el procesador x86 lo entendería. Pero si este programa lo ejecutaras en ARM, el código binario de antes no lo entendería, ya que los zeros y unos son entendidos de diferente manera.  0001 1001 1010 0010 lo puede entender de otro modo y no funcionaría (de hecho, es un ejemplo, ni tan solo es así, solo para que te hagas una idea.

Un abrazo!

x64core

:D
bueno como dices tu que al compilar un programa de C este se "convierte"....
bien lo de ARM no se la verdad acerca de eso... me imagino que asi es como dices tu... eso significa que nisiquiera el lenguaje C
es portable 100% en cualquier maquina...
y mas que todo a lo portable me referia más a que un programa en ensamblador para arquitectura x86 no puede ser ejecutado
en un procesador 8086... en cambio un programa de C si, no...

farresito

Un procesador 8086 es un x86. Es lo mismo, solo que un poco mas antiguo. Todo programa es portado si tiene compilador para tal arquitectura. Java es portable porque han hecho un compilador para todas las arquitecturas. Si ahora yo me invento una arquitectura, nada me va a funcionar, lo tengo que crear yo. Un compilador de C, un ensamblador...

x64core

perdon me referia a la arquitectura 80386,80486,pentium, superiores.
un programa hecho en ensamblador para esas arquitecturas no "corre" en un 8086 :P
en cambio un programa de C/C++ si puede correr en todas esas arquitecturas :P

Eternal Idol

#9
Tenes que RECOMPILAR para que un programa en C/C++ corra en diferentes plataformas, ahi esta la diferencia, en assembly tenes que escribirlo de nuevo con el juego de instrucciones y los detalles del microprocesador ...

PD. Y no, un mismo binario de C/C++ de 32 bits no corre ni en pedo en un 8086.

PD2. Java es portable por tener una MAQUINA VIRTUAL en cada plataforma, el binario es uno solo, no hay que recompilar.
La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón