Uploaded avatar of iHiD

É o Mindshifting May!

@iHiD
há Mais de 3 anos
Vídeo

Introdução

Olá a todos! Espero que estejam todos bem.

O ano está a passar depressa e chegámos ao Mindshifting May, provavelmente o mês que mais me entusiasma, sobretudo porque inclui Prolog!

Espero que tenhas gostado do Analytical April. Participaram imensos de vocês e acho que foi um dos meses mais bem-sucedidos até agora. Também conversei com o Simon Peyton Jones durante abril, numa entrevista tardia do Functional February. Foi mesmo muito bom e recomendo vivamente que a voltes a ver, nem que seja só pela frase maravilhosa: «Quando o calcário da programação imperativa se desgastar, o granito da programação funcional revelar-se-á por baixo».

De qualquer forma, vamos ao Mindshifting May! Como sempre, o Erik e eu vamos dar-vos uma visão geral rápida do que estes meses são e das diferentes linguagens que vamos explorar.

Este mês temos nada mais nada menos do que seis linguagens: Ballerina, Pharo, Prolog, Red, Tcl (Tickle) e Unison. Todas elas são bastante diferentes das linguagens mais comuns, por isso recomendamos que experimentes mais do que uma para perceberes as diferenças. Recomendo vivamente Prolog, porque é uma das linguagens em que mais gostei de programar em toda a minha vida. O Erik também está muito entusiasmado com Unison, por isso também é uma boa aposta.

Os badges

Para receberes o badge do Mindshifting May, tens de completar cinco exercícios, quaisquer que sejam, numa dessas linguagens durante maio.

Há também o badge 12in23, que dura todo o ano. Para o receberes, tens de resolver cinco dos nossos exercícios em destaque nessa linguagem. Se estás a ver isto depois de maio, podes fazer esta parte em qualquer altura do ano, por isso não ficaste de fora. Foi difícil escolher estes exercícios, porque as linguagens são todas muito diferentes, por isso optámos por exercícios mais genéricos, divertidos de resolver e interessantes para explorar abordagens diferentes.

  • Acrónimo: converte uma frase no seu acrónimo
  • Isograma: verifica se uma frase contém letras repetidas
  • Números romanos: converte um número decimal em números romanos
  • Gotas de chuva: converte um número em sons de gotas de chuva
  • Era espacial: calcula a idade que alguém teria nos planetas do nosso sistema solar

Podes encontrar estes exercícios e os dos meses anteriores na página #12in23.

Visão geral

Vamos a isso e vamos explorar cada uma destas linguagens com uma visão geral.

Prolog:

  • Uma forma diferente de pensar. Um programa é definido como um conjunto de relações. Depois «consultas» a base de dados de relações para encontrar respostas através de unificação (correspondência de padrões). Perfeito para sistemas baseados em regras
  • Pouca sintaxe: apenas um tipo de dados (termos) e um elemento estrutural da linguagem (cláusulas). As cláusulas são construídas inteiramente a partir de termos e podem definir factos ou regras.
  • Muito declarativa. Preocupas-te menos com a forma como as coisas são calculadas e mais com o que deve ser calculado. Em muitos casos, isto significa menos código
  • É ideal para consultar grandes espaços de pesquisa. Diferentes estratégias de pesquisa (em profundidade, em largura) e suporte para poda automática

Unison

  • Não há conflitos de versões no código Unison! Uma função Unison conhece os hashes das suas dependências, por isso consegue encontrar a versão certa do código de que precisa.
  • O Unison suporta navegação de código ao vivo na interface de desenvolvimento local e em repositórios alojados, por isso podes clicar sempre para ver o código-fonte das bibliotecas de que dependes.
  • As Abilities são uma forma de gerir «efeitos» (por exemplo, IO) de forma puramente funcional

Pharo

  • Muito pouca sintaxe: a sintaxe completa cabe num postal (apenas 6 palavras reservadas!). A sintaxe das mensagens imita as linguagens naturais, com um sujeito, um verbo e complementos (between: 1 and: 2 +). A semântica também é simples (por exemplo, regras de precedência extremamente simples). Torna tudo mais fácil de aprender e de ler
  • A produtividade é excelente, depois de ultrapassada a curva de aprendizagem inicial. Há várias razões para isto, incluindo a semântica simples e a pouca sintaxe, mas também algumas das funcionalidades de destaque do Pharo, que referimos mais à frente
  • Funciona na maioria das plataformas (Windows, macOS, Linux + suporte ARM) sobre uma máquina virtual rápida (OpenSmalltalk)
  • Não é apenas uma implementação de Smalltalk: continua a ser desenvolvido ativamente (a versão mais recente do SmallTalk é o SmallTalk 80, de 1980)
  • Uma comunidade acolhedora

Tcl (pronuncia-se «tickle»)

  • Muito pouca sintaxe: apenas 12 regras, que cabem numa folha de papel. A semântica também é relativamente simples. Torna os programas fáceis de ler e de aprender
  • Concorrência simples através de corrotinas, o que permite escrever código assíncrono como se fosse código síncrono
  • Ciclo de eventos incorporado para programação de redes e I/O de ficheiros assíncrono
  • Madura, mas em constante evolução

Ballerina

  • Suporte de primeira classe para processamento declarativo e com segurança de tipos de JSON, XML e dados tabulares, com consultas integradas na linguagem
  • Tipos flexíveis, com a tipagem estrutural (duck typing) a predominar. Os tipos fechados são uma forma de fazer subtipagem, enquanto os tipos abertos lidam de forma elegante com o envio de demasiados dados. Inclui vinculação e validação de dados quando usada em recursos HTTP
  • Suporte incorporado para padrões de integração e conectores comuns, incluindo transações distribuídas, compensação e disjuntores
  • Todos os programas Ballerina são automaticamente observáveis por qualquer ferramenta Open Telemetry, dando-te controlo e visibilidade totais sobre o comportamento e o desempenho do código.
  • Excelente concorrência através de strands, que são threads leves. As chamadas de IO não bloqueantes são fáceis. O compilador ajuda a verificar as chamadas de envio e receção entre workers, evitando deadlocks. A imutabilidade também é ótima para redes
  • Tratamento explícito de erros através de tipos união e do açúcar sintático check para ajudar nisso

Red

  • Leve. Todo o conjunto de ferramentas tem cerca de 1,5 MB de download e é um único executável.
  • Portátil. Compilação cruzada fácil. Produz binários pequenos e sem dependências. Baixo consumo de memória.
  • O Red é a sua própria meta-linguagem e o seu próprio formato de dados (como as LISPs). Os programas podem transformar e ler código.
  • Reativa: os objetos podem ser ligados entre si para reduzir o tamanho e a complexidade do programa (pensa em folhas de Excel)

Onde se usam estas linguagens?

Prolog:

  • Inteligência artificial (o Watson da IBM)
  • Processamento de linguagem (natural)
  • Bases de dados distribuídas para bases de conhecimento (TerminusDB)
  • Usada até para especificar as regras de tipos da Máquina Virtual Java

Unison

  • Usada para escrever sistemas distribuídos
  • Serviços web em geral
  • Tarefas de computação em lote

Pharo

  • Usada para ferramentas interativas
  • Usada em áreas muito diversas: plataformas de negociação online e ferramentas de gestão de investimentos baseadas na nuvem
  • Prototipagem de interfaces de utilizador e de interação na indústria da defesa
  • Aplicações web para planeamento de eventos
  • Ferramenta de ambiente de desenvolvimento moldável para exploração de APIs, dados e sistemas

Tcl

  • Usada como código de cola ou embutida
  • Usada em interfaces gráficas de routers da CISCO
  • Vários sistemas de fabrico
  • A NASA já a usou em muitas ocasiões
  • Outras grandes empresas incluem a Pixar, a Boeing, a Intel, a NBC e muitas mais.
  • O Tk, o conjunto de ferramentas de janelas, foi adotado por outras linguagens de «scripting» como Perl, Python e Ruby.
  • O Expect, uma ferramenta para automatizar aplicações interativas de CLI

Ballerina

  • Usada para aplicações nativas da nuvem
  • Usada pela MOSIP, uma plataforma de identidade fundacional que ajuda governos e outras organizações a implementar sistemas de identidade digitais e fundacionais de forma económica.

O que torna estas linguagens interessantes do ponto de vista da programação?

Prolog:

  • Linguagem de programação lógica (uma das primeiras), que é um paradigma próprio (como a POO e a programação funcional)
  • Com tipagem dinâmica

Unison

  • Linguagem puramente funcional
  • Com tipagem estática

Pharo

  • Linguagem orientada a objetos, mas no sentido do SmallTalk. Diferente das linguagens orientadas a objetos «normais»: sem construtores, sem declaração de tipos, sem interfaces, sem tipos primitivos.
  • Com tipagem dinâmica

Tcl

  • Multiparadigma: suporta estilos orientados a objetos, imperativos e funcionais
  • Com tipagem dinâmica

Ballerina

  • Multiparadigma: orientada a objetos, funcional e declarativa
  • Com tipagem estática

Red

  • Multiparadigma: imperativa, funcional, orientada a objetos, simbólica e reativa
  • Com tipagem estática

Quais são as suas funcionalidades de destaque?

Prolog:

  • Flexível. Muitos predicados incorporados funcionam em várias direções. Permite consultar e criar dados com a mesma sintaxe. Alguns problemas que são difíceis noutras linguagens tornam-se triviais
  • O DCG é como um combinador de parsers incorporado, ótimo para analisar, gerar, completar e verificar sequências
  • O CLP é uma forma eficiente de definir um programa em termos de restrições

Unison

  • O código não é texto, mas sim dados (imutáveis). O código é guardado numa base de dados e é acedido e atualizado através do Unison Codebase Manager. Os ficheiros de texto são apenas uma forma de introduzir código na base de dados. O facto de os dados serem imutáveis também significa que os resultados dos testes podem ser colocados em cache e que a verificação de tipos só tem de ser feita uma vez
  • As definições são referenciadas por hash, não por nome. A isto chama-se código «endereçado por conteúdo». A árvore sintática de uma definição determina o seu hash. Sem conflitos de versões e as renomeações são triviais.
  • A documentação do Unison é uma entidade de primeira classe na linguagem e está sempre sincronizada com as funções que descreve. Podes incorporar exemplos ao vivo nela e garantir que o teu código de exemplo compila.
  • Ideal para computação na nuvem: não há builds, as funções podem ser distribuídas dinamicamente e passa-se menos tempo a escrever codificadores e descodificadores para a comunicação serviço a serviço do Unison.

Pharo

  • Modelo de execução simples: tudo é um objeto e a execução acontece exclusivamente através de mensagens (que também são objetos). Até o fluxo de controlo é feito através de mensagens. Apesar de o modelo ser simples, é muito poderoso. Bastante diferente de outras linguagens orientadas a objetos.
  • O teu código reside numa imagem Pharo, não em ficheiros de texto. Uma imagem Pharo contém todo o estado da tua aplicação e pode ser executada numa máquina virtual Pharo. Quando guardas o teu trabalho, o Pharo guarda todo o estado do ambiente num ficheiro de imagem. Este ficheiro contém todos os objetos, as suas relações e o contexto de execução. Os ficheiros de imagem podem ser partilhados com outras pessoas e carregados em máquinas ou plataformas diferentes. Isto permite aos programadores colaborar facilmente num projeto ou distribuir aplicações criadas em Pharo
  • Ao vivo e imersivo, com feedback imediato durante a execução através do IDE específico do Pharo. Executa e altera o teu programa dinamicamente, mesmo enquanto está a correr! Um depurador poderoso que permite reiniciar métodos e corrigir bugs em tempo real

Tcl

  • Sistema de tipos simples: tudo é uma string. «Tudo é uma string» era como o Tcl costumava ser implementado. Hoje, nos bastidores, existe um sistema de tipos robusto, em que a entidade Tcl (seja uma string, um número de vírgula flutuante, uma lista ou um dicionário) tem uma representação específica do tipo, bem como uma representação em string. Isto melhora bastante o desempenho do código Tcl, porque já não precisa de converter de e para strings.
  • «Tudo corre como comandos.» Não há comandos incorporados. O Tcl vem com uma «biblioteca padrão» de comandos, incluindo if e while, etc. É muito simples adicionar novos comandos de fluxo de controlo: por exemplo, um ciclo until. Também é fácil substituir um comando Tcl.
  • Por ser compacto, ter uma semântica simples e estar implementado como uma biblioteca em C, é fácil de incorporar

Ballerina

  • Nativa da nuvem. Conversões incorporadas de JSON para tipos definidos pelo utilizador. Sintaxe superleve para criar (micro)serviços. Execução concorrente de serviços incorporada. Suporte de HTTP (1 e 2), GraphQL e gRPC de raiz
  • Gera automaticamente artefactos para publicar o teu código em diferentes nuvens. Esses artefactos podem ser Dockerfiles, imagens Docker, ficheiros YAML do Kubernetes ou funções serverless.
  • Visualização incorporada do código como diagramas de sequência. Ótima para visualizar o fluxo do código. Consegue até visualizar chamadas HTTP

Red

  • Ótima para criar e analisar linguagens específicas de domínio, ou «dialetos» (terminologia do Rebol). Vários dialetos incorporados:
  • Red/System: uma linguagem de programação de sistemas ao nível de C, compilada para código nativo
  • Parse: um potente parser PEG
  • VID: um dialeto simples para criar layouts de GUI
  • Draw: um dialeto de desenho vetorial 2D
  • Rich-text: um dialeto de descrição de texto formatado
  • Interfaces gráficas fáceis. Totalmente multiplataforma e nativas. Suporta vinculação bidirecional, atualização em tempo real, eventos e dá acesso às funcionalidades do sistema operativo

Qual ou quais devem as pessoas experimentar durante maio?

São todas linguagens interessantes por direito próprio, por isso poderias defender qualquer uma delas.

  • Se te interessa a computação na nuvem, Ballerina e Unison são ótimas opções. O Tcl também tem excelentes funcionalidades de concorrência
  • Se já conheces a programação orientada a objetos mas queres ver uma abordagem diferente, experimenta o Pharo
  • Se queres ver como é programar numa linguagem que não assenta em ficheiros de texto, experimenta o Pharo e o seu IDE único e poderoso, ou o Unison com o Unison Codebase Manager.
  • Se gostas de minimalismo, o Tcl, o Prolog, o Pharo e o Red têm todos pouca sintaxe e uma semântica relativamente simples
  • Se queres ver uma mistura interessante de paradigmas, Ballerina, Tcl e Red suportam todos paradigmas diferentes
  • Se gostarias de experimentar paradigmas mais invulgares, experimenta o Prolog para programação lógica, o Red para programação reativa e Ballerina para programação declarativa
  • Se gostas de programação funcional, dá uma vista de olhos ao Unison e, em particular, às suas Abilities.
  • Se te interessa a metaprogramação, o Tcl, o Prolog, o Pharo e o Red têm todos um excelente suporte

Claro que, se tiveres tempo, recomendo que experimentes duas ou três! São todas bastante únicas. Resolve o mesmo exercício em duas ou três das linguagens em destaque e vê como a implementação é diferente.

Translation missing: pt-PT.number.nth.ordinalized May 2023 · Foi útil?