Slide 1

Slide 1 text

Python como LISP Hy

Slide 2

Slide 2 text

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

Slide 3

Slide 3 text

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.

Slide 4

Slide 4 text

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.

Slide 5

Slide 5 text

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:

Slide 6

Slide 6 text

● 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

Slide 7

Slide 7 text

Hy: Python:

Slide 8

Slide 8 text

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

Slide 9

Slide 9 text

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.

Slide 10

Slide 10 text

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.

Slide 11

Slide 11 text

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.

Slide 12

Slide 12 text

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:

Slide 13

Slide 13 text

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 ~.

Slide 14

Slide 14 text

No content

Slide 15

Slide 15 text

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.

Slide 16

Slide 16 text

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).

Slide 17

Slide 17 text

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.

Slide 18

Slide 18 text

● 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

Slide 19

Slide 19 text

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.

Slide 20

Slide 20 text

Obrigado! Vamos aos exemplos!