尽管Kotlin没法给类级的泛型弄成真泛型,但运行时许多JVM会有优化(其实也不必想这些的)
而且我们的库主要还是给人读写用的不需要太复杂。
Cond 属于之前我没想过的情况,不过还好,也写出来了。
而且我们的库主要还是给人读写用的不需要太复杂。
Cond 属于之前我没想过的情况,不过还好,也写出来了。
final override var position: Cnt = 0🤔 为什么 getter 是 public 的 open class 里的属性只能 final?
private set
JDK 的程序员脑子里是怎么想的,为什么 FileInputStream 没有 position,RandomAccessFile 还非得自带 DataInput?真当所有东西都需要一个 DataInput???
duangsuse::Echo
足以体现抽提代码重要性
这就好像是赶一群羊,找到头羊就可以领着一起走,不然一堆代码各走各的,都不听你的。写起来简单机械一点,改起来看起来通通选择死亡。
Ctrl+V『写代码』一时爽,测试修bug火葬场。
Ctrl+V『写代码』一时爽,测试修bug火葬场。
🤔JavaScript 基于 ArrayBuffer 和 DataView 的兼容抽象部分已经写完,暂时不对其正确性作任何保证。
正在准备开源到GitHub。
正在准备开源到GitHub。
duangsuse::Echo
🤔JavaScript 基于 ArrayBuffer 和 DataView 的兼容抽象部分已经写完,暂时不对其正确性作任何保证。 正在准备开源到GitHub。
https://github.com/duangsuse-valid-projects/Binarie 已经开源
这周可能不会继续开发下去了,那对我的精力来说有点勉强……
目前为止,Binarie 的 JS Reader/Writer 部分已经完成,可是 JVM 利用基础 BasicReader/BasicWriter(待写) 和BitConvert的部分待补完
应该说开发过程也是有点意外的,我开始的时候不知道自己打算用ES6的DataView和Int8Array (ArrayBufferView)来进行BasicReader实现,也没想到MarkReset在大部分子类会以oldPosition的形式被实现,略微有点不适应。
这周可能不会继续开发下去了,那对我的精力来说有点勉强……
目前为止,Binarie 的 JS Reader/Writer 部分已经完成,可是 JVM 利用基础 BasicReader/BasicWriter(待写) 和BitConvert的部分待补完
应该说开发过程也是有点意外的,我开始的时候不知道自己打算用ES6的DataView和Int8Array (ArrayBufferView)来进行BasicReader实现,也没想到MarkReset在大部分子类会以oldPosition的形式被实现,略微有点不适应。
GitHub
duangsuse-valid-projects/Binarie
🐠 Cute functional style binary structure IO library for Kotlin - duangsuse-valid-projects/Binarie
Forwarded from duangsuse Throws
duangsuse::Echo
🤔可悲不进步的 duangsuse 总是想弄一门自己的程序设计语言。 可不管他怎么写代码,连一个有函数和局部作用域的计算器都弄不出来。 于是他又准备设计一门…… 这个计算器是Lambda calculus的计算器。 所谓的Lambda演算就是说,词法作用域(Lexical scoping),不过我还给它加上了 Haskell 一样的 Currying。 Lambda 就是 \formals. body abstraction 不过 currying 的 lambda 只能有一个参数,\formals 需要foldRight才行。…
才发现原来那个 #PL 稿在这里啊…… 我还以为没抄到网上来呢
duangsuse::Echo
systemStack: 20 reports of: 12.580254ms, 529.422micros, ... min=129.954micros, max=12.580254ms, mean=824.48265micros, std=2.6990074188995345ms ascending: 129.954micros, 132.066micros, ... 25%=135.936micros, 50%(median)=154.33micros, 75%=217.637micros AdtStack:…
这是中缀链解析和 NumUnits 单位 format,当然这不稀奇……就是descending accumulator div+mod,我后来又写了一遍……
Lexical Scoping 我不用说吧,递归下降解析了解到
(lambda (a b) (+ a b)) 的 formals 里的 "a" "b" 与 body 里 (+ a b) 存在的1:1对应关系,就可以很自然地把他们联系起来了,之后怎么处理都好,例如像 Lua 一样把它们翻译为函数局部寄存器的编号,然后每次调用的时候给它们分配一对一的存储空间,caller调用侧和callee被调用侧都知道那个"a" "b"是指代哪片分配就好。
duangsuse::Echo
既然都这么弄了,还不如直接把优化写成代码算了……
虽然那个栈的中缀链貌似很高级,而且貌似递归下降的在很极端的情况下输出和 JS 不同,但我还是觉得应该选它,至少它看起来很简单,只 (base, op_left) 两个递归参数就够了,最重要的是它使用的栈是在语言层面受到支持的,而且这个支持本身实现的也很优雅很妥帖(要不然那语言还有用么……)。
duangsuse::Echo
看了某位大佬的 reley (一个类似 Haskell 编译到 Python VM Bytecode 的程序设计语言) 我觉得,其实 Java 和 Kotlin 的 package…… 都不利于代码的简洁性,我是好好想了一会的,其实未必没有办法引入『导出』文法,代价是,必须去掉包声明,不然不好看 ……还是留着吧,毕竟 Java 系的不是 Haskell 的风格 绝句还不是绝句Script 呢。 不过我觉得可以给「包」声明一个扩展: — 数域.jue 包 绝句.区间, 物,节域、短数域、数域、长数域、…
绝句开始的时候的「包」是这样的,和Kotlin一点的不像,可能是Kotlin要预备原谅了吧 😂