Giter Club home page Giter Club logo

herbiec's Introduction

herbiec

Fusca amarelo com uma grande pintura de dragão no evento Bèrghem Bug, ocorrido em 2020 na comuna de San Pellegrino Terme, na Itália. Foto por Raffaele Mottalini, via Dreamstime.

License: ISC Powered By Copacabana @ Docker

Introdução

O herbiec é um interpretador do tipo tree-walking feito especificamente para a Rinha de Compiladores desse ano, organizada pelas srtas. Sofia Rodrigues e Gabrielle Guimarães.
Por mais que o programa (ou script, chame-o como preferir) não tenha muito propósito fora do desafio enquanto interpretador propriamente dito, alguns usos de funções da linguagem aqui se mostraram interessantes para replicar posteriormente como, por exemplo, uma função para conversão de JSON para uma estrutura de variável composta --- que precisaria ser melhorada para conseguir lidar com JSONs compactados, eliminando o a necessidade do jq(1) como formatador --- e métodos para poder receber elementos de variáveis compostas como entrada de função --- o que talvez já existisse de outra forma "oficialmente" e eu desconheça ---, algo que é pouco explorado na linguagem mesmo estando ali desde a criação do padrão.
Creio que servirá bem para questão de aprendizado.

Por que "herbiec"?

Como de costume, normalmente coloco nomes de locais ou referências culturais nos programas que crio, normal entre todo programador, engenheiro, cientista, artista ou alquimista.
"Herbie" em si vem de dois lugares: "Herbie, The Love Bug" (vulgo "Se meu Fusca falasse"), aquela série de filmes da Disney que creio todos já terem pelo menos ouvido falar, e do músico instrumentista Herbie Mann, que gravou o álbum "Memphis Underground" em 1969, ao qual eu estava ouvindo no momento em que testei o programa pela primeira vez e obtive êxito --- mais especificamente, estava ouvindo a faixa 3 dele --- e que é o meu álbum favorito de crossover jazz.

Bugs descobertos

Graças à minha brilhante ideia de fazer um interpretador em KornShell 93 --- mesmo que a linguagem tenha se mostrado mais-do-que capaz de fazer ---, acabei por descobrir alguns bugs no processo, tanto na hora de programar quanto na hora de testar.

  • No dia 22 de Setembro de 2023, enquanto testava o algoritmo da soma de Gauss, descobri um bug que causa um "Memory fault" (lit. "Falha de memória") quando tenta se somar até 1 milhão, o que foi reportado à equipe de desenvolvimento do KornShell 93 na issue #686.
    Atualização: O @phidebian me respondeu nessa issue mostrando que o erro se dá não pelo tamanho do tipo integer no KornShell, que é de um double --- ou seja, 9.223.372.036.854.775.807, nove quintilhões, duzentos e vinte e três quatrilhões, trezentos e setenta e dois trilhões, trinta e seis bilhões, oitocentos e cinquenta e quatro milhões, setecentos e setenta e cinco mil, oitocentos e sete, um número ridiculamente grande que faz a soma Gaussiana de 1.000.000 parecer um número ínfimo ---, mas sim pelo tamanho da pilha de recursão de função de KornShell ser de 1024, fazendo recursão inviável nesse caso.
  • O KornShell 93, na versão 1.0.0-beta.2, lançada em 17 de Dezembro de 2021, não suporta variáveis com identificadores UTF-8, como, por exemplo, float φ=$(( (1 + sqrt(5)) / 2 )) --- entretanto, isso funciona perfeitamente nas versões mais recentes, então não reportei.

Classificação final

Pelo visto, o programa ficou com a pontuação zerada graças a uma limitação do jq que faz com que ele não formate ou nem sequer imprima JSONs com "profundidade" --- no caso, elementos dentro de outros elementos principais, como uma árvore --- maior do que 1.024, ou seja, Dona Culpa ficou solteira, ao menos comigo não se casou. 🤣
Entretanto, se o JSON for formatado previamente (seja gerando-o com rinha -p ou usando outro programa, como o jj(1)), o herbiec aparentemente roda os testes tranquilamente sem demais problemas --- tirando o fato da implementação de tuplas não estar tão completa e nem "intocável", "bulletproof", além do programa não imprimir os resultados em ordem de execução, mas tudo apenas no final, entretanto aí já é, de fato, um affair meu com a Dona Culpa.
Rodeios culturais dignos de um ouvinte de noticiário em rádio à parte, valeu muito a experiência, mesmo não tendo entrado para o topo da classificação ou nem ao menos pontuado, além de ter deixado um bom exemplo do que KornShell/93 realmente é capaz.

herbiec's People

Contributors

takusuman avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.