Autor Tema: Domingo 2018-02-04, Clases de Computación  (Leído 1434 veces)

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

Desconectado ~

  • Trade Count: (0)
  • The Communiter-
  • *
  • Thank You
  • -Given: 0
  • -Receive: 156
  • Mensajes: 1412
    • Ciencia de Computación, OSes y Herramientas
Domingo 2018-02-04, Clases de Computación
« : febrero 04, 2018, 04:18:02 pm »
Actualmente ya hay muy poca información clara
que nos pueda servir para aprender computación y programación
en Internet, no se diga temáticas más difíciles. Hasta los portales
de Yahoo desmejoraron dramáticamente desde el 2012.

Tenemos que evaluar la situación actual de nuestra gente
en lo que hemos logrado acumular de base en computación,
volver a hacerla común y simple para todos como cuando estaba
Geocities. La programación y el mantenimiento de computadoras
es demasiado simple como para que no lo aprenda toda la gente.

Con estos temas espero que todos puedan participar, si alguien
quiere que le ayude haciendo un programa cualquiera,
que solo me diga.

Esta es una clase "formal" de computación y programación.
Si alguien quiere salir de una duda de cómo empezar,
solo tiene que preguntar lo que sea. Pienso hacer un tema
como este cada cierto tiempo para agrupar todos los
mensajes de un período de días de tamaño manejable,
pero que haya suficientes mensajes como para que se entienda
el grupo de temas e ideas de los que se hable que aunque
en general no estén predefinidos, buscan guiar desde lo más
simple además desde las raíces de nuestras propias bases
computacionales nacionales hasta mayores niveles.
_______________________________________________________
_______________________________________________________
_______________________________________________________
_______________________________________________________

Lo que he observado es que las carreras  de computación,
nacionales, específicamente cuando se trata de programación,
no se meten realmente a aprender lenguajes como C, así
que eso es una de las cosas que necesitamos.

C es un lenguaje de bastante bajo nivel, pero la intención
es que en un programa agreguemos capas de funciones
que usen las funciones de menor nivel, hasta llegar a una capa
que sea tan fácil de usar como JavaScript, hasta usando los
mismos nombres de rutinas, para entonces usarlas en nuestro
programa y que usando esa capa de funciones el código sea
tan simple de usar como un script, aunque siempre con
lo básico de C.

Quizás la mejor forma para aprender C es hacer
un compilador propio, igual que los que hicieron el primero
allá en los 50's/60's/70's, así vamos a entender las
operaciones que el lenguaje necesita hacer para
convertir a código de máquina, y vamos a saber si
las ideas que tenemos sobre un lenguaje son válidas
al implementarse como programas como pruebas de
concepto prácticas.

Mantener un compilador de C que los alumnos de las
carreras de computación nacionales pudieran rearmar
y extender para aprender a programar a niveles de
complejidad grandes que todavía no tocan en general
pero que ya son ampliamente alcanzables es algo
que deberían hacer.

Yo he estado haciendo un compilador de C, las funciones
las he estado simplificando lo más posible para que sean
súper fáciles de leer, y que compilen por lo menos con
Open Watcom y GCC. Tal vez compile con Borland C++ 4/5
y con Visual Studio, que son cosas a lograr para tener una
base de tecnología propia de compiladores de C que funcione
con cualquier herramienta común.

Está pensado para generar código de 32 bits inicialmente
para x86, pero altamente portable a 16 y 32 bits, y a los formatos
de ejecutables más comunes, además de binario sin formato.

En este punto ya casi empiezo a agregar el código para el árbol
de sintaxis, pero primero estoy simplificando y programando
nuevas funciones para que agregar dicho árbol de sintaxis
y el generador de código Ensamblador sea fácil el resto
del año:
http://sourceforge.net/projects/c-compiler/files/


Siguiente Función a Desarrollar

Necesito una función que lea un carácter individual dentro
de la línea actual.

También una función que detecte si estamos al final de
una línea, sobre el primer carácter de núeva línea,
'\r' o '\n'.

Esto es lo siguiente de lo que voy a hablar.
Tal vez alguien pueda ayudarme con el pseudocódigo.
El compilador ya tiene código que le hice para un
administrador simple de líneas de texto, que es el que
hay que usar para eso:

Código: [Seleccionar]
Pedir la línea y posición de carácter a leer como parámetros de la función.
Guardar la posición del archivo del offset.
Convertir la posición de línea/carácter a offset plano.
Leer el carácter.
Restaurar la posición del archivo.
Devolverlo.


Eso es básicamente lo que hay que hacer,
pero de forma limpia.

También estoy escribiendo un manual para el código
del compilador que es la mejor referencia que estoy
escribiendo para que las funciones sean realmente
fáciles de entender:

http://devel.archefire.org/tutorials/_OWN_/Writing_a_C_Compiler/manual/

El código del compilador es gratis, simplemente lo he puesto ahí
para que lo use el que quiera como quiera, la intención
es tener algo con qué aprender más cosas sin estar
pensando si tiene derechos de autor, si alguien no
quiere que lo use... igual que todos mis programas,
solo están ahí por diversión y para aprender
sin preocuparse de nada.
« Última Modificación: febrero 04, 2018, 06:01:53 pm por ~ »
Mi sitio web:
---- IP para archivo hosts (todos mis subdominios):
190.150.9.244 archefire.org

Desconectado Dragonrag3

  • Trade Count: (0)
  • Sv Full Member
  • *
  • Thank You
  • -Given: 3
  • -Receive: 2
  • Mensajes: 878
Re:Domingo 2018-02-04, Clases de Computación
« Respuesta #1 : febrero 04, 2018, 05:02:44 pm »
Y si eres tan experto en programacion porque nunca te ha contratado alguna marca reconocida???  :yao_ming:
Aceite y Accesorios a buen precio!, en San Salvador cerca de Centro de Servicio Doño Venezuela y Mercado Central, enviarme inbox en la pagina para cualquier duda:
https://www.facebook.com/LubriSV503/

Desconectado ~

  • Trade Count: (0)
  • The Communiter-
  • *
  • Thank You
  • -Given: 0
  • -Receive: 156
  • Mensajes: 1412
    • Ciencia de Computación, OSes y Herramientas
Re:Domingo 2018-02-04, Clases de Computación
« Respuesta #2 : febrero 04, 2018, 08:16:23 pm »
Lo primero que tenemos que hacer es una función
para convertir la posición de carácter/línea, que se cuentan desde 1,
en el offset crudo, que se cuenta desde cero.

La documentación de la implementación actual la he puesto aquí:
OPCODE__Compiler_BinarySourceFile_ASCII_8bit_get_fileOffset_from_line_char

Una función para leer un único carácter ASCII del archivo sin alterar su posición:
OPCODE__Application_read_C_unsigned_char_byte_BinaryFile_fromOffset_PositionPreserve

Para colorear el código lo hice con una herramienta propia,
la Grabadora de Texto (Text Recorder), una aplicación HTML5.
Simplemente di clic derecho en la lista de archivos, agregué un
archivo con extensión C, copié y pegué el código, seleccioné el
código coloreado generado, y copié/pegué el HTML en la
página de documentacion:
http://www.archefire.org/Text_Recorder/




Como ven, ya logramos implementar lo que dijimos en el primer mensaje,
ahora tenemos que pensar cuál podría ser el siguiente paso,
probablemente leer un primer carácter en los bucles principales
del compilador, específicamente en el bucle interno (de 2 niveles)
para interpretar el preprocesador para ver si la línea empieza con
'#', que es una directiva de preprocesador.
« Última Modificación: febrero 04, 2018, 08:47:18 pm por ~ »
Mi sitio web:
---- IP para archivo hosts (todos mis subdominios):
190.150.9.244 archefire.org

Desconectado ~

  • Trade Count: (0)
  • The Communiter-
  • *
  • Thank You
  • -Given: 0
  • -Receive: 156
  • Mensajes: 1412
    • Ciencia de Computación, OSes y Herramientas
Re:Domingo 2018-02-04, Clases de Computación
« Respuesta #3 : febrero 05, 2018, 01:04:20 pm »
Necesitamos otras funciones para poder leer con facilidad cada línea,
para empezar una que nos permita obtener la longitud total de la línea,
y otra para saber si la posición de carácter que estamos usando para la
línea actual ya está fuera de rango y por lo tanto si está en el final
de la línea.

OPCODE__Compiler_LineManager_BinarySourceFile_ASCII_8bit_getLineLength.html


OPCODE__Compiler_LineManager_BinarySourceFile_ASCII_8bit_getLineLength.html

Mi sitio web:
---- IP para archivo hosts (todos mis subdominios):
190.150.9.244 archefire.org

Desconectado g00mba

  • Trade Count: (3)
  • The Communiter-
  • *
  • Thank You
  • -Given: 184
  • -Receive: 2598
  • Mensajes: 14419
  • SOMOS LEGION
    • ALABADO SEA MONESVOL
Re:Domingo 2018-02-04, Clases de Computación
« Respuesta #4 : febrero 05, 2018, 01:37:20 pm »

Desconectado hkadejo

  • Global Moderator
  • Trade Count: (0)
  • The Communiter-
  • *
  • Thank You
  • -Given: 277
  • -Receive: 929
  • Mensajes: 3313
    • AndroidJutsu
Re:Domingo 2018-02-04, Clases de Computación
« Respuesta #5 : febrero 05, 2018, 03:19:40 pm »
Aca por el trabajo hay un señor loquito que se cree comentarista deportivo de Radio, entonces pasa narrando partidos, entrevistas y hasta anuncios...es divertido porque menciona equipos y jugadores viejos del año de la cuca y todos aca lo ven y se rien porque pues te da gracia.

Algo asi me imagino a virguilla cuando se pone a crear estos temas mi$$rda, hablando de dar clases de computacion para las masas y luego escribir algo como esto "pero primero estoy simplificando y programando nuevas funciones para que agregar dicho árbol de sintaxis y el generador de código Ensamblador sea fácil".

Ojala algun dia cuando el mundo se acabe, todos en svc podamos conocernos y ver como un señor loquito pasa hablando de codigo maquina, emsablador y mierdas del año de la cuca y todos reirnos en fraternidad y decir "si, ese es virguilla"
Ayudo a no programadores y programadores novatos con tutoriales, código y consejos a convertirse en desarrolladores Android profesionales y crear apps geniales.

DESCARGA MI GUÍA -> https://androidjutsu.com/guia-crea-tu-primera-aplicacion-android/

Desconectado mwm1

  • Trade Count: (0)
  • Sv Member
  • ***
  • Thank You
  • -Given: 1
  • -Receive: 2
  • Mensajes: 103
  • mmcc
Re:Domingo 2018-02-04, Clases de Computación
« Respuesta #6 : febrero 05, 2018, 03:42:39 pm »

y si alguien ya descargo "El habla de Mi Tierra" , favor avisenme,,,,, para que me lo pase por usb, muy pesado para el enlace de internet ....

Desconectado g00mba

  • Trade Count: (3)
  • The Communiter-
  • *
  • Thank You
  • -Given: 184
  • -Receive: 2598
  • Mensajes: 14419
  • SOMOS LEGION
    • ALABADO SEA MONESVOL
Re:Domingo 2018-02-04, Clases de Computación
« Respuesta #7 : febrero 05, 2018, 05:20:24 pm »
hablando de dar clases de computacion para las masas y luego escribir algo como esto "pero primero estoy simplificando y programando nuevas funciones para que agregar dicho árbol de sintaxis y el generador de código Ensamblador sea fácil".
hahahah "voy a hacer esto mas facil agregandole complejidad" este colocho seria el clasico project manager XD tendria exito como PM ya lo vi :yao_ming:

Desconectado ~

  • Trade Count: (0)
  • The Communiter-
  • *
  • Thank You
  • -Given: 0
  • -Receive: 156
  • Mensajes: 1412
    • Ciencia de Computación, OSes y Herramientas
Re:Domingo 2018-02-04, Clases de Computación
« Respuesta #8 : febrero 05, 2018, 06:30:32 pm »
En este punto ya tenemos prácticamente todo
lo que necesitamos para empezar a agregar el árbol de sintaxis
de C, y las estructuras para registrar todas las definiciones en
el código, así que el código que puse al principio ahora tiene
las funciones adicionales y actualizadas para seguir trabajando.

Desde aquí voy a empezar por agregar todo lo que ya había
aprendido de mi compilador de mi lenguaje RealC para
reusar los métodos y funciones que se adapten mejor a
nuestro compilador, y el resto, especialmente para la sintaxis en
sí de C, vamos a agregar código que la maneje con más
cuidado que el compilador simple de RealC, el código de este
es una referencia importante para nuestro compilador actual
de C:

http://devel.archefire.org/en/projects/realc/documentation
Mi sitio web:
---- IP para archivo hosts (todos mis subdominios):
190.150.9.244 archefire.org

Desconectado ~

  • Trade Count: (0)
  • The Communiter-
  • *
  • Thank You
  • -Given: 0
  • -Receive: 156
  • Mensajes: 1412
    • Ciencia de Computación, OSes y Herramientas
Re:Domingo 2018-02-04, Clases de Computación
« Respuesta #9 : febrero 05, 2018, 07:34:45 pm »
El primer programa que necesitamos compilar es este:
Código: [Seleccionar]
#include <stdio.h>

int main(void)
{
 printf("Hello");

 return 0;
}


Lo mejor sería que pudiéramos armar un archivo con la
lista ordenada entera de todos los elementos de código,
pero C estructura el código en categorías lógicas que se
necesitan procesar unas antes de otras.

Así que lo primero que necesitamos es:

- Un archivo solo con la información de indentación
  de cada archivo, línea por línea (espacios en blanco
  y tabs al principio de la línea); las líneas en blanco
  y los #includes (que podrían valer 16 espacios en blanco
  antes y después del código de ese otro archivo)
  también son información de indentación que va a hacer
  que el ensamblador generado sea muchísimo más legible.

- Los comentarios, que también agregaremos como comentarios
  de Ensamblador al código generado a ensamblar.

- Las cadenas de texto, excepto las de los #includes.

- Los #includes, para generar una lista incondicional de
  archivos a incluir, de los que después solo abriremos
  las que cumplan condiciones como los #if, #ifdef.
  En esta etapa no podemos saber si la falta de un
  archivo es un error o es una condicional que nunca
  se activará.
Mi sitio web:
---- IP para archivo hosts (todos mis subdominios):
190.150.9.244 archefire.org