pseudocódigo ejecutable?

votos
3

Estoy intentando determinar el estado de la técnica para la siguiente idea:

1) el usuario escribe en algún código en un idioma llamado (insert_name_here);

2) el usuario elige un idioma de destino de una lista de candidatos de salida conocidos (javascript, ruby, perl, python);

3) el procesador traduce insert_name_here en código ejecutable en el idioma de destino;

4) el procesador ejecuta el código usando la llamada al sistema relevante en función del idioma elegido

La razón por la que esto funciona es porque hay una asignación preestablecida de 1 a 1 entre todas las construcciones de lenguaje de insert_name_here a todos los idiomas de destino admitidos.

( Descargo de responsabilidad: Obviamente, esto no produce un código elegante que esté bien adaptado al idioma de destino. Simplemente hace una traducción rudimentaria ejecutable. El propósito es permitir a los desarrolladores obtener una implementación rápida y sucia de algoritmos en varios idiomas diferentes para aquellos casos en los que no tienen ganas de reinventar la rueda, pero se requieren por cualquier motivo para trabajar con un idioma específico en un proyecto específico).

¿Esto ya existe?

Publicado el 03/12/2008 a las 22:52
fuente por usuario
En otros idiomas...                            


5 respuestas

votos
4

.NET CLR está diseñado de forma tal que C ++. Net, C # .Net y VB.Net compilan todos en el mismo lenguaje de máquina, y usted puede "descompilar" esa CLI en cualquiera de esos idiomas.

Así que sí, diría que ya existe, aunque no exactamente como lo describes.

Respondida el 03/12/2008 a las 22:57
fuente por usuario

votos
2

Hay convertidores disponibles para diferentes idiomas. El problema que vas a tener es lidiar con bibliotecas. Si bien el mapeo entre enunciados de lenguaje puede ser fácil, encontrar asignaciones entre las funciones de la biblioteca será muy difícil.

No estoy seguro de cuán útil sería ese tipo de generador de código. ¿Por qué querrías escribir algo en un idioma y luego convertirlo de inmediato en algo más? Puedo ver la lógica de los lenguajes de la 4ª generación que convierten diagramas o modelos en código, pero realmente no veo el sentido de su esfuerzo.

Respondida el 03/12/2008 a las 23:05
fuente por usuario

votos
2

Esto parece un poco extraño. Si usa el término "estado de la técnica" en su forma más común, está discutiendo una idea potencialmente patentable. Si ese es el caso, tienes:

1 / Publicó la idea, iniciando el tiempo en la presentación de la patente: asumo, tal vez incorrectamente, que tiene su sede en los Estados Unidos. Otras jurisdicciones pueden tener otras reglas.

2 / Le dijiste a todo el planeta tu idea, lo que significa que es inútil intentar patentarlo, a menos que actúes muy rápido.

Si no está pensando en patentar esto y solo estaba usando el término "estado de la técnica" en un sentido laico, me disculpo. Trabajo para una empresa que toma las patentes muy en serio y nos explica con gran detalle lo que podemos hacer con la información antes de presentarla.

Dicho esto, las ideas patentables deben ser novedosas, útiles y no obvias. Creo que su idea no pasaría en el tercero de estos ya que está describiendo un traductor de idiomas que tendría el estado de la técnica de los muchos convertidores pascal-to-c y fortran-to-c que existen.

El único atisbo de esperanza sería la capacidad de tu idea de generar uno de múltiples idiomas de salida (lo que p2c y f2c no hacen) pero creo que incluso eso estaría cubierto por los compiladores cruzados (como gcc) que a su vez fuente en uno de muchos lenguajes de objetos diferentes.

IBM tiene un producto llamado Visual Age Generator en el que codifica en un idioma (propietario) y se convierte en COBOL / C / Java / others para ejecutar en diferentes plataformas de destino, desde PC hasta los grandes mainframes System z de System z, así que está el primero problema (pensando en patentar una idea que IBM, la mayor patentadora del mundo, ya está usando).

Respondida el 04/12/2008 a las 00:07
fuente por usuario

votos
2

Toneladas de ellos. p2c, f2c y las implementaciones originales de C ++ y Objective C me llaman la atención de inmediato. Más allá de eso, es un poco difícil distinguir lo que estás describiendo de cualquier compilador, especialmente para nosotros los viejos, cuyos compiladores generaron código ASM para una represetación intermedia de todos modos.

Respondida el 04/12/2008 a las 00:54
fuente por usuario

votos
3

Sí, un programa que transforma un programa de una representación a otra no existe. Se llama un "compilador".

Y en cuanto a su pregunta si eso siempre es posible: siempre que su idioma de destino sea al menos tan poderoso como el idioma de origen, entonces es posible. Entonces, si su idioma de destino es Turing-completo, entonces siempre es posible, porque no puede haber un lenguaje que sea más poderoso que un lenguaje de Turing completo.

Sin embargo, no es necesario que haya una asignación tonta 1: 1.

Por ejemplo: el compilador Volta de Microsoft que compila código byte CIL a código fuente JavaScript tiene un problema: .NET tiene subprocesos, JavaScript no. Pero puede implementar hilos con continuaciones. Bueno, JavaScript tampoco tiene continuación, pero puedes implementar continuaciones con excepciones. Entonces, Volta transforma el CIL a CPS y luego implementa CPS con excepciones. (Las versiones más nuevas de JavaScript tienen semi-corotines en forma de generadores; también se podrían usar, pero Volta está pensado para trabajar en una amplia gama de versiones de JavaScript, incluido obviamente JScript en Internet Explorer).

Respondida el 04/12/2008 a las 09:22
fuente por usuario

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more