对于 JavaScript,Web 端已经没有太大的吸引力,未来的 JavaScript 确切的说应该是 TypeScript 可能会像上个世纪的 Lisp 作为通用 GUI...
对于 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,再继续发送更多的数据。这样能保证你过度消耗内存。
服务器,并发,“事件驱动”的本质主呵,是时候了。 -- 《秋日》 什么是服务器? 不就是提供“付费”、“免费”服务的高档电脑嘛! 你提到服务? 存储一个图片,读取一篇文字,观看一个动作片,计算一个账户存款,...
I have spent several years on Node.js and libuv. I felt desperately that callback funct...
最近两个星期,我使用 plantuml (贝尔实验室出品了一个超级绘图工具 graphviz, 这是一个包装版)把我的绘图项目做了一次全面的接口和类的可视化。使用了很多设计模...
我今天又再一次仔细看了 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...
Docker on okdoc En ... 我最近在从事这方面的事情。然后,我把 Docker Docs 官方文档翻译了个 90% 了。 我知道有一个流传的中文翻译,但是我...
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的思想,我...