Метапрограмиране с Nimrod

Varna Conf, Юли 2014

Автори Захари Караджов, Борислав Станимиров

Какво сме ние?

Захари


  • Президент на Даркиум - прави браузър
  • Програмира професионално от 10 години
  • Знае езици за програмиране
  • Да, този също го знае
  • Е, този вече само Бойко Банчев го знае
  • Вторият по количество код в Нимрод, след автора - Андреас Румпф
  • Като цяло пич

Боби


  • Президент на това да си безработен
  • Програмира професионално от 12 години
  • Най-вече игри
  • Пише open source
  • Води курсове
  • Иска С++ да умре най-сетне
  • Като цяло, също така пич

Предговор


  • Какво е метапрограмиране?
    • Не това, което се изпълнява когато потребителяt ползва програмата
    • Програмиране за програмирането
    • Изпълнява се от компилатора
    • Супер елементарен пример:
    • 
                                  a + b * c
                                  
    • Да, и макросите
  • Какво е Nimrod?
    • NextGen, Супер як, 2.0, buzzword, buzzword, buzzword език за програмиране.
    • nimrod-lang.org

Ордьовър


  • Текущото състояние на света
  • Ако искаме бързодействие - плачем със С++
  • Ако можем да си позволим лопати хардуер - сме щастливи с Руби


Сензационна теза


Представете си любимия си език, любимата си библиотека, любимия си код.

Всички преимущества, които виждате в тях, могат успешно да се постигнат Nimrod. А също така и голяма част от недостатъците им да изчезнат.

Сензационна теза две


Nimrod има потенциала да стане най-използваният език на света вселената.

Nimrod


  • Силно типизиран
  • Компилиращ се
  • Closures
  • Итератори
  • CTFE
  • Type inference
  • Garbage collection, но и RAII
  • Resumable functions - Concurrency, Async IO
  • (нещо като) ООП

А сега: Примери

HTML Template Engine

Markaby.nim

Markaby.nim


...което се компилира до...


Expression Pattern Matching

... ту дъ рескю


...да погледнем кода отново...


...след прилагане на първото правило...


...и още веднъж...


...и така натататататък...


...и така нататък казах!

Докато стигнем до този код на С++...


Script Language Binding

RubyBind.nim

Изход:
Bozo: I will slash my enemies with my Holy Sword of Ultimate Imbalance
Bozo: Eat my Holy Sword of Ultimate Imbalance, Kiro
Kiro: Aaaarghhhhh
                

Прехвърляне на неща в Ruby


  • В общият случай тривиална задача
  • Предизвикателството са обектите


Експортиране на обекта


Експортирането на сетъри и методи е оставено за упражнение на читателя

Боравене с Ruby обекти



.() функцията майка

  • swizzle
  • a.zyx = b.xxy
  • Директно свързване с JSON или гаден XML
  • jsonRequest("http://search.twitter.com/search.json?q=#VarnaConf").tweets[0].author

И това компилирано

Command Line Arguments

ping.nim

Unit тестове

WorldCupTest.nim

Още гъзарии


  • ORM
  • Генериране на сериализация
  • Функционално програмиране
  • Аспектно програмиране
  • "Всички функции са темплейтни", дет вика Захари
  • Ефектни ефекти
  • И въобще... каквото ви душа иска

Малко неприятности :(


  • Има тук-таме бъгчета. Но не в компилирането...
  • Няма много пълна стандартна библиотека
  • Няма много яко IDE
  • Някои хора (Боби) не се кефят на питонски стил на влагане

Бъдеще


"През 2017-та Нимрод ке почне да става за сериозен софтуер"

"През 2019-та 'секи ке пише на Нимрод"

Край


Nimrod / nimrod-lang.org

Захари Караджов / github.com/zah / @zaharyk

Борислав Станимиров / ibob.github.io / @natcbb

Презентацията е лицензирана с Creative Commons Признание 3.0
Creative Commons License