Introdução
Olá. Bem-vindo. Espero que estejas bem. Espero que te tenhas divertido a explorar algumas linguagens antigas e influentes durante o Jurassic July. Agora vamos ao mês 8 de 2023 e ao nosso 7.º mês temático: o Appy August.
O que queremos dizer com apps?
Bem, pode significar várias coisas:
- Aplicações web, o pão nosso de cada dia de muita gente hoje em dia
- Apps nativos, como os que correm no teu telemóvel ou tablet
- Apps de ambiente de trabalho que correm diretamente no teu sistema operativo Windows, Mac ou Linux
- Aplicações específicas de domínio
- Aplicações empresariais
- E muito mais!
Então, quais são as linguagens?
Temos nada mais nada menos do que 14 linguagens: ABAP, CoffeeScript, Dart, Delphi, Elm, Java, JavaScript, Kotlin, Objective-C, PHP, PureScript, ReasonML, Swift e TypeScript.
Os distintivos
Obtém o distintivo completando 5 exercícios numa destas linguagens este mês. E para o distintivo anual, precisas de completar:
- Anagrama: dada uma palavra e uma lista de anagramas possíveis, encontra os seus anagramas
- Número de Telefone: limpa um número de telefone
- Triângulo: classifica um triângulo
- Transcrição de ARN: transforma uma sequência de ADN no seu complemento de ARN
- Pontuação de Scrabble: dada uma palavra, determina a sua pontuação no Scrabble
Visão geral
ABAP
- O ABAP foi desenvolvido pela SAP SE nos anos 80, e o seu objetivo de design torna-se claro quando vemos o que a sigla significava: Allgemeiner Berichts-Aufbereitungs-Prozessor, que em alemão significa «processador geral de preparação de relatórios». Mais tarde, o ABAP tornou-se mais geralmente aplicável e a sigla foi atualizada para Advanced Business Application Programming para refletir isso
- Linguagem de tipagem forte e estática
- Multiparadigma: suporta programação imperativa e orientada a objetos
- Compilado para bytecode. Curiosamente, o código-fonte é armazenado dentro da base de dados
- Todo o código corre no contexto de um sistema SAP, que é composto por uma base de dados relacional e um ou mais servidores de aplicações
- Tecnologia proprietária e de código fechado, embora um dos nossos responsáveis tenha criado uma fantástica reimplementação de código aberto
- Usado em aplicações empresariais, como finanças, gestão de materiais, contabilidade e gestão. Tem clientes em todo o mundo, com muitos nomes sonantes como Apple, Amazon e Walmart
Porque é ótimo
- Em constante evolução, com novas funcionalidades adicionadas regularmente
- Fiável: funcionalidades estáveis com décadas de experiência por trás
- Biblioteca padrão extensa
Funcionalidades de destaque
- Integração perfeita com o sistema SAP e a base de dados, mas também com muitos outros sistemas
- O ABAP Dictionary contém todos os metadados sobre os dados no sistema SAP, incluindo tabelas, vistas e estruturas. Os tipos neste dicionário podem ser usados para tipar variáveis estaticamente, mesmo quando o tipo é uma tabela
- O ABAP Workbench faz parte do sistema ABAP e contém um conjunto de ferramentas para editar programas. Inclui o design de ecrãs
CoffeeScript
- A linguagem recebeu os seus primeiros commits em 2009, da autoria de Jeremy Ashkenas; a mensagem do primeiro commit dizia «commit inicial da linguagem mistério»
- De tipagem dinâmica e multiparadigma (orientada a objetos, imperativa, funcional, prototípica)
- Compila para JavaScript (o que se chama transpiling). A regra de ouro do CoffeeScript é: «É só JavaScript.» Uma das primeiras linguagens de sucesso a «transpilar para JS»
- Tornou-se popular porque o CoffeeScript não tinha alguns dos problemas com que quem trabalhava com JS se debatia na altura (como o binding de «this» funcionar de forma diferente, ou as classes não serem suportadas). Foi incluído no Ruby on Rails a partir da versão 3.1.
- Em 2017, a linguagem recebeu a versão 2.0, que procurava colocá-la a par do padrão JavaScript mais recente. A linguagem recebe uma atualização cerca de uma vez por ano.
- O compilador da linguagem foi originalmente escrito em Ruby, mas foi substituído em 2010 por um compilador self-hosting escrito em CoffeeScript (o compilador não depende do NodeJS e pode correr diretamente no browser)
- O CoffeeScript foi influente ao ponto de inspirar o JavaScript a adotar certas funcionalidades (sintaxe de seta lambda, classes)
- Já foi usado pela Dropbox e no Rails
Porque é ótimo
- Sintaxe limpa e concisa, inspirada em Python, Ruby e Haskell. Menos verboso do que o JavaScript, eliminando muitos parênteses e chavetas, em parte por usar indentação significativa (o espaço em branco é importante)
- Semântica simplificada, por exemplo, sem confusão em torno de let, var, const, pois não existem, e == é transpilado para === (igualdade estrita), e as ligações de funções previnem os erros comuns com «this»
- Baseado em expressões, o que significa que podes atribuir o resultado de uma expressão if a uma variável
- Muito açúcar sintático, por exemplo, usa @ em vez de this, yes/on podem ser usados em vez de true, // para divisão inteira, @ em vez de this e muito mais
Funcionalidades de destaque
- Compila para JavaScript limpo e legível por humanos, com uma correspondência um-para-um entre o código-fonte e o código gerado.
- Excelente interoperabilidade com JavaScript: podes usar facilmente código escrito em JS a partir do CoffeeScript (e vice-versa). Usa qualquer biblioteca JS existente
- Acrescenta funcionalidades que faltam ou faltavam ao JavaScript: compreensões de listas, interpolação de strings, operador existencial (?), comparações encadeadas
- Linguagem pequena, o compilador tem cerca de 500 kb (100 kb comprimido)
Dart
- Concebido por Lars Bak e Kasper Lund na Google
- Primeira versão em 2011
- O objetivo era criar uma linguagem rápida e produtiva, particularmente adequada à construção de interfaces de utilizador
- De tipagem estática
- Multiparadigma: principalmente orientado a objetos, mas também funcional e imperativo
- Pode ser interpretado e compilado just-in-time
- Usado sobretudo para construir apps, mas também pode ser usado para construir backends
Porque é ótimo
- Fácil de aprender, graças a uma sintaxe familiar
- Sistema de tipos moderno: inferência de tipos, pattern matching, async/await
- Documentação excelente
- Segurança através de um sistema de null-safety sólido: acabaram-se as exceções de ponteiro nulo
- Boas ferramentas, com suporte em várias IDEs. Otimizado para um ciclo de feedback curto, por exemplo, através de um hot reload rápido
- Ecossistema em crescimento, com muitas bibliotecas disponíveis
Funcionalidades de destaque
- Pode compilar para JS, para código nativo, mas também para Swift e Kotlin, o que é ótimo para apps móveis.
- A biblioteca Flutter pode ser usada para construir rapidamente apps móveis, web, de ambiente de trabalho ou embebidos. Escreve uma vez, corre em plataformas diferentes
- Excelente suporte de concorrência, com async/await, isolates (construtos leves para executar concorrência), futures e muito mais
Delphi
- O Delphi foi desenvolvido pela Borland e lançado em 1995.
- É uma linguagem de programação Object Pascal e foi desenvolvido por Anders Hejlsberg, um dos principais arquitetos do C#
- De tipagem forte e estática
- Compila para código nativo
- Multiparadigma: sobretudo orientado a objetos, mas também imperativo, declarativo e orientado a eventos
- Usado em aplicações empresariais, interfaces gráficas e escolas (para ensinar programação)
Porque é ótimo
- Fácil de aprender. O Object Pascal combina a simplicidade e a clareza do Pascal com funcionalidades de programação orientada a objetos, o que torna mais fácil escrever e manter código
- Ambiente de Desenvolvimento Integrado (IDE): o IDE do Delphi oferece um ambiente fácil de usar e cheio de funcionalidades, que simplifica o processo de desenvolvimento. Disponibiliza navegação de código, ferramentas de depuração, preenchimento automático de código e outras funcionalidades de produtividade que tornam o desenvolvimento mais eficiente.
- Estabilidade: existe desde o início dos anos 90, com um historial de ferramenta e linguagem de desenvolvimento fiável e estável, incluindo uma forte compatibilidade retroativa. Código escrito em versões anteriores do Delphi ainda pode ser compilado e executado em versões mais recentes com ajustes mínimos.
- Suporte multiplataforma: o Delphi expandiu as suas capacidades para além do Windows e oferece suporte de desenvolvimento multiplataforma, permitindo aos programadores visar vários sistemas operativos como macOS, iOS, Android e outros. Isto permite criar aplicações para um público mais vasto e aumenta o alcance dos projetos.
- Comunidade e apoio sólidos: o Delphi tem uma comunidade de programadores dedicada e ativa, que contribui com bibliotecas, ferramentas e recursos para o ecossistema.
Funcionalidades de destaque
- Executáveis de alto desempenho: as aplicações Delphi são conhecidas pela sua velocidade e desempenho. O compilador Delphi produz executáveis nativos altamente otimizados, o que pode ser crítico para certos tipos de aplicações, como as que exigem processamento em tempo real ou tarefas computacionais pesadas.
- Ambiente de Desenvolvimento Rápido de Aplicações (RAD): ferramentas visuais de design arrastar-e-largar permitem aos programadores criar interfaces de utilizador e ligá-las à funcionalidade com o mínimo de esforço, acelerando o processo de desenvolvimento.
- Arquitetura baseada em component: assenta numa arquitetura baseada em component, em que se constroem component reutilizáveis para criar aplicações. Facilita a reutilização de código e reduz o tempo de desenvolvimento.
- Tratamento de eventos: o Delphi usa um modelo de eventos integrado, que permite aos programadores responder facilmente a ações do utilizador e a outros eventos. O tratamento de eventos simplifica o processo de captar a entrada do utilizador ou eventos do sistema e responder de forma adequada.
- Conetividade com bases de dados: o Delphi fornece component nativos de acesso a bases de dados que permitem uma integração perfeita com vários sistemas de bases de dados. Este suporte integrado simplifica o desenvolvimento de aplicações orientadas a bases de dados.
Elm
- A linguagem foi criada por Evan Czaplicki para a sua tese final de curso e lançada em 2012
- Inicialmente abordava o tema da Programação Reativa Funcional (FRP) para interfaces gráficas (FRP com sinais), mas em 2017 a FRP foi abandonada em favor da TEA (The Elm Architecture)
- Linguagem funcional, de tipagem estática e forte
- Sintaxe inspirada em Haskell
- Linguagem de código aberto, mas muito opinionada, e o estilo de desenvolvimento envolve longos períodos de trabalho profundo de Evan antes de tornar as coisas públicas. Por isso, os PRs podem ficar muito tempo sem ser integrados e o projeto pode parecer parado, mas é apenas o estilo de trabalho do Evan.
- Usada em sites, por exemplo, NoRedInk, Vendr, Rakuten, Brilliant
Porque é ótima
- É uma linguagem muito pequena, uma das mais fáceis de aprender da família ML de linguagens funcionais com tipagem estática. Quase por isso, é ótima para ensinar programação funcional.
- As mensagens de erro do compilador são as mais simpáticas e úteis que vais encontrar por aí.
- Linguagem estável: a última versão é de 2019
- Os pacotes no ecossistema são poucos, mas de grande qualidade.
- Um poderoso ecossistema de linting com o elm-review (que alimenta o analisador do percurso de Elm do Exercism).
Funcionalidades de destaque
- A The Elm Architecture (TEA) está na base de todas as apps Elm, por isso é muito fácil rever aplicações Elm desconhecidas.
- Sem exceções em tempo de execução! Exceto apenas em duas ou três coisas.
- Não há quebras ao atualizar dependências; o versionamento semântico é imposto pelo compilador.
- Quando compila, funciona (exceto erros de lógica). E, quando te habituas, é muito difícil voltar a outras linguagens.
- O «elm-ui» de Matthew Griffith permite o «quando compila, funciona» para estilo e layout; não precisas de CSS.
- Aplicações web full-stack: a Lamdera é um spin-off que usa Elm para aplicações web full-stack, sem qualquer cola entre o frontend e o backend.
Java
- Desenvolvido por James Gosling na Sun Microsystems e lançado em 1995.
- Cinco objetivos originais:
- Simples, orientado a objetos e familiar.
- Robusto e seguro.
- Neutro em termos de arquitetura e portável.
- Alto desempenho.
- Interpretado, com threads e dinâmico.
- De tipagem forte e estática
- Compilado para bytecode (está a ser trabalhado o código nativo)
- Multiparadigma: imperativo, orientado a objetos e funcional
- A linguagem e a máquina virtual têm especificações oficiais e, por isso, também várias implementações (por exemplo, a OpenJDK JVM e a Hotspot VM da Oracle)
- Usado numa enorme quantidade de software, de sites a sistemas embebidos, e de apps a bases de dados
Porque é ótimo
- Corre em (quase) todo o lado (como o atualizador do Java te fará questão de lembrar ;))
- Uso geral: pode ser usado para quase qualquer tipo de tarefa, incluindo apps, sites e sistemas embebidos
- Interoperabilidade com outras linguagens da JVM, como Kotlin, Groovy, Scala e Clojure
- Ferramentas excelentes, tanto para IDEs como para outras ferramentas, como sistemas de build
Funcionalidades de destaque
- A JVM é uma máquina virtual madura, estável e de elevado desempenho, que está continuamente a ser melhorada
- Ecossistema enorme, com um número gigantesco de bibliotecas disponíveis. Essas bibliotecas são, tal como o Java, maduras, estáveis e completas
- Em evolução: a linguagem e o runtime continuam a evoluir, com atualizações regulares à linguagem para a tornar mais moderna e responder às críticas das pessoas (como a redução de código repetitivo e de verbosidade). Quanto ao runtime, são lançados regularmente novos projetos para o fazer evoluir ainda mais (por exemplo, o projeto loom, para construtos leves de concorrência, e a compilação nativa através do GraalVM)
JavaScript
- Brendan Eich foi contratado pela Netscape em 1995 para criar uma linguagem que tornasse as páginas web dinâmicas. O primeiro protótipo foi, como se sabe, criado em 10 dias
- Normalizado como ECMAScript em 1997
- De tipagem dinâmica e fraca
- Costumava ser apenas interpretado, mas hoje é frequentemente compilado just-in-time
- Multiparadigma: prototípico (bastante raro), mas também orientado a objetos, imperativo e funcional
- Extremamente influente para fazer da web o sucesso que é hoje. Por exemplo, o AJAX foi muito importante para acrescentar interatividade. É o padrão de facto para o desenvolvimento web, pois é a única linguagem de programação com suporte incorporado no browser
- Provavelmente a linguagem mais usada nos dias de hoje
- Usado para backends, frontend, scripts e ferramentas de linha de comandos
Porque é ótimo
- Uso geral: pode ser usado para muitas tarefas: backend, frontend, scripts, ferramentas de linha de comandos. Muitas ferramentas usadas para a web são escritas em JavaScript (e correm em nodejs)
- Os runtimes (como o V8) são fortemente otimizados e podem ter um desempenho muito elevado, apesar de a linguagem ser altamente dinâmica
- Linguagem relativamente pequena, o que a torna relativamente fácil de aprender. Poder executá-la num browser torna-a especialmente boa, pois podes ter feedback visual enquanto aprendes
- A especificação é atualizada com frequência para introduzir novas funcionalidades, como async/await e interpolação de strings. Há também muita inovação em torno das ferramentas, com ferramentas mais recentes como deno, esbuild e bun.js a serem desenvolvidas para ajudar a trabalhar com bases de código JavaScript
- O suporte de JSON é de primeira, como prova o facto de JSON significar JavaScript Object Notation
- Concebido para ser bom para código orientado a eventos e não bloqueante
Funcionalidades de destaque
- Ecossistema enorme. Está disponível uma quantidade gigantesca de bibliotecas (2,1 milhões de pacotes em setembro de 2022), mas também muitas outras linguagens que têm o JavaScript como alvo
- Corre na maioria das plataformas e hardwares, do Windows à Apple, de Raspberry Pi's a telemóveis, de servidores web a plataformas serverless. Os browsers têm suporte nativo incorporado, por isso não é preciso instalar um runtime.
- Ideal para o desenvolvimento web, com muitos frameworks à escolha (React, Vue, Angular), bem como muitas ferramentas para ajudar a construir aplicações web (por exemplo, eslint, parcel)
- Pode ser usado de forma isomórfica, o que significa que a mesma linguagem (e base de código) pode ser usada tanto no backend como no frontend. Isto torna a manutenção mais fácil e permite reutilizar código entre o frontend e o backend
- Uma enorme popularidade significa: muitos recursos para aprender (vídeos, blogs, cursos) e uma vasta comunidade com quem interagir
Kotlin
- Desenvolvido pela JetBrains em 2010, famosa pelas suas IDEs (por exemplo, IntelliJ, CLion, GoLand e Rider)
- A maioria dos produtos da JetBrains era escrita em Java, mas eles queriam uma linguagem da JVM que reduzisse o código repetitivo, acelerasse o desenvolvimento e suportasse algumas funcionalidades que lhes faziam falta. O Scala tinha essas funcionalidades, mas revelou-se demasiado lento a compilar. Assim nasceu o Project Kotlin.
- De tipagem forte e estática
- Multiparadigma: imperativo, orientado a objetos, funcional, declarativo
- Por predefinição, compila para bytecode da JVM, mas também pode compilar para JS e para código nativo (útil para plataformas em que as máquinas virtuais não são possíveis ou desejáveis, como os dispositivos iOS)
- Foi assinalado pela Google, em 2019, como a linguagem preferida para escrever apps Android
- Usado para construir sites, apps (sobretudo Android) e até IDEs inteiras (as IDEs acima mencionadas)
Porque é ótimo
- Uso geral: pode ser usado para quase qualquer tarefa, incluindo apps e sites. A Google considerou o Kotlin a linguagem preferida para desenvolver apps Android em 2019
- Por correr na JVM, aplicam-se-lhe todos os seus benefícios: uma máquina virtual madura e de alto desempenho e um número gigantesco de bibliotecas disponíveis
- Atenua muitos dos problemas que as pessoas podem ter com o Java, como as exceções verificadas, a segurança contra nulos e a verbosidade
- Linguagem moderna: inferência de tipos avançada, baseada em expressões, imutabilidade, pattern matching, coroutines, channels
- Ferramentas excelentes (o que é de esperar quando o próprio IDE é escrito na linguagem :)
Funcionalidades de destaque
- Produtivo: o Kotlin adota as melhores partes de outras linguagens, moldando-as numa só linguagem consistente e produtiva, e em alguns casos melhora ainda mais o original (por exemplo, com métodos de extensão locais)
- Coroutines: enquanto em muitas linguagens o async/await está integrado na própria linguagem, no Kotlin isso é implementado como uma biblioteca que usa a funcionalidade de coroutines da linguagem. As coroutines são uma forma de lidar com funções suspensas, que oferecem uma abstração mais segura e menos propensa a erros para operações assíncronas do que as futures e as promises.
- Excelente concorrência: async/await, channels e imutabilidade ajudam todos a obter uma excelente concorrência
- O Compose multiplatform permite construir interfaces de utilizador partilhadas a partir da mesma base de código, usando uma sintaxe declarativa
Objective-C
- Originalmente desenvolvido por Brad Cox e Tom Love no início dos anos 80, foi escolhido pela NeXT para o seu sistema operativo NeXTSTEP. Devido à linhagem direta do macOS da Apple a partir do NeXTSTEP, tornou-se a linguagem de eleição para o software da Apple
- Concebido para combinar as ideias orientadas a objetos do SmallTalk com o C, usando a passagem de mensagens como construto central da orientação a objetos
- Superconjunto do C, por isso qualquer código C é código Objective-C válido e ambos podem ser combinados na mesma base de código
- Tipagem estática e dinâmica
- Compilado
- A linguagem padrão para escrever aplicações macOS e iOS até à chegada do Swift, em 2014
- Usado para apps macOS e iOS
Porque é ótimo
- A mistura de C com funcionalidades orientadas a objetos pode ser realmente poderosa
- Runtime leve, o que o torna eficiente em termos de recursos
- Sintaxe de classes leve
- A enumeração rápida permite ciclos for mais fáceis do que em C
- Forte compatibilidade retroativa
Funcionalidades de destaque
- Suporta Automatic Reference Counting (ARC), que liberta automaticamente a memória quando um objeto já não está a ser referenciado, tornando a gestão de memória mais fácil
- O runtime dinâmico permite o method swizzling (alterar dinamicamente o comportamento de um seletor (como o monkey patching)), a reflexão e o reencaminhamento de mensagens (ótimo para o padrão observer ou proxy)
- Os protocolos e as interfaces trazem funcionalidades de interface ao C, e as interfaces de categoria permitem até estender tipos existentes
PHP
- Desenvolvido e implementado por Rasmus Lerdorf em 1993 e lançado pela primeira vez em 1995
- O nome é um acrónimo recursivo: PHP: Hypertext Preprocessor
- De tipagem dinâmica e fraca, com a opção de acrescentar gradualmente asserções de tipos fortes em tempo de execução
- Multiparadigma: imperativo, funcional, orientado a objetos, procedural, reflexivo
- Interpretado ou compilado just-in-time
- A plataforma original de renderização do lado do servidor
- Usado em sites (Facebook, Wikipedia e muitos mais) e também em muitos sistemas de gestão de conteúdos (Wordpress, JOOMLA).
Porque é ótimo
- É omnipresente: o PHP é usado em 77,4% de todos os sites^1, independentemente da plataforma específica
- Sintaxe simples, semelhante à de outras linguagens de programação estabelecidas (Java, JavaScript, C), o que o torna fácil de aprender
- Uso geral. Serve para muitos fins: desde criar pequenos scripts web até criar grandes aplicações do lado do servidor usadas por empresas.
- Muito estabelecido e amplamente adotado. Existem muitos recursos de aprendizagem, frameworks e bibliotecas.
- Forte suporte de bases de dados
- Continua em desenvolvimento ativo, com o lançamento de funcionalidades modernas
- Multiplataforma. Corre em tudo: Windows, Mac, Linux, Unix
- De código aberto e gratuito
Funcionalidades de destaque
- Simples de executar e publicar. Sem cadeia de build. Sem compiladores.
- Sistema de tipos gradual. Acrescenta tipos onde precisas deles, usa a tipagem dinâmica para simplificar partes do teu desenvolvimento.
- Prototipagem rápida. Cria uma página web para testar a tua ideia e corre-a na tua própria máquina.
PureScript
- Concebido por Phil Freeman, com a primeira versão lançada em 2013
- Começou a trabalhar no PureScript porque não estava satisfeito com outras tentativas de transpilar Haskell para JavaScript
- De tipagem forte e estática
- Compila para JS
- Linguagem puramente funcional
- Sintaxe e funcionalidades inspiradas em Haskell
- Usado para construir aplicações web, mas também pode ser usado para construir apps do lado do servidor ou aplicações de ambiente de trabalho através do Electron
Porque é ótimo
- Partilha muito do que torna o Haskell excelente:
- Sistema de tipos forte e poderoso: tipos de dados algébricos, type classes, tipos de ordem superior
- Expressivo: pattern matching, inferência de tipos
- Segurança: sem nulos, tipos imutáveis
- Puramente funcional: os efeitos secundários são codificados no sistema de tipos
- Descodificação e codificação de JSON para tipos fácil e com segurança de tipos
- Compila para JavaScript legível por humanos
- Boas ferramentas
Funcionalidades de destaque
- O núcleo funcional é perfeito para aplicações web com segurança de tipos e sem erros em tempo de execução
- Excelente interoperabilidade com JS
- Compila para JS eficiente
ReasonML
- Criado por Jordan Walke na Facebook, com a primeira versão lançada em 2016
- Baseado em OCaml, mas com as idiossincrasias removidas e concebido para interoperar com JS
- Linguagem funcional com tipagem estática
- Compilado
- Usado para construir sites (por exemplo, na Facebook)
Porque é ótimo
- Tudo o que o OCaml tem de bom, mas num ambiente web:
- Sistema de tipos poderoso: todos os valores são tipados com tipos mais simples (como records, variants e options) em detrimento de tipos complexos. Acabaram-se os erros de undefined, o que melhora a fiabilidade
- Expressivo: pattern matching, inferência de tipos, desestruturação
- Segurança: sem nulos, imutabilidade por predefinição
- Compila para JavaScript legível por humanos
- Pode ser compilado para OCaml (e vice-versa), o que significa que pode usar todo o ecossistema OCaml (por exemplo, para compilar para um binário nativo)
Funcionalidades de destaque
- Os tempos de compilação do ReasonML são super-rápidos, o que significa ciclos de iteração rápidos.
- Excelente interoperabilidade com JS, tanto para usar JS a partir de código ReasonML como para exportar ReasonML para JS. Pode até gerar tipos TS. Também pode interoperar com C. Suporta até sintaxe do tipo JSX
Swift
- O desenvolvimento do Swift começou pelas mãos de Chris Lattner em 2010 e foi anunciado mundialmente no evento WWDC em 2014.
- O objetivo era substituir a antiga linguagem de programação da Apple, o Objective-C, que não recebia alterações significativas desde o início dos anos 80, por uma linguagem nova e moderna. Concebido para interoperar com grandes partes do Objective-C.
- De tipagem forte e estática
- Compilado, usando o LLVM para tratar da compilação para código de máquina (como, por exemplo, o Rust)
- Multiparadigma: funcional, orientado a objetos, imperativo, declarativo
- Originalmente software proprietário, mas de código aberto desde 2015
- Usado sobretudo para apps móveis e de ambiente de trabalho, mas também é usado em backends e em cenários serverless
Porque é ótimo
- Linguagem moderna: inferência de tipos, pattern matching, tipos de dados algébricos, strings Unicode
- Produtivo: o Swift adota as melhores partes de outras linguagens (como Rust, Python, C# e Ruby), moldando-as numa só linguagem consistente e produtiva
- Seguro: os ponteiros não são expostos, um tipo opcional que previne exceções de ponteiro nulo, tratamento explícito de erros e gestão automática de memória através do ARC (Automatic Reference Counting)
- Atualizado regularmente. No início, a Apple não tinha medo de introduzir alterações disruptivas para coisas que se revelaram não funcionar bem. Isto evita que se acumule «bagagem». Normalmente é disponibilizada uma ferramenta para ajudar na migração de código. Desde o Swift 5, a Application Binary Interface (ABI) é estável
- Ao contrário do Objective-C, o Swift corre em todas as principais plataformas: macOS, Windows e Linux
Funcionalidades de destaque
- Rápido. Compila para código de máquina eficiente, o que faz com que corra depressa
- Interoperabilidade perfeita com Objective-C, mas também interopera bem com C e C++
- Grande comunidade, com muitos recursos excelentes disponíveis
TypeScript
- Criado na Microsoft em resposta à frustração de desenvolver aplicações de grande escala em JS. Um dos responsáveis pelo design foi Anders Hejlsberg, o arquiteto principal do C# e criador do Delphi e do Turbo Pascal
- A primeira versão foi lançada em 2012
- Multiparadigma: funcional, prototípico, imperativo, orientado a objetos e genérico
- Usa tipagem gradual e duck typing
- Compilado (para JS)
- Usado para sites, tanto no frontend como no backend, scripts e ferramentas de linha de comandos
Porque é ótimo
- Sistema de tipos poderoso e flexível: tipos união, tipos literais, tuplos. Praticamente qualquer padrão que possa ser usado em código JS pode ser descrito de forma segura em termos de tipos em TS. O sistema de tipos é tão poderoso que é até Turing Complete
- Sendo um superconjunto de JS, permite uma introdução gradual numa base de código JS
- Combina o melhor dos dois mundos: tipagem dinâmica e estática
- A crescer rapidamente em popularidade, com muitas ferramentas que fornecem tipos TypeScript ou estão a ser convertidas para TypeScript. Muitos recursos disponíveis
- A linguagem é atualizada regularmente, com adoção antecipada de funcionalidades futuras do ECMAScript
Funcionalidades de destaque
- Maior segurança e correção: a tipagem estática pode eliminar muitas classes de erros que se cometem tipicamente com JS
- Interoperabilidade perfeita com JS. Podem ser adicionadas definições de tipos personalizadas para trabalhar com código JS de forma segura em termos de tipos. Existem definições de tipos personalizadas para um grande número
- Excelente ferramentas e suporte de IDE. Anotações de tipos, preenchimento automático de código e até refatoração segura de grande escala estão disponíveis em muitas IDEs
- Obtém todos os benefícios de correr no ecossistema JS: um número enorme de pacotes, muitas ferramentas, uma grande comunidade, etc.
Qual experimentar?
- Se queres criar apps nativas, o Dart, o Delphi, o Java, o Kotlin e o Swift são ótimas escolhas. Dito isto, qualquer uma das outras linguagens que compilam para JS também poderia ser usada para criar apps nativas. Vale a pena notar que a linguagem oficial para criar apps iOS/macOS é o Swift, e para apps Android é o Kotlin
- Se queres criar aplicações web, o CoffeeScript, o Dart, o Elm, o Java, o JavaScript, o Kotlin, o PHP, o PureScript, o ReasonML e o TypeScript são ótimos
- Se te interessa a programação funcional, o Elm, o PureScript e o ReasonML são escolhas naturais; o CoffeeScript, o Dart, o Java, o JavaScript, o Kotlin, o Swift e o TypeScript também suportam programação funcional
- Para a programação orientada a objetos, o ABAP, o Dart, o Delphi, o Java, o Kotlin, o Objective-C, o PHP e o Swift são candidatos lógicos; o CoffeeScript, o JavaScript e o TypeScript também suportam este paradigma
- Se te interessa escrever aplicações empresariais, o ABAP e o Delphi são perfeitos para isso
Translation missing: pt-PT.number.nth.ordinalized Aug 2023
·
Foi útil?
Publicado por
Erik Schierboom