2008-10-12 15 views
6

Después de cambiar entre varios lenguajes de scripting esta semana, me encontré pensando en lo similares que son. Sin embargo, siempre busco a Google (o hoy SO) para recordar detalles como los equivalentes locales de "instanceof" y "endswith", o la sintaxis correcta para declarar una interfaz, o lo que sea.¿Cuáles serían los impedimentos para crear un lenguaje de scripting universal tipo "Europanto"?

Esto me recordó el lenguaje (humano) Europonto. Simplemente elija una sintaxis vagamente en inglés y un vocabulario vagamente romance/germánico/eslavo, ¡y todo está bien!

Entonces, ¿qué pasaría si intentáramos hacer lo mismo con un lenguaje de scripts? ¿En el estado de ánimo para bloques con sangría de estilo Python hoy? ¡Multa! ¿Quieres usar un objeto prototipo? ¡De acuerdo! ¿Solo puedo recordar cómo deletrear los nombres PHP de alguna función de biblioteca? ¡No hay problema!

De todos modos, esa es la idea loca y loca. Como necesitamos una pregunta que admita respuestas concretas, vamos a ajustarla así:

¿Cuáles serían los conflictos más importantes en la creación de un lenguaje de scripts que permitiera todas las funciones de sintaxis y biblioteca nativas de [Python, Ruby, PHP, Perl, shell y JavaScript], de forma tal que pueda entremezclar libremente bloques de código y nombres de funciones entre idiomas.

Y digamos que cualquier construcción en particular debe ser coherente en el nivel de extracto. Así que vamos a permitir:

foreach($foo as $bar) 
{ 
    if $foo == 2: 
     print "hi" 
} 

pero no, por ejemplo,

foreach($foo as $bar) 
{ 
    if $foo == 2: 
     print "hi" 
    endif 
end 

conflictos pueden incluir: ambigüedades del analizador; colisión del nombre; semántica conflictiva para objetos o funciones o cierres; etc. Supongo que el alcance será un problema descomunal, pero dígame.

Comenzaré esto como "wiki de la comunidad" desde el principio, así que si crees que es una pregunta divertida pero quieres hacerlo más riguroso, puedes editarlo.

+0

Nunca vi ese Europanto antes. Muy gracioso, puedo leer mucho de inmediato. Gracias por compartir el enlace ;) – OregonGhost

Respuesta

3

Sugeriría que el principal problema es reconocer cuál es la sintaxis de cada enunciado.

En cualquier caso, ¿cuál es el punto? Casi todos los lenguajes de scripting tienen facilidades para hacer las mismas cosas, y es por eso que las personas tienden a dominar una que usan de manera consistente y se apegan a ella.

0

He comenzado a ver que la sintaxis no es más que una propiedad de un idioma. Y la mayoría de ellos se ven como C para mí. El propósito de un lenguaje (orientado a objetos, mecanografía fuerte, etc.) es otra cosa. Empieza a parecer que la sintaxis no es el aspecto más importante.

Fui y leí la entrada de la Wikipedia ...

europanto es una broma lingüística presenta como una "lengua construida" con un vocabulario mezcolanza

"mezcolanza" sonidos ¡como me han descrito a Perl!

0

Encontré un rather detailed discussion of closures in Ruby. Parece que conseguir que el comportamiento de Ruby coexista con JavaScript o Python requeriría algún tipo de desambiguación desagradable.

Si alguien agregara Perl a la lista de idiomas que se cubrirán, creo que sus reglas de alcance léxico presentarían un problema relacionado?

1

La principal dificultad sería permitir que las personas lo mantengan. Con un lenguaje bien definido solo puede print de cierta manera y hacer sys.argv de cierta manera. una vez que permite múltiples sintaxis, no hay una manera sensata de buscar todos los sys.argv en la base de código que tiene.

1

Al nivel sintáctico el único problema que veo sería detectar qué bloque tiene el que la sintaxis, y luego separarlos y analizar con analizadores específicos. Por supuesto, dado declaraciones muy pequeñas podría haber ambigüedades en cuanto a qué idioma es y se podría argumentar que no importa, pero puede ser el caso, que en diferentes idiomas, la misma cadena de caracteres hace cosas diferentes, así que este podría ser un problema sutil.

En el nivel API, tendría muchos métodos diferentes para hacer lo mismo pero de una manera sutilmente diferente o subconjunto de hacerlo. Entonces, por ejemplo, no podrías tener la forma de hacer Java's string.startsWith() en PHP, por lo que harías algo diferente, o ninguna forma de hacer PHP strstr() (que devuelve una parte de la cadena desde la aguja encontrada hasta el final) y lo harías implementar algo diferente para eso o incluso pensar de manera diferente sobre el problema. Entonces tendrías que tener todos esos diferentes métodos API para hacer las mismas cosas y eso sería una gran API para implementar, apoyar y (Dios no lo quiera) aprender.

A nivel wetware el código escrito por otros sería totalmente ilegible a menos que sepa un montón de idiomas y sus diferencias sutiles. Creo que es bastante difícil aprender un solo lenguaje de programación hasta en los detalles más pequeños, por lo que no es práctico tener este tipo de bestia frankenstein creada. Puedo pensar en una excepción para usar como lenguaje de descripción de algoritmo que ya se usa en universidades de todo el mundo, donde el docente toma algún lenguaje de su agrado y lo hace legible para un humano sin necesidad de implementarlo. un analizador para eso.

Como nota al margen, creo que este tipo de sistema podría ser implementado en el mínimo esfuerzo por alguna manera la utilización de CLR de .NET donde se tiene una tonelada de diferentes idiomas cada compilación con el mismo código de bytes y el acceso a las mismas variables y esas cosas Todo lo que necesita hacer es dividir el código en clústeres de diferentes idiomas, luego compilarlos separadamente en sus respectivos compiladores y luego simplemente combinar el bytecode y de alguna manera asegurarse de que todos apunten a las mismas variables y funciones al mencionar los mismos nombres en los diferentes idiomas.

Cuestiones relacionadas