Agena é uma linguagem de programação procedural de código aberto, livre, multiplataforma e fácil de aprender projetada para o uso diário. Ele pode ser usado em ambientes gráficos, científicos, linguísticos e educacionais, bem como em aplicativos de script, suportando todos os principais sistemas operacionais.
Oferece inúmeras facilidades de controle de fluxo
O aplicativo oferece diversos recursos de controle de fluxo, como se, então. Elif, outras condições, caso de e outras condições, é operador, numérico para, de, para e por loops, numéricos combinados para e while loops, para e em loops, while e do / as loops, uma instrução skip, uma quebra declaração, bem como validação de tipo de dados.
Fornece atribuições de enumeração
Entre outros recursos, podemos mencionar uma biblioteca matemática de precisão arbitrária, fácil configuração de seu ambiente pessoal, um sistema de pacotes fácil de usar, atribuições de enumeração, controle de escopo através das palavras-chave epocs / scope e muitos outros recursos atraentes.
Sob o capô e a disponibilidade
Uma rápida olhada nos bastidores nos mostrará que o projeto está escrito nas linguagens de programação C, BASIC, Lua e ALGOL 68, o que significa que sua sintaxe se assemelha à sintaxe desses projetos. Ele é executado inteiramente em um ambiente console / terminal, o que significa que não possui interface gráfica de usuário (GUI).
Envia um editor simples
Apesar do fato de que o software Agena é um aplicativo de linha de comando, ele vem com um software gráfico de edição simples, chamado AgenaEdit, que apresenta um ambiente Agena integrado e recursos de realce de sintaxe. É fortemente inspirado por um editor similar desenvolvido por Bill Spitzak para o toolkit de C ++ GUI de plataforma cruzada FLTK.
Funciona em Raspberry Pi
Os recursos gráficos da Agena são suportados nos sistemas operacionais GNU / Linux, Solaris, Mac OS X, Microsoft Windows, eComStation - OS / 2 e DOS. Ele pode ser facilmente implantado em plataformas de hardware de 64 bits e 32 bits e foi testado com êxito na placa de computador Raspberry Pi baseada em ARM.
O que há de novo em esta versão:
- nova função Calculus and Statistics
O que há de novo na versão:
- nova função de cálculo e estatística
O que há de novo na versão 2.9.4:
- nova função Calculus and Statistics
O que há de novo na versão 2.8.5:
- nova função Calculus and Statistics
O que há de novo na versão 2.8.2:
- nova função Calculus and Statistics
O que há de novo na versão 2.6.1:
- O `stats.chauvenet` agora pode verificar especificamente outliers inferiores ou superiores passando a opção `outlier = 'lower'` ou` outlier =' upper'`, respectivamente.
- `bags.remove` causou falhas de segmentação. Isso foi consertado. Além disso, todas as funções `bags` implementadas em C foram alteradas internamente.
- Os metamétodos (não documentados) para `+`, `-` e` * `não funcionaram se o pacote` bags` não foi invocado com a função `with` ou com a declaração` import / alias`. Isso foi corrigido.
O que há de novo na versão 2.5.4:
O
- `stats.chauvenet` agora pode verificar especificamente os valores mais baixos ou mais altos, passando a opção` outlier = 'lower'` ou `outlier =' upper'`, respectivamente.
- `bags.remove` causou falhas de segmentação. Isso foi consertado. Além disso, todas as funções `bags` implementadas em C foram alteradas internamente.
- Os metamétodos (não documentados) para `+`, `-` e` * `não funcionaram se o pacote` bags` não foi invocado com a função `with` ou com a declaração` import / alias`. Isso foi corrigido.
O que há de novo na versão 2.5.3:
- o `stats.chauvenet` agora pode verificar especificamente outliers inferiores ou superiores passando a opção `outlier = 'lower'` ou` outlier =' upper'`, respectivamente.
- `bags.remove` causou falhas de segmentação. Isso foi consertado. Além disso, todas as funções `bags` implementadas em C foram alteradas internamente.
- Os metamétodos (não documentados) para `+`, `-` e` * `não funcionaram se o pacote` bags` não foi invocado com a função `with` ou com a declaração` import / alias`. Isso foi corrigido.
O que há de novo na versão 2.4.2:
- `stats.chauvenet` agora pode verificar especificamente os valores mais baixos ou mais altos, passando a opção` outlier = 'lower'` ou `outlier =' upper'`, respectivamente.
- `bags.remove` causou falhas de segmentação. Isso foi consertado. Além disso, todas as funções `bags` implementadas em C foram alteradas internamente.
- Os metamétodos (não documentados) para `+`, `-` e` * `não funcionaram se o pacote` bags` não foi invocado com a função `with` ou com a declaração` import / alias`. Isso foi corrigido.
O que há de novo na versão 2.3.0 RC1:
- Os laços numéricos `for` agora suportam a palavra-chave 'downto' para que você possa fazer uma contagem regressiva sem usar um tamanho de passo negativo 'by' obrigatório. No contexto "downto", o tamanho do passo "by" deve ser sempre positivo. 'from' start e 'to' stop values são obrigatórios ao usar a palavra-chave `downto '.
- Os metamétodos '__finite', '__entier' e '__sqrt' não são mais suportados. Em vez disso, três novos metathods para operações em estruturas foram adicionados: '__union' para operações de união, '__intersect' para determinar interseções e '__minus' para diferenças. Assim, o pacote `bags` agora também suporta essas três operações.
- O operador `` integer division não suportava seu metamétodo e usava o do divisor float (operador `/`). Isso foi corrigido.
- A nova função `stats.gini` determina o coeficiente de Gini, uma medida de (in) igualdade.
- A nova função `stats.zscore` retorna uma função que calcula o z-score (pontuação padrão) de uma amostra - o número de desvios-padrão que a amostra está acima ou abaixo da média de uma distribuição.
- `stats.sorted` agora, por padrão, usa o algoritmo Introsort em vez de Quicksort. Isso pode acelerar o tempo de computação três vezes em situações mal condicionadas (onde o Quicksort precisaria de operações O (n ^ 2)), sem sacrificar o desempenho em situações comuns. Na verdade, o Introsort usa o Quicksort por padrão e alterna automaticamente para o Heapsort se a profundidade da recursão atingir 2 * log (n, 2), onde n é o número de elementos em uma estrutura.
- Você pode substituir essa lógica passando a nova opção 'quicksort', que usa exclusivamente o método recursivo Quicksort tradicional para classificar números. Além disso, o `stats.sorted` agora também pode usar o algoritmo Heapsort exclusivamente se a nova opção 'heapsort' estiver sendo passada, e um algoritmo Quicksort não-recursivo criado por Niklaus Wirth com a nova opção 'nrquicksort'.
- A nova função `stats.meanmed` retorna a média aritmética e a mediana de uma distribuição ou, alternativamente, o quociente da média e da mediana, acelerando os tempos de computação quando esses valores são necessários em torno de 20%.
- Melhorou a mensagem de erro do operador `size`.
O que há de novo na versão 2.1.1:
- Novas funções e correções:
- `try / catch`: especificação explícita de uma variável de erro logo após o token` catch` ser agora opcional. Se nenhuma variável de erro é dada, então a mensagem de erro é automaticamente armazenada na variável local `lasterror`, e a palavra-chave` then` deve ser omitida:
- & gt; tente
- & gt; erro ('oops!')
- & gt; pegar
- & gt; print (lasterror)
- & gt; yrt;
- oops!
- A instrução `try / catch` às vezes não funcionava em procedimentos (variável de erro não atribuída). Isso foi corrigido.
- A nova função `net.wget` faz o download de páginas HTML da Web.
- Ajustado `skycrane.counter` por 10%. A função agora aplica opcionalmente o Kahan-Ozawa ao invés do algoritmo original de soma Kahan se o novo terceiro argumento for a string 'ozawa'. As fontes C correspondentes foram modificadas para impedir a otimização do compilador, o que poderia cancelar as otimizações também.
- `argerror` agora imprime o nome do tipo definido pelo usuário de um valor recebido em sua mensagem de erro. Se um valor não tiver um tipo definido pelo usuário, seu tipo básico será emitido.
- A nova opção 'a' para `debug.getinfo` retorna o número de argumentos esperados por um procedimento, graças ao LuaPowerPatch de Rob Hoelz.
- Mensagem de erro "índice fora do intervalo" melhorada para cadeias de caracteres.
- Modificado os arquivos `stats.agn`,` linalg.agn`, `library.agn` e` ansi.agn` em relação ao seu tratamento de erros.
O que há de novo na versão 2.1.0:
- Para um novo tipo de tratamento de erros, a nova instrução `try / catch` foi introduzida. Foi inventado e escrito por Hu Qiwei para Lua 5.1 em 2008.
- Em geral, qualquer declaração em que uma exceção possa ser esperada pode ser colocada em uma cláusula `try`. Se um erro for emitido, gerado por uma chamada explícita para a função `error` ou para qualquer outra expressão, função ou instrução, o controle imediatamente salta para a cláusula` catch` correspondente se presente ou para o final do arquivo `try / yrt `instrução se nenhuma cláusula` catch` foi dada, ignorando quaisquer outras instruções subseqüentes na cláusula `try`.
- As facilidades de negociação de erro `protect / lasterror` ainda são e sempre serão suportadas. A nova instrução de controle também funciona com as declarações `break`,` skip`, `redo` e` return` perfeitamente.
- A nova instrução `redo` reinicia a iteração atual de um loop` for / to` e `for / in` desde o início.
- O novo operador `recip` retorna o inverso de um número x. É equivalente à expressão 1 / x, mas mais rápido.
- A nova função `stats.ema` calcula a média móvel exponencial de uma distribuição. A nova função `stats.gema` retorna uma função iteradora que retorna a respectiva média móvel exponencial de uma distribuição.
- `*%`, `+%` e `-%` retornaram `undefined` ao invés de um resultado correto se o operando direito tivesse sido zero. Isso foi corrigido.
- Corrigida uma mensagem de erro em `net.survey`.
- Mensagens de erro aprimoradas para indexação fora do intervalo de pares e strings.
- Nas versões ANSI, Solaris e DOS, o operador `int` foi ajustado.
- A nova função da API C, `agn_arraytoseq`, converte uma matriz numérica em uma sequência e coloca essa nova seqüência no topo da pilha.
- Atualizou o manual.
O que há de novo na versão 2.1.0 RC:
- A nova instrução `redo` reinicia a iteração atual de um loop` for / to` e `for / in` desde o início. Exemplo:
- & gt; flag: = true; & gt; para j em [10, 11, 12] fazer & gt; print ('antes de', j, flag); & gt; se flag e j = 11 então & gt; bandeira clara; & gt; print ('- & gt;', j, sinalizar, 'retroceder') & gt; refazer & gt; fi; & gt; print ('depois de', j, bandeira) & gt; até j & gt; 12; antes de 10 true depois de 10 true antes de 11 true - & gt; 11 false pula para trás antes de 11 false depois de 11 false antes de 12 false depois de 12 false
- O novo operador `recip` retorna o inverso de um número x. É equivalente à expressão 1 / x, mas mais rápido.
- A nova função `stats.ema` calcula a média móvel exponencial de uma distribuição. A nova função `stats.gema` retorna uma função iteradora retornando a respectiva média móvel exponencial de uma distribuição. Para o seu uso, por favor, dê uma olhada no arquivo de origem src / stats.c, funções C * ema.
- `*%`, `+%` e `-%` retornaram `undefined` ao invés de um resultado correto se o operando direito tivesse sido zero. Isso foi corrigido.
- Corrigida uma mensagem de erro em `net.survey`.
- A nova função da API C, `agn_arraytoseq`, converte uma matriz numérica em uma sequência e envia essa nova seqüência ao topo da pilha.
O que há de novo na versão 2.0.0:
- Novas declarações e funções:
- O Agena 2.0 é compatível com o Agena 1.12, exceto que os tokens `import`,` alias`, `until` e` onsuccess` são agora palavras-chave e não podem mais ser usados como variáveis. Atualmente, existem instaladores do Solaris, do Debian (x86, PowerPC, Raspberry Pi), do Windows, do Mac e do DOS disponíveis para o 2.0, incluindo um Primer and Reference atualizado que explica todos os novos recursos em detalhes.
- As novas variantes de loop `para / as` e` for / until` verificam uma condição no final da iteração atual e iniciam a próxima iteração ou deixam o loop. Isso funciona com loops 'for / to', assim como 'for / in'. De fato, ambas as variantes executam um loop pelo menos uma vez até que a condição dada esteja sendo verificada.
- Exemplos:
- & gt; para eu fazer 5 a
- & gt; imprimir (i)
- & gt; como eu & lt; 3
- & gt; para i em [1, 2, 3, 4, 5] fazer
- & gt; imprimir (i)
- & gt; até que eu & gt; = 3
- O novo loop `do / until` faz a iteração até que uma determinada condição seja atendida:
- & gt; c: = 0;
- & gt; fazer
- & gt; inc c;
- & gt; imprimir (c)
- & gt; até c & gt; = 3
- Em loops numéricos `for`, a cláusula` to` pode não ser mais fornecida. Em vez disso, ao deixar de fora a cláusula `to`, o loop itera até que o maior número representável em sua plataforma, em C HUGE_VAL, seja alcançado:
- & gt; porque eu faço
- & gt; imprimir (i)
- & gt; od
- A nova cláusula `onsuccess` nas declarações` if` e `case` executa uma parte se pelo menos uma das condições for verdadeira. Exemplos:
- & gt; flag: = false;
- & gt; se 1 = 0 então
- & gt; imprimir (0)
- & gt; elif 1 = 1 então
- & gt; imprimir (1)
- & gt; onsucesso
- & gt; sinalizador: = true
- & gt; mais
- & gt; print (-1)
- & gt; fi;
- & gt; impressão (bandeira);
- true
- & gt; flag: = false;
- & gt; se 1 = 0 então
- & gt; imprimir (0)
- & gt; elif 1 = 0 então
- & gt; imprimir (1)
- & gt; onsucesso
- & gt; sinalizador: = true
- & gt; mais
- & gt; print (-1)
- & gt; fi;
- & gt; impressão (bandeira);
- falso
- & gt; flag: = false;
- & gt; a: = 2;
- & gt; caso um
- & gt; de 1 então
- & gt; imprimir (1)
- & gt; de 2 então
- & gt; imprimir (2)
- & gt; onsucesso
- & gt; sinalizador: = true
- & gt; mais
- & gt; print (-1)
- & gt; esac;
- & gt; impressão (bandeira);
- true
- A nova declaração `import` permite importar uma ou mais bibliotecas sem colocar seus nomes entre aspas, por exemplo "import calc, stats" é equivalente a "readlib ('calc', 'stats')".
- A opção `alias` para a declaração` import` atribui um ou mais nomes abreviados às funções da biblioteca inicializadas, por exemplo, "import calc alias xpdiff" é equivalente a "com ('calc', 'xpdiff')" e "import calc alias" é equivalente a "with ('calc')".
- O novo operador `..` permite indexar tabelas mesmo que seu operando do lado esquerdo seja avaliado como` null`. Neste caso, `null` é retornado e nenhum erro` tentativa de indexar o campo ... (um valor nulo) `é emitido. É semelhante à função `getentry`, mas é três vezes mais rápida. Exemplos:
- & gt; criar tabela a;
- & gt; a.b:
- nulo
- & gt; a.b.c:
- Erro no stdin, na linha 1:
- tentativa de indexar o campo `b` (um valor nulo)
- & gt; a..b..c:
- nulo
- & gt; criar tabela a;
- & gt; a [1]:
- nulo
- & gt; a [1] [2]:
- Erro no stdin, na linha 1:
- tentativa de indexar o campo `?` (um valor nulo)
- & gt; um .. [1] .. [2]:
- nulo
- A nova função `drem` avalia o restante de uma divisão inteira x / y, mas ao contrário de` irem`, arredonda o quociente interno x / y para o inteiro mais próximo ao invés de para zero.
- A nova função `skycrane.todate` retorna a data e a hora atuais como uma string formatada.
- A nova função `io.truncate` trunca um arquivo na posição atual do arquivo.
- A nova função `io.move` altera a posição do arquivo para um determinado número de caracteres à esquerda ou à direita.
- A nova função `io.filesize` retorna o tamanho de um arquivo.
- `readlib` agora aceita strings apenas como argumentos. Os números não são mais permitidos.
- Se o último argumento para `with` for o booleano` false`, a função não escreve nomes abreviados atribuídos ao console (stdout).
- `strings.fields` agora também aceita uma sequência de números de índice. No entanto, ele não aceita mais o índice '0'.
- O instalador Debian do Raspberry Pi Wheezy agora inclui o pacote gráfico `gdi`.
- O arquivo `change.log` agora é exibido corretamente no Windows.
O que há de novo na versão 2.0.0 RC3:
- As novas variantes de loop `para / as` e` for / until` verificam uma condição no final da iteração atual e iniciam a próxima iteração ou deixam o loop. Isso funciona tanto para / a quanto para loops / in.
O que há de novo na versão 2.0.0 RC2:
- As novas variantes de loop `para / as` e` for / until` verificam uma condição no final da iteração atual e iniciam a próxima iteração ou deixam um loop. Isso funciona tanto para / a quanto para loops / in.
O que há de novo na versão 2.0.0 RC1:
- A nova declaração `import` permite importar uma ou mais bibliotecas sem colocar seus nomes entre aspas, por exemplo "import calc, stats" é equivalente a "readlib ('calc', 'stats')".
- A opção `alias` para a declaração` import` atribui um ou mais nomes abreviados às funções da biblioteca inicializadas, por exemplo, "import calc alias xpdiff" é equivalente a "com ('calc', 'xpdiff')" e "import calc alias" é equivalente a "with ('calc')".
- O novo operador `..` permite indexar tabelas mesmo que seu operando do lado esquerdo seja avaliado como` null`. Neste caso, `null` é retornado e nenhum erro` tentativa de indexar o campo ... (um valor nulo) `é emitido. É semelhante à função `getentry`, mas é três vezes mais rápida.
O que há de novo na versão 1.12.9:
- As novas funções `io.getclip` e` io.putclip` trocam textos entre o Agena e a área de transferência (somente Windows).
- `stats.prange` foi reescrito em C e se tornou até 60% mais rápido.
- `os.cpuinfo` agora retorna informações corretas e mais informações sobre sistemas baseados em ARM.
- Nos sistemas DOS e UNIX, incluindo o Mac OS X e apenas no domínio complexo, a exponenciação da base 0 ao expoente 0 + r * I, com r qualquer flutuante diferente de zero, retornou `undefined` em vez de 0. Isso foi corrigido.
- Nos sistemas DOS e UNIX, incluindo o Mac OS X e somente no domínio complexo, a exponenciação da base 0 ao expoente r + 0 * I, com r qualquer float positivo, retornou `undefined` em vez de 0. Isso tem foi corrigido.
- `stats.obcount` e` stats.obpart` não puderam incluir valores no subintervalo mais à direita. Isso foi corrigido.
- `calc.nakspline`,` calc.naksplinecoeffs`, `calc_clampedspline` e` calc_clampedsplinecoeffs` provocaram falhas de segmentação se chamadas com uma estrutura que continha poucos pontos, ou seja, pares. Isso foi corrigido retornando `fail` nesses casos.
- Erros potenciais de desalocação de memória foram removidos de `calc.neville`,` calc.interp`, `calc.newtoncoeffs`,` calc.naksplinecoeffs`, `calc.clampedsplinecoeffs`,` calc.nakspline`, e `calc.clampedspline`.
- A nova função da API C `agn_checkinteger` verifica se um argumento é um número e um inteiro e - ao contrário do` luaL_checkinteger` - emite um erro de outra forma.
O que há de novo na versão 1.9.0:
- A nova função `alternate` retorna seu primeiro argumento se seu segundo argumento for` null`. Caso contrário, retorna seu segundo argumento.
- A opção -b para o executável do Agena foi removida, já que sua saída era igual à opção -v.
- As versões Windows e UNIX / Mac de `strings.utf8size` continham um potencial vazamento de memória; isso foi mudado.
- Todas as DLLs / SOs binárias das bibliotecas plus não contêm mais códigos não utilizados, diminuindo seus tamanhos em até 10%, dependendo do sistema operacional. O makefile e as fontes que importavam anteriormente arquivos de cabeçalho não utilizados foram alterados. Por exemplo, isso reduz o tamanho dos binários do Windows em 55 kBytes.
- Estendido o conjunto de testes.
- Atualizou os arquivos de esquema.
O que há de novo na versão 1.6.0:
- Novas funções e recursos:
- A nova função `checktype` determina se todos os valores em uma estrutura são de um determinado tipo.
- A nova função `isint` verifica se todos os seus argumentos são inteiros.
- A nova função `strings.dleven` retorna a distância Damerau-Levenshtein de duas strings.
- A nova função `stats.ad` determina o desvio absoluto de todos os valores em uma estrutura.
- A nova função `stats.countentries` conta o número de ocorrências de todos os elementos em uma estrutura.
- A nova função `stats.deltalist` retorna uma estrutura dos deltas dos respectivos elementos vizinhos.
- A nova função `stats.gmean` retorna a média geométrica de uma estrutura.
- A nova função `stats.hmean` retorna a média harmônica de uma estrutura.
- A nova função `stats.ios` retorna um indicador comprovado de estabilidade em uma distribuição.
- A nova função `stats.iqr` retorna o intervalo interquartílico.
- A nova função `stats.issorted` verifica se todos os números em uma estrutura são classificados em ordem crescente.
- A nova função `stats.moment` calcula o momento dos dados fornecidos sobre uma origem.
- A nova função `stats.numbperm` retorna o número de permutações.
- A nova função `stats.percentile` determina os percentis.
- A nova função `stats.skewness` retorna a assimetria, um indicador da simetria de uma distribuição de probabilidade.
- A nova função `stats.sumdata` resume todos os poderes de uma estrutura sobre uma origem.
- `stats.tovals` agora é uma função da biblioteca C e, portanto, é até 40% mais rápida.
- Com uma tabela ou sequência vazia, `stats.qmean`,` stats.mean`, `stats.gmean`,` stats.sd`, `stats.median`,
- `stats.var` agora retorna falha.
- O tamanho máximo de uma linha de entrada no interpretador autônomo foi alterado de 512 para 2048 caracteres.
- A nova variável de ambiente `environ.maxpathlength` armazena o número máximo de caracteres para um caminho de arquivo (excluindo o caractere de C).
- As novas variáveis de ambiente `environ.minnumber` e` environ.maxnumber` contêm o valor mínimo e máximo que um número Agena (atualmente um ANSI-C duplo) pode armazenar.
- A nova variável de ambiente `environ.umaxlong` inclui o valor integral máximo do tipo C sem sinal de longa duração em sistemas de 32 + bits e o tempo não assinado em máquinas de 16 bits.
- API C:
- 100% de compatibilidade da API Agena C com a API C de Lua foi restabelecida com a introdução das funções de despejo de Lua *. Assim, agora você pode armazenar funções em uma representação binária, por exemplo, usando `strings.dump` ou lua_dump no nível C.
- Introduzida a nova função `agnL_optboolean` para verificar argumentos booleanos opcionais e devolvê-los em caso de sucesso.
- Correções de bugs:
- `environ.globals` sempre sai com um erro, isso foi corrigido.
- `assume` retornou falso com ambos os argumentos sendo ou avaliando como 'indefinido'. Agora ele retorna verdadeiro neste caso.
- Agena caiu ao passar uma mesa vazia e um delimitador para "juntar-se" - isso foi corrigido.
- A opção `colour` não está mais sendo ignorada pelo` gdi.plot`.
- Com as tabelas, o `stats.minmax` retornou um valor errado para o mínimo. Agora funciona corretamente.
- Com uma tabela vazia, o `stats.median` retornou 0, agora retorna falha.
- Ao contrário da documentação, `strings.isending` retornou 'true' com as duas strings sendo iguais. Isso foi corrigido.
- `run` retornou` não pôde abrir o arquivo` se um script Agena existente incluiu um erro de sintaxe. Isso foi corrigido completamente reescrevendo a função.
- Adicionado o patch 9 de Lua 5.1.4: "Geração incorreta de código para algumas expressões booleanas específicas [por exemplo, complexas]".
- Adicionado o patch 5.1 da Lua 5.1.4: "O analisador pode coletar um protótipo enquanto o constrói."
- * Info: Adicionando Lua 5.1.4 patch 10, "[__write / __ new] metamétodo de índice pode não funcionar se metatable é sua própria metatabela", para Agena não é necessário, pois Agena já funciona corretamente neste caso.
- Removida a palavra-chave não utilizada `default`.
- Algum endurecimento de funções e recursos.
- Aprimoramentos:
- Adicionada uma versão _experimental_ de `io.anykey` à versão para Mac. No entanto, pelo menos no Lion, a tecla que está sendo pressionada às vezes é refletida no shell.
- `utils.readcsv` agora pode, opcionalmente, retornar todos os valores em um arquivo CSV em uma sequência simples.
- O pacote `clock` agora suporta o operador de divisão` / `, adicionando-o à metatabela do operador` tm`.
- O comportamento de `with` foi alterado porque não pôde designar nomes abreviados para muitas funções da biblioteca: Se as funções foram colocadas na tabela .aux, não atribua nomes abreviados para esses nomes de função; caso contrário, atribua nomes abreviados para todas as outras funções do pacote. Assim: `package.register` para registrar todas as funções da biblioteca para` with` para designar nomes abreviados, não é mais necessário. Será descontinuado em um dos seguintes releases.
- Aprimorei o conjunto de testes.
- Manual:
- Aprimorei o manual e o índice.
- Consistência:
- Para todas as renomeações a seguir, os seguintes nomes de variáveis antigos ainda são suportados.
- `environ.MinLong` foi renomeado para` environ.minlong`.
- `environ.MaxLong` foi renomeado para` environ.maxlong`.
- `environ.BufferSize` foi renomeado para` environ.buffersize`.
- `environ.PathSep` foi renomeado para` environ.pathsep`.
- `environ.More` foi renomeado para` environ.more`.
- `environ.WithProtected` foi renomeado para` environ.withprotected`.
- `environ.Os` foi renomeado para` environ.os`.
- `environ.Cpu` foi renomeado para` environ.cpu`.
- `environ.Release` foi renomeado para` environ.release`.
- `environ.GdiDefaultOptions` foi renomeado para` environ.gdidefaultoptions`.
- No Windows, o `os.login` e o` os.computername` agora retornam 'fail', como fazem as versões UNIX ou OS / 2.
- A opção `-DCOMPAT13` foi finalmente removida para compilar uma versão compatível com o Agena 1.3.x.
- Outro:
- Deprecated `calc.fseq` foi excluído. Por favor use `nseq` em seu lugar.
O que há de novo na versão 1.5.1:
- Patched `strings.fields` que não funcionou. Além disso, ele foi convertido em uma função da biblioteca C e, portanto, é 2,6 vezes mais rápido.
- `strings.words` agora aceita um terceiro argumento, se definido como` true`, os delimitadores sucessivos serão ignorados.
- Removeu um possível vazamento de segurança de `io.write` e` io.writeline` e melhorou suas mensagens de erro.
- Patched `binio.readchar` para evitar problemas com arquivos de tamanho maior que 2 GBytes.
- Mensagens de erro corrigidas das funções `xbase.purge`,` xbase.readvalue`, `xbase.purge`,` ads.getvalues`, `binio.readshortstring`,` os.computername`, `os.login`, `os.fattrib`,` environ.kernel`, `package.register`.
- Terabytes agora podem ser inseridos com a notação T, onde é um inteiro, e T é o caractere `T`. Da mesma forma, g denota bilhões e trilhões de t. Veja a página 48 do manual para mais informações.
- Atualizou o manual.
- Principalmente, todas as opções de compatibilidade com versões anteriores do código-fonte C foram removidas por razões de limpeza de código. Isso afeta somente aqueles que tentam recompilar o Agena 1.5 ou superior com total compatibilidade com versões anteriores do Agena 1.3 e 1.4, e com a maior parte da compatibilidade com versões anteriores do Lua 5.0 (exceto o tratamento antigo de bibliotecas Lua 5.0).
O que há de novo na versão 1.5.0:
- `map` agora também pode processar strings dadas como seu segundo argumento. A respectiva função e seus argumentos são aplicados consecutivamente a cada caractere da esquerda para a direita, e o resultado é retornado em uma sequência.
- `run`: Se você deseja carregar e executar código de arquivos com um sufixo 'agn', não é mais necessário especificar o sufixo no argumento. Então, `run 'test'` e` run' test.agn'` são agora os mesmos.
- A palavra-chave `is` agora é obrigatória para definir procedimentos. (Com o GCC, use a opção -DCOMPAT14 para compilar uma versão do Agena onde a palavra-chave `is` ainda é opcional.)
- A instrução `try` foi reprovada e não é mais suportada. (Com o GCC, use a opção -DCOMPAT14 para compilar uma versão do Agena que ainda contenha essa declaração.)
- As seguintes funções `utils` foram removidas:` arraysize`, `getarray`,` getwholearray`, `newarray`,` searcharray`, `setarray`. Para compatibilidade com versões anteriores, eles foram adicionados ao arquivo lib / compat.agn. (Com o GCC, use a opção -DCOMPAT14 para compilar uma versão do Agena que ainda suporte as funções de utilitários originais.)
- `utils.singlesubs` foi completamente reescrito. Agora, espera uma seqüência de números como o segundo argumento em vez da antiga estrutura de dados userdata stringarray. É 35% mais lento que a versão anterior, mas a remoção da estrutura de string foi mais importante.
- `strings.include` caiu se chamado com 0 como o segundo argumento. Isso foi corrigido.
- Apliquei o patch de 10 de maio de 2011 de Michael G. Schwern às suas funções auxiliares de data de 32 bits do ano 2038-Fix usadas pelos pacotes `os` e` xbase` (`Make mktime64 () corrige a estrutura tm recebida como o ISO C exige.)
- Otimização de código interno: algumas funções C de inicialização de biblioteca e de carregamento de arquivo usaram a pilha para criar cadeias de caracteres de caminho e nome de arquivo. A nova função auxiliar C `concat` escrita pelo Solar Designer agora está sendo usada em muitos casos.
- A API Agena C agora é 100% compatível com a API Lua C para facilitar a portagem de pacotes C Lua para a Agena.
- As funções a seguir foram renomeadas: lua_isnumber - & gt; agn_isnumber, lua_isstring - & gt; agn_isstring, luaL_optnumber - & gt; agnL_optnumber, luaL_checknumber - & gt; agnL_checknumber, luaL_optnumber - & gt; agnL_optnumber, luaL_checkinteger - & gt; agnL_checkinteger, luaL_optinteger - & gt; agnL_optinteger.
- As seguintes macros foram renomeadas: luaL_checkint - & gt; agnL_checkint, luaL_optint - & gt; agnL_optint.
- Ao contrário da implementação anterior do Agena, lua_tonumber agora retorna 0 como em Lua no caso de um não-número ter sido passado, em vez de retornar HUGE_VAL.
- lua_setglobal2 foi removida. Use lua_pushvalue e lua_setglobal em seu lugar.
O que há de novo na versão 1.4.2:
- Se na lista de parâmetros de um procedimento os tipos definidos pelo usuário foram especificados, em
- chamadas de procedimento, nenhum erro foi emitido e o procedimento foi executado em vez disso, nos seguintes casos:
- a) uma tabela, conjunto, sequência, par ou procedimento - sem ser de um usuário definido
- type - foi aprovado,
- b) nenhum valor foi passado para o parâmetro em questão.
O que há de novo na versão 1.4.1:
- Nomes curtos para `stats.quartiles` e` stats.mode` não puderam ser atribuídos pela função `with`. Isso foi corrigido.
- Erroneamente, `with` não pôde atribuir um nome abreviado para` gdi.settriangle`. Isso foi mudado.
- O tratamento de erros do `calc.polygen` foi melhorado.
- Mensagem de erro aprimorada de `fractals.draw` para arquivos de mapa FRACTINT ausentes.
- Removida a função `strings.rseek` reprovada. Para compatibilidade com versões anteriores, o `strings.seek` foi adicionado ao arquivo lib / compat.agn.
- Adicionado o switch -d para imprimir informações de depuração durante a inicialização do interpretador.
- A versão do Windows do Agena agora foi compilada com o GCC 4.5.2.
- Arquivos de esquema de idioma atualizados.
- O manual foi atualizado.
O que há de novo na versão 1.4.0:
- Alterações semânticas:
- Variáveis de controle de loop de loops 'para / to' numéricos agora são automaticamente locais para seus blocos adjacentes em vez de seus corpos de loop (internos). Se uma variável local com o mesmo nome da variável de controle de loop tiver sido declarada e atribuída antes
- executando um loop numérico, ele é sobrescrito pelo último valor de iteração do loop. Como tal, o switch `external` em loops numéricos` for` não é mais aceito. (Com o GCC, use a opção -DCOMPAT13 para compilar uma versão do Agena que ainda reconheça, mas ignore a palavra-chave `external`.)
- Com a constante `fail`,` not` retornou `true`, mas com` fail` atribuída a uma variável, `not` retornou false. Isso foi alterado, ou seja, 'a: = fail; não (a) 'agora retorna' verdadeiro '.
- `stats.median` agora retorna` fail` ao invés de 0 se a estrutura especificada estiver vazia.
- `utils.readcsv`: Se um único espaço em branco for passado com a opção` delim` e se a opção `ignorespaces` não tiver sido fornecida, espaços em branco não serão removidos automaticamente por mais tempo antes de dividir cada linha do arquivo em suas palavras.
- A função também possui duas novas opções: `header`, que marca a primeira linha em um arquivo, e` output`, que permite armazenar o conteúdo do arquivo em um dicionário com seus nomes de campos definidos pelo cabeçalho do arquivo. / li>
- A notação de substring `$` não é mais suportada. (Com o GCC, use o switch -CDOMPAT13 para compilar uma versão do Agena que ainda suporta o operador `$`.)
- extensões:
- Infinito do / od loops foram adicionados. Esse tipo de loop itera infinitamente e pode ser interrompido apenas com as instruções `break` ou` return`. Eles são açúcar sintático para 'while true do ... od` loops.
- Com as tabelas, o `stats.minmax` anteriormente só funcionava com matrizes. Isto foi alterado, isto é, valores com chaves não positivas correspondentes (por exemplo, cadeias, inteiros não positivos, flutuadores negativos e positivos, etc.) são agora apropriadamente reconhecidos na avaliação.
- `stats.mean`,` stats.qmean`, `stats.sd` e` stats.var` agora também processam sequências.
- A nova função `stats.mode` retorna todos os valores em uma sequência ou tabela com o maior número de ocorrências, ou seja, a maior freqüência.
- A nova função `stats.quartiles` retorna o primeiro, segundo e terceiro quartil de uma tabela ou seqüência _sorted_.
- Recursos anteriormente não documentados de `linalg.matrix` foram adicionados ao manual e seu tratamento de erros foi aprimorado.
- Melhoria na manipulação de erros de `linalg.hilbert`.
- `gdi.setinfo` agora aceita a opção` square`. Se `square = false`, então os eixos x e y não terão a mesma escala nos gráficos criados com o` gdi.plot`.
- A função `gdi.plot` para desenhar gráficos infelizmente não foi documentada. Isso foi mudado.
- `gdi.plot` aceita duas novas opções: A opção 'x' especifica o intervalo horizontal no qual um gráfico é exibido, e a opção 'y' especifica o intervalo vertical.
- Se uma estrutura PLOT é passada para `gdi.plot` que contém apenas POINTs, LINES, RECTANGLES, TRIANGLEs, CIRCLEs e ELLIPSEs (incluindo suas variantes * FILLED), então o` gdi.plot` determina automaticamente as escalas (` gdi.setinfo` não precisa necessariamente ser chamado).
- Os recursos OOP herdados de Lua agora estão documentados no Apêndice A9. O autor não recomenda programação orientada a objetos.
- Ajuste:
- Operador `enchido` sintonizado em cerca de 3%.
- Tweaked `in`,` join`, `sadd`,` qsadd`, `replace`,` copy`, `unique` e Cantor definem operadores em tabelas e configuram um pouco.
- Com as tabelas, os operadores `top` e` bottom` são cerca de 5% mais rápidos agora.
- O operador `size` é pelo menos 8% mais rápido se uma tabela não incluir nulos.
- `linalg.mzip`,` linalg.mmul` e `linalg.transpose` foram afinados em cerca de 3% cada.
- Os loops para / a numéricos com tamanhos de etapas fracionários foram otimizados reduzindo o número de suas variáveis de controle pela metade. Isso, no entanto, não atingiu nenhum aumento na velocidade.
- Patches:
- Patched `linalg.ludecomp` para detectar matrizes singulares. Além disso, a função agora pode determinar automaticamente a ordem da matriz especificada.
- Ao contrário do manual, o `gdi.plot` não determinava automaticamente as faixas horizontais e verticais. Isso foi corrigido.
- `gdi.plot` não mais ignora a opção` square` definida por `gdi.setinfo`.
- `gdi.setinfo` incluiu configurações nas estruturas INFO, mesmo que elas já estejam presentes. Isso foi mudado.
- Os círculos não foram plotados corretamente por `gdi.plot`. Isso foi mudado.
- A função `gdi.plot` na maioria das circunstâncias ignorou a coloração individual de objetos geométricos. Isso foi mudado.
- O pacote gdi não atribuiu nomes curtos para `gdi.settriangle`,` gdi.settrianglefilled`, `gdi.setrectangle` e` gdi.setrectanglefilled`. Isso foi mudado.
- O pacote fractals não atribuiu nomes curtos para funções do tipo definido pelo usuário 'esctime'. Isso foi mudado. Mensagem de erro corrigida de `fractals.draw` se os argumentos posicionais não fossem números.
- Diversos:
- A funcionalidade de `calc.fseq` foi mesclada no` nseq`. Para compatibilidade com versões anteriores, `calc.fseq` ainda é parte do pacote calc, mas a função realmente se refere à implementação` nseq`.
- Adicionada a variável `environ.FractScreenUpdates` ao` pacote fractals` para indicar o número de linhas verticais (um inteiro não negativo) após o qual um fractal será atualizado em uma janela. A variável `environ.FractOptimised` foi descontinuada.
- Funções auxiliares do gdi foram reagrupadas.
O que há de novo na versão 1.3.3:
- Patches para o `instr`:
- Quando no modo regex, o operador retornou um resultado errado se uma posição inicial foi dada.
- Quando no modo de pesquisa simples, o operador retornou um erro fora da faixa se nenhuma posição inicial foi dada.
- Exceto no modo de pesquisa inversa, se nenhuma correspondência foi encontrada, o primeiro argumento foi retornado em vez de `null`.
- Mensagem de erro corrigida da declaração `create` em relação às sequências.
- No AgenaEdit, ao gerar mais de uma estrutura com apenas uma chamada para `print`, as estruturas não eram impressas em formato completo se a primeira estrutura contivesse um metamétodo __tostring. Isso foi mudado.
O que há de novo na versão 1.3.2:
- Esta versão inclui correções de bugs, extensões e um manual aprimorado:
- `dimension` criou resultados interessantes se uma estrutura foi passada como
- inicializador. Isto foi alterado: `dimension` agora cria cópias independentes do
- estrutura ao inicializar a tabela.
- A funcionalidade de `strings.rseek` foi adicionada ao operador` instr`.
- Assim, o `strings.rseek` foi reprovado. Para compatibilidade com versões anteriores,
- `strings.rseek` foi adicionado ao arquivo lib / compat.agn.
- `strings.hits` agora suporta expressões regulares e capturas. Esse comportamento
- pode ser desativado passando um booleano como terceiro argumento.
- `strings.isabbrev` e` strings.isending` agora usam automaticamente uma pesquisa simples
- se nenhuma expressão ou captura regular tiver sido passada como parte da segunda
- argumento.
- Tweaked `strings.ismagic` e` strings.isfloat`.
- A função `log` agora é 13% mais rápida.
- Ao enviar mais de uma estrutura com apenas uma chamada para `print`,
- as estruturas não foram impressas na forma completa se a primeira estrutura apresentasse um __tostring
- metamétodo. Isso foi mudado.
- Adicionadas categorizações de funções ao Capítulo 7 para facilitar o início de novas
- usuários.
O que há de novo na versão 1.3.1:
- Houve problemas com chamadas aninhadas para os seguintes operadores binários: `xor`,` atendof`, `& amp; & amp;`, `||`, `^^`, `::` e `: - `, e assim também com a impressora bonita que sair com um erro ao imprimir estruturas aninhadas. Isso foi corrigido.
- Quatro correções para `os.list`: Se a opção 'r' foi passada, o diretório de trabalho atual foi alterado incorretamente após a conclusão da chamada.
- Se 'r' não foi passado como o último argumento, a função emitiu um erro.
- `null` não foi aceito como o primeiro argumento para denotar o diretório de trabalho atual.
- No Windows 7, a impressão do conteúdo do diretório raiz não funcionou, ou seja, os.list ('c:') retornou o conteúdo do diretório de trabalho atual.
- Quando uma string foi indexada com um não-número, por exemplo "str [null]", Agena retornou `null`. Agora, um erro é levantado.
- Se library.agn não foi encontrado, o caminho errado foi exibido duas vezes no aviso. Isso foi mudado.
O que há de novo na versão 1.2:
- O operador de substring foi redesenhado, mas a versão antiga ainda estará disponível até o Agena 2.0: o novo é: `str [da esquerda para a direita]`, o antigo foi: `str $ (esquerda, direita)` . Um exemplo: before: `str: = 'string'; print (str $ (2, 3)) `- & gt; 'tr' now: `str: = 'string'; print (str [2 a 3]) `- & gt; 'tr'
- Agora você pode determinar sublistas de matrizes e sequências de tabelas com a nova sintaxe mencionada acima: `s [da esquerda para a direita]`. Um exemplo: agora: `a: = [10, 20, 30, 40]; print (a [2 a 3]) `- & gt; [20, 30] agora: `a: = seq (10, 20, 30, 40); print (a [2 a 3]) `- & gt; seq (20, 30)
- A função `ops` agora permite especificar os valores a serem retornados passando uma sequência de suas posições de índice como seu primeiro argumento, por exemplo, ops (seq (1, -1), 10, 20,
- 30).
- A nova função `strings.include` insere uma seqüência de caracteres em uma string
- em uma determinada posição.
- As seguintes funções agora emitem um erro em vez de apenas retornar `fail` em
- caso de uma falha: `os.remove`,` os.move`, `os.mkdir`,` os.rmdir`, `os.chdir`.
- Melhorias para os seguintes operadores trabalhando em conjuntos e sequências relacionadas à coleta de lixo: instrução `insert`,` union`, `intersection`,` minus`, `unique`,` copy`, `pop / top` e instruções `pop / bottom` e definir atribuições.
- Mensagem de erro aprimorada de `fractals.draw` se o arquivo de mapeamento de cores FRACTINT não tiver
- não foi encontrado.
O que há de novo na versão 1.1.0:
- Esta versão apresenta novas funcionalidades e um espaço de nomes limpo.
- Compatibilidade com o Agena 1.0:
- Algumas funções foram removidas da Agena e algumas foram convertidas em funções de pacote (veja abaixo). Se você ainda quiser usá-los, emita readlib 'compat' na linha de comando ou coloque a declaração acima em seu arquivo de inicialização se preferir compatibilidade com o Agena 1.0.
- Funcionalidade estendida:
- As declarações `pop / top` e` pop / bottom` e os operadores `bottom` e` top` agora também podem ser aplicados aos arrays de tabelas.
- Quando chamado com `null` ou sem argumentos,` os.chdir` não mais emite um erro, mas retorna o diretório de trabalho atual. Assim, a antiga função de `os.curdir` C foi substituída por uma escrita na linguagem Agena.
- `os.list` agora recursivamente percorre subpastas se a nova opção 'r' é dada.
- O operador `join` agora também aceita um delimitador opcional e suporta a opção de especificar o primeiro e o último elemento da estrutura a ser concatenada.
- `instr` agora pode pesquisar na extremidade direita de uma string passando uma posição negativa.
- Se uma tabela incluir outras tabelas, conjuntos, seqüências ou pares, o `copy` agora saberá como manipular essas referências adequadamente se elas ocorrerem várias vezes: Se uma estrutura incorporada for incluída n vezes, uma cópia real será feita e n-1 referências a essa estrutura recém-criada são inseridas. Antes, n cópias independentes foram feitas.
- A nova função `isnonposint` verifica se os números dados são todos inteiros e não positivos.
- `io.close` agora pode fechar vários arquivos com apenas uma chamada.
- A função `with` não atribuiu nomes curtos para os seguintes procedimentos do pacote` math`: `convertbase`,` fraction`, `zeroin`,` todecimal`, `lcm`,` gcd` e ` ndigits`. Isso foi corrigido.
- A função `rwritemode` mencionada no manual não existia. Está agora disponível mas chamado `rmode`.
- Mensagens de erro de várias funções foram aprimoradas.
- Limpeza do namespace: funções renomeadas ou movidas:
- As funções de biblioteca base `register` e` loadclib` foram movidas para a biblioteca `package`.
- As antigas funções de biblioteca `rdelete`,` rget`, `rinit`,` roinit`, `rmode`,` rset`, `remember` e` defaults` foram movidas para o novo pacote `rtable` .
- Renomeado a tabela global _Env para `environ`, que agora também contém procedimentos para acessar o ambiente.
- As antigas variáveis globais de ambiente `homedir` e` infolevel` foram renomeadas para `environ.homedir` e` environ.infolevel`, respectivamente.
- As seguintes funções de bibliotecas antigas foram movidas para o pacote `environ`:` anames`, `attrib`,` gc`, `getfenv`,` globals`, `isselfref`,` pointer`, `setfenv` , `used`,` userinfo`, `__RESTART`,` __DOTTYPRINT`.
- `mapm.xtoNumber` foi renomeado para` mapm.xtonumber`, `mapm.xtoString` foi renomeado para` mapm.xtostring`. Para compatibilidade com versões anteriores, os nomes das funções antigas ainda podem ser usados executando o arquivo lib / compat.agn (primeiro leia o pacote `mapm` e então carregue o arquivo compat.agn).
- Funções e variáveis reprovadas:
- `strings.seek` foi descontinuado. Sua funcionalidade foi adicionada ao operador `instr`. Para desativar o modo de correspondência de padrões do `instr`, passe o início da pesquisa como o terceiro e` true` como o quarto argumento. `instr` é cerca de 40% mais rápido no modo de correspondência sem padrão do que o` strings.seek`. Para compatibilidade com versões anteriores, o `strings.seek` foi adicionado ao arquivo lib / compat.agn.
- A função da biblioteca base `concat` foi removida. Use `join` em vez disso. Para compatibilidade com versões anteriores, a função anterior foi incluída no arquivo lib / compat.agn.
- As funções `hasrtable` e` hasrotable` foram removidas. Para compatibilidade com versões anteriores, eles foram adicionados ao arquivo lib / compat.agn.
- A função `pcall` foi reprovada. Use `protect` em seu lugar. Para compatibilidade com versões anteriores, a função foi adicionada ao arquivo lib / compat.agn.
- A função `maptoset` foi descontinuada. Para compatibilidade com versões anteriores, a função foi adicionada ao arquivo lib / compat.agn.
- A função `os.alldirs` foi reprovada. Use as opções 'dirs' e 'r' em uma chamada para `os.list`. Para compatibilidade com versões anteriores, a função foi adicionada ao arquivo lib / compat.agn.
- `os.isMac`,` os.isSolaris`, `os.isLinux`,` os.isWin`, `os.isOS2`,` os.isDOS`, `os.isHaiku` foram preteridos. Por favor, use as novas variáveis de ambiente environ.Os e environ.Cpu, que também aceleram o código. Para compatibilidade com versões anteriores, as funções foram adicionadas ao arquivo lib / compat.agn.
- A variável _VERSION não documentada foi removida. Para compatibilidade com versões anteriores, sua designação foi adicionada ao arquivo lib / compat.agn.
- Outras alterações:
- A função lua_rawsetstringnumber da API C mencionada no manual não existe. Isso foi mudado.
- Otimizações de código para o analisador.
- Em alguns dos pacotes, acidentalmente algumas variáveis foram implicitamente declaradas globais. Isso foi corrigido.
- Arquivos de amostra de inicialização corrigidos e atualizados.
- O AgenaEdit foi atualizado.
- Os arquivos de esquema de idioma foram atualizados.
- Os instaladores do Linux agora incluem o pacote xBase.
O que há de novo na versão 1.0.6:
- Mensagens de erro melhoradas dos operadores `join`,` copy` e `filled`, das funções` toset`, `toseq` e` totable`, das instruções `insert`,` delete`, `pop`, e de 'para' loops.
- Com sequências, Agena caiu na seguinte sequência de eventos: 1) uma instrução `delete` foi executada, 2) a seqüência depois de ter sido vazia e 3) um novo elemento foi inserido novamente. Isso foi consertado. (Internamente, a instrução `delete` não mais internamente reduz o tamanho das sequências por mais tempo).
- Com grandes strings, o `concat` caiu. Isso foi corrigido.
- Com strings de 512 e mais bytes, `join` e` replace` podem falhar. Isso foi consertado. Os dois operadores estão agora muito mais rápidos do que nunca.
- `math.isprime` retornou resultados incorretos com argumentos & gt; 2 ^ 31 (mencionado vagamente no manual). Isso foi corrigido pela extensão do intervalo de argumentos para números inteiros com valores de até +/- 2 ^ 63.
- `math.nextprime` e` math.prevprime` tiveram o mesmo problema com argumentos maiores como `math.isprime`. Isso também foi alterado. Com o argumento 2, o io.nextprime retornou falsamente 5 em vez de 3. Isso também foi corrigido.
O que há de novo na versão 1.0.5:
- `join` pode travar o Agena e se comportar de maneira inesperada se a string resultante
- excedeu 512 bytes. Isso foi mudado.
- Se o `restart` foi chamado depois que um erro foi emitido no anterior
- , Agena em raras ocasiões caiu devido a corrupção de pilha. Isso foi
- corrigido.
- Com tabelas recém-criadas contendo exatamente um elemento na parte hash, `attrib`
- agora retorna resultados corretos para o número de slots de hash alocados (1 em vez de 0).
- Mensagens de erro corrigidas de `qsadd` e` sadd`.
- Mensagens de erro aprimoradas dos operadores `join`,` copy` e `filled` e de` insert`
- e `delete`.
- O tratamento de erros de `read`,` save` e `fractals.draw` foi melhorado.
- Melhorias nos makefiles.
- Os tamanhos de buffer agora foram padronizados nas fontes.
declaração
Declarações
O que há de novo na versão 1.0.4:
- Como falhas raras foram relatadas durante a inicialização (no Windows XP SP 3 e no OpenSolaris 134, em algumas circunstâncias), a coleta de lixo está desativada na fase de inicialização. Essas raras falhas de segmentação ocorreram no OpenSolaris ao executar o binário do Agena em seu diretório de armazenamento como raiz e no XP ao clicar no ícone do desktop Agena com direitos de administrador locais.
- Introduziu a opção -d para as opções de linha de comando para imprimir informações durante a inicialização da Agena.
- Introduzido o tratamento de erros apropriado se a memória não puder ser alocada internamente para: `trim`,` upper`, `lower`,` os.curdir` e `strings.rseek`.
- Removidos possíveis vazamentos de memória nas funções C de inicialização agenaL_initialise e agenaL_setLibname, e em io.write * `e` print`.
O que há de novo na versão 1.0.3:
- A nova função `protect` chama um procedimento no modo protegido e detecta qualquer erro possível para que o cálculo não seja interrompido. Em caso de erro, define a string de erro para a variável global `lasterror`. Está relacionado a `pcall`, mas não retorna o código de status como o primeiro resultado.
- `attrib` agora retorna resultados corretos com estruturas vazias. Com estruturas vazias, a função contou erroneamente um elemento hash atribuído antes.
- `attrib` agora retorna o número de bytes ocupados por tabelas, conjuntos e sequências junto com a nova chave 'bytes'. O número de bytes devolvidos baseia-se em informações por vezes contraditórias disponíveis na rede.
- `replace` caiu Agena se a string resultante excedeu 512 bytes. Isso foi mudado.
- `assume agora retorna 'Suposição falhou'. em vez de "suposição falhou".
- A nova função lua_setglobal2 da API C define o valor no topo da pilha para um nome global. Ao contrário do lua_setglobal, o valor não é exibido.
- Código limpeza de lobject.h (estrutura da tabela), e lapi.c (actnodesize macro). Bugfix para a função da API C agn_deletertable no caso de o Agena ser compilado com lua_assert não vazia. Altere para o valor de retorno da função savestate que é usada durante a inicialização para evitar a (pequena) possibilidade de corrupção da pilha.
O que há de novo na versão 1.0.2:
- O novo procedimento `os.setenv` define variáveis de ambiente no nível do sistema operacional. A função foi originalmente escrita por Mark Edgar.
- No Windows, o `os.getenv` agora chama uma função nativa da API do Windows para obter os valores das variáveis de ambiente. O código do Windows foi escrito por Mark Edgar.
- A nova função `os.environ` retorna todas as variáveis de ambiente atribuídas em uma tabela. A função foi originalmente escrita por Mark Edgar.
- `io.open` agora adiciona o ponteiro FILE, o nome e o modo de um arquivo aberto com sucesso na nova tabela` io.openfiles`. `io.close` exclui a entrada de` io.openfiles` se o arquivo puder ser fechado com sucesso.
- Quando chamado sem argumentos, o `io.read` agora retorna um erro se chamado sem argumentos no AgenaEdit (em uma tentativa de ler o teclado).
- Se `io.anykey` e` io.getkey` forem chamados no AgenaEdit, uma mensagem de erro apropriada será exibida.
- Um dos subprocedimentos de inicialização foi alterado para evitar possíveis danos na pilha (embora nunca tenham ocorrido problemas).
- os.isMac ('ppc') agora funciona em máquinas PowerPC.
- Os capítulos 4 e 6 do Primer and Reference foram revisados e ampliados. Um índice foi adicionado e muitos cosméticos foram feitos, também.
- Armazenou informações corretas sobre a versão para o executável do Windows.
O que há de novo na versão 1.0:
- Prezadas senhoras e senhores,
- após quase quatro anos de desenvolvimento, publiquei o Agena 1.0, uma linguagem de programação processual, derivada de fontes Lua C.
- Na verdade, minha comunidade é muito, muito pequena, mas alguns usuários me disseram que ela era boa, útil e estável.
- Eu ficaria muito feliz se você revisasse a Agena e me informasse sobre seus resultados. Se você não achar útil, por favor, me avise pessoalmente e me dê uma chance para corrigir os problemas.
O que há de novo na versão 0.34.1d:
- Esta versão inclui uma versão GUI atualizada do AgenaEdit (consulte o arquivo executável agenaedit).
O que há de novo na versão 0.34.1:
- O AgenaEdit com o mecanismo de tempo de execução de realce de sintaxe e integrado foi lançado com o Agena 0.34.1.
O que há de novo na versão 0.34.0:
- O AgenaEdit com o mecanismo de tempo de execução de realce de sintaxe e integrado foi lançado com o Agena 0.34.0.
O que há de novo na versão 0.33.2:
- O Agena 0.33.2 com o suporte ao arquivo xBase foi lançado.
O que há de novo na versão 0.33.1:
- O Agena 0.33.1 com o suporte a arquivos xBase foi lançado.
O que há de novo na versão 0.33.0:
- O novo pacote `xbase` pode ler e gravar arquivos xBase compatíveis com o padrão dBASE III.
- Os pacotes `binio` e` ads` agora podem manipular arquivos de até 2 ^ 63 bytes. Antes que eles pudessem lidar apenas com arquivos de até 2 ^ 31 bytes.
- As novas funções `io.lock`,` io.unlock`, `binio.lock`,` binio.unlock`, `ads.lock` e` ads.unlock` bloqueiam um arquivo de acesso de leitura e gravação por outro Agena
- funções ou até mesmo outros aplicativos, desde que o último use um protocolo de bloqueio.
- A função baselib `read` não pode mais ser sobrescrita por` with`.
- O novo `package.checkClib` verifica se um pacote armazenado em uma biblioteca dinâmica C foi inicializado. Caso contrário, retorna um aviso impresso na tela e cria uma tabela de pacotes vazia. Caso contrário, não faz nada.
- A porta do Haiku agora suporta bibliotecas de links dinâmicos.
O que há de novo na versão 0.32.3:
- Agena 0.32.3 com novas funções de Cálculo ajustadas foi lançado.
- Os usuários de Mac não precisam mais instalar bibliotecas de dependência adicionais.
- Uma porta do Haiku já está disponível.
O
O que há de novo na versão 0.31.5:
- Esta versão contém gráficos incorporados, matemática de precisão arbitrária e recursos aprimorados.
O que há de novo na versão 0.31.3:
- Adicionado o pacote fractals para desenhar facilmente fractais no Solaris, Mac, Linux e Windows.
- No Solaris e no Linux, o `gdi.mouse` agora retorna valores padrão para os botões pressionados do mouse (o mesmo que as edições Mac e Windows).
- Quando recebe a opção -v, Agena agora não executa mais os arquivos de inicialização.
- No UNIX ou Mac, os nomes de arquivo dos arquivos de inicialização devem sempre ser `.agenainit`, estejam eles em / usr / agena / lib ou na pasta pessoal.
- A distribuição binária de Mac para CPUs da Intel é 30% mais rápida que as versões anteriores.
- A função `io.getkey` agora está disponível na edição do Mac OS X.
- No Mac, o `os.system` agora retorna informações completas sobre o sistema operacional e o tipo de CPU. Observe que ele retorna informações sobre o kernel Darwin e que a primeira entrada na tabela resultante agora é `Darwin` em vez de` MacOSX`.
- `os.memstate`,` os.freemem` e `os.beep` agora suportam Mac OS X.
- `io.anykey` está disponível em todas as plataformas, mas retorna` fail` no DOS e no Mac. Portanto, `gdi.draw` não lançará mais erros no Mac ao usar a opção` mouse`.
- `os.listcore` foi estendido para retornar apenas nomes de arquivos, diretórios ou links. '.' e '..' agora nunca são retornados.
- `os.list` não reconheceu nenhuma opção e retornou uma lista vazia. Isso foi consertado. Além disso, as opções agora podem ser combinadas. '.' e '..' como o primeiro argumento é agora devidamente reconhecido.
- `os.curdir` agora substitui automaticamente as barras invertidas no caminho determinado com barras.
- `os.fstat` e` ads.attrib` falharam na Agena se a data de um arquivo exceder a terça-feira, 19 de janeiro de 2038. Isso foi corrigido retornando uma tabela vazia para a chave de data (os.fstat), ou 0/0/01 00:00:00, (ads.attrib).
- `utils.calendar` deixou de funcionar a Agena se seu argumento fosse nulo, negativo ou muito grande. Isso foi mudado. Além disso, se uma data estiver além de terça-feira, 19 de janeiro de 2038, a data correta será retornada.
- As novas funções `os.screensize` e` os.mousebuttons` retornam a resolução da tela atual e o número de botões do mouse anexado, respectivamente (somente Windows).
- O arquivo agena.ini.sample foi renomeado para .agenainit.sample nas distribuições UNIX / Mac.
- Um novo makefile para o Solaris agora está sendo enviado com o mapeamento Agena binding para compilar completamente as origens MAPM originais escritas por Michael C. Ring.
O que há de novo na versão 0.31.2:
- O pacote mapm para precisão matemática arbitral agora também está disponível na edição DOS do Agena.
- O número de dígitos usados pelo pacote mapm é inicializado em 17 dígitos na inicialização do Agena para DOS ou OS / 2 Warp. Antes, o padrão era 1 dígito.
- O código C para a ligação MAPM foi padronizado. Antes, os arquivos de origem DOS e OS / 2 eram diferentes do UNIX e Windows.
- Pequenos aprimoramentos nos instaladores do Windows e do Mac OS X.
- No Mac, a documentação agora está disponível em Biblioteca / Documentação / Agena em vez de / Users / Share / Agena.
- As funções sin, cos, arcsin, arccos e arctan retornaram -0 em vez de 0 como a unidade imaginária, o que levou a resultados errados se o retorno dessas funções tivesse sido aplicado a outras funções, como ln (isto é, o sinal da unidade imaginária do resultado dessas outras funções estava incorreta). Isso foi corrigido definindo-se a unidade imaginária -0 a 0 no retorno de sin, cos, arcsin, arccos e arctan.
- As funções arcsin e arccos retornaram resultados errados para os argumentos z, se abs (real ((z))) & lt; 1. Isso foi corrigido.
- No OS / 2, as funções aritméticas mais complexas retornavam indefinidas. Isso foi corrigido.
- Note que no OS / 2 e no DOS, no domínio complexo ainda existem problemas com os operadores arccos e arcsin que retornam indefinidos em certas situações.
- As versões Windows, i386 Solaris 10 e Linux foram agora compiladas com o GCC 4.4.x (e sem xmath86.h), o que reduziu significativamente o número de erros na aritmética complexa. De fato, casos complexos de teste matemático retornam zero erros. A versão Sparc foi compilada com o GCC 4.3.3 para Sun Sparc e tem menos bugs na aritmética de números complexos do que a versão 0.31.1 tinha.
- Renomeado os seguintes arquivos de inclusão: config.h - & gt; agncfg.h, chelpers.h - & gt; agnhlps.h, agnxlib.h - & gt; agnxlib.h.
- No Mac, o gdi.mouse agora retorna valores padrão para os botões pressionados do mouse.
O que há de novo na versão 0.31.1:
- O Agena 0.31 inclui todas as ferramentas básicas para traçar pontos, linhas, círculos, elipses, retângulos, arcos. etc., para controlar o tamanho da imagem e as cores.
O que há de novo na versão 0.31.0:
- Um lançamento de consistência de idioma com uma correção de bug - foi liberado. Veja o log de alterações para o que mudou.
O que há de novo na versão 0.30.4:
- A Agena agora apresenta gráficos integrados. Isso permitirá que você plote gráficos, imagens etc. nas janelas X11 ou Win32 ou em arquivos GIF, PNG, JPEG, FIG ou PostScript, tanto no Solaris, Linux e Windows. Agena liga-se à biblioteca gráfica g2 escrita por Ljubomir Milanovic e Horst Wagner, para fornecer essas novas capacidades.
- O Agena 0.30 inclui todas as ferramentas básicas para traçar pontos, linhas, círculos, elipses, retângulos, arcos. etc., para controlar o tamanho da imagem e as cores.
- & gt; com 'gdi';
- gdi pacote v0.1.4 em 20 de dezembro de 2009
- arco, arcfilled, plano de fundo, círculo, circlefilled, clearpalette, fechar, traço, elipse, ellipsefilled, flush, fontsize, initpalette, tinta, lastaccessed, linha, newline, newpoint, abrir, enredo, plotfn, ponto, retângulo, rectanglefilled , reset, resetpalette, setinfo, setoptions, estrutura, texto, espessura, triângulo, trianglefilled, useink
- A função plotfn desenha um ou mais gráficos de funções em um real, opcionalmente junto com os eixos plotados em uma cor definida pelo usuário. O intervalo para o eixo y também pode ser dado, caso contrário, o Agena determina a melhor configuração. Existem várias outras opções que podem ser definidas com a função setoptions e que serão aplicadas a todos os gráficos produzidos em uma sessão: a resolução da janela, o mapa de cores, a espessura da linha e a cor do plano de fundo. Naturalmente, o usuário pode substituir algumas ou todas as opções para um gráfico específico. Singularidades são tratadas adequadamente.
O que há de novo na versão 0.30.3:
- Agena 0.30.3 com gráficos incorporados, matemática de precisão arbitrária e recursos aprimorados foi lançado.
O
O que há de novo na versão 0.30.2:
- A Agena agora apresenta gráficos integrados. Isso permitirá que você plote gráficos, imagens etc. nas janelas X11 ou Win32 ou em arquivos GIF, PNG, JPEG, FIG ou PostScript, tanto no Solaris, Linux e Windows. Agena liga-se à biblioteca gráfica g2 escrita por Ljubomir Milanovic e Horst Wagner, para fornecer essas novas capacidades.
- O Agena 0.30 inclui todas as ferramentas básicas para traçar pontos, linhas, círculos, elipses, retângulos, arcos. etc., para controlar o tamanho da imagem e as cores.
- & gt; com 'gdi';
- gdi pacote v0.1.4 em 20 de dezembro de 2009
- arco, arcfilled, plano de fundo, círculo, circlefilled, clearpalette, fechar, traço, elipse, ellipsefilled, flush, fontsize, initpalette, tinta, lastaccessed, linha, newline, newpoint, abrir, enredo, plotfn, ponto, retângulo, rectanglefilled , reset, resetpalette, setinfo, setoptions, estrutura, texto, espessura, triângulo, trianglefilled, useink
- A função plotfn desenha um ou mais gráficos de funções em um real, opcionalmente junto com os eixos plotados em uma cor definida pelo usuário. O intervalo para o eixo y também pode ser dado, caso contrário, o Agena determina a melhor configuração. Existem várias outras opções que podem ser definidas com a função setoptions e que serão aplicadas a todos os gráficos produzidos em uma sessão: a resolução da janela, o mapa de cores, a espessura da linha e a cor do plano de fundo. Naturalmente, o usuário pode substituir algumas ou todas as opções para um gráfico específico. Singularidades são tratadas adequadamente.
O que há de novo na versão 0.29.0:
- A Agena agora apresenta gráficos integrados. Isso permitirá que você plote gráficos, imagens, etc. em uma janela ou em um arquivo GIF, PNG, JPEG, FIG ou PostScript no Solaris, Linux e Windows, incluindo uma ligação à biblioteca gráfica g2 escrita por Ljubomir Milanovic e Horst Wagner.
- O Agena 0.29.0 apresenta todas as ferramentas básicas para traçar pontos, linhas, círculos, elipses, retângulos, arcos. etc., para gerenciar cores e criar arquivos de imagem ou abrir janelas X11 ou Win32.
- Em uma das próximas atualizações, uma interface de usuário de alto nível com as funções gdi.plotfn e gdi.plot permite que você trace funções univariadas e conjuntos de pontos on-the-fly. As duas funções já estão incluídas no Agena 0.29.0, mas ainda são beta. Aqui está uma prévia:
- & gt; com 'gdi';
- gdi package v0.1.0 em 24 de novembro de 2009
- arco, plano de fundo, círculo, clearpalette, close, traço, elipse, filledArc, filledCircle, filledEllipse, filledRectangle,
- fillTriangle, flush, fontsize, initpalette, tinta, lastaccessed, linha, open, plot, plotfn, ponto, retângulo, reset,
- resetpalette, setinfo, setoptions, estrutura, texto, espessura, triângulo, useink
- A função plotfn desenha o gráfico de uma função em um real, opcionalmente junto com os eixos plotados em uma cor definida pelo usuário. O intervalo para o eixo y também pode ser dado, caso contrário, o Agena tenta determinar a melhor configuração. Existem várias outras opções que podem ser definidas com a função setoptions e que serão aplicadas a todos os gráficos produzidos em uma sessão: a resolução da janela, o mapa de cores, a espessura da linha e a cor do plano de fundo. Naturalmente, o usuário pode substituir algumas ou todas as opções para um gráfico específico. Singularidades são tratadas adequadamente.
- plotfn (sin (x) * x & gt ;, -5, 5, cor ~ 'azul', axiscolour ~ 'cinza', resolução ~ 640: 480);
O que há de novo na versão 0.27.2:
- A nova função toSet baselib converte uma string em um conjunto de caracteres e uma tabela ou sequência em um conjunto.
- o io.readlines foi corrigido para processar linhas com mais de 2048 caracteres. A função agora também emite um erro se a alocação de memória interna falhar. O tamanho do buffer interno foi reduzido de 2048 bytes para 512 bytes. Você pode alterar isso atribuindo outro valor a AGN_IOREADLINES_MAXLINESIZE no arquivo agnconf.h.
- o io.readlines agora também aceita identificadores de arquivo. Ao usar identificadores de arquivo, ao contrário dos nomes de arquivos, observe que você deve fechar o arquivo manualmente depois de usar io.readlines.
- io.readlines não retorna mais uma tabela vazia se o arquivo não existir. Em vez disso, emite um erro.
- toSeq agora retorna um erro em vez de falhar se não receber uma string, conjunto ou tabela.
- A função baselib usada foi estendida e pode retornar o uso de memória em bytes, kbytes e gbytes. Agora é uma função C.
- A função gcinfo não documentada foi excluída. Sua funcionalidade foi tomada pelo usado.
- A nova função da API C, agn_usedbytes, retorna o número de bytes usados pelo sistema.
- Mensagem de erro incorreta corrigida de toTable.
- renomeou a função AOI de C> agn_isioforcerror` para `agn_isioforceerror`.
O que há de novo na versão 0.27.0:
- Adicionada a função de erro math.erf e a função de erro complementar math.erfc.
- Adicionada a função de Bessel do primeiro tipo math.besselj e a função de Bessel do segundo tipo math.bessely. A ordem é dada pelo primeiro argumento, o argumento como o segundo argumento.
- Se a nova variável de ambiente _EnvIoForceError for definida como um valor não nulo (o padrão), as funções io.open, io.readlines e as várias funções binio serão encerradas com um erro, em vez de apenas retornar normalmente.
- binio.readbytes e binio.readchar retornaram uma seqüência vazia, em vez de falhar, caso o arquivo a ser lido não existisse. Isso foi alterado: falha ou um erro agora é retornado.
- arcsin e arccos são agora operadores e, portanto, cerca de 40% mais rápidos.
- Adicionado o operador xor que executa um OR exclusivo booleano em valores que são avaliados como ou são verdadeiros, falsos, com falha e nulos.
- Adicionado o operador de atendimento que verifica se uma palavra termina em uma determinada frase e retorna sua posição como um número. O operador retorna null se as strings tiverem o mesmo tamanho, pelo menos uma delas é a string vazia, ou a palavra não termina no padrão dado.
- hasrtable agora só retorna true, se tiver uma tabela de recordes de leitura / gravação (atualizada pela instrução de retorno).
- A nova função hasrotable determina se uma função possui uma tabela de lembrete somente leitura (que não pode ser atualizada pela instrução de retorno) e retorna true ou false.
- Os novos operadores gethigh e getlow recuperam os bytes maiores e menores de um número (ou seja, C duplo).
- Os novos operadores sethigh e setlow definem os bytes superior e inferior como um número (ou seja, C duplo).
- Os novos operadores band, bor, bxor e bnot realizam operações bit a bit e / ou exclusivas ou complementares em números.
- A nova função `kernel` configura as configurações do kernel Agena. Atualmente, ele pode alterar a maneira como os operadores bit a bit trabalham internamente (uso de inteiros assinados ou não assinados) e como os números são impressos.
- Com números reais x, o argumento math agora retorna Pi em vez de 0 se x & lt; 0.
- Devido a um erro nas funções da biblioteca ANSI C subjacentes, o arcsin e o arccos produziram resultados errados com números complexos, se sua parte imaginária fosse zero nos sistemas UNIX. Isso foi corrigido.
- math.isPrime relatou falso com o número 2. Isso foi corrigido.
- Ao contrário do manual, o abs retornou 2 com falha. Agora ele retorna -1 conforme documentado.
- O pacote de bits foi removido.
- Adicionada a nova função da API C, agn_isioforcerror, que verifica se _EnvIoForceError foi definido como um valor não nulo.
- A nova função da API C, agn_setbitwise, determina se os operadores band, bor, bnot, bxor e shift calculam internamente com números inteiros assinados ou não assinados.
- A nova função da API C, agn_getbitwise, retorna o modo definido por agn_setbitwise.
- A nova função da API C, agn_setdigits, define o número de dígitos usados para imprimir números.
- A nova função da API C, agn_getdigits, determina o número de dígitos usados para imprimir números.
- Interna: removida a entrada "REPL" obsoleta de luaP_opnames.
- O instalador do Windows foi aprimorado, agora, verificando uma versão do Agena instalada anteriormente, evitando que o instalador seja iniciado se outra instância já estiver sendo executada e por algumas outras pequenas melhorias.
Requisitos :
- Ncurses
- Readline do GNU
Comentários não encontrado