
有哪些值得重复造的轮子
不要重复发明轮子,要充分利用已有的资源,比如程序框架MFC、函数库,插件等。
重复现成的、可用的、已经证明很好用的东西就是造轮子 狭义的程序开发可以认为就是编写程序,也就是编程。
linux鼓励重复造轮子吗?
linux鼓励的应该是按你自己想要的去修改或制造轮子,然后再告诉大家你是怎么样造轮子的(重点是分享)。
前端开发中的轮子指的是什么,造轮子指的是什么
“造轮子”的含义:明知道你做的不可能比前辈做得更好,却仍然坚持要做。
比如,车轮子是圆形的,这是大家公认的最合适的形状。
而自己非要发明另一种形状的轮子,这种行为就叫「重复发明轮子(Reinventing the wheel)」,即“造轮子”。
Nginx为什么要造重复的轮子nginScript
前不久,Nginx发布了一种“代理端”的JavaScript实现nginScript。
该实现可以提高Nginx的脚本能力,使Nginx配置更简单、操作更高效,使用户无需编写C模块就可以在Nginx中做更多的事情。
目前,nginScript解析器仅支持ECMAScript 5的一个子集,不过后续还会扩展。
在对JavaScript求值时,nginScript会使用一个基于寄存器的虚拟机将JavaScript编译成字节码然后在Nginx(或Nginx Plus)中运行。
许多人对此都非常好奇,既然已经有了V8、SpiderMonkey或其它实现,为什么还要实现一个新的JavaScript运行时。
Hacker News上也出现了大量不同的声音。
比如,网友stanleydrew就认为这个做法很糟糕,因为它可能让Nginx这个原本很棒的工具走上膨胀之路。
对此,网友n42表示:任何你不想用的特性都是膨胀,但用到的时候就必要了。
而网友eknkc则认为:它是一个很好的补充。
我在高业务量的服务器使用了Varnish,一个原因就是它有“可视化组件库”,这是一种类JavaScript的语言,可以用它来定义请求处理逻辑。
nginx将为熟悉它的人提供许多配置选项。
针对这些疑惑和争论,Nginx近日专门撰文解释了他们为什么要创建自己的JavaScript实现。
Nginx有一些独特的需求,他们希望nginScript代码片段可以在Nginx处理请求时运行,以此扩展Nginx处理请求和响应的能力。
但是,他们无意创建一个像Node.js那样的持久化的JavaScript应用程序运行时环境。
然而,现有的JavaScript运行时都是针对Web浏览器而设计的,依赖于垃圾收集,很难控制JavaScript VM的资源使用。
如果内存溢出,它们就会异常退出。
这在浏览器端尚可接受,但在服务器端是不可容忍的。
他们希望nginScript能够提供简洁且可以快速执行的规则,而不是对JavaScript的完整支持。
而且,Nginx已经有一个经过充分优化的、事件驱动的架构,所以他们不希望受垃圾收集所带来的性能不可预见性所影响。
出于上述种种考虑,他们实现了一种非常简单但与其需求相匹配的JavaScript运行时:架构——单线程、字节码执行是为了实现快速初始化和处理。
由于每个请求会分配一个单独的虚拟机,所以不需要垃圾收集。
虚拟机没有复杂的状态或辅助程序初始化,启动速度非常快。
辅助函数——内置操作在Nginx本地实现,用户可以将nginScript视为一种通过编程驱动Nginx本地操作的方式。
预占——Nginx事件驱动模型负责调度单个nginScript VM的执行。
当nginScript规则执行阻塞操作时,Nginx会暂停那个虚拟机的执行,待事件完成后再重新调度。
这意味着,用户可以采用一种简单线性的方式编写规则,Nginx会调度它们,而且不会有内部阻塞。
截止目前,nginScript尚处于早期开发阶段,当前版本为预览版,其团队一直致力于功能的构建,开发主要是围绕完成核心的语言实现以及实现许多内置的JavaScript对象(如Date、Math等)进行。
因此,谈论nginScript的性能还为时过早。
但测试表明,nginScript VM的性能同其它解释型语言(PHP、Ruby等)类似,但不如JIT实现快。
同时,nginScript团队还专注于nginScript VM与Nginx的整合,比如,如何在Nginx配置中引用nginScript规则,nginScript如何访问和控制Nginx内部构件。
对于长时间运行的脚本,他们可能还会引入垃圾收集。
nginScript的完整路线图尚未形成,读者可以通过邮件列表分享自己的想法。
IT程序员常说轮子什么意思
显然,车轮圆形的,这是大家公认的,最合适的。
而你非要发明另形状的轮子,这种行为就叫「重复发明轮子(Reinventing the wheel)」,即「造轮子」—— 明知道你做的不可能比前辈做得更好,却仍然坚持要做。
放到编程中,就是说业界已经有的软件或者库了,你明知道自己不可能比它做得更好,却还坚持要做。
作为练习,造轮子可以增加自己的经验,很多事情看起来简单,但只有自己动手,才会发现其中的难点。
当然实际开发中也有很多情况不得不造轮子,比如希望做到「自主知识产权」、刷 KPI 之类的;或者造轮子的人真的觉得自己开发的版本有更强的功能、更好的性能也说不定呢。



