[C con Clase] ¿Alguien sabe destripar librerías...?

xonly xonly2002 en yahoo.es
Sab Ago 30 15:41:17 CEST 2008


SD> Como ya he dicho, es bueno cuestionar las cosas, pero no puedes dejarte 
SD> llevar por ellas, especialmente cuando estás empezando. Una vez que 
SD> tengas suficientes conocimientos, entonces o bien se aclararán esas 
SD> dudas o bien necesitas aclararlas una vez por todas. Si ocurre lo 
SD> último, entonces para eso estamos nosotros si no puedes aclarar esas 
SD> dudas. Lo que no puedes esperar es que en dos días (o el tiempo que 
SD> hayas dedicado) aclarar todas las dudas de temas más o menos avanzadas. 
SD> Te podemos explicar con todo lujo de detalles todos estos temas, pero 
SD> sin conocimientos no vas a entender nada. Al final, como he visto muchas 
SD> veces ocurrir, uno se desespera con tanta información que abandona la 
SD> idea de aprender.

el caso es que pretendo hacerme mi propio compilador, en el que se pueda programar en un lenguaje "en español" pero haciendo todo a su vez directamente, no haciendo como mucha gente puede hacer una librería con la funcion ESCRIBE, que luego en realidad lo único que tiene en el cuerpo de la función es un printf, la verdad no me gustaría ser "tan inutil"

SD> Si sigues nuestro curso, tratamos este tema en el cap. 40, casi al final 
SD> del curso.

ciertamente, no me lo he leido porque está al final, pero hecho en falta un poco de eso de que expliquen al principio que para poder trabajar con el Dev-C++ hay que hacer una plantilla, aunque te digan en principio (por ejemplo en ese apartado que dice al principio "toma de contacto", en el que por ejemplo si quieres ver algo de resultado, se necesita utilizar el debugger, y por defecto no lo tiene puesto, e incluso creo que si no se hace un proyecto o plantilla como la llamas, creo que no funciona bien del todo, pues a menos a mi se me vuelve totalmente loco para poder ver si en la variable numero hay efectivamente un 4, aunque claro también puede deberse a que con tanto jaleo y prueba de debugger y demás, lo haya desconfigurado y no funcione adecuadamente mi instalación, pero si sé que en otras ocasiones el debugger me ha funcionado más o menos bien, pero ahora con el ejemplo que estoy probando sobre la marcha, pues como que me da ciertos problemas, unas veces sale, otras no, en fin, lo que me refería antes con que los programas no funcionan bien, vamos que el windows la midad de las veces hace lo que le da la gana y no lo que quieres tu...

SD> Veamos. Escuetamente, diré lo siguiente:
SD> ANSI C++ = ANSI C + STL

ahora me entero perfectamente.

SD> O sea, ANSI C++ es igual que las funciones de ANSI C junto con las STL 
SD> que son propias de C++. Esto significa que puedes usar las funciones 
SD> estándares de ANSI C en un programa de C++.
SD> Dicho lo anterior, esas funciones están en sus bibliotecas que realmente 
SD> contienen las implementaciones ya compiladas en código binario, como 
SD> bien mencionas. Las STL, por su uso y "naturaleza", deben estar en 
SD> código fuente; no se pueden compilar como plantillas. Por lo tanto, si 
SD> usas las STL, estarás agregando más código fuente al tuyo, que al final 
SD> será compilado y enlazado para crear tu propio fichero ejecutable.
SD> Si quieres ver los ficheros de cabecera de las STL, como <iostream>, 
SD> <fstream>, <ios>, <string>, <vector>, <queue>, etcétera, simplemente 
SD> entra en el subdirectorio de tu compilador para los ficheros de 
SD> cabecera. Típicamente, estos ficheros se encuentran en el subdirectorio 
SD> "include". Por ejemplo, "C:\Dev-Cpp\include"; aunque en Dev-C++, estos 
SD> ficheros de las STL están en "C:\Dev-Cpp\include\c++\3.4.2". Usa el 
SD> propio Dev-C++ o cualquier editor de texto para ver el contenido de 
SD> todos estos ficheros de cabecera.

el caso es que no me interesa (bueno si claro que me interesarán si los quiero usar), pero me gustaría tener la posibilidad de tener las implementaciones de esas cabeceras, por si algún día me quiero meter en follones... 

SD> En la época de los Spectrum, éstos no podían hacer cálculos para la 
SD> meteorología, ni permitir varios usuarios simultáneamente, ni repartir 
SD> varias tareas para varios procesadores, ni gestionar múltiples programas 
SD> a ejecutarse aparentemente a la vez, ni "defenderse" de virus, gusanos, 
SD> agentes y otros programas malévolos, ni garantizar que el usuario es 
SD> quien active un programa u otro, ni muchos más temas. Todo esto ha ido 
SD> evolucionando porque había necesidad de tal evolución. Por eso, no 
SD> podemos programar el procesador directamente pensando en nuestro propio 
SD> programa. Existen otros programas; existen otras capas o niveles que el 
SD> propio sistema operativo debe imponer para la seguridad y garantía de la 
SD> ejecución correcta de todos los programas a su cargo.
SD> Lo que tú propones sirve para un sistema específico y no uno de 
SD> propósito general, como el PC y MS-Windows. Por ejemplo, quieres 
SD> programar exclusivamente para un procesador que sirve para controlar un 
SD> robot en particular. Si es así, entonces puedes eliminar el tener un 
SD> sistema operativo y empezar a programar directamente en código binario, 
SD> si quieres. Aprovecharás al máximo posiblemente el tiempo de ejecución y 
SD> el tamaño de la memoria de tus programas. Esto es porque no tienes que 
SD> preocuparte de todos los otros temas de otros sistemas que he mencionado 
SD> anteriormente.

ciertamente en forma general, esto es así y probablmente no se necesite más, pero sé que en algunos momento si puede que necesite saltarme todas esas capas o niveles, y el tema y lo que me molesta es que no tengo elección, es decir o trago o me dedico a limpiar mi casa..., es decir que me gustaría saber que si quiero me puedo saltar esas normas, aunque tenga que currarme mucho en tema de aprendizaje y demás, pero el tema es saber que se puede...

SD> Ten presente que no tienes por qué usar las funciones ni las bibliotecas 
SD> estándares. Nadie te obliga a usar las bibliotecas, si no quieres.

efectivamente eso es lo que quiero, el poder usar si me da la gana las bibliotecas y sino, pues no  usar lo que yo haga u otras que me gusten por "como lo hacen", pero veo que no hay alternativa, al final se hace lo que quiera windows (u otros sistemas operativos con sus capas y demás)

SD> Personalmente, no me he puesto a mirar si otros compiladores ofrecen los 
SD> ficheros fuentes de sus bibliotecas, pero es cuestión de buscar. 
SD> Posiblemente, DJGPP que un compilador basado en el de GNU. Sin embargo, 
SD> para otras bibliotecas, especialmente las que no sean estándares, 
SD> dependen de sus desarrolladores si quieren ofrecer tales códigos fuentes 
SD> o no.

me apunto el intento de ir mirando esto pos si acaso...

SD> La gran mayoría de esas demos fue escrita en ensamblador. Como ya he 
SD> mencionado, MS-Windows gestiona muchas cosas por temas de seguridad, 
SD> compatibilidad, etc.. Por eso hay que agregar algo más de código a tu 
SD> programa para que funcione "bien" bajo MS-Windows. También debes ser 
SD> "bueno" con los diseños del S.O., especialmente si pretendes apropiarte 
SD> de recursos comunes como la parte gráfica; otros programas también 
SD> necesita usar la tarjeta de vídeo. Quizá la mejor solución, dentro de lo 
SD> que quieres hacer, es crear tu programa sin necesidad de un sistema 
SD> operativo.

si se puede, me interesaría mucho hacerme programas que no dependan de ningún sistema operativo, sería un flipe encender el ordenador y por ejemplo que en un disquete o en un cd, aparezca algo que tu has hecho sin tener nada que ver con ningún windows, ni linux ni nada de nada... ¿dónde podría ir encontrando información?, sé que estoy demasiado verde y antes he de ir aprendiendo algo de C, pero ese sería mi segundo paso...

SD> La razón de encontrar ".lib" y ".dll" es que necesitamos estos ficheros 
SD> para desarrollar y usar nuestros propios programas. El hecho de que 
SD> existan ".c", ".cpp", o ".asm" no es de mucha importancia para otros 
SD> desarrolladores que no sean los creadores de tales bibliotecas. Aquellos 
SD> desarrolladores que quieran mejorar o adaptar estas bibliotecas también 
SD> se interesaría por las fuentes.

es una pena que en el tema del código fuente no las metan, total que les cuesta...

SD> No te faltan funciones, lo que pasa es que existen otras funciones más 
SD> en las bibliotecas. La función 'printf()' puede a su vez invocar otras 
SD> funciones. Al final, tendrá que invocar alguna "función" en la BIOS o 
SD> instrucciones en ensamblador para llevar a cabo su tarea.

el caso es que me gustaría saber cual es la función que al final llama después de tanto lio...

SD> Si quieres hacerlo, adelante. Eso sí, estarás metido en diseños a bajo 
SD> nivel. Eso significa que necesitas saber principalmente cómo funciona el 
SD> procesador y el sistema operativo. Esto implica que tu implementación no 
SD> podrá ser pasada a otra plataforma tal y como está. Esto puede o no ser 
SD> un problema, pero es otro factor a considerar.

lo de la portabilidad para mi es algo secundario, creo que todavía le queda un tiempecito de vida al tema pc + windows, nos guste o no

SD> > el caso es que veo que hay muchas cosas que no funcionan como me
SD> > gustarían, y por ello al final necesito algo que funcione no
SD> > sólamente correctamente como dices, sino que además lo haga
SD> > especialmente rápido, y tengo en mente "que hay una conspiración"
SD> > para que esto solo funcionen con máquinas nuevas (en fin me pongo
SD> > peliculero en la época de la guerra fria o bueno no sé si entendéis
SD> > mi simil), pero la realidad es que creo que muchas cosas fallan o no
SD> > se hacen lo suficintemente bien porque se usan librerías que hacen
SD> > cosas a las que el programador bien por error o bien por
SD> > inexperiencia o por imprevisión, mete la gamba a la hora de querer
SD> > utilizar lo mismo para muchas cosas, sé que sino fuera gracias a eso,
SD> Supongo que tienes algún ejemplo en mente, pero no estoy del todo seguro 
SD> a qué te estás refiriendo con estos comentarios. Me imagino que estás 
SD> hablando de algunos programas que no funcionan bajo MS-Windows tan bien 
SD> como en versiones anteriores, por ejemplo. Otro ejemplo puede ser que 
SD> algunos programas antiguos no ejecuten correctamente dando un mensaje de 
SD> error en tiempo de ejecución.

me remito por ejemplo al propio debugger este, para empezar, pero ciertamente con tu comentario me ha recordado que al hacer la gente esta del programa ACD See en su versión 3.11 tenía una opción de copiar o mover y saltar si es idéntico, una opción que inexplicablemente ha desaparecido ( y por supuesto no viene por defecto) y que a pesar de protestar como usuario regsitrado, pues me vino una copia "legal" de una revista, resulta que no hacen más que meter más y más librerías e historias que no sirven para nada, y una simple chorrada tal cual "saltar si la imagen es la misma" no la usan, vamos para coger a los programadores y apalearlos todos los dias de su casa al curro y del curro a su casa...

SD> Como he dicho, es mejor que te centres en lo que quieres hacer: aprender 
SD> a programar. Puedes meterte en temas avanzados más tarde, porque te 
SD> puedo asegurar que si no sabes programar jamás podrás crear tus propias 
SD> bibliotecas.

en ello estoy, pero desde luego, si no puedo luego "avanzar" con mis historias, no me gustaría meterme en un sitio sin saber si mi meta es posible, y creo que por windows no voy en buen camino, tal vez con otros sistemas operativos....

de momento no voy a tener más remedio que centrarme como me dices, aunque por error he borrado tu texto literal, pero bueno, muchas gracias de todas formas, el caso es que al tener a partir de ahora menos tiempo, no voy a poder hacer tanto debugger para tanta chorrada, en fin, intentaremos por lo menos dedicar un articulito de esos de la página al menos a la semana, a ver si cumplo y para el año que viene ya me he visto el capítulo ese 40 de los templates y demás...


Más información sobre la lista de distribución Cconclase