MoonBit月兔编程语言 现代编程思想 第九课 接口# 现代编程思想 接口 Hongbo Zhang ## 回顾 ## • 第六课:定义平衡二叉树 我们定义一个更一般的二叉搜索树,允许存放任意类型的数据 1. enum Tree[T] { 2. Empty 3. Node(T, Tree[T], Tree[T]) 4. } 5. 6. // 我们需要一个比较函数来比较值的大小以了解顺序 7. // 负数表示小于,0表示等于,正数表示大于 我们将这类函数称为方法 ## 接口 Trait ## • 我们通过接口定义一系列方法的实现需求 1. trait Compare { 2. compare(Self, Self) -> Int // Self代表实现该接口的类型 3. } 4. trait Default { 5. default() -> Self 6. } ## • 月兔中的接口是结构化的 ◦ 无需 无需声明为特定的接口实现方法,类型本身实现方法即可 ## 接口 Trait • 我们可以在泛型的参数上添加接口的要求 ☐ 限制参数的类型: <类型参数> : <接口> ☐ 在函数中使用接口定义的方法: <类型参数>::<方法名> 1. fn make[T: Default]( ) -> Queue[T] { // 类型参数T应当满足Default接口0 码力 | 16 页 | 346.04 KB | 2 年前3
CurveFS rename 接口实现方案rename 接口实现方案(已实现,选用方案二) 背景 • 方案调研 • Chubaofs • Juicefs • 方案实现 • 方案一:chubaofs • 方案二:事务方案 • 方案三:利用 KV 自带的分布式事务 • Q&A • 1. 是否需要实现跨文件系统的 rename 操作? • 2. 在多客户端情况下,是否需要加锁来保证其原子性? • 3. rename rename 接口,本文档是对 rename 接口实现的调研及方案设计。 rename 操作,主要操作的是 dentry,如 rename /dir1/file1 /dir2/file2,主要有 2 个步骤:(1)删除 file1 的 dentry,(2)增加 file2 的 dentry(该 dentry 的 inodeid 等同 file1 的 inode id)。关于 rename 接口的实现,主要调研了 dentry,相当于多了一个硬链接,Linux 和 POSIX 接口中表明这允许一段时间内存在,但是最终还是要原子性,所以这一步出错会导致和本地文件系统不一致的行为: 1. Linux 接口定义允许 rename 过程中某一段时间存在这样的硬链接(或者 rename 执行到一半断电也会存在) 2. 而 POSIX 接口中提到了该函数得是原子(不断电的情况下,rename 操作不能被其他操作打断,不存在中间状态)0 码力 | 15 页 | 555.93 KB | 1 年前3
Curve文件系统元数据Proto(接口定义)curve文件系统元数据proto(代码接口定义,已实现) ## 1、 代码结构和代码目录 curve文件系统是相对于curve块设备比较独立的一块,在当前curve项目的目录下,增加一个一级目录curvefs,curvefs下有自己独立的proto\src\test。  on Windows hosts 42 2.3.6 C binding to VirtualBox API 43 3 Basic VirtualBox concepts; some examples 50 3.1 Obtaining basic machine information. Reading attributes0 码力 | 469 页 | 2.73 MB | 1 年前3
Vue声明式编程## V ue声明式编程 ## 摘要 • 声明式与图灵完备性 • 声明式与UI编程的演进 • 声明式与UI架构 • 声明式与交互 ## 声明式与图灵完备性 ## 声明式 • 我们对语言有很多划分的维度 • 声明式 vs 命令式 • 声明式语言:HTML XML CSS SQL • 命令式语言:C++ Java JavaScript ## 图灵完备性 · 图灵完备:“可计算性” 声明式的图灵完备性:if/递归 ## V ue的Template的图灵完备性 • 实际上Vue的组件系统具有图灵完备性 • 使用Vue计算阶乘 • 使用Vue计算斐波那契数列 ## 声明式与UI编程 ## UI编程 • 70年代 MVC诞生 人们意识到视图应该被独立抽象 • 80年代 标记语言大热 最初更与文本相关 • 90年代 可视化编辑器出现 “独立的UI代码文件” • 2000年后 markup 可重复绑定性 • recycle-list ## 声明式与UI架构 ## MVVM • MVC => MVP => MVVM —脉相承的演化 • MVVM是为声明式/多语言量身定做的编程模型 ## MVVM的数据绑定 • 数据绑定是声明式的数据与UI通讯 • 一些逻辑中数据绑定不需要命令式代码 ## 声明式数据交换  ## 序 Angular 是一个开发平台。它能帮你更轻松的构建 Web 应用。Angular 集声明式模板、依赖注入、端到0 码力 | 27 页 | 177.00 KB | 2 年前3
MoonBit月兔编程语言 现代编程思想 第七课 命令式编程:命令,可变数据结构,循环现代编程思想 命令式编程 Hongbo Zhang ## 函数式编程 - 到此为止,我们介绍的可以归类于函数式编程的范畴 - 对每一个输入,有着固定的输出 对于标识符,我们可以直接用它所对应的值进行替代——引用透明性 • 开发实用的程序,我们需要一些计算之外的“副作用” ☐ 进行输入输出 ☐ 修改内存中的数据等 ☐ 这些副作用可能导致多次执行的结果不一致 ## 引用透明性 let t = acc1 + acc2 5. acc1 = acc2; acc2 = t 6. } 7. acc1 8. } ## 总结 本章节初步接触了命令式编程,包括 • 如何使用命令 • 如何使用变量 • 如何使用循环等0 码力 | 23 页 | 780.46 KB | 2 年前3
Oracle VM VirtualBox 4.1.20 Programming Guide and ReferenceOracle VM VirtualBox $ ^{®} $ # Programming Guide and Reference Version 4.1.20 © 2004-2012 Oracle Corporation http://www.virtualbox.org ## Contents 1 Introduction 16 1.1 Modularity: the building building blocks of VirtualBox 16 1.2 Two guises of the same "Main API": the web service or COM/XPCOM 17 1.3 About web services in general 18 1.4 Running the web service 19 1.4.1 Command line and Visual Basic Script (VBS) on Windows hosts 34 2.3.6 C binding to XPCOM API 34 3 Basic VirtualBox concepts; some examples 39 3.1 Obtaining basic machine information. Reading attributes 39 30 码力 | 306 页 | 1.92 MB | 1 年前3
Java 应用与开发 - 线程编程000000000000000000000000000000000000000000000000000 线程控制 OOOOOOOOOOOOOOOO 线程的同步 # Java 应用与开发 线程编程 王晓东 wangxiaodong@ouc.edu.cn 中国海洋大学 November 6, 2018  来完成其操作,方法 run() 称为线程体。 1. 定义一个类实现 Runable 接口,重写其中的 run() 方法,加入所需的处理逻辑; 2. 创建 Runable 接口实现类的对象; 3. 创建 Thread 类的对象(封装 Runable 接口实现类型对象): 4. 调用 Thread 对象的 start() 方法,启动线程。 课程配套代码 ☑ sample 对象所对应的方法 run() 来完成其操作,方法 run() 称为线程体。 1. 定义一个类实现 Runable 接口,重写其中的 run() 方法,加入所需的处理逻辑; 2. 创建 Runable 接口实现类的对象; 3. 创建 Thread 类的对象(封装 Runable 接口实现类型对象): 4. 调用 Thread 对象的 start() 方法,启动线程。 课程配套代码 ☑ sample0 码力 | 82 页 | 1010.73 KB | 2 年前3
共 1000 条
- 1
- 2
- 3
- 4
- 5
- 6
- 100













