Well, It’s already May 26 here and following the official Google Summer of Code 2008 calendar the coding for GSoC has officially started.
So let’s code..
I wish that all students to have a good summer of code.
Well, It’s already May 26 here and following the official Google Summer of Code 2008 calendar the coding for GSoC has officially started.
So let’s code..
I wish that all students to have a good summer of code.
Changes! Now I’m free to work “full-time” on my GSoC project, last Friday was my last day on my old job (Ikwa)
Today I’ve read lots of docs and code, specially the pyparser code. I’ll try to maintain a list of features I’m currently working on here.
Last week (ok, Friday before last Friday) we went to Werneck’s cave to code. One thing I’ve made there was implement the defaultdict object in the collections module. This module is written in C originally, so I needed to port it.
The code is relatively simple and I’ve just “copied” the C implementation (of course it’s clearer and more beautiful in Python
). Werneck also helped me with the pyparser but we couldn’t find a solution for supporting the full Python 2.5 Grammar .
Today I’ve worked on a small Python 2.5 change, the empty base classes list syntax.
Until Python 2.5 the list of base classes could not be empty. So you couldn’t define a class like:
class A():
pass
The right way for doing this was
class A:
pass
Now, in Python 2.5, both ways are legal.
Last week I’ve committed a slight changed Grammar for Python 2.5 syntax support to PyPy’s 2.5-features branch (the only change I’ve made was removing the support for the new import syntax, as it crashes the parser, I need to work on that).
With part of the 2.5 Grammar already supported, to support this new class definition syntax the only change needed was in pyparser (more specifically to the AST builder).
While the build_classdef method expected 4 atoms (< class keyword >, < white space >, < class name > and < comma >) or 7 (the same 4 plus < ( >, < base classes > and < ) > before the < comma >) in Python 2.4, now in Python 2.5 it can receive 6 atoms too (< class keyword >, < white space >, < class name >, < ( >, < ) > and < comma >). The change was really simple, but it was a good exercise for me because I could apply what I’m learning in my compilers classes at school (while reading the sources)
Some code (pypy/interpreter/pyparser/astbuilder.py:634):
def build_classdef(builder, nb):
...
if l == 4: # class NAME:
basenames = []
body = atoms[3]
elif l == 6: # class NAME(): # 2.5
basenames = []
body = atoms[5]
else:
assert l == 7
basenames = []
body = atoms[6]
base = atoms[3]
...
I don’t think I need to explain this code, it’s very simple (of course, it’s Python!
).
I’ve made some tests and it seemed to work great, but I’ve decided to compare the bytecode generated by PyPy and by CPython (both 2.4 and 2.5). While in CPython 2.4 the statement “class A: pass” produces the following bytecode:
>>> from dis import dis; c = compile("class A: pass", "/dev/null", "exec"); dis(c)
1 0 LOAD_CONST 0 ('A')
3 BUILD_TUPLE 0
6 LOAD_CONST 1 ()
9 MAKE_FUNCTION 0
12 CALL_FUNCTION 0
15 BUILD_CLASS
16 STORE_NAME 0 (A)
19 LOAD_CONST 2 (None)
22 RETURN_VALUE
CPython 2.5 produces for both statements (the old syntax and the new one) something slight different:
>>> from dis import dis; c = compile("class A: pass", "/dev/null", "exec"); dis(c)
1 0 LOAD_CONST 0 ('A')
3 LOAD_CONST 3 (())
6 LOAD_CONST 1 ()
9 MAKE_FUNCTION 0
12 CALL_FUNCTION 0
15 BUILD_CLASS
16 STORE_NAME 0 (A)
19 LOAD_CONST 2 (None)
22 RETURN_VALUE
The only difference between 2.4 and 2.5 is the instruction BUILD_TUPLE in 2.4 against the LOAD_CONST in 2.5. I'm not a bytecode expert, but it seems that this is an optimization, of course I may be completely wrong
Well, as I expected the bytecode produced by PyPy is identical the one produced by CPython 2.4, so I think I have more things to change to complete this task.
But not tonight, after 14 hours of PyPy code reading and some debugging (plus Linear Programming and Computer Theory classes) I think I should sleep.
This weekend (May 10th and 11th) will happen the Global Python Sprint Weekend. Like the last PythonBugDay our Python User Group (GruPy-SP) will meet to work together.
This time our meeting will be held at Universidade de São Paulo IME (Instituto de Matemática e Estatística) thanks to RBP and the CCSL (Free Software Competence Centre) =)
Other Python User Groups from Brazil are also meeting to work together, check the wikipage for the PythonBugDay to know if there will be a meeting near you
(or you can work from your home sweet home).
Last Friday, me, Luciano Pacheco and Marcelo Honório went to Pedro Werneck‘s house (or werneck’s cave) to talk, eat and, of course, code python
We wrote a small guide (portugues only, sorry… I promise i’Il translate it to English) about preparing the environment for those who want to participate of the PythonBugDay (or even for the curious who want to play with the cpython code).
Of course I’ve worked on my GSoC project implementing the new (2.5) “defaultdict” object (in the collections module), but this is subject of another post
Werneck and Pacheco also worked on some issues/bugs listed in the CPython bugtracker and I’ve introduced them to PyPy (and vice-versa hehe).
After all this coding we ate Japanese food and our friend Andrews suggested a new kind of development method, Sushi-Driven Development… nice!
Last Saturday I gave a Python talk at FLISOL 2008 in Sào Paulo. The public was students who were learning programming (C and Visual Basic), so it was a very basic talk. The event was great and so was the talk, the only problem was that I thought that the public would be programmers with some experience, but not really. Anyway, the FATEC students seemed to like Python and some of then came to talk to me after the event to know more about the language and to ask where they could find more information!
I’ll upload my presentation somewhere.
I’ve helped to install GNU/Linux (Ubuntu) on a FATEC lab, people there were very nice!
Well, I felt like my “mission” was accomplished