240 发简信
IP属地:天津
  • JavaScript 的未来,是为操作系统、云和人工智能服务的图形编程

    对于 JavaScript,Web 端已经没有太大的吸引力,未来的 JavaScript 确切的说应该是 TypeScript 可能会像上个世纪的 Lisp 作为通用 GUI...

  • Libuv 的完整 udp 发送函数:

    int uv_udp_send(uv_udp_send_t* req, uv_udp_t* handle, const uv_buf_t bufs[], unsigned int nbufs, const struct sockaddr* addr, uv_udp_send_cb send_cb)

    服务器,并发,“事件驱动”的本质

    主呵,是时候了。 -- 《秋日》 什么是服务器? 不就是提供“付费”、“免费”服务的高档电脑嘛! 你提到服务? 存储一个图片,读取一篇文字,观看一个动作片,计算一个账户存款,...

  • 不管是 TCP 还是 UDP,都是基于 socket 发送。socket 在操作系统实现上是存在内部缓冲区的。Libev 我没有研究过,Libuv 我倒是有不少经验。但不管怎么样,他们都是基于系统 socket 实现的,在底部可定有内存缓冲,因为操作系统处理任务是分片分时轮流处理的,数据绝对不可能立刻就发送到网线上,这就必须有一块缓冲内存。

    我不知道 Libev 是怎样实现的,但是如果其够健壮的话,应该有个返回值或者某个属性值可以获取当前缓冲的 Size,或者是有个回调函数表示这次 sendto 完全发送完毕了。

    拿 Libuv 来讲,uv_udp_send(..., uv_udp_send_cb send_cb) 是有一个 callback 的。另外,在 uv_udp_send 的参数是可以知道自己发送数据内存的 Size 的。这样,你可以多个:

    uv_udp_send()
    uv_udp_send()
    uv_udp_send()

    直到达到某个内存缓冲的 Size, 就等待最后一个 send 的 callback,再继续发送更多的数据。这样能保证你过度消耗内存。

    服务器,并发,“事件驱动”的本质

    主呵,是时候了。 -- 《秋日》 什么是服务器? 不就是提供“付费”、“免费”服务的高档电脑嘛! 你提到服务? 存储一个图片,读取一篇文字,观看一个动作片,计算一个账户存款,...

  • It may be wrong to use `async/await` or `coroutine` to execute low-level I/O.

    I have spent several years on Node.js and libuv. I felt desperately that callback funct...

  • 正确的编程姿势

    最近两个星期,我使用 plantuml (贝尔实验室出品了一个超级绘图工具 graphviz, 这是一个包装版)把我的绘图项目做了一次全面的接口和类的可视化。使用了很多设计模...

  • React 的 Flux 是脱裤子放屁

    我今天又再一次仔细看了 redux,不能不说搞前端的一部分人用上 nodejs 之后真的是没见过世面。老外,哪怕是跟 facebook 沾上关系也是如此。redux 的 st...

  • @jasinyip

    我可以给你提几个关键词:虚函数表、智能指针

    算法技巧: 如何使用JavaScript编写高效的fabonacci数列

    斐波那契数列,(意大利语:Successione di Fibonacci),又译做费波拿契数列、费氏数列、黄金分割数列。发明者,是意大利数学家列昂纳多·斐波那契(Leona...

  • @jasinyip

    函数式跟语言关系大了。Haskell 是纯函数式函数式语言,Lisp 是非纯函数式函数式语言,understand? Java 的面向对象跟 C++ 的面向对象根本就是不一样的,这个自己百度谷歌。

    算法技巧: 如何使用JavaScript编写高效的fabonacci数列

    斐波那契数列,(意大利语:Successione di Fibonacci),又译做费波拿契数列、费氏数列、黄金分割数列。发明者,是意大利数学家列昂纳多·斐波那契(Leona...

  • @jasinyip

    你说的函数式是 Haskell,我说的函数式是 Lisp

    算法技巧: 如何使用JavaScript编写高效的fabonacci数列

    斐波那契数列,(意大利语:Successione di Fibonacci),又译做费波拿契数列、费氏数列、黄金分割数列。发明者,是意大利数学家列昂纳多·斐波那契(Leona...

  • So,打算研究 Docker 云计算的同学们有福了

    Docker on okdoc En ... 我最近在从事这方面的事情。然后,我把 Docker Docs 官方文档翻译了个 90% 了。 我知道有一个流传的中文翻译,但是我...

  • okdoc --- 开发手册的中文译文

    okdoc 是一个开源的文档管理器,包括一个后端文档服务器(Nim 语言编写)、一个前端 markdown 编辑器(JavaScript 语言编写)、一个 html 渲染程序...

  • @laiqurufeng


    最开始传入 ['A', ['B', 'F'], ['C', ['G', 'J'], ['H', 'K']], ['D', 'I'], 'E'],为了递归的规则统一,把它作为一个数组的 car (数组第一项 array[0]),把空数组 [] 作为 cdr (array[1, ...])。

    JavaScript与Lisp,通向编程圣殿[1]: "树"的基础计算

    JavaScript在设计时,注入了Scheme的血液,虽然设计者为了“商业”目的,为其披上了“C外衣”和“面向对象的礼帽”,但是其本质上应该是Lisp的,Lisp的思想,我...

  • @laiqurufeng

    [['A', 'B'], 'C'] 这个数组,调用 shift() 会得到 ['A', 'B'], 'C', car 表示 第一项,cdr 表示第一项后边的。isCarList 是表示 car 是否是一个数组。

    对于 car = ['A', 'B'],是一个数组,需要对其进行深层递归。

    JavaScript与Lisp,通向编程圣殿[1]: "树"的基础计算

    JavaScript在设计时,注入了Scheme的血液,虽然设计者为了“商业”目的,为其披上了“C外衣”和“面向对象的礼帽”,但是其本质上应该是Lisp的,Lisp的思想,我...

  • @laiqurufeng

    最开始传入的 list 必须是一个有效列表(数组),walk() 第一次调用是(list, 0, true)

    JavaScript与Lisp,通向编程圣殿[1]: "树"的基础计算

    JavaScript在设计时,注入了Scheme的血液,虽然设计者为了“商业”目的,为其披上了“C外衣”和“面向对象的礼帽”,但是其本质上应该是Lisp的,Lisp的思想,我...

个人介绍
Senior Unix/Linux Software Engineer. Familiar with operating system, familiar with all of the network layer, the transport layer and the application layer.