Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: x64core en 6 Diciembre 2011, 22:44 pm



Título: De quien deriva C++?
Publicado por: x64core en 6 Diciembre 2011, 22:44 pm
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...
¿?


Título: Re: De quien deriva C++?
Publicado por: Eternal Idol en 6 Diciembre 2011, 23:43 pm
http://en.wikipedia.org/wiki/C%2B%2B
http://en.wikipedia.org/wiki/C_%28programming_language%29

GIYF.


Título: Re: De quien deriva C++?
Publicado por: x64core en 7 Diciembre 2011, 02:33 am
estoy algo cansado de leer x3 y mas en ingles :P pero gracias EI :) me lo leere mas tarde

Citar
GIYF.
:xD


Título: Re: De quien deriva C++?
Publicado por: farresito en 7 Diciembre 2011, 02:59 am
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)


Título: Re: De quien deriva C++?
Publicado por: x64core en 7 Diciembre 2011, 03:09 am
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


Título: Re: De quien deriva C++?
Publicado por: farresito en 7 Diciembre 2011, 03:26 am
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!


Título: Re: De quien deriva C++?
Publicado por: x64core en 7 Diciembre 2011, 03:38 am
: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...


Título: Re: De quien deriva C++?
Publicado por: farresito en 7 Diciembre 2011, 04:01 am
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...


Título: Re: De quien deriva C++?
Publicado por: x64core en 7 Diciembre 2011, 04:12 am
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


Título: Re: De quien deriva C++?
Publicado por: Eternal Idol en 7 Diciembre 2011, 10:43 am
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.


Título: Re: De quien deriva C++?
Publicado por: x64core en 7 Diciembre 2011, 10:52 am
que chorrada :P
C++ viene siendo casi lo mismo de ASM bueno no me extraña, hasta me parecia raro :P


Título: Re: De quien deriva C++?
Publicado por: Eternal Idol en 7 Diciembre 2011, 10:53 am
No, ni por casualidad ...


Título: Re: De quien deriva C++?
Publicado por: x64core en 7 Diciembre 2011, 10:58 am
segun yo un programa podia andar en "cualquier computadora" , "es lenguaje portable". pero veo que no del todo :P
si necesita compilacion aunque no reprogramacion :P pero se necesita compilacion :P no me gusta :P
de donde viene entonces la multiplataforma :P


Título: Re: De quien deriva C++?
Publicado por: Eternal Idol en 7 Diciembre 2011, 11:02 am
La diferencia es grande, en C/C++ si usas unicamente recursos standard no tenes mas que volver a compilar, en ensamblador tenes que escribir un nuevo programa siempre, por empezar para que use las instrucciones de ese procesador, los registros correspondientes, acceda a la memoria como debe, etc., etc. ... en lenguajes con maquina virtual como Java o C# solo tenes un binario.


Título: Re: De quien deriva C++?
Publicado por: x64core en 7 Diciembre 2011, 11:06 am
:D a eso queria de recursos estandar :D
lo raro que aun no entiendo como es posible que c++ es portable ( con recursos estandar ) a diferencia de asm :P
entiendo que asm , por los registros,ISA , etc
pero igual C++ de alguna forma debe de pasar su codigo a lenguaje maquina osea a asm :P


Título: Re: De quien deriva C++?
Publicado por: Eternal Idol en 7 Diciembre 2011, 11:37 am
Si, se llama compilador  ;D


Título: Re: De quien deriva C++?
Publicado por: farresito en 8 Diciembre 2011, 02:20 am
A ver. C es portable porque se han hecho MUCHOS compiladores. Cada compilador con un ASM distinto para cada arquitectura. ASM es el binario en si, no es portable. C es compilado en cada arquitectura diferente y pasa a diferentes ensambladores. Asi de sencillo.

Todavia me sorprende la paciencia que tienes Eternal Idol :P

Tampoco es tan dificil

               lenguaje   C

    X86            ARM        ETC
-----------------------------------------------
compilador   compilador   compilador
x86                arm              etc
   |                    |                  |
ensamblador   ensamblador   ensamblador
  x86                  arm                 etc

El C es entendible por cada compilador que lo traduce a su ensamblador de la arquitectura correspondiente.


Título: Re: De quien deriva C++?
Publicado por: kisk en 8 Diciembre 2011, 19:17 pm
Eternal Idol la verda que si que paciencia tienes  ;-) eso es ganas de ayudar  ;-)
pd yo no le veo tanta complicacion a tu pregunta amigo
Saludos