Upload
it-people
View
291
Download
6
Embed Size (px)
DESCRIPTION
Citation preview
ПРИВЕТ
ТЫ НЕ УМЕЕШЬ ПИСАТЬ НА ПИТОНЕ
правда правда
Я ТОЖЕно стараюсь
ХВАЛЮ ЖИНЖУ• простая в использовании
• умеет больше
• быстрая
• без интерпретатора
КАК ОНА РАБОТАЕТ
• парсит шаблон
• генерирует код
• компилирует
РЕЗУЛЬТАТ - КОД НА ПИТОНЕ
РУГАЮ ЖИНЖУ• не знает про html
• выводит через yield
• лишние name resolution (environment)
• context ??
ЗАВИДУЮ HAML
• понимает html
• лаконичный
• ruby, javascript
А КАК ЖЕ Я?1. HamlPy = haml → django
2. mint - честный
3. PyHAML = haml → mako
НАДО ЧТО-ТО ДЕЛАТЬ!
• тормоза - бесят
• конвертировать - скучно
• синтаксис минта - не нравится
ПИШУ САМ
ПИШУ САМ• привычный синтаксис
• высокая скорость
• минимальные усилия
ПИШУ САМ• использую ast.parse
• генерирую код
• оптимизирую
ДУМАЮ
ОПТИМИЗИРУЮ
ast.NodeTransformer
ОПТИМИЗИРУЮ
close_tag("table")
print("</table>")
ОПТИМИЗИРУЮ
open_tag("table", {"class": "foo"})
print('<table class="foo">')
ОПТИМИЗИРУЮopen_tag("td", {"name": name})
print('<td name="',
quoteattr(name),
'">')
ОПТИМИЗИРУЮ
print('<tr>')
print('<td>')
print('<tr><td>')
ОПТИМИЗИРУЮ
for i in [0, 1, 2]:
print(i)
print(0, 1, 2)
ЧИСТЫЕ ФУНКЦИИпривет, хаскель
ОПТИМИЗИРУЮ
print(escape("<foo"))
print("<foo")
ОПТИМИЗИРУЮ
for i in range(3):
print(i)
print(0, 1, 2)
ИНЛАЙНИНГпривет, си
ОПТИМИЗИРУЮdef foo(i):
print(i)
foo(1)
print(1)
ОПТИМИЗИРУЮ• считаю заранее
• инлайню функции
• разворачиваю циклы
• склеиваю строки
• list.append / list.extend
HAMLYgithub.com/barbuza/hamly
НАСКОЛЬКО БЫСТРО
mako jinja2 hamly
3732
7
mse
c
ДУМАТЬ - ПОЛЕЗНО
КАК НАУЧИТЬСЯ?
• elixir
• lisp (!)
• haskell (!!)
ВОТ И ВСЕ