Estoy planeando escribir un GolfScript mejorado para programas aún más cortos que pueden hacer más cosas. Esto no es un desafío; Es una solicitud de retroalimentación y consejos sobre lo que debo hacer. (ver etiquetas)
No estoy seguro de si esto debería ser Community Wiki. Si crees que sí, solo marca un moderador para convertirlo :)
Este lenguaje será muy similar a GolfScript. Todavía está escrito en Ruby. Sin embargo, tiene algunas diferencias:
- Utilizándolo
`
como delimitador de cadena, porque es un carácter poco común, por lo que se necesitará menos escape. (Otro personaje puede reemplazar su función, como#
(más sobre eso más adelante)).\`
para escapar de un backtick,\\
para escapar de una barra diagonal inversa, y no hay otras secuencias de escape. Si necesita una nueva línea, simplemente pegue una nueva línea literal real en la cadena. - Usando Ruby's
Rational
s para punto flotante de precisión arbitraria, uno de los principales defectos de GolfScript. - La capacidad de convertir tipos a otros tipos. Por ejemplo, puede convertir un bloque en una cadena.
- Expresiones regulares. Probablemente creado con
"..."
. Los operadores también estarán sobrecargados por ellos. Por ejemplo,"\W"~{`Invalid: non-word character`}{`OK`}if
. Se ejecutará automáticamente cuando se empuje desde una variable, como bloques. - Objetos de archivo y fecha, para hacer más cosas que eran imposibles en GolfScript. Estos no tendrán literales, pero tendrán funciones para inicializarlos, como
`file.txt`fl
(el nombre de la función de creación de archivos puede cambiar). - Hashes tal vez, pero no estoy seguro de eso. ¿Debería?
- Funciones de ayuda para hacer aún más. Por ejemplo,
`http://example.com`net
para el acceso a la red (nuevamente, senet
puede cambiar el nombre del operador).rb
ejecutar una cadena como código Ruby. Habrá muchos más de estos; Sugerencias bienvenidas. - No hay comentarios, por lo que
#
puede usarse para otra cosa. Si quieres un comentario,`comment here`;
funcionará bien. (Tal vez#
pueda reemplazar`
la función de) - Se reescribirá por completo de manera que sea mucho más fácil agregar funciones. Básicamente, el código será más legible. (¿Has visto la fuente de GolfScript?
:/
) - Estará en Github para que se pueda trabajar en colaboración. Lo licenciaré bajo MIT o algo así.
- No hay una nueva línea final, por lo que las quines truculentas funcionan: P
Y los estoy diferenciando porque creo que son los cambios más drásticos y útiles (excepto quizás agregar punto flotante):
- Tendrá muchas funciones de Ruby integradas. Por ejemplo,
shuffle
(que puede abreviarse comosf
) (anteriormente tomaba 9 caracteres ),tr
(anteriormente 14 caracteres ),sample
(sm
, previamente.,rand=
),flatten
(fl
, anteriormente ???), etc. - Será aplastado, como Rebmu. Por ejemplo, ahora puede hacerlo
~:a0<{0a-}aIF
(usando un nombre de variable de letra) en lugar de~:$0<{0$-}$if
(sobrescribiendo la función de clasificación). (ejemplo de aquí ). Tenga en cuenta que de esta manera, no distingue entre mayúsculas y minúsculas, y no se permiten números en los nombres de variables. Esto está bien en mi opinión ya que es un lenguaje de golf: P - Tendrá depuración. Agregaré la capacidad de proporcionar un indicador que especifique delimitadores de matriz, delimitadores de elementos, etc., salida de número (racional, flotante o int?), Siguiendo las instrucciones de una en una, tokenizando y generando cada token en lugar de ejecutar el programa, etc.
Entonces, mi pregunta es: ¿qué hay para mejorar? ¿Qué crees que debería agregar?
¿Alguna otra idea para esto, antes de comenzar a codificarlo?