Python 与尾递归优化

什么是尾递归 有很多时候,使用递归的方式写代码要比迭代更直观一些,以下面的阶乘为例: def factorial(n): if n == 0: return 1 return factorial(n - 1) * n 但是这个函数调用,如果展开,会变成如下的形式: factorial(4) factorial(3) * 4 »

OSX 上初步尝试 asp.net 5

去年微软最令开源狗界振奋的消息就是 ASP.NET 的开放与开源这一消息了。 根据微软的介绍,与我之前的一些总结,可以看到 ASP.NET 以及 .NET 平台会有下面几个变化: 代码使用 Apache 协议开源,并且托管于 Github 上。 新的 C# 编译器 Roslyn。 一个新的跨平台的 CLR(对应 Java »

使用Xtend扩展Java语言

Java是这个星球最成功的语言。将近百万的开发者用它开发各种软件;地球上最屌爆的IDE都是Java的IDE;浩瀚的开源框架、类库、工具是让人们对它爱不释手。此外,Java的很多设计理念都是经过深思熟虑的。最重要的一点是,这些都是易于理解并且久经考验的。 但是(终于但是了)—— Java也是一门公认的死板的语言,让开发者一遍遍地重复冗余的代码。事实上这也是为什么Java的IDE为什么这么碉堡的原因:帮助我们去写那些冗余的代码。 同样众所周知的,阅读代码的时间比写下这段代码的时间要多。所以从这个角度来看Java确实存在很大的问题。或许可以通过IDE来改善这个问题,不过这就相当于又挖了一个依赖工具的大坑。解决这个问题要是要从根源上来:我们需要一个更好的Java。 Java + Xtend == Better »

JavaScript ES7 中使用 async/await 解决回调函数嵌套问题

JavaScript 中最蛋疼的事情莫过于回调函数嵌套问题。以往在浏览器中,因为与服务器通讯是一种比较昂贵的操作,因此比较复杂的业务逻辑往往都放在服务器端,前端 JavaScript 只需要少数几次 AJAX 请求就可拿到全部数据。 但是到了 webapp 风行的时代,前端业务逻辑越来越复杂,往往几个 AJAX 请求之间互有依赖,有些请求依赖前面请求的数据,有些请求需要并行进行。还有在类似 node.js 的后端 JavaScript 环境中,因为需要进行大量 »

使用ctypes探索Python Object内部结构

在Python中我们可以直接使用dir函数获取一个对象的内部数据(推荐使用inspect.getmembers,输出内容更为详细),但是想知道这个对象在内存级别上的结构时此方法就无能为力了。 常用的一个Python实现Cpython中,一个对象的实现(PyObject)其实是一个结构体。那要探索结构体的方法就很多了,比如重新编译解释器,在其中输出log,或者直接使用gdb。 还有另外一个方案,就是使用内置的ctypes。ctypes可以将任意一段数据转换为C的结构体,处理PyObject当然也没问题啦。 PyObject的定义在object.h当中,在2.7版本,并且没有定义PyTRACEREFS的情况下,将宏展开后是这个样子: typedef struct _object »