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?
Respuesta
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 ...;)
y "set -o nounset" desde el principio en el script ... – dannysauer
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. –
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
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.
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 –
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
Groovy. Por defecto es dinámico, escrito a pato. Pero también es compatible con la tipificación estática.
- 1. Crear un lenguaje de scripting
- 2. lenguaje de programación de scripting más rápido?
- 3. Uso de Groovy como lenguaje de scripting
- 4. fsi.exe Ensamblaje: ¿Alguien sabe cómo incrustarlo?
- 5. IronRuby como lenguaje de scripting en .NET
- 6. Lenguaje de scripting para C/C++?
- 7. Python como lenguaje de scripting web?
- 8. ¿Alguien sabe de un generador de paquetes?
- 9. ¿Alguien sabe de alguna colección de sprites?
- 10. ¿Alguien sabe qué significa advapi?
- 11. manera más eficiente de analizar este lenguaje de scripting
- 12. ¿Alguien sabe de un buen explorador OData?
- 13. ¿Alguien sabe algo acerca de OLAP Internals?
- 14. ¿Alguien sabe algún buen tutorial de silverlight?
- 15. ¿Alguien sabe el estado actual de Graphics32?
- 16. tutoriales o introducciones para escribir un lenguaje de scripting simple?
- 17. Lua como lenguaje de scripting de propósito general?
- 18. ¿Cuál es su lenguaje de scripting preferido en Java World (lenguaje de scripting en JVM) y forma?
- 19. ¿Alguien sabe cómo utilizar PagerTitleStrip en Android
- 20. ¿Alguien sabe de un conjunto de enlaces C# para FFMPEG?
- 21. ¿Qué lenguaje de scripting usar para scripts de utilidad?
- 22. Lenguaje de scripting para el desarrollo de la estrategia comercial
- 23. Depuración de un lenguaje de scripting como ruby
- 24. ¿Hay algún lenguaje estático de tipo pato?
- 25. ¿Alguien sabe algo como RSPec para PHP?
- 26. ¿Alguien sabe cómo google Analytics procesa datos?
- 27. Android: ¿Alguien sabe cómo capturar video?
- 28. Alguien sabe qué tumblr está escrito en
- 29. ¿Alguien sabe cómo implementar el protocolo NSFastEnumeration?
- 30. ¿Alguien sabe algún tutorial stm32 muy básico?
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
@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). –
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. –