sábado, 18 de abril de 2015

Tipos em Cython

Ontem fiz uma pequena introdução ao Cython.

Cython é uma plataforma que traduz código Python para C e o compila em biblioteca compartilhada importável no próprio Python. A linguagem em si é um superset de Python, com tipagem estática ou dinâmica (duck-typing) e suporte a código especial que pode ser traduzido diretamente para C.

Uma parte importante de Cython é sua tipagem estática, mas os tipos pode ser um pouco diferentes de Python.

Há tipos específicos, como struct e enum, que são traduzidos diretamente para o equivalente C, e tipo de extensão (cdef class). Entre eles:

Tipo CythonTipo CCoerção para Python 3
bool PyLongObject * bool
bint int bool
size_t size_t int
char char int
unsigned char unsigned char int
int int int
long long int
long long long long int
float float float
double double float
const char * const char * bytes
bytes PyBytesObject * bytes
const Py_UNICODE * const Py_UNICODE * str
unicode struct PyUnicodeObject str
object PyObject * object
list PyListObject * list
dict PyDictObject * dict
set PySetObject * set
tuple PyTupleObject * tuple
void * void * sem equivalência
struct S struct S dict
enum E enum E int

Todos os modificadores C (unsigned, const, long, *…) são aceitos. Na coerção de tipos, também é aceito &. Se um valor numérico for recebido por uma variável do tipo object, será usado PyLongObject * (inteiro de tamanho arbitrário) ou PyFloatObject * (ponto flutuante, equivalente a double de C).

[]’s
ℭacilhας, La Batalema
blog comments powered by Disqus