El proyecto Scriptool, sucesor de Openjdk 7
En primer lugar, un hecho jurídico importante: el "uso legítimo"
Las interfaces de Java 7 son "limpias", es decir, no utilizan una implementación en su definición. Esto garantiza que el uso de las API de Java 7 cumpla con la regla de "uso justo".
Dependencias de origen para el desarrollo de proyectos
Una primera regla que aprendí con Java y los lenguajes contemporáneos es que usar bibliotecas de código de bytes para las dependencias de un proyecto fuente es un error.
A largo plazo, puede terminar con una biblioteca para la que no tiene las fuentes y, por lo tanto, no puede compilar en otra versión de los estándares ejecutables.
Esto significa que cuando un proyecto de código fuente depende de otra biblioteca desarrollada en Scriptool, esa biblioteca debe importarse en forma de código fuente para compilar el proyecto.
Por lo tanto, si la biblioteca no está disponible en formato fuente, no podrá utilizarla.
Si desea publicar una biblioteca reutilizable, deberá publicar su código fuente.
Lenguaje de scripting como Python
El lenguaje Scriptool debería permitirle escribir un programa y ejecutarlo inmediatamente sin necesidad de configurar un proyecto o tener que compilarlo antes de poder ejecutarlo.
Abres un archivo de texto; Escribes el programa en tu editor de texto. Guardas el archivo y, si no contiene ningún error, simplemente se ejecuta escribiendo el nombre del archivo en un terminal.
A esto se le llama scripting.
API (interfaz de programación de aplicaciones) limpias
Los scripts son algo bueno para poder escribir y ejecutar un pequeño programa rápidamente. Pero cuando desarrollas un programa que contiene varios miles de instrucciones o más de cien clases, le tiene que organizarse con una estructura de proyecto.
El lenguaje Scriptool integra el proyecto en el propio script como un archivo binario que se puede descomprimir para desarrollar y compilar el proyecto.
El proyecto debe contener un sistema de compilación que debe dar lugar a la instalación del proyecto ejecutable para futuros usos del script.
Así, un script se compone de tres partes:
1) la clase de script tal como se presenta en el párrafo anterior.
2) un archivo json que contiene campos para elegir el idioma, la versión, Scriptool y otros datos útiles.
3) un archivo binario descomprimible que contiene todo el árbol del proyecto.
Esta tercera parte merece una explicación: este proyecto no solo necesita colocar las bibliotecas compiladas cuando lo instala para que puedan ser invocadas desde la clase de script en el punto 1, sino que también necesita publicar un conjunto de interfaces que serán las únicas partes de la biblioteca del proyecto visibles desde los programas que usan ese script.
Por lo tanto, para utilizar una biblioteca desarrollada en Scriptool, la lista de nombres de interfaz calificados (los nombres de sus paquetes y sus nombres) se completará en el archivo json definido en el punto 2.
De esta manera, haremos una encapsulación de las clases del proyecto para que ninguna de esas clases aparezca fuera de ese proyecto.
En resumen, una API de Scriptool consistará únicamente de la clase de script en el código fuente y todas las interfaces (tal y como se definen en Java 7) que esta clase puede poner a disposición directa o indirectamente de sus llamadores.
Publicación bajo GPL v2
Openjdk 7 se publica bajo una licencia libre que incluye una licencia Oracle y una licencia GPLv2 de este código.
Para las partes de código heredadas de Openjdk 7, se debe respetar la GPLv2. Por lo tanto, el proyecto estará bajo GPLv2 (al igual que el núcleo de Linux).
Hay, dispersas en todo el código Java de Openjdk 7, ciertas partes que (por ejemplo, proporcionadas por IBM) tienen licencia exclusiva para Openjdk 7 y están autorizadas por su proveedor solo para Openjdk 7. Por lo tanto, será necesario planificar una implementación de estas clases sin utilizar código cuya licencia no permita la libre evolución.
De esta manera, Scriptool podrá mantener la compatibilidad con versiones anteriores de Openjdk 7.
Originalidad de Scriptool
Scriptool no es un modismo de Java. Scriptool es un lenguaje de programación innovador que tiene sus propias reglas y especificidades que lo convierten en un lenguaje original.
Para ello, Scriptool se basa en un alfabeto de codificación específico. Este alfabeto tiene solo 64 caracteres. Hay 32 caracteres para las letras y 32 caracteres para los símbolos en el lenguaje de programación.
Esta codificación de código fuente está disponible en 3 versiones:
Marscii-16,
Marscii-32 y
Marscii-64.
¿De dónde viene el nombre Marscii?
La creación de Marscii proviene de una película de ciencia ficción llamada "Marte". En esta película, el héroe (Matt Damon) se encuentra abandonado solo en el planeta Marte y debe sobrevivir por su cuenta. Para comunicarse con la Tierra, tiene un ancho de banda reducido (el ancho del canal de comunicación). Entonces tuvo la idea de usar código Ascii para solucionar este problema.
Es obvio que en el dominio espacial, el ancho de banda es un problema crítico para cualquier comunicación.
Al ver esto, inmediatamente se me ocurrió la idea de Marscii-16: usar 16 símbolos para transmitir mensajes de texto en inglés. Llamé a este lenguaje Xalphabet, por alfabeto hexadecimal.
Los símbolos en Marscii-16 son los diez dígitos decimales (0, 1, 2, 3, 4, 5, 6, 7, 8, 9) y las seis letras a, b, c, d, e y f.
Existen reglas estrictas sobre cómo convertir texto escrito solo con las 26 letras del alfabeto inglés para crear un texto sin espacios ni signos de puntuación.
Por lo tanto, la elección del código "Marscii" me pareció fácil interpolando Marte y Ascii.
Marscii-16
Ahora explicaré las reglas de Marscii-16.
Primero, una pequeña introducción al código hexadecimal.
Los números del 0 al 9 representan números decimales en base 10. El símbolo a tiene para 10. El símbolo b para 11. El símbolo c para 12. El símbolo d para 13. El símbolo e para 14. Y finalmente el símbolo f para 15.
Por lo tanto, cada símbolo tiene un valor numérico entre 0 y 15. Si quieres escribir el número 16 en hexadecimal, colocas un 1 (en el sentido clásico de diez) delante de un 0. Esto te da el texto "10". Si estás en base diez, el texto "10" es igual a diez, pero si estás en base dieciséis, el texto "10" es igual a dieciséis. Una vez que entiendas este principio, puedes comprobar que en base 16, "20" es treinta y dos, "30" es cuarenta y ocho y "40" es sesenta y cuatro.
Las computadoras prefieren contar en base 16 en lugar de base 10 por razones relacionadas con la forma en que se construyen las computadoras.
Ahora que nuestros símbolos están definidos con su valor numérico, pasemos a Marscii-16.
En el alfabeto Marscii-16, los números del 0 al 9 corresponden a las letras del alfabeto latino:
0 para s o z,
1 para t o d,
2 para n,
3 para m,
4 para r,
5 para l,
6 para g o j,
7 para c, k o q
8 para f o v,
9 para b o p.
Puedes notar que todos los números corresponden a consonantes.
Este sistema se llama pseudonumerología y fue inventado por un geólogo (noruego, creo) que publicó pseudonumerología en Internet para enseñar mnemotecnia (él mismo las usaba para recordar períodos geológicos).
Pero es difícil escribir textos solo con consonantes.
Así que adapté la pseudonumerología para poder escribir un texto en inglés con solo los dieciséis caracteres del código hexadecimal.
Estas son las reglas de transcripción en Marscii-16:
0 para s o z,
1 para t o d,
2 para n,
3 para m,
4 para r,
5 para l,
6 para g, i, j o y,
7 para c, k o q,
8 para u, v o w,
9 para p,
a para a,
b para b,
c para o,
d para d,
e para e,
f para f
70 para ch, sh, x, h o cs.
Para evitar desviarme de la regla, voy a escribir un primer programa en Marscii-16 (el famoso "hola mundo" que ahora es el primer programa enseñado en un nuevo lenguaje informático:
70e55c8c45d
Aquí están los detalles:
70 da h,
e da e,
5 da l,
5 da l,
c da o,
8 da w,
c da o,
4 da r,
5 da l y
d da d.
Puede notar que en esta transcripción, no hay espacio entre las palabras.
Un código de este tipo corresponde idealmente al problema de "Marte":
En Ascii, necesita 11 caracteres de 7 bits correspondiente a 10 bytes para enviar "Hola mundo".
En Marscii-16, se necesitan 11 caracteres de 4 bits correspondiente a 6 bytes para un mensaje similar que un ser humano es capaz de decodificar.
Este sistema está adaptado al idioma inglés que no utiliza caracteres acentuados.
Marscii-32
El Marscii-32 se limita a ofrecer 16 nuevos símbolos para letras mayúsculas. Pero algunos símbolos se modifican para evitar ambigüedades: así, en lugar de escribir S, escribimos $.
$ para S o Z,
T por T,
N por N,
M para M,
R para R,
L por L,
J, para G, I, J e Y
K para C, K y Q
V para U, V y W
P para P,
A por A,
B para B,
C para O,
D para D,
E para E,
F para F,
K$ para Ch, Sh, X, H, Cs.
Marscii-64
El "código Marscii-64" introduce 32 nuevos símbolos para expresar espacios, signos de puntuación y todos los símbolos necesarios para escribir código c, c++, java, python o php.
El Marscii-64 existe en dos versiones: la primera, el "Marscii-64 código" como el anterior y la segunda, el "Marscii-64 base64" con todas las demás letras del alfabeto latino en minúsculas o mayúsculas y los caracteres "-" y "_" para obtener 64 caracteres que se utilizan en la codificación base64.
Esta versión de Marscii-64 define un orden alfabético con:
Del 0 al 15, símbolos en minúsculas;
Del 16 al 31, los símbolos en mayúsculas y la secuencia de los otros 32 caracteres de la siguiente manera:
$TNMRLJKVPABCDEFstnmrljkvp-ghi_oO!ZWQXGYHUquwxyz
Tenga en cuenta que la "I" (una "i" mayúscula) se escribe como "!" (signo de exclamación) para distinguirse de la "l" ("L minúscula").
La x se utiliza para los caracteres de escape.
Por lo tanto, si necesita insertar una "x" para un valor de 61 en base 10 (3d en base 16), debe escribir "xx".
Además, los caracteres "j" y "k" se utilizan como etiquetas para delimitar bloques codificados, por lo que si necesita una "j" (valor numérico 38 en base 10 y 26 en base 16), debe escribir "x6" y lo mismo para "k" (valor numérico 39 en base 10 y 27 en base 16) debe escribir "x7".
No hace falta que os explique en este preciso momento la correspondencia entre los símbolos del código Marscii-64 y Marscii-64 base64 porque por el momento el objetivo es poder escribir texto y aún no programas.
Sin embargo, es natural usar los símbolos Marscii-64 código porque se usan en texto en lenguaje natural:
" " para el espacio entre dos palabras, corresponde al carácter "s" (valor 32)
"." para un punto, corresponde al carácter "o" (valor 47)
":" para dos puntos, corresponde al carácter "t" (valor 33)
"," para una coma, corresponde con el carácter "h" (valor 44)
";" para un punto y coma, corresponde con el carácter "i" (valor 45)
"(" para un paréntesis de apertura, corresponde al carácter "l" (valor 37)
")" para un paréntesis de cierre, corresponde al carácter "r" (valor 36)
"[" para un paréntesis de apertura, corresponde al carácter "U" (valor 57)
"]" para un paréntesis de cierre, corresponde con el carácter "u" (valor 59)
"{" para el corchete de apertura, corresponde al carácter "Y" (valor 55)
"}" para el corchete de cierre, corresponde al carácter "y" (valor 62)
"/" para una barra diagonal, corresponde con el carácter "Z" (valor 50)
"-" para un guión, corresponde a sí mismo "-" (valor 42)
"_" para un carácter subrayado (guión bajo), corresponde a sí mismo "_" (valor 46)
"?" para un signo de interrogación, corresponde con el carácter "v" (valor 50)
<’> (apóstrofe) para un apóstrofe, corresponde al carácter "q" (valor 58)
<"> (comillas de apertura o cierre) para encerrar un texto de cita, corresponde al carácter "W" (valor 51)
"!" para un signo de exclamación, corresponde al carácter I (i mayúscula), (valor 49)
En orden alfabético, tenemos los 32 símbolos del Marscii-64 código:
<space>:+<)(\j\k?*>,;_.\n!/<double_quote>\r<dólar>@{#[<simple_quote>]\t<back_slash>}=
Para cada carácter, presentemos en primer lugar su número en base decimal (de 32 a 63); pues el código de Ascii (alfabeto latín), pues el código « Marsci-64 code » entre paréntesis y al fin el código « Marscii-64 base64 ».
32 <espacio> (" "), "s"
33 dos puntos (":"), "t"
34 añadir o positivo ("+"), "n"
35 menos que ("<"), "m"
36 paréntesis de cierre (")"), "r"
37 paréntesis de apertura ("("), "l"
38 <etiqueta_de_apertura> ("j"), "j"
39 <etiqueta_de_cierre> ("k"), "k"
40 punto de interrogación ("?"), "v"
41 multiplicación ("*"), "p"
42 guiones o negativo ("-"), "-"
43 mayor que (">"), "g"
44 coma (","), « h »
45 punto y coma (";"), « i »
46 subrayado ("_"), "_"
47 punto ("."), "o"
48 <new_line>("\n"), "O"
49 punto de exclamación ("!"), "!" (i mayúscula esta remplazado por punto de exclamación para separar de « l », L minúscula)
50 barra ("/"), "Z"
51 <double_quote> (<">), "W"
52 <carriage_return> ("\r"), "Q"
// como '$' se usa para 'S' y '\$' se usa para '$', este código 53 se asociará con
// con un carácter compuesto en el código Marscii-64
53 <dólar> ("\$"), "X"
54 arroba ("@"), "G"
55 <llave_abierta> ("{"), "Y"
56 dièse ("#"), "H"
57 <opening_hook> ("["), "U"
58 <simple_quote> (<'>), "q"
59 <closing_hook> ("]"), "u"
60 Tabulación ("\t"), "w"
61 <back_slash> ("\\"), "x"
62 <llave_cerrada> ("}"), "y"
63 igual ("="), "z"
Dado que necesitamos más caracteres para escribir código, usaremos caracteres de escape (en el alfabeto de base 64 que comienzan con "x" y en el código que comienza con "\"):
Ya hemos visto "x6" ("\6"), "x7" ("\7"), "xx" ("\\").
<back_quote> (<`>) "x!" (\!”)
<tilde> ("~") "xv" ("\?" ")
<circumflex_accent> ("^") "xo" ("\.")
< por ciento > ("%") "xH" ("\#")
<y_commercial> (« & ») "xz" ("\=")
<Barra vertical> ("|") "xZ" ("\/" no mayúscula "v" sino barra diagonal + barra invertida)
Si se requieren otros caracteres, se utilizarán los caracteres ampliados por el prefijo "x0" ("\0").
Contando los caracteres con el prefijo "x" ("\"), obtenemos 72 caracteres, 9 de los cuales tienen el prefijo.
No hemos incorporado el <retroceso> que podría ser necesario para algún código; Al no tener conocimiento del uso de este símbolo en el código, se incorporará si es necesario posteriormente por un carácter escapado por el prefijo "x" como "xb" ("\b").
Los caracteres que se escriben naturalmente en código con un prefijo "\" se escribirán naturalmente mediante su traducción al lenguaje Marscii.
Tendrá que tener cuidado de distinguir entre el "\n" que termina una línea ("O") y el carácter que representa un "\n" en una cadena ("x2" o "\2") y el "\r" que termina una línea ("Q") y el carácter que representa una "\r" en una cadena ("x4" o "\4").
Del mismo modo, el carácter de tabulación se codificará en una cadena mediante "x1" o "\1".
Ahora nuestro Marscii-64 está listo para ser utilizado para escribir en inglés o para escribir programas Scriptool.
Entonces, siguiendo con la tradición, aquí hay un primer programa en Scriptool, para definir un programa que muestra un texto "¡Hola mundo!". (codificado en Marscii-64 o "K$e55c 8c45d!").
nombre de archivo "K$e55cVc45d.074691cc5"
contenido:
#!/804/b62/074691cc5
98b567 75a00 K$e55cVc45d {
01a167 $14626 1e701 = "K$e55c 8c45d !" ;
98b567 01a167 8c6d 3a62($14626[] a460) {
$601e3.c81.9462152(1e701);
}
}
# $TART J$CN
{
"ab4a270" : "j<a :e)k",
"a0746912a3e" : "jK$e((cVc)(dk",
"a8e406c2" : "0.1.0"
}
# $TART EK$TEN$JCN
Convocatoria de voluntarios
Ahora, necesito su ayuda para desarrollar el compilador para este nuevo lenguaje. Dada la evolución de la tecnología, parece necesario compilar hacia un formato intermedio que permita una compilación directamente ejecutable por el procesador y al mismo tiempo permita la interacción con las bibliotecas java en código de bytes (para Openjdk 7, por supuesto, ya sea interpretado con una máquina virtual, o compilando el código de bytes en un binario ejecutable). ¡Hay mucho trabajo por delante!
Ahora tendrá que leer el resto de esta documentación en inglés Marscii-64.
Si quieres ayudarme, envíame un mensaje de correo electrónico (christophe.roux@webmiel.fr) a Marscii-64.
Si tienes dificultades para aprender Marscii-64, puedo ayudarte con una sesión de Google Meet. Póngase en contacto conmigo en francés, inglés o español en la misma dirección de correo electrónico.
Webmiel
Christophe Roux
Développeur Logiciel
Copyright ©. Tous droits réservés.
Nous avons besoin de votre consentement pour charger les traductions
Nous utilisons un service tiers pour traduire le contenu du site web qui peut collecter des données sur votre activité. Veuillez consulter les détails dans la politique de confidentialité et accepter le service pour voir les traductions.