Estou planejando escrever um GolfScript aprimorado para programas ainda mais curtos que podem fazer mais coisas. Isto não é um desafio; é um pedido de feedback e dicas sobre o que devo fazer. (ver tags)
Não tenho certeza se esse deve ser o Wiki da comunidade. Se você acha, basta sinalizar para um moderador convertê-lo :)
Essa linguagem será muito semelhante ao GolfScript. Ainda está escrito em Ruby. No entanto, há algumas diferenças:
- Usando
`
como um delimitador de string, por ser um caractere incomum, será necessário menos escape. (Outro personagem pode substituir sua função, como#
(mais sobre isso mais tarde)).\`
para escapar de um backtick,\\
para escapar de uma barra invertida e não há outras seqüências de escape. Se você precisar de uma nova linha, basta inserir uma nova linha literal na string. - Usando Ruby's
Rational
para o ponto flutuante de precisão arbitrária, uma das principais falhas do GolfScript. - A capacidade de converter tipos para outros tipos. Por exemplo, você pode converter um bloco em uma string.
- Expressões regulares. Provavelmente criado com
"..."
. Os operadores também serão sobrecarregados. Por exemplo"\W"~{`Invalid: non-word character`}{`OK`}if
,. Será executado automaticamente quando pressionado de uma variável, como blocos. - Objetos File e Date, para fazer mais coisas impossíveis no GolfScript. Eles não terão literais, mas terão funções para inicializá-los, como
`file.txt`fl
(o nome da função de criação de arquivo pode mudar). - Hashes talvez, mas não tenho certeza disso. Eu devo?
- O Helper funciona para fazer ainda mais. Por exemplo,
`http://example.com`net
para acesso à rede (novamente, onet
operador pode ser renomeado).rb
para executar uma string como código Ruby. Haverá muito mais desses; sugestões bem-vindas. - Sem comentários, para que
#
possa ser usado para outra coisa. Se você quiser um comentário,`comment here`;
funcionará bem. (Talvez#
possa substituir`
a função) - Ele será completamente reescrito de forma que será muito mais fácil adicionar funções. Basicamente, o código será mais legível. (Você viu a fonte GolfScript?
:/
) - Ele estará no Github para que possa ser trabalhado em colaboração. Vou licenciá-lo no MIT ou algo assim.
- Nenhuma nova linha final, portanto, as cotações mais baratas funcionam: P
E eu estou separando essas coisas porque acho que são as mudanças mais drásticas e úteis (exceto, talvez, a adição de ponto flutuante):
- Ele terá muitas funções Ruby integradas. Por exemplo,
shuffle
(que pode ser abreviado parasf
) (assumiu 9 caracteres anteriormente ),tr
(anteriormente 14 caracteres ),sample
(sm
, anteriormente.,rand=
),flatten
(fl
anteriormente ???), etc. - Será esmagado, como Rebmu. Por exemplo, agora você pode fazer
~:a0<{0a-}aIF
(usando um nome de variável de letra) em vez de~:$0<{0$-}$if
(substituir a função de classificação). (exemplo daqui ). Observe que, dessa maneira, não diferencia maiúsculas de minúsculas, e números não são permitidos em nomes de variáveis. Tudo bem na minha opinião, pois é uma linguagem de golfe: P - Ele terá depuração. Adicionarei a capacidade de fornecer um sinalizador especificando delimitadores de matriz, delimitadores de elemento etc., saída de número (racional, float ou int?), Percorrendo as instruções uma por vez, tokenizando e emitindo cada token em vez de executar o programa, etc.
Então, minha pergunta é: o que há para melhorar? O que você acha que devo adicionar?
Alguma outra idéia para isso, antes de começar a codificá-lo?