2009-02-16 21 views
12

Estoy a punto de comenzar una distribución de linux basada en LFS solo para un proyecto de hobby. Planeo hacer algunas tareas muy no estándar, y la mayor parte implicará cambiar casi todos los scripts en la distribución. (principalmente scripts de inicio, pero también escribiré un conjunto simple de scripts del gestor de paquetes.) Ya que voy a ir tan lejos de la norma, y ​​dado que nunca he sido fanático de los lenguajes de tipo dinámico (perl, Python, bash y el resto son buenos, pero no es mi fuerte), me preguntaba si alguien sabía de un lenguaje interpretado que en realidad tiene variables declaradas.¿Alguien sabe de cualquier lenguaje de scripting estático?

+0

Python está fuertemente tipado. No es dinámico No puede agregar un número y una cadena de forma silenciosa sin conversión explícita. – George

+2

@gdivos: Python está fuertemente tipado * y * dinámico.Es dinámico porque puede intentar llamar a cualquier función con cualquier argumento de tipo, y no se detectará un tipo de parámetro no coincidente hasta el tiempo de ejecución. Un lenguaje estático detectaría ese problema en tiempo de compilación (o al menos, antes del tiempo de ejecución). –

+1

No existe el lenguaje interpretado. Todos los lenguajes pueden ser implementados por un compilador o un intérprete. Y, de hecho, la gran mayoría de los lenguajes de programación tienen al menos una implementación de cada uno. Además, la mayoría de las implementaciones de idiomas modernos tienen tanto un compilador como un intérprete. Como mencionas a Haskell: Hugs es un intérprete de Haskell. V8 es un compilador de JavaScript. PowerShell de Microsoft es un compilador. Hace un par de años, los desarrolladores de Bash estaban pensando en cambiar a una implementación compilada. HotSpot JVM es tanto un intérprete como un compilador. –

Respuesta

0

Buscar en a la orden de "componer" en la shell favorito. bash y ksh93 pueden aplicar números enteros y cadenas, usar referencias (variables variables), etc. Con ksh93, también puedes hacer cálculos de punto flotante y usar objetos con atributos. La tipificación estática realmente no le compra nada útil en los guiones de inicio y similares. Principalmente leerá archivos y ejecutará comandos del sistema, que es en lo que el caparazón es realmente bueno. Tómese su tiempo con el libro O'Reilly "learning the Korn Shell" antes de decidir que todos esos otros Unixes están estúpidamente diseñados ...;)

+0

y "set -o nounset" desde el principio en el script ... – dannysauer

+0

Esta es una sugerencia terrible. Si el OP no usa lenguajes dinámicos, va a * odiar * las secuencias de comandos de shell. Son mucho más dinámicos que cualquier otro lenguaje de scripting. –

+1

Esta respuesta proporciona una sugerencia para aplicar tipos dentro de un idioma que el OP ya conoce y en el que los guiones de inicio ya están escritos. Supongo que obtendría más votos si hubiera dicho "esto es imposible" o "aquí, usa este lenguaje del que tres personas han oído hablar", :) – dannysauer

1

F# proporciona una combinación de "tipo de seguridad, concisión, rendimiento, expresividad y scripting".

+0

F # no es un lenguaje de script. – shoosh

+3

¿Qué define un lenguaje de scripting? Sintaxis ligera? ¿REPL? F # tiene esos ... – Brian

+0

interpretados en lugar de compilados. – shoosh

6

Normalmente, los lenguajes tipados estáticos son lenguajes compilados. Supongo que la razón es que el análisis estadístico de los tipos es bastante costoso y debe tener una visión detallada de todo el código que está procesando. Después de haber hecho eso, se siente como un desperdicio no escribir toda esa información en un archivo, para que no tenga que volver a hacerlo la próxima vez. Entonces terminas rápidamente con un lenguaje compilado.

Por otro lado, convertir un lenguaje compilado en uno "no compilado" es bastante fácil. Simplemente no almacena los resultados de la compilación en ningún lado, sino que los ejecuta directamente. Un compilador que conozco que proporciona dicho envoltorio es GHC, el compilador estándar Haskell. Puede agregar #!/usr/bin/runhaskell a sus archivos fuente y luego ejecutarlos directamente. Y como planea estar lejos de la norma, Haskell parece encajar perfectamente;). Pero espere un tiempo de inicio bastante grande para sus scripts, ya que todo el análisis y la optimización de "tiempo de compilación" no es gratuito.

Haskell no está hecho para el shell scripting y es un lenguaje funcional, por lo que si nunca lo ha visto antes, puede llevarle tiempo acostumbrarse. Pero tiene muy poca carga sintáctica y la fuerza de los lenguajes funcionales es la abstracción, por lo que no veo por qué no podría crear una biblioteca que haga que las secuencias de comandos de shell sean divertidas. Incluso hay algunos experimental Haskell shell, pero parece ser más una prueba de concepto que una solución real.

En general, diría que la sobrecarga de todo el análisis de tipo es significativa, pero le sugiero que elija su lenguaje compilado tipicamente tipificado favorito y busque un contenedor como runhaskell para ejecutar los scripts escritos en él.

+7

No existe el * idioma compilado *. Todos los lenguajes pueden ser implementados por un compilador o un intérprete. Y, de hecho, la gran mayoría de los lenguajes de programación tienen al menos una implementación de cada uno. Además, la mayoría de las implementaciones de idiomas modernos tienen * tanto * un compilador * como * un intérprete. Como mencionas a Haskell: Hugs es un intérprete de Haskell. V8 es un compilador de JavaScript. PowerShell de Microsoft es un compilador. Hace un par de años, los desarrolladores de Bash estaban pensando en cambiar a una implementación compilada. El HotSpot JVM es un intérprete y un compilador –

2

Google rápido. F3, JavaFX script, Linden Scripting Language (secuencias de comandos para la segunda vida), a diferencia de la observación sobre la primera respuesta F # puede ser utilizado como un lenguaje de script http://blogs.msdn.com/chrsmith/archive/2008/09/12/scripting-in-f.aspx

Felix, Tuga, CFGScript, talco, AngelScript, y adivinar que hay más que esa búsqueda rápida.

Douglas

1

Groovy. Por defecto es dinámico, escrito a pato. Pero también es compatible con la tipificación estática.

Cuestiones relacionadas