目录 上一篇博文 函数式编程的优点与缺点 优点 缺点 为什么使用Reason语言 函数式编程学习资料 引擎中相关的函数式编程知识点 数据 不可变数据 可变数据 函数 纯函数 高阶函数 柯西化 参考资料 大家好,本文介绍我们为什么使用函数式编程来开发引擎,以及它在引擎中的相关的知识点. 上一篇博文 从0开发3D引擎(四):搭建测试环境 函数式编程的优点与缺点 优点 (1)粒度小 面向对象编程以类为单位,而函数式编程以函数为单位,粒度更小. 我只想要一个香蕉,而面向对象却给了我整个森林 (2)擅长处…
目录 上一篇博文 介绍函数式反应式编程 函数式反应式编程学习资料 函数式反应式编程的优点与缺点 优点 缺点 异步处理的其它方法 为什么使用Most库 引擎中相关的函数式反应式编程知识点 参考资料 大家好,本文介绍我们为什么使用函数式反应式编程来开发引擎,以及它在引擎中的相关的知识点. 上一篇博文 从0开发3D引擎(五):函数式编程及其在引擎中的应用 介绍函数式反应式编程 函数式反应式编程又称为"函数式响应型编程",英文缩写为"FRP". 它的总体思想是一切都是流:可…
介绍 大家好,欢迎你踏上3D编程之旅- 本系列的素材来自我们的产品:Wonder-WebGL 3D引擎和编辑器 的整个开发过程,探讨了在从0开始构建3D引擎和编辑器的过程中,每一个重要的功能点.设计方案的思考.讨论.总结和延伸. 本系列避免陷入细节的实现代码,使用伪代码代替.所以没有可直接运行的代码,取而代之的是经过抽象和提炼的伪代码/模式. 为什么要写这个系列 我有三个小目标: 1.完全创造 完全从0开始,创造一个有深度.有难度.有挑战的产品. 所以Wonder被创造出来了,并且会持续地发展.…
大家好,本文介绍了Wonder的高层需求和本系列对应的具体功能点. 确定Wonder高层需求 业务目标 Wonder是web端3D开发的解决方案,包括引擎.编辑器,致力于打造开放.分享.互助的生态. 范围 引擎 Wonder.js WebGL 3D引擎 编辑器 Wonder-Editor 工具 提供给用户使用的各种工具,如gltf转wdb数据在线转换器等. 增值服务 增强用户在Wonder中发布的3D应用的能力,如提供数据统计.支付等. 平台 构建3D生态,提供如托管平台.开发资源商城等,用户可…
大家好,本文介绍了本系列涉及到的函数式编程的主要知识点,为正式开发做好了准备. 函数式编程的优点 1.粒度小 相比面向对象编程以类为单位,函数式编程以函数为单位,粒度更小. 正所谓: 我只想要一个香蕉,而面向对象却给了我整个森林 2.性能好 大部分人认为函数式编程差,主要基于下面的理由(参考 JavaScript 函数式编程存在性能问题么?): 1)柯西化.函数组合等操作增加时间开销 2)map.reduce等操作,会进行多次遍历,增加时间开销 3)Immutable数据每次操作都会被拷贝为新的…
介绍 大家好,本系列带你踏上Web 3D编程之旅- 本系列是实战类型,从0开始带领读者写出"良好架构.良好扩展性.最小功能集合(MVP)" 的3D引擎. 本系列的素材来自我们的产品:Wonder-WebGL 3D引擎和编辑器 的整个开发过程. 与我的"用函数式编程,从0开发3D引擎和编辑器"系列博文的区别: 本系列是它的重写版 本系列是实战类型,而它是经验总结类型 本系列只写引擎,而它既写引擎又写编辑器 为什么本系列只写引擎? 因为大部分人更关心引擎 为了加快写作速…
目录 上一篇博文 了解自动化测试 单元测试 集成测试 端对端测试 通过打印日志来调试 了解运行测试 断点调试 通过Spector.js测试WebGL 通过log调试Shader 移动端测试 了解性能测试 测试时间开销 测试内存开销 搭建本地测试环境 大家好,本文介绍了3D引擎的测试方法,搭建了本地的测试环境. 上一篇博文 从0开发3D引擎(三):搭建开发环境 了解自动化测试 对于引擎开发这种复杂.长期的项目,为了减少bug,提升长期的开发效率,自动化测试必不可少.在我们的Wonder.js引擎中…
介绍 大家好,本系列带你踏上Web 3D编程之旅- 本系列是实战类型,从0开始带领读者写出"良好架构.良好扩展性.优秀的性能.最小功能集合(MVP)" 的3D引擎. 本系列的素材来自我们的产品:Wonder-WebGL 3D引擎和编辑器 的整个开发过程. 详细介绍请见: 从0开发3D引擎(一):开篇 目录 第一部分:准备 从0开发3D引擎(一):开篇 从0开发3D引擎(二):准备预备知识 从0开发3D引擎(三):搭建开发环境 从0开发3D引擎(四):搭建测试环境 第二部分:基础 从0开…
目录 上一篇博文 下一篇博文 前置知识 回顾上文 最小3D程序完整代码地址 通用语言 将会在本文解决的不足之处 本文流程 解释本文使用的领域驱动设计的一些概念 本文的领域驱动设计选型 设计 引擎名 识别最小3D程序的顶层包含的用户逻辑和引擎逻辑 根据对最小3D程序的顶层的分析,用伪代码初步设计index.html 识别最小3D程序的初始化包含的用户逻辑和引擎逻辑 识别最小3D程序的主循环包含的用户逻辑和引擎逻辑 根据用户逻辑,给出用例图 设计架构,给出架构视图 分析"基础设施层"的&q…
目录 上一篇博文 继续实现 实现"DirectorJsAPI.init" 实现"保存WebGL上下文"限界上下文 实现"初始化所有Shader"限界上下文 实现用户代码并运行测试 大家好,本文根据领域驱动设计的成果,实现了init API. 上一篇博文 从0开发3D引擎(十):使用领域驱动设计,从最小3D程序中提炼引擎(第二部分) 继续实现 实现"DirectorJsAPI.init" 实现"保存WebGL上下文&q…
目录 上一篇博文 介绍Reason Reason的优势 如何学习Reason? 介绍Reason的部分知识点 大家好,本文介绍Reason语言以及学习Reason的方法. 上一篇博文 从0开发3D引擎(六):函数式反应式编程及其在引擎中的应用 介绍Reason Reason又叫Reasonml,是在Ocaml语言的基础上修改而来,由Facebook ReactJs的开发组开发和维护. Reason是函数式编程语言,由Bucklescript编译器将其编译为javascript语言. Reason…
大家好,现在开始本系列的第三部分,按照以下几个步骤来搭建引擎雏形: 1.分析引擎的需求 2.实现最小的3D程序 3.从中提炼引擎原型 4.一步一步地对引擎进行改进,使其具备良好的架构 5.实现与架构相关的功能,如"多线程渲染"."延迟渲染"等功能 本文进行第一步,分析引擎的需求. 业务目标 1.手把手教读者如何从0开发3D引擎 2.学习函数式编程及其在3D领域的应用 3.学习3D编程中基础的功能实现,如纹理.光照.模型等 4.学习引擎的设计和架构,如Data Ori…
目录 上一篇博文 运行测试截图 需求分析 目标 特性 头脑风暴 确定需求 总体设计 具体实现 新建Engine3D项目 实现上下文 实现_init 实现"获得WebGL上下文" 实现"初始化所有Shader" 实现"初始化场景" 实现"设置清空颜色缓冲时的颜色值" 返回用于主循环的数据 实现_loop 实现"主循环" 实现"clearCanvas" 实现"_render&quo…
大家好,本文介绍了开发3D引擎需要的预备知识,给出了相关的资源. 上一篇博文 从0开发3D引擎(一):开篇 了解Web 3D Web 3D的历史 目前Web 3D是基于WebGL这个Web端3D API的,它的版本历史为: (图来自于WebGPU 开发状态与计划) (注:OpenGL是桌面端的3D API,OpenGL ES是移动端的3D API) 2007年,发布OpenGL ES 2.0 OpenGL ES 2.0引入了可编程着色器,增加了顶点着色器和片段着色器. 2011年,基于OpenG…
我们使用领域驱动设计(英文缩写为DDD)的方法来设计引擎,在引擎开发的过程中,领域模型会不断地演化. 本文介绍本系列使用的领域驱动设计思想的相关概念和知识点,给出了相关的资料. 上一篇博文 从0开发3D引擎(七):学习Reason语言 下一篇博文 从0开发3D引擎(八):准备"搭建引擎雏形" 概览 下面的资料粗略地介绍了DDD的相关知识点: 领域驱动设计学习输出 领域驱动设计(DDD)部分核心概念的个人理解 系统学习资料 相关资料为: DDD理论学习系列 为什么用DDD 参考领域驱动设…
本系列使用Reason语言,因此需要搭建它的开发环境. 上一篇博文 从0开发3D引擎(二):准备预备知识 搭建开发环境 建议使用VSCode编辑器来开发Reason,因为它的插件支持得最好. 具体搭建Reason开发环境的步骤如下: 1.安装Chrome浏览器 我们使用Chrome浏览器作为测试和运行环境. 2.安装VSCode 3.安装VSCode->OCaml and Reason IDE插件 4.克隆Reason-Example项目: git clone https://github.co…
目录 上一篇博文 本文流程 回顾上文 解释基本的操作 开始实现 准备 建立代码的文件夹结构,约定模块文件的命名规则 模块文件的命名原则 一级和二级文件夹 api_layer的文件夹 application_layer的文件夹 domain_layer的文件夹 infrastructure_layer的文件夹 index.html实现调用引擎API 用伪代码实现index.html 实现"CanvasJsAPI.setCanvasById" 实现"GraphicsJsAPI.s…
 (转载请注明出处) 使用SDK: Kinect for Windows SDK v2.0 public preview1409 同前面,由于SDK未完毕,不附上函数/方法/接口的超链接. 这次最终是新的东西了.是"手势帧",只是原名是"可视化手势构建器"(Visual Gesture Builder)帧,是 SDK 2.0自带的手势解决方式.只是,假设您认为微软写得不可靠.甚至垃圾.您能够尝试自己写个.笔者在 提供的范例中.写了个简单的样子(几十行而已,不要期…
参考:匿名函数 NOTE 1.Python对匿名函数提供了有限的支持. eg. #!/usr/bin/env python3 def main(): lis = list(map(lambda x: x*x, [1, 2, 3, 4, 5])) print(lis) if __name__ == '__main__': main() sh-3.2# ./lambda1.py [1, 4, 9, 16, 25] 可以看出,lambda相当于函数: def func(x): return x*x 2…
为什么要开始10000小时? 我以前看过一本叫<异类>的书,书的大概意思是:只要学习10000小时,任何人都可以成为一个领域的大师.这里的"学习"是指完全专注地精进学习,不做无用的重复工作,不待在舒适区,一直在学习区学习! 我看完后就一直想验证一下是否属实.我在网上搜索了一下关于"10000小时实践"的情况,结果发现还没有一个人真正地.有记录地完成了10000小时!只发现了一个国外的同学实践的Dan计划(10000小时打高尔夫球),但是这个同学也只坚持了…
===================== Scala函数式编程 ======================== 一.Scala中的函数 (*) 函数是Scala中的头等公民,就和数字一样,可以在变量中存放函数,即:将函数作为变量的值(值函数). def myFunc1(name:String):String = "Hello " + name println(myFunc1("Tom")) def myFunc2():String = "Hello W…
本文转自:http://geek.csdn.net/news/detail/96636     现代C++函数式编程 C++ 函数式编程 pipeline 开发经验 柯里化 阅读2127    作者简介: 祁宇,武汉烽火云创软件技术有限公司研发中心技术总监,<深入应用C++11>作者,C++开源社区purecpp.org创始人,致力于C++11的应用.研究和推广.乐于研究和分享技术,爱好C++,爱好开源. 导读: 本文作者从介绍函数式编程的概念入手,分析了函数式编程的表现形式和特性,最终通过现…
本文首发于 vivo互联网技术 微信公众号 链接:https://mp.weixin.qq.com/s/EWSqZuujHIRyx8Eb2SSidQ作者:杨昆 [编写高质量函数系列]中, <如何编写高质量的 JS 函数(1) -- 敲山震虎篇>介绍了函数的执行机制,此篇将会从函数的命名.注释和鲁棒性方面,阐述如何通过 JavaScript 编写高质量的函数. <如何编写高质量的 JS 函数(2)-- 命名/注释/鲁棒篇>从函数的命名.注释和鲁棒性方面,阐述如何通过 JavaScri…
Spark 选择 Scala 作为开发语言 在 Spark 诞生之初,就有人诟病为什么 AMP 实验室选了一个如此小众的语言 - Scala,很多人还将原因归结为学院派的高冷,但后来事实证明,选择 Scala 是非常正确的,Scala 很多特性与 Spark 本身理念非常契合,可以说它们是天生一对. Scala 背后所代表的函数式编程思想也越来越为人所知. 函数式编程思想早在 50 多年前就被提出,但当时的硬件性能太弱,并不能发挥出这种思想的优势.目前多核 CPU 大行其道,函数式编程在并发方面…
转:JavaScript函数式编程(三) 作者: Stark伟 这是完结篇了. 在第二篇文章里,我们介绍了 Maybe.Either.IO 等几种常见的 Functor,或许很多看完第二篇文章的人都会有疑惑: 『这些东西有什么卵用?』 事实上,如果只是为了学习编写函数式.副作用小的代码的话,看完第一篇文章就足够了 kk:很贴近实际.第二篇文章和这里的第三篇着重于的是一些函数式理论的实践,是的,这些很难(但并非不可能)应用到实际的生产中,因为很多轮子都已经造好了并且很好用了.比如现在在前端大规模使…
初学函数式编程,相信很多程序员兄弟们对于这个名字熟悉又陌生.函数,对于程序员来说并不陌生,编程对于程序员来说也并不陌生,但是函数式编程语言(Functional Programming language)又是什么呢?肯定很多朋友们也会有疑问. 学习一样东西,我们首先是了解他的历史,因为历史总是惊人低调相似,并让你从头到尾的了解它,让自己了解的更透彻. 在计算机的世界中,有两位巨擘对问题的可计算性做了模型化描述 一位是阿兰.图灵(Alan Turing),   图灵机,又称图灵计算.图灵计算机,是…
函数编程与命令性编程 为支持使用纯函数方法解决问题,特此创建了函数编程范例. 函数编程是一种声明性编程形式.相比之下,大多数主流语言,包括面向对象的编程 (OOP) 语言(如 C#.Visual Basic.C++ 和 Java–)主要都是为支持命令性(过程性)编程而设计的. 使用命令性方法时,开发人员编写的代码应严格细致地说明计算机为完成目标而必须执行的步骤. 这有时称为算法编程.相比之下,函数方法涉及将问题编成一组要执行的函数. 您要仔细地定义每个函数的输入值和每个函数的返回值. 下表说明了…
转自:http://www.cnblogs.com/xiaozhi_5638/p/4762846.html 目录 一个问题 函数式编程中的函数 数学与函数式编程 混合式编程风格 一个问题 假设现在我们需要开发一个绘制数学函数平面图像(一元)的工具库,可以提供绘制各种函数图形的功能,比如直线f(x)=ax+b.抛物线f(x)=ax²+bx+c或者三角函数f(x)=asinx+b等等.那么怎么设计公开接口呢?由于每种行数的系数(a.b.c等)不同,并且函数构造也不同.正常情况下我们很难提供一个统一的…
函数式编程是在不改变状态和数据的情况下使用表达式和函数来编写程序的一种编程范式.通过遵守这种范式,我们能够编写更清晰易懂.更能抵御bug的代码.这是通过避免使用流控制语句(for.while.break.continue.goto)来实现的,这些语句会使代码更难理解.此外,函数式编程要求我们编写纯的.确定性的函数,这些函数不太可能有bug. ???说人话 好的. 在开始函数式编程之前,我们需要了解一哈什么是纯函数和非纯函数. 纯函数就是对于固定的输入一定会有固定的输出.而且,它们对外界没有任何副…
一.简介 在JavaScript中,函数就是第一类公民,它可以像字符串.数字等变量一样,使用var修饰并作为数据使用.它可以作为数值.可以作为参数.还可以作为返回结果.可以说JavaScript就是函数式编程.ES6新语言特性中,箭头函数.扩展运算符会极大地帮助开发者利用函数式编程技术进行开发. //定义一个箭头函数 var print = (message) => console.log(message) 1.函数作为数值使用 //将函数作为数值使用 const array = ["XY…