Kotlin 可以用 sequence,ParserKt不是handle这种情况的,虽然可以写
enum class State(val no: Int) {
Begin(0), Method(1), RequestUri(2), Version(3),
Header(4), Body(5), End(-1);
inline val hasNext: Boolean get() = no != (-1)
inline val next: State get() = State.values()[no.inc()]
}
internal fun parseRequest(data: ByteIterator) = sequence {
var state = State.Begin
while (state != State.End) {
var currentItem = when (state) {
State.Method -> ::parseMethod
State.RequestUri -> ::parseRequestUrl
State.Version -> ::parseVersion
State.Header -> ::parseHeader
State.Body -> ::parseBody
else -> impossible()
} (data)
//if (currentItem == null) throw InvalidHttpRequest()
if (currentItem != null) yield(currentItem)
else throw InvalidHttpRequest()
if (state != State.Header)
state = state.next
}
} 注意,上面的用的是 Kotlin 的 sequence 和 ByteIterator
不是可以自定义切片(Slice)的 SpanView(ReadOnlySpan)
如果需要等待也可以用 sequence 子解析器
新的修复版本:
enum class State(val no: Int) {
Begin(0), Method(1), RequestUri(2), Version(3),
Header(4), Body(5), End(-1);
val hasNext: Boolean get() = no != (-1)
val next: State get() = State.values()[no.inc()]
}
internal fun parseRequest(data: ByteIterator) = sequence {
var state = State.Begin
while (state != State.End) {
var currentItem = when (state) {
State.Method -> parseMethod(data)
State.RequestUri -> parseRequestUrl(data)
State.Version -> parseVersion(data)
State.Header -> parseHeader(data)
State.Body -> parseBody(data)
}
if (currentItem != null)
yield(currentItem)
else throw InvalidHttpRequest()
if (state.hasNext) state = state.next
}
}
羽毛的小白板
新时代 HTTP request message parser。状态机化是为了解析遇到 buffer 不足时可以等待扩充并回到之前的位置重试
把 consumed 抽提到
这种情况,consumed 就不需要靠
Parse 方法解析完一个项目需要维护
解析不了直接抛异常好了,面向对象设计也别太在乎异常费时间,有优化的
不过用 sequence 抽象没法在结束的时候返回解析成功失败,用 generateSequence 也是到返回 null 的时候停下
abstract class StateParser(protected var position: Cnt) 也可行这种情况,consumed 就不需要靠
Parse 方法维护了,删去 consumed += currentConsumed、ParseMethod 里面的 return n 给换成 position += n 即可Parse 方法解析完一个项目需要维护
data view 变量,可以向超类的逻辑要 view = data.slice(position),就是面向对象的行为继承。解析不了直接抛异常好了,面向对象设计也别太在乎异常费时间,有优化的
不过用 sequence 抽象没法在结束的时候返回解析成功失败,用 generateSequence 也是到返回 null 的时候停下
Forwarded from dnaugsuz
Kotlin 真的很有用,我现在看到
int a=1; while (a<=5) {...a++;} 都会自动综合出 a in 1..5 -> ... 了,看那些Java程序员的代码毫无难度,不存在+1 -1的问题
永久封存 | Yuuta 台 | 😷 #Pray4Wuhan
挂个人,PeterCxy,俗称虾大。以前我第一印象觉得这人还行,然后今天手机刷机,有个问题由于自己知识浅薄不懂,他也正好是这个帖子的维护者,我就问了一下他(谨慎起见还特意注明自己不懂),没想到他直接给我 Block 了。我真不知道我哪里得罪恁了。各位以后小心和此人相处。
讲个笑话,他就是看不起你,所以怎么看你都傻逼。
要是一开口/dev/,kmodule,coreutil,说不定还不至于block,当然也说不定。
我也经常看不起一些人的,不过我觉得这是不应该的,所以我不会表现出来,也会努力克制,今后也会努力克制的。
其实啥东西,老是分什么高端低端,就纯属搞错重点了。大家玩技术,开心就好,也不要总管弄出个什么玩意来。
能给建议的给点建议,不要把自己放得太高,不要对别人提太高要求,好好学习、好好创作、努力试着去向『传播者』的方向走就行了。
要是一开口/dev/,kmodule,coreutil,说不定还不至于block,当然也说不定。
我也经常看不起一些人的,不过我觉得这是不应该的,所以我不会表现出来,也会努力克制,今后也会努力克制的。
其实啥东西,老是分什么高端低端,就纯属搞错重点了。大家玩技术,开心就好,也不要总管弄出个什么玩意来。
能给建议的给点建议,不要把自己放得太高,不要对别人提太高要求,好好学习、好好创作、努力试着去向『传播者』的方向走就行了。
哎呀,其实我早就想给我的 pr.py 加上
-srand 选项的,可惜最后没去弄Forwarded from dnaugsuz
https://github.com/Sleepwalking/libllsm2/blob/master/test/arctic_a0001.wav
https://github.com/Sleepwalking/libllsm2
这是曾经一个B站大佬弄的,
https://synthesizerv.com/zh-cn/
https://github.com/Sleepwalking/libllsm2
这是曾经一个B站大佬弄的,
https://synthesizerv.com/zh-cn/
GitHub
Sleepwalking/libllsm2
Low Level Speech Model (version 2) for high quality speech analysis-synthesis - Sleepwalking/libllsm2
Forwarded from dnaugsuz
欸,看来还是机器学习/CV能做到的事情有趣,忍不住想再抱怨一下自己数学不好……
Forwarded from dnaugsuz
NLP和哪怕是基本ANN模型比起来都太简单了,就是我们PLT解析器那一套,当然大部分人都把形式化语言归为算法,也就是计算机科学那套,不是程序设计语言理论……
Forwarded from dnaugsuz
就是
然后现在用的NLP高级很多…… 就和PLT那套没太大关系了(形式化语言还总是说什么succ pred token(FIRST/FOLLOW)、top-down, bottom-up、什么 BNF, EBNF, 还有 LL(k), recursive descent, LR, 还有 LALR, PEG, ANTLR、CFG, DFA, NFA 什么玩意的),但基本理论也就一两样,LLVM Cookbook 一书的译者还不是要学NLP转过来的
For = for (lparen Expr rparen) Stmt 这种嘛,自然语言加上词类直接模式匹配,当然这是死的却也可以用,分词器上也可以做ML(machine learning)。然后现在用的NLP高级很多…… 就和PLT那套没太大关系了(形式化语言还总是说什么succ pred token(FIRST/FOLLOW)、top-down, bottom-up、什么 BNF, EBNF, 还有 LL(k), recursive descent, LR, 还有 LALR, PEG, ANTLR、CFG, DFA, NFA 什么玩意的),但基本理论也就一两样,LLVM Cookbook 一书的译者还不是要学NLP转过来的
一位dalao说过,在神经网络架构中
神经网络就是一个含未知参数的程序
正向传播就是运行这个程序的过程
反向传播就是寻找最优的这些参数的过程
然后就要对权重w求导、梯度下降、可非线性逼近
还有什么J=E(J)的,不知道是啥玩意的公式,E(_)是能量?
神经网络就是由一堆抽象神经元构成的网络
神经元是一堆
递推计算公式是
y^{k} = f(\sum^n_{i=1} w^k_{i} * x^{k-1}_{i} + b^{k})
然后 k=0 是输入层
神经网络就是一个含未知参数的程序
正向传播就是运行这个程序的过程
反向传播就是寻找最优的这些参数的过程
然后就要对权重w求导、梯度下降、可非线性逼近
还有什么J=E(J)的,不知道是啥玩意的公式,E(_)是能量?
神经网络就是由一堆抽象神经元构成的网络
神经元是一堆
y = f(wx+b) 递推计算公式是
y^{k} = f(\sum^n_{i=1} w^k_{i} * x^{k-1}_{i} + b^{k})
然后 k=0 是输入层