$30 off During Our Annual Pro Sale. View Details »

🐙 Hy, Python como LISP

🐙 Hy, Python como LISP

Nesta palestra, vamos falar sobre Hy, um dialeto Lisp que roda na máquina virtual do Python. Vamos apresentar as características e benefícios desta linguagem em relação ao desenvolvimento em Python. Vamos explicar como a sintaxe concisa e funcional do Hy pode ajudar os desenvolvedores a escreverem código mais expressivo e legível.

Camilo de Azevedo

March 11, 2023
Tweet

More Decks by Camilo de Azevedo

Other Decks in Technology

Transcript

  1. Python como LISP
    Hy

    View Slide

  2. Camilo Cunha de Azevedo
    Faço bugs em Python, Clojure e outras linguagens desde 2012.
    https://www.linkedin.com/in/2cazevedo/
    https://github.com/Camilotk

    View Slide

  3. O que é Hy?
    ● Hy (abreviação de “Hylang”) é uma linguagem de programação criada em
    2014 que utiliza a sintaxe LISP e roda na Máquina Virtual Python (Python
    Virtual Machine - PVM).
    ● Ela permite aliar a expressividade, declaratividade e simplicidade da
    sintaxe de LISP com o ecossistema Python.

    View Slide

  4. LISP
    ● LISP é uma família de linguagens de programação (assim como a família
    ALGOL ou a família C) que engloba diversas linguagens como Scheme,
    Clojure, Common LISP e Hy.
    ● Todas elas se relacionam à linguagem LISP escrita por John McCarthy em
    1958 sendo a segunda linguagem de alto nível (depois de FORTRAN), a
    primeira a ter garbage collector, a primeira linguagem interpretada e a
    primeira linguagem dinâmica.

    View Slide

  5. Sintaxe
    ● Uma característica da linguagem é que todas as expressões são escritas em
    "formas", uma lista em que o primeiro argumento é uma operação (função) e
    os valores subsequentes parâmetros.
    Hy: Python:

    View Slide

  6. ● Assim como LISP, Hy suporta Orientação a Objetos e Programação
    Funcional, sendo uma linguagem primeiramente pensada para ser utilizada
    com programação funcional e declarativa.
    Hy: Python:
    Paradigma

    View Slide

  7. Hy: Python:

    View Slide

  8. Literais
    ● Os valores literais de Hy são os mesmos de Python.

    View Slide

  9. Estruturas de Dados
    ● As estruturas de dados e coleções de Hy são as mesmas de Python, porém
    com syntax sugar para serem declaradas.

    View Slide

  10. Declaração de Variáveis
    ● Hy usa a palavra reservada setv para declarar variáveis.
    ● Em Hy os valores são imutáveis, mas as variáveis não.
    ● Em Hy pode-se usar alguns caracteres especiais no nome.

    View Slide

  11. Declaração de Funções
    ● Funções são valores que são ligados a constantes. (Uma função é um valor
    de uma “variável” como arrow functions para const em JS).
    ● Existe um syntax sugar que facilita a escrita de funções de uma forma mais
    legível.

    View Slide

  12. LISP é um processador de listas
    ● A sintaxe de uma lista ser (1 2 3) não é por acaso parecido com a sintaxe de
    uma expressão (operação param params…)
    ● Na verdade, quando programamos em LISP todo nosso código é uma árvore
    de listas que depois são interpretadas.
    (+ (* 8 8) (* 4 4)), vira:

    View Slide

  13. Quote, Quasiquote e Unquote
    ● A função "quote" é usada para criar uma representação literal de uma
    expressão, ela pode ser usada com o syntatic sugar ‘.
    ● A expressão não é avaliada, mas sim retornada como uma lista.
    ● A função “quasiquote” é usada para criar uma represetação literal de uma
    expressão com valores (como uma f string f”” com interpolação), pode ser
    escrita com o sugar `.
    ● O operador "unquote" é usado para inserir uma expressão em uma lista
    passada com “quasiquote” e retorná-la como literal como a função "quote",
    pode ser escrita com o sugar ~.

    View Slide

  14. View Slide

  15. Macros
    ● Macros são funções especiais que permitem a criação de novas formas
    sintáticas na linguagem.
    ● Quando uma macro é chamada, ela recebe como argumentos a lista que
    representa a expressão na qual a macro foi usada.
    ● A macro retorna uma nova lista, que pode ser avaliada como uma expressão
    válida em Hy.

    View Slide

  16. Orientação a Objetos em Hy
    ● Hy suporta a criação, instanciação e uso de Objetos.
    ● Isso é muito útil para a interação com bibliotecas Python.
    ● LISP é conhecida por ser multiparadigma e por ser uma das primeiras
    linguagens a implementar orientação a objetos com o CLOS (Common LISP
    Object System) sendo uma das primeiras linguagens OOP tendo
    implementado OOP na metade dos anos 80 (10 anos após a primeira).

    View Slide

  17. Hyrule
    ● À medida que a linguagem cresceu, parte dos macros e funções que foram
    adicionados na linguagem para facilitar programação funcional foram
    separados em uma lib chamada “hyrule” que pode ser instalada pelo pip.

    View Slide

  18. ● Possibilidade de utilizar sintaxe LISP com o ecossistema Python.
    ● Flexibilidade para escolher o paradigma de programação.
    ● Possibilidade de utilizar bibliotecas Python.
    ● Facilidade para criação de DSLs.
    ● Todas as vantagens de Python.
    Vantagens

    View Slide

  19. Problemas
    ● Curva de aprendizado, principalmente para programadores acostumados
    com outras linguagens.
    ● Alguns tipos como símbolos e chaves (keywords) não estão documentados e
    tendem a ter problemas de conversão.
    ● Breaking changes ocasionais.
    ● GIL do Python.
    ● Todas as desvantagens do Python.

    View Slide

  20. Obrigado!
    Vamos aos exemplos!

    View Slide