Python & C

Page 1


About me → Programador. → Estudiante de Ingeniería. → Former Emprendedor. → Blogger. → Athlete wanna be.


The C Programming language


40+ years old


→ General-purpose. → Imperative, Structured. → Státic, Weak. → Multiplataforma.


Hello World code: http://pastebin.com/MwxK3pbw

Compile & Execute

#include <stdio.h>

~$ gcc -O2 -o helloworld hello.c

int

~$ ./helloworld

main(void) {

~$ printf("Hello World!\n"); return 0;

}

Hello World!


¿Por qué C?


ยกC es rรกpido! Y proporciona acceso a recursos de nivel bajo y de nivel alto. Low level

High level


"Talk is cheap. Show me the code." – Linus Torvalds


C code: http://pastebin.com/ag9f3pPT

Python code: http://pastebin.com/kR28UZws

#include <stdio.h>

#!/usr/bin/python

#define LIMIT 1000000

suma = 0 for i in range(1000000):

int

suma += i

main(void) { int i; long int sum; for(i=0; i < LIMIT; i++) sum += i; printf("%ld\n", sum); return 0; }

print(suma)


~ $./a.out 499999500000 real

0m0.002s

user

0m0.000s

sys

0m0.000s

~ $ python sample.py 499999500000 real

0m0.548s

user

0m0.513s

sys

0m0.003s


So, why don't we use C more often?


Porque es tedioso programar en C


Well, actually we use C more than ever ... through Python modules.


Dummy module1

1 For dummies.


Necesitarás → Un editor. → Un compilador. → Python. → Python devel2

2 En sistemas como Ubuntu generalmente se necesita un paquete adicional de desarrollo.


code: http://pastebin.com/iJAqed9B

#include <Python.h> static PyObject * static PyMethodDef DummyMethods[] = { {

dummy(PyObject *self, PyObject *args) {

"dummy", dummy,

Py_INCREF(Py_False);

METH_NOARGS, "method"

return Py_False;

},

}

{NULL, NULL, 0, NULL} };

PyMODINIT_FUNC PyInit_dummy(void)

static struct PyModuleDef conf = {

{

PyModuleDef_HEAD_INIT,

PyObject *module;

"dummy",

module = PyModule_Create(&conf);

"dummy module.",

if(!module)

-1,

return NULL;

DummyMethods };

return module; }


Rerefence Counting ?


Python internamente hace muchas llamadas a malloc() y realloc() a lot!


La memoria devuelta por malloc() y realloc() debe ser liberada cuando no se necesita.


Reference counting es un algoritmo que mantiene un registro del nĂşmero de “referenciasâ€? de un objeto3, cuando la referencia llega a cero la memoria es liberada.

3 Diccionarios, Listas, Cadenas de caracteres, etc.


So, la creaci贸n de objetos en Python es costosa y debe ser minimizada.


Por eso cuando en Python creamos una lista de un elemento, Python con una llamada reserva memoria para 4 elementos.


array = [1]

# malloc() cuatro espacios

array.append(2)

# 2da inserción gratis!

array.append(3)

# la 3ra también.

array.append(4)

# y la cuarta.

array.append(5)

# inserción costosa realloc()

Ver: Core Python Cointainers “Under-the-hood” by Raymond Hettinger.


so, back to the dummy module!


How do I compile the dummy module?


Con un script setup.py y el m贸dulo Distutils.


code: http://pastebin.com/ScWzrQEe ~$ python setyp.py build_ex --inplace from distutils.core import setup, Extension module = Extension('dummy',sources=['dummymodule.c'])

running build_ext building 'dummy' extension ... ~$

setup(

name

= 'dummy',

version

= '1.0-alpha',

author

= 'MaG',

description = 'dummy module.', ext_modules = [module])


So, what are the limitations ?


Puedes hacer casi cualquier cosa


como crear un m贸dulo para ejecutar c贸digo de Ruby



You've been told, never trust a troll!!


What is pyby?


import pyby


>>> pyby.rubyfy('true') True >>> pyby.rubyfy('false') False >>> pyby.rubyfy('{}') {} >>> pyby.rubyfy(''' ... [*1..5].each do |n| ... puts n ... end ... ''') 1 2 3 4 5 [1, 2, 3, 4, 5]

>>> ... ... ... ... [2,

pyby.rubyfy(''' (1..10).select do |n| n.even? end ''') 4, 6, 8, 10]


Turn static files into dynamic content formats.

Create a flipbook
Issuu converts static files into: digital portfolios, online yearbooks, online catalogs, digital photo albums and more. Sign up and create your flipbook.