Una visión general muy, muy incompleta:
Clase es una estructura (ya sabes C/C++ no?)
Métodos son funciones de otro modo ordinario, excepto que reciben un extra implícita argumento: el objeto mismo. Este argumento generalmente se llama 'esto' o 'yo' dentro de la función. Los símbolos de alcance de clase pueden ser accesibles (C++, JavaScript) o no (PHP, Python) por defecto dentro de los métodos.
La herencia es esencialmente pegar juntas las estructuras y posiblemente también fusionar tablas de símbolos, ya que normalmente los símbolos de la clase base son accesibles por defecto desde los métodos de una clase que ahora está analizando. Cuando encuentre un símbolo (campo o método) dentro de un método, debe hacer una búsqueda ascendente, comenzando desde la clase actual que sube en la jerarquía. O puede implementarlo para que lo busque solo en una tabla de símbolos que es el resultado de una fusión.
Los métodos virtuales se llaman indirectamente. En algunos idiomas, todos los métodos son virtuales por defecto. La implementación dependerá de si se trata de un lenguaje completamente dinámico, en cuyo caso siempre busca un nombre de función dentro de una clase en tiempo de ejecución y, por lo tanto, todos sus métodos se vuelven virtuales automáticamente; o en el caso de los compiladores de lenguajes estáticos usualmente construyen las llamadas tablas de métodos virtuales. No estoy seguro si necesita esto en absoluto, así que no entraré en detalles aquí.
Constructores son métodos especiales que se llaman ya sea en la construcción de un nuevo objeto (generalmente con 'nuevo') o de otra manera son llamados como parte de la cadena de llamada constructor desde dentro constructores descendientes. Muchas implementaciones diferentes son posibles aquí, una es que un constructor toma un argumento 'this' implícito, que puede ser NULL si aún no se ha creado un objeto, y lo devuelve también.
Destructiors son métodos normales que normalmente se llaman implícitamente cuando un objeto sale del alcance. De nuevo, debe tener en cuenta la posibilidad de una cadena de llamadas ascendente para destructores.
Las interfaces son complicadas a menos que, de nuevo, su idioma sea completamente dinámico.
No creo que haya suficiente información aquí para responder la pregunta. ¿Qué es lo que quieres lograr con LLVM? (Por cierto, sé muy poco acerca de LLVM y probablemente no responda). – Qwertie
@Qwertie. El objetivo final es implementar un compilador para mi propio pequeño lenguaje y en este momento estoy tratando de implementar clases de estilo C++. Entonces, cualquier información sobre cómo hacerlo sería agradable, pero creo que tal vez necesito comprender mejor la API LLVM primero, así que, como digo, cualquier idea sobre dónde ir/qué hacer para seguir aprendiendo después de completar los tutoriales de Kaleidoscope sería una ayuda también – tjm
@tjm: Esta pregunta es bastante vaga. ¿Ya tiene una idea de cómo implementaría las clases en general y solo necesita ayuda para implementarlo con LLVM? ¿O quieres saber cómo se pueden implementar las clases en general? – sepp2k