Índice1.0 - Introducción
2.0 - XMachine, concepto
3.0 - Cross C
4.0 - Cross ASM - Objetos de compilación
5.0 - Registros, flags y stack
6.0 - Descarga1.0 - IntroducciónPara empezar ya tengo asumido que este post no tendrá una gran repercusión, pues entiendo que a muchos no os interesará el tema.
También quiero comentar que sois libres de postear dudas o cuestiones de programación en este mismo hilo, y muy a gusto las voy a responder.
2.0 - XMachine, conceptoA lo que iba. El nombre en clave del proyecto que estoy creando es "XMachine". Consiste en una máquina virtual capaz de emular código en multiples plataformas (windows, linux, etc.). Para que os hagáis una idea viene siendo algo parecido a JAVA.
3.0 - Cross CPara ello estoy creando un nuevo lenguaje de programación, el cual me gustaría llamar "Cross C". Seguramente os estaréis preguntando cual es la necesidad de crear un nuevo lenguaje. Bien, mi intención es crear un lenguaje que sea tan potente como C (o C++) pero que tenga la sencillez de otros lenguajes como Basic. Como podremos ver en un pequeño trozo de código que pondré a continuación, la sintaxis es muy parecida a la de C. Ahora bien, se ha simplificado la declaración de textos, no siendo necesario el uso de arrays (como en Basic) pero se ha mantenido los data types (como en C). Las declaraciones de funciones y demás siguen una estructura parecida a la de C, pero sin el uso de llaves para abrir y cerrar "{".
Veamos un ejemplo:
void test(string a)
print(a)
return 8;
endfunc
int main()
string str = "Esto es una cadena de texto"
int var_ret = test(str)
endfunc
Por el momento estas son las características funcionales (es decir, programadas).
4.0 - Cross ASM, Objetos de compilaciónLos archivos de código "Cross C" se convierten en archivos objeto, los cuales están programados en ASM (prácticamente, tiene diferencias que lo hacen más sencillo). Estos pueden ser usados para compilar el ejecutable final, que se puede emular desde la XMachine.
Cabe destacar que cada XMachine compila los ejecutables de forma diferente, cifrandolos mediante parametros únicos de cada ordenador.
Si se desea ejecutar un ejecutable en otro ordenador con XMachine se puede dar permiso mediante un sistema de usuarios (aun no implementado).
El anterior código en Cross C compila en:
.data_segment:
db 0001
db 0001
db 0001
.text_segment:
Esto es una cadena de texto
.code_segment:
POP DS:[00000000]
MOV GR0, DS:[00000000]
PUSH GR0
INT4 print
POP GR0
PUSH 00000008
JMP 0000000A
PUSH 00000000
RET
INT3
INT3
INT3
MOV GR1,TS:0000001C
MOV DS:[00000003],GR1
MOV GR0, DS:[00000003]
PUSH GR0
CALL FFFFFFCB
POP GR0
MOV DS:[00000006],GR0
PUSH 00000000
RET
INT3
INT3
INT3
(No me hagáis comparaciones con el ASM puro y duro, porque no tiene ningún sentido)
5.0 - Registros, flags y stackLa máquina virtual consta de 4 registros de uso genérico, que normalmente se organizan así:
GR0 - Parámetros y return
GR1 - Asignar valores a variables
GR2 - Aún para asignar
GR3 - Aún para asignar
Además consta de todas las flags necesarias para operaciones condicionales, aunque no en uso aún.
Se que, como he dicho al principio, a pocos importará esto, pero bueno, me apetecía comentarlo, y, cuando el lenguaje esté un poquito, solo un poquito más avanzado, postearé la máquina virtual (junto al compilador y demás).
6.0 - Descargahttp://www.multiupload.com/XBUUGN3UZWLeer el último post enviado por mi,
viewtopic.php?f=18&t=1632648&p=1725456604#p1725456604Salu2 y gracias por leer.
Futuras mejoras- Constantes como parámetros de funciones
- Módulo matemático-lógico para expresiones como "a + 2 + 3 * c".
- Arrays
- Funciones varías para el diseño de GUI (en OpenGL)
- Punteros y memoria
- Ya se verá
Iré actualizando el hilo con información sobre la funciones nativas de XMachine (como "print") y sobre el uso de la sintaxis y gramática de Cross C.
La intención de este nuevo mensaje es que sea educativo y fácil de aprender a la vez. Que permita generar aplicaciones de forma rápida.Tutorial de Cross C1.0 - Primeros pasos2.0 - Funcionamiento de Cross C3.0 - Variables4.0 - Declarando una función1.0 - Primeros pasosXMachine no requiere ningún tipo de instalación, simplemente guardamos el ejecutable que lleva este mismo nombre ("XMachine.exe") en cualquier carpeta.
El siguiente paso es abrir cualquier editor de texto o código (menos Word o Writer) y empezar a programar.
2.0 - Funcionamiento de Cross CLo primero que debemos tener en cuenta es que cross C nos pide que exista, obligatoriamente, una función cuyo nombre sea "main". Las funciones son agrupaciones de código que, como su nombre indica, llevan a cabo una función concreta. Esta tal función "main" debe existir ya que es lo primero que se ejecutará del programa.
Pero, para poder declarar funciones debemos primero entender como funcionan las variables en Cross C:
3.0 - VariablesEn Cross C existen 4 tipos de variables (la 3a y 4a aun no implementada). Se dividen en las siguientes:
int - Variables numéricas enteras
float - Variables númericas de coma flotante
char - Como int, de 0 a 255, para carácteres
string - Textos
Un ejemplo de funcionamiento sería el siguiente:
int var0 = 2
float var1 = 1.5
string var2 = "Hola Mundo"
char = 'H'
Como podéis notar, hay un par de cosas interesantes.
A) Las instrucciones terminan a fin de línea, no es necesario incluir ningún ";" al final de cada línea
B) Los textos se declaran sin necesidad de usar arrays, se inicializan como cualquiera variable.
4.0 - Declarando una funciónPara declarar una función, además de los 4 tipos de variables normales, también tenemos el tipo "void". La única diferencia con los demás es que las funciones void no devuelven ningún tipo de valor al finalizar, y las otras sí. (Luego veremos que quiere decir esto).
Para que nos hagamos una idea de como se declara una función, declararemos la función "main":
int main()
...
endfunc
Es tan simple como indicar el tipo, "int", el nombre, "main", y los argumentos. Los argumentos son las variables que la función pide, en este caso, ninguno, puesto que entre los dos paréntesis no hay nada. Un ejemplo de función que pide argumentos podría ser:
void con_argumentos(int arg0, string arg1)
Finalmente, vemos como se indica que se acaba la función con "endfunc".