首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    来来来,咱们元编程入个门

    那么本文就干一些,尝试用粗浅的语言对 metaprogramming / macro 做个小小的入门,主要是讲清楚一些概念和思想。文字代码一起上,酒干倘卖无。...之前的文章已经给了一个将问题抽象成规则,然后针对规则编程的例子,虽然它可以被称为广义的 metaprogramming,但为了定义清晰,我们还是看看 wikipedia 怎么解释 metaprogramming...所以严格的 metaprogramming 指的是指将代码视作数据,进而通过撰写代码生成和改变代码,来使程序获得额外的能力。如何能够将「代码视作数据」呢?...这涉及到 metaprogramming 的第一个重要的概念:Abstract Syntax Tree,抽象语法树(以下简称 AST,或者语法树)。...在使用 macro 进行 metaprogramming 时,最常见的一个坑是表达式的反复求值。我们看一个函数: ?

    946100

    Python Metaclass 初探

    meta的意思就是“关于什么的什么”:比如metadata可以理解为“关于数据的数据”,metaprogramming可以理解为“关于编程的编程”。这就和“更高一层的抽象” 比较契合了。...实例 聚焦到我们今天的主题,metaprogramming就是编写用来生成代码的代码。...self.assertRaises(TypeError): s.split(2) if __name__ == '__main__': unittest.main() 所以我们的目的就是用metaprogramming...但是当你要表达的逻辑比较复杂的时候,metaprogramming的强大就体现出来了。 总结 那么,看完这篇文章,我们也成为Tim所说的1%的程序猿了!...在一些特殊的场合,比如编写某种框架的时候,metaprogramming会做到事半功倍。祝你在实践中碰到这样的机会。

    55510

    谈谈编程思想

    Metaprogramming不然。它跟语言的能力很有关系。 狭义的metaprogramming指代码能够将代码当作数据操作,广义讲就是在接近语言级的层面写的让代码更具动态性的代码。...这就是广义的metaprogramming,让代码更具动态性。...狭义的metaprogramming用django的ORM来说明最好: class TagItem(models.Model): class Meta: app_label =...object_id') 复杂的Object relational mapping以这样一种declarative的方式解决了(你甚至可以将它看成一种DSL,Domain Specific Language),如果没有metaprogramming...当然,就metaprogramming的能力而言,把代码完全看做数据(列表展开与求值)的lisp族语言更甚一筹。这是我为何说metaprogramming的能力和语言相关。

    93060

    ​一种新的DSL生成和通用语言框架:pypy

    terracling as toolkit,qtcling和terralang都是典型的llvm based jit mixable langsys,而terracling更先进,因为它提出了用lua metaprogramming...programming,partical evaluation,src2src translator(甚至到支持全部语言的haxe),common runtime,anonation,js functional metaprogramming...和dropbox的pyston都反响不佳, 据说它对前端语言的要求最好是非动态类型的,这次我们碰到了pypy, 它不光是更好的LLVM,且它也面向多语言走JIT没断层,vs terracling它也有metaprogramming...pypy似乎更聪明一点,它重用轮子,它极力促成的结果是:使py真正变得通用化且集成DSL开发机制而能使产生的语言巧妙免除binding c的那些场景,因为它走的是更聪明的jit: pypy:更合理的metaprogramming...类似llvm的前端部分,terralang的lua metaprogramming部分。如支持clang实现的那部分。

    58030
    领券