duangsuse::Echo
#sql #ts Prolog 牛逼! 正确的关系式搜索+ 同时实现 parse 和 toStr 😱 #zhihu 灵感来源 e(E) -->{E = [I,Ea,Eb]}, %重写规则, 'eX'为优先级 %利用 链|e1(E) 括住内"*/" e1(Ea), op(I,"+-"), e(Eb); e1(E). e1(E) -->{E = [I,Ea,Eb]}, e2(Ea), op(I," */"), e1(Eb); e2(E). e2(X) --> number(X); ("(",…
添加个上文:组件 比如是
😑感觉有点不真实…… 解析器 parser 的技术跑到网页数据绑定上了
之前我想要这种“真正的双向绑定”,但是一直没想好列表和分支节点的API ,各种特判魔法
没想到,最后是以递归下降法,简化前端编程、提升节点复用
🤪有点扯。但看起来挺自然且简洁
仔细想想,HTML自定义节点,不就是语法的“非终结符”吗…… 被append remove啥的骗了那么久
没想到和被IDE更新的代码编辑模型是同一种,因为 #PLT 不重视单次解析后的“更改” ,把这两大类问题都搞复杂了
#statement #web
有点哭笑不得,我就是讨厌PLT才玩前端, 结果找到的最优解,仍然是关于变量关系、递归下降,而且还是顺“响应式”Vue它们的潮流
编程界发展了一圈 回到可变量和递归解构...
感情是FP和Prolog的前辈太死板,才留了UI,UX给前端界造魔法.. 但是,我希望,到今年为止了。
给大脑腾出点空间,别把精力浪费在尖括号和隐形的“优化”上
ee.Count=({n=0}, inc=x=>x+1)=>
div( p(n),
button(wOp({tap:n(inc)}), n,"+1")) 😑感觉有点不真实…… 解析器 parser 的技术跑到网页数据绑定上了
之前我想要这种“真正的双向绑定”,但是一直没想好列表和分支节点的API ,各种特判魔法
没想到,最后是以递归下降法,简化前端编程、提升节点复用
🤪有点扯。但看起来挺自然且简洁
仔细想想,HTML自定义节点,不就是语法的“非终结符”吗…… 被append remove啥的骗了那么久
没想到和被IDE更新的代码编辑模型是同一种,因为 #PLT 不重视单次解析后的“更改” ,把这两大类问题都搞复杂了
#statement #web
有点哭笑不得,我就是讨厌PLT才玩前端, 结果找到的最优解,仍然是关于变量关系、递归下降,而且还是顺“响应式”Vue它们的潮流
编程界发展了一圈 回到可变量和递归解构...
感情是FP和Prolog的前辈太死板,才留了UI,UX给前端界造魔法.. 但是,我希望,到今年为止了。
给大脑腾出点空间,别把精力浪费在尖括号和隐形的“优化”上
Forwarded from Solidot
廉价 AI 时代正在走来
2023-09-01 14:13 by 诺比的微型反重力装置
Nala Ginrut 写道:AIGC 被认为是未来的基础物料,就如同水电一样存在普遍需求。可是高昂的算力成本已然成为 AIGC 进一步推进的阻碍。SymeCloud 在探索低成本 AI 方案的方向上更进了一步,最近他们发布了一个超廉价的 Chatbot 云方案,仅需 4.99 美元/月,是目前世界上最便宜的付费方案。该方案在 HackerNews 上引起了热议。
https://news.ycombinator.com/item?id=37341332
https://syme.dev/articles/news/0
#人工智能
2023-09-01 14:13 by 诺比的微型反重力装置
Nala Ginrut 写道:AIGC 被认为是未来的基础物料,就如同水电一样存在普遍需求。可是高昂的算力成本已然成为 AIGC 进一步推进的阻碍。SymeCloud 在探索低成本 AI 方案的方向上更进了一步,最近他们发布了一个超廉价的 Chatbot 云方案,仅需 4.99 美元/月,是目前世界上最便宜的付费方案。该方案在 HackerNews 上引起了热议。
https://news.ycombinator.com/item?id=37341332
https://syme.dev/articles/news/0
#人工智能
duangsuse::Echo
添加个上文:组件 比如是 ee.Count=({n=0}, inc=x=>x+1)=> div( p(n), button(wOp({tap:n(inc)}), n,"+1")) 😑感觉有点不真实…… 解析器 parser 的技术跑到网页数据绑定上了 之前我想要这种“真正的双向绑定”,但是一直没想好列表和分支节点的API ,各种特判魔法 没想到,最后是以递归下降法,简化前端编程、提升节点复用 🤪有点扯。但看起来挺自然且简洁 仔细想想,HTML自定义节点,不就是语法的“非终结符”吗…… 被append…
parser 和前端框架还真是一样的啊……😑
React 在那按 shouldUpd(实质是key equals )来 memo(Nodes)
你这增量解析器按区间起点memo(AST)..
要我说,直接让解析器来维护高亮span链表了, 编辑时直接朝上查,从{}[]""的起点重解析 Expr,Stmt, 到文件级 再替换哪个['s','t','r']的绑定..
流读写把struct{a,b}和 int[2] 搞混淆了,真正有pos+=item 的,只有[,] 结构,就像
Memo 返回值干嘛呢? 把pos往左调干嘛呢? 本质不就是区间对应可变数组里
让解析器包揽IDE的“导航”工作,反而大家都更轻松,少玩这些纯函数缓存。就是太爱学习 不思进取,导致职责划分失衡、把需求默认得太窄,才会搞出这些特技
以前觉得数据结构是算法的累赘(因为太冗长..这怪OOP),现在看来都挺重要,因为有些人还在玩C的那一套,不会Proxy绑定数据的读写
ohm的+-*/ 可视化
ref: 2017 ohm(P23), ms
👇开源板 跳过广告
React 在那按 shouldUpd(实质是key equals )来 memo(Nodes)
你这增量解析器按区间起点memo(AST)..
要我说,直接让解析器来维护高亮span链表了, 编辑时直接朝上查,从{}[]""的起点重解析 Expr,Stmt, 到文件级 再替换哪个['s','t','r']的绑定..
流读写把struct{a,b}和 int[2] 搞混淆了,真正有pos+=item 的,只有[,] 结构,就像
<html For>里也是按顺序解构Memo 返回值干嘛呢? 把pos往左调干嘛呢? 本质不就是区间对应可变数组里
/\d+/,list,a|b 这些模式的值吗?让解析器包揽IDE的“导航”工作,反而大家都更轻松,少玩这些纯函数缓存。就是太爱学习 不思进取,导致职责划分失衡、把需求默认得太窄,才会搞出这些特技
以前觉得数据结构是算法的累赘(因为太冗长..这怪OOP),现在看来都挺重要,因为有些人还在玩C的那一套,不会Proxy绑定数据的读写
ohm的+-*/ 可视化
ref: 2017 ohm(P23), ms
👇开源板 跳过广告
❤1
Forwarded from 科技圈🎗在花频道📮 (在花⭐️投稿📮Bot)
安卓系统的开屏广告自动跳过助手
程序是开源程序,不需要网络权限,不需要存储权限,不会收集或者上传任何信息!绝无隐私问题!
https://github.com/zfdang/Android-Touch-Helper
投稿:@ZaiHuaBot
频道:@TestFlightCN
程序是开源程序,不需要网络权限,不需要存储权限,不会收集或者上传任何信息!绝无隐私问题!
https://github.com/zfdang/Android-Touch-Helper
投稿:@ZaiHuaBot
频道:@TestFlightCN
duangsuse::Echo
#blog #meme 看到易语言还在VB++ 的范式旁徘徊 😅,并且觉得编程语言 是种必须特色和备案的「核心技术」… 我想复刻下这2007年文章的口吻: “绝句.ju”十分钟入门教程 作者:转载必须注明出处 亲爱的朋友,您愿意花十分钟的时间,来了解一门全新的编程语言“绝句.未公开”吗?(搞笑向 btw. 很难想象标准库与ES7接轨,拥有函续、不/可变数据集、流/叠加、双主语的绝句,还能用“合规”的记法支持VB7时代的“正统中文编程”👀 - 起点 将123写到屏幕 100.123:[x] …
#zhihu #PLT 又看到有趣的中文编程设计 ,做些科普。 👀
1.打这些太极 还不如就叫真假,另外,加语法糖并不是以混淆基本语法,以编程的一致性为代价. PHP,Ruby,Py2 和VB已经玩烂过这套“大小混写”了(你怎么不用神奇GPT编译呢?)
2.子类型对应的是强制兼容,而非隐式数值转换。 进制只是表示法,SQL那种类型只是验证位数
你说的不需要看(隐式新建类型变量)、运行时可见,Haskell、Kotlin也支持,但你对连 List<T>,T->R 都还没懂的人弱化类型,就利于他们学用新接口了?别把隐类型当成无类型
3.其实,只要编码统一,最常见的bytes.replace和非空split都OK多字节字符。即便你想像Perl那样囊括万物,得出的语言可能就是一个Str运算的节点图
4.GC引用和Str/Builder的隔离不就是? 你还混淆了编译期和int*两期变量绑定 (x86 ABI -O0 就是用esp-4-8栈指针传参的, vararg 就是靠这个)
5.JVM每天都在跨线程 (volatile Object)vars=新引用 ,C#还支持并行For,numpy 则支持GPU,SIMD ,为什么要把废话说得像真理一样啊啊啊..
6.
另外,
7. 文字游戏。 add(a,b,&c) 的汇编叫无副作用?
C有函数指针啊,而且Linux还用它“实现OOP驱动”了
只是没
另外 看见贺老锐评#js 函数式提案,发现很多都被现在的EQ设计过了…
Iterator helpers
前两个是 obj.it.xx 的核心特性
模式匹配,不就是EQ的基石嘛
1.打这些太极 还不如就叫真假,另外,加语法糖并不是以混淆基本语法,以编程的一致性为代价. PHP,Ruby,Py2 和VB已经玩烂过这套“大小混写”了(你怎么不用神奇GPT编译呢?)
2.子类型对应的是强制兼容,而非隐式数值转换。 进制只是表示法,SQL那种类型只是验证位数
你说的不需要看(隐式新建类型变量)、运行时可见,Haskell、Kotlin也支持,但你对连 List<T>,T->R 都还没懂的人弱化类型,就利于他们学用新接口了?别把隐类型当成无类型
3.其实,只要编码统一,最常见的bytes.replace和非空split都OK多字节字符。即便你想像Perl那样囊括万物,得出的语言可能就是一个Str运算的节点图
4.GC引用和Str/Builder的隔离不就是? 你还混淆了编译期和int*两期变量绑定 (x86 ABI -O0 就是用esp-4-8栈指针传参的, vararg 就是靠这个)
5.JVM每天都在跨线程 (volatile Object)vars=新引用 ,C#还支持并行For,numpy 则支持GPU,SIMD ,为什么要把废话说得像真理一样啊啊啊..
6.
#define str char* 后 str a,b; 你就会发现C的类型运算符本身有问题另外,
int(int,int) add 不适合写类型推导7. 文字游戏。 add(a,b,&c) 的汇编叫无副作用?
C有函数指针啊,而且Linux还用它“实现OOP驱动”了
只是没
a=>new(b=>a+b) 闭包对象而已,C的落后并不是只在写法上,是GC,API,types,memsafe 的全面不足,但是把C的错误当宝就是程序员的问题了另外 看见贺老锐评#js 函数式提案,发现很多都被现在的EQ设计过了…
Iterator helpers
[1,2,5,1].Q.firsts(x=>x<3) //基于waitFun,故同时兼容 [],func*,asyncStage0:ADT Enum, tail calls
Record&Tuple
when(class{
User(name){表单验证}
})
when(class Either{ //EQ继承很多绝句里的语法
A(v){} B(v){}
})
noOp=(a,b=0)=>nest(b=>{
if(a!=0)loop(a-1,b+1)
})
Stage1:Observable、Emitter, Extensions, Partial application,Pipeline operator,Memo前两个是 obj.it.xx 的核心特性
user.to(_=>{name="Jack"})
Str.it({
cap:_=> _[0].toUpper+slice(1)
})
compose管道也是num=(a,b)=>a+b
it.n([num.it(+1), x=>x+'%'])
is.ST({num}) //memo 模式匹配,不就是EQ的基石嘛
when(res,「前人造过的轮子就有点像是数轴上的有理数点:稠密,有序,无穷无尽。但是真当你用的时候,你会发现,你的实际需求有着几乎100%的概率落在有理数的缝隙里。」
[{status:200,body}, body!="", fn(bodyVar)],
[Some(x), x],
[None, 0]
)
知乎专栏
简语言改来改去,越来越像函数式编程语言了……
本意是设计一门类似C语言的中文编程语言,结果怎样都不满意,越设计,越想加新想法进去。最终,简语言已经完全不是当初的样子了。 一、基本数据类型1、仪型取意于阴阳两仪的概念,我将布尔型称为`仪型`,将仪型的…
Forwarded from Hacker News
Explaining the Postgres iceberg (Score: 150+ in 19 hours)
Link: https://readhacker.news/s/5NJhX
Comments: https://readhacker.news/c/5NJhX
Link: https://readhacker.news/s/5NJhX
Comments: https://readhacker.news/c/5NJhX
Avestura's Blog
Explaining The Postgres Meme
Have you seen this legendary SQL iceberg meme? Let's talk about it while wearing our PostgreSQL hat!
duangsuse::Echo
#py 周刊 - Excel 支持 import pandas, statsmodels, matplotlib / seaborn 了, Guido 亲自推广(可能是云计算,要订阅) - PowerToys添加“可交互”的截图 - Google 等各种大公司的技术blog #list - #apple #design 设计师法则 - #learn 看美军的脏话官话(F-words)学英语 。 - 单靠 #sql 如何保存数据 - APL 里有的 py 基本列表处理式 - FastAPI 最佳实践 list…
#py 周刊
#recommend #tool 带有 "Android 子系统", taskmgr,... 的网页版Win12 demo 🎨
#algorithm Hello Algo 多语言实例
#tool EasySpider +可视化编程
#android 高级包管理器
js: await using fp = openFile()
Flask 深入探索: 请求上文、会话、CORS
fastapi-users:开箱即用的 FastAPI 用户管理库
Django 发送带有验证链接的电子邮件
FastAPI 使用 Tailwind CSS + SQLAlchemy
Streamlit 初学者指南: 类似 Juypter UI
Polars:快如闪电的 #rust DataFrame 库, 优化表达式和上下文、惰性
dara:轻松创建交互式 Web 图表程序 📊
Python Asyncio 之 socket() 网络编程理论详解
可视化+深入学习数据结构与算法:C++、Swift、Python、Java、C#、JavaScript
bisect,heapq 如何保持数组有序
upiano:命令行里的钢琴 FluidSynth
探索国家/文化多样性:Pyetho — 用于列出国家及其语言
深入介绍 Python 3.12 中的永生对象(如 None 关键字和小整数)
下划线的十种用法(REPL, match, i18n)
7、h2ogpt:私人文档+图像的问答 PyMuPDF 识别与提取表格
8、refact:开源编码助手,支持自动补全、代码重构、代码分析
9、dify:创建自己的 AI 应用 +CN
#recommend #tool 带有 "Android 子系统", taskmgr,... 的网页版Win12 demo 🎨
#algorithm Hello Algo 多语言实例
#tool EasySpider +可视化编程
#android 高级包管理器
js: await using fp = openFile()
Flask 深入探索: 请求上文、会话、CORS
fastapi-users:开箱即用的 FastAPI 用户管理库
Django 发送带有验证链接的电子邮件
FastAPI 使用 Tailwind CSS + SQLAlchemy
Streamlit 初学者指南: 类似 Juypter UI
Polars:快如闪电的 #rust DataFrame 库, 优化表达式和上下文、惰性
dara:轻松创建交互式 Web 图表程序 📊
Python Asyncio 之 socket() 网络编程理论详解
可视化+深入学习数据结构与算法:C++、Swift、Python、Java、C#、JavaScript
bisect,heapq 如何保持数组有序
upiano:命令行里的钢琴 FluidSynth
探索国家/文化多样性:Pyetho — 用于列出国家及其语言
深入介绍 Python 3.12 中的永生对象(如 None 关键字和小整数)
下划线的十种用法(REPL, match, i18n)
7、h2ogpt:私人文档+图像的问答 PyMuPDF 识别与提取表格
8、refact:开源编码助手,支持自动补全、代码重构、代码分析
9、dify:创建自己的 AI 应用 +CN
Telegram
Newlearnerの自留地
#Python潮流周刊 #Newsletter
Python 潮流周刊#18:Flask、Streamlit、Polars 的学习教程
🦄文章&教程
1、一份深入探索 Flask 的指南
2、使用 PyMuPDF 识别与提取表格
3、深入介绍 Python 3.12 中的永生对象
4、Python 中下划线的十种用法
5、Python Asyncio 之网络编程方法详解
6、给初学者的 Streamlit 学习指南
7、如何在 FastAPI 应用中使用 Tailwind CSS 和 SQLAlchemy…
Python 潮流周刊#18:Flask、Streamlit、Polars 的学习教程
🦄文章&教程
1、一份深入探索 Flask 的指南
2、使用 PyMuPDF 识别与提取表格
3、深入介绍 Python 3.12 中的永生对象
4、Python 中下划线的十种用法
5、Python Asyncio 之网络编程方法详解
6、给初学者的 Streamlit 学习指南
7、如何在 FastAPI 应用中使用 Tailwind CSS 和 SQLAlchemy…
duangsuse::Echo
#zhihu #PLT 又看到有趣的中文编程设计 ,做些科普。 👀 1.打这些太极 还不如就叫真假,另外,加语法糖并不是以混淆基本语法,以编程的一致性为代价. PHP,Ruby,Py2 和VB已经玩烂过这套“大小混写”了(你怎么不用神奇GPT编译呢?) 2.子类型对应的是强制兼容,而非隐式数值转换。 进制只是表示法,SQL那种类型只是验证位数 你说的不需要看(隐式新建类型变量)、运行时可见,Haskell、Kotlin也支持,但你对连 List<T>,T->R 都还没懂的人弱化类型,就利于他们学用新接口了?别把隐类型当成无类型…
#statement #kt 反思: 数据绑定DSL
感觉好鸡肋:这其实就是一种JSON按类型绑定啊…… 只是序列化器没支持而已
有时感觉弱类型真的挺自由的,除了大部分 str,int 就不会写什么多余的声明
你说既要验证 data classes ,反射库又那么鸡肋,还没有官方的模板代码生成器…… 2017到现在连个能比 argparse 的CLI环境绑定都没有
稍微把反射库用好一点,就不会要写这些定义DSL
(但是又不要靠
duangsuse, [2023/9/5 16:49]
稍微想了下,把类型和定义当成元数据,是可以避免
js
kt
duangsuse, [2023/9/5 16:55]
强类型真的挺鸡肋, 手写签名只是为避免强转开销? 框架却不能规范和利用这些定义信息?
真的道阻且长啊
听说 #Rust
我了解了下:关联类型不是只在传参上像kwarg,也不是为方便override,而是做了类似 FnOnce 的保证
1.
2. R变量不能被struct或fn新建
因此
还是很鸡肋啊.. 为了三行碎代码😐,为了一个保证而新建语法,破坏语言一致性
即便把泛型改成按名传参
是Self类型的一种扩充,因为
duangsuse, [2023/9/5 17:13]
是不是懒得升级编程语言的社区生态, 都开始急着加无工程意义的特性了
这种能靠推导出事情交给GPT不就好了…… (编译期性能就拉倒吧) 为框架和社区干点正事,多研发点教程文档不好吗
编译这种事情没啥价值啊, 如果数据类型、class这些定义结构,只方便编译,而对框架是负担,那对开发者和用户也是种反模式吧
我是希望Kotlin能像Python那样发展的,但看来py也有不方便大项目的地方
py最近加的match都不是在types上的扩充,我想kt可能是语法太丰富, 但是这个API绝对不够用啊
val xx by int() default 100
> int()返回一个可读(写)变量 ,同时接受"xx",也能实现 lazy{}懒加载obj HTTP {
val maxReq by int(or=100)
} 怎么样感觉好鸡肋:这其实就是一种JSON按类型绑定啊…… 只是序列化器没支持而已
有时感觉弱类型真的挺自由的,除了大部分 str,int 就不会写什么多余的声明
你说既要验证 data classes ,反射库又那么鸡肋,还没有官方的模板代码生成器…… 2017到现在连个能比 argparse 的CLI环境绑定都没有
稍微把反射库用好一点,就不会要写这些定义DSL
(但是又不要靠
@VarName("wtf") .. 总之就没绝对优美的封装办法duangsuse, [2023/9/5 16:49]
稍微想了下,把类型和定义当成元数据,是可以避免
@Default("wtf") 的js
HI(class xxApi {
'/index'(){}
'/user/$'([id], {nameMatch}, resp) {}
}) kt
data EnvVars(maxReq=100): Mapper这样可以避免注解,其实就是靠查参数表;所以JVM反射和编译期生成可以取代绑定DSL
Map.load<EnvVars>(environ)
duangsuse, [2023/9/5 16:55]
强类型真的挺鸡肋, 手写签名只是为避免强转开销? 框架却不能规范和利用这些定义信息?
真的道阻且长啊
听说 #Rust
impl<T> List<T> 就是把类型参数当kwarg造成的我了解了下:关联类型不是只在传参上像kwarg,也不是为方便override,而是做了类似 FnOnce 的保证
1.
type R : struct = 1:1,一个 struct 拥有关联 Trait 的唯一 impl 2. R变量不能被struct或fn新建
因此
fn distance<N, E, G: Graph<N, E>> 里G的约束就不必写了,而是替换为 G::N,G::E 还是很鸡肋啊.. 为了三行碎代码😐,为了一个保证而新建语法,破坏语言一致性
即便把泛型改成按名传参
-'NE' Graph.distance(:N,:N) 都比新增语法要一致是Self类型的一种扩充,因为
-'N'(N Sort) max(:N,:N) N 无需解出N以外的变量duangsuse, [2023/9/5 17:13]
是不是懒得升级编程语言的社区生态, 都开始急着加无工程意义的特性了
这种能靠推导出事情交给GPT不就好了…… (编译期性能就拉倒吧) 为框架和社区干点正事,多研发点教程文档不好吗
编译这种事情没啥价值啊, 如果数据类型、class这些定义结构,只方便编译,而对框架是负担,那对开发者和用户也是种反模式吧
我是希望Kotlin能像Python那样发展的,但看来py也有不方便大项目的地方
py最近加的match都不是在types上的扩充,我想kt可能是语法太丰富, 但是这个API绝对不够用啊
Telegram
isekiのChannel in Kotlin CN
我这边就是这样的了
duangsuse::Echo
🤓 #moha #js #dev Van UI框架的作者是上海交大的
#js 和EQ的风格很像了 🤔
感觉这种情况下EQ没什么竞争力?
(不过EqvJS 的理论是与页面段「带变量合一」,而不是 "Reactivity".. 我们在数据化上做得应该更系统
btw. VanJS 作者 @alexanderxin 还打赏了 $10
ee.main=({n=1},
奇偶=wKV({class: when(n.as(x=>x%2), "odd","even") })
)=>
div(
h1(奇偶, html`count is ${n}`),
h2(html`2x is ${n.as(x=>x*2)}`),
button(wOp({tap:n(x=>x+1)}), "👍")
) 感觉这种情况下EQ没什么竞争力?
(不过EqvJS 的理论是与页面段「带变量合一」,而不是 "Reactivity".. 我们在数据化上做得应该更系统
btw. VanJS 作者 @alexanderxin 还打赏了 $10
duangsuse::Echo
#js 和EQ的风格很像了 🤔 ee.main=({n=1}, 奇偶=wKV({class: when(n.as(x=>x%2), "odd","even") }) )=> div( h1(奇偶, html`count is ${n}`), h2(html`2x is ${n.as(x=>x*2)}`), button(wOp({tap:n(x=>x+1)}), "👍") ) 感觉这种情况下EQ没什么竞争力? (不过EqvJS 的理论是与页面段「带变量合一」,而不是 "Reactivity"..…
在这个视频
函数风格的DSL #design 不是很新的概念(尽管在js界里是.. ),Flutter,ktCompose,我的TkGUI, 甚至蛤为的 ArkTS 都用它取代过XML
☝️一个框架能意识到 CSS,HTML -in-JS 对整个易用/复用性的必要,可以说是一种革命 ,因为它的设计重点从
当然,写法的不同也是主要竞争力,像 ArkTS 这个就滥用builder和this ,非常难看
EQ一开始也像Van一样主要负责“模板”,但后来也实现了 lists,when ,组件和CSS模块化
这个视频例子上,EQ的胜负处:
👍
- 统一的风格(甚至像独立于ES6的语言了),避免 func,const,return div() 的无味之争
- 没有
- 没有
- html格式化,很ES6
-
- 我不写 3:33 的那种滥用弱类型的代码😐 简洁,显然不是指能看懂的符号少
👎
- wOSK{} 三要素 没能显示出对组件设计的益处 (需求太常规,API的体系性无法体现。像 Van 这样到处 onclick 是意识不到该做
- 同样,因为EQ涉及三界(JS的带this管道,async load,ondiff,ease-efx,wOp-SSR事件上传,.) 所以只有 界0=wOSKita 是<100行的,与Van同为极简主义的我应该很丢脸?(x
- 在不用爬虫时写
-
— 在 4:09 上 —
👍
-
-
-
- 浏览器本就会“批量修改DOM” 再reflow ,EQ不会对数组以外重新检查 “vDOM变更”,再用setTimeout去哆嗦着赋值那些玩意。
- EQ自然支持 SSR(注水,wOp上传-HTML下载, ) 尽管未提供无DOM模式
😐
- 不用写 import tags,因为 evalFun 在运行或编译时支持了 this 作用域
-
- 不能
不能靠
因此,EQ里 wKV 是不需要靠返回原元素,来避免replace的
EQ选择的是
也因此对 [1,2,3] 和 [[1],[2]] 赋值,都是既不Memo(Van做到了),也不导致<text>外ul节点替换的,只是旧值被新值“合一”了
总之,VanJS 足够小,所以这个视频分析的相当全面 #recommend
可能在程序员看来,我每天都在写 “不能运行的代码”……
但这就是设计者做事的方法 🥳
函数风格的DSL #design 不是很新的概念(尽管在js界里是.. ),Flutter,ktCompose,我的TkGUI, 甚至蛤为的 ArkTS 都用它取代过XML
☝️一个框架能意识到 CSS,HTML -in-JS 对整个易用/复用性的必要,可以说是一种革命 ,因为它的设计重点从
@click.prevent 和 "reactivity" 这些花哨的东西,转移到UIUX的数据和操作上了当然,写法的不同也是主要竞争力,像 ArkTS 这个就滥用builder和this ,非常难看
EQ一开始也像Van一样主要负责“模板”,但后来也实现了 lists,when ,组件和CSS模块化
这个视频例子上,EQ的胜负处:
👍
- 统一的风格(甚至像独立于ES6的语言了),避免 func,const,return div() 的无味之争
- 没有
n=van.state(1) , 变量随便加- 没有
.val (按_currDep 捕获val访问) 和derive的概念,而是让事件选中(Eq.sel)变量,看起来更纯,低魔法- html格式化,很ES6
-
when() 很漂亮,在纯JS,html 里都能用- 我不写 3:33 的那种滥用弱类型的代码😐 简洁,显然不是指能看懂的符号少
👎
- wOSK{} 三要素 没能显示出对组件设计的益处 (需求太常规,API的体系性无法体现。像 Van 这样到处 onclick 是意识不到该做
btn(数组,) 复用, 以及该避免 onclick 可变时"escape" )- 同样,因为EQ涉及三界(JS的带this管道,async load,ondiff,ease-efx,wOp-SSR事件上传,.) 所以只有 界0=wOSKita 是<100行的,与Van同为极简主义的我应该很丢脸?(x
- 在不用爬虫时写
html 模板,稍微有点长-
wOp({tap:n(x=>x+1)}) 选中了n变量,但放在 html`count is ${n(x=>x+1)}` 也可以— 在 4:09 上 —
👍
-
{x:0}.it.x 不负责保留旧值,也没 html _binds ,因此适合在NodeJS里用-
x0.it.to({x:1}, (A,B)=>B) 的「合一 unify」 适用于赋默认值、模式匹配等情况 🌠-
div$cls() 简写真的很CSS。EQ的风格就是DOM加糖- 浏览器本就会“批量修改DOM” 再reflow ,EQ不会对数组以外重新检查 “vDOM变更”,再用setTimeout去哆嗦着赋值那些玩意。
obj.it 就是EQ的“虚拟树-但无关HTML ”- EQ自然支持 SSR(注水,wOp上传-HTML下载, ) 尽管未提供无DOM模式
😐
- 不用写 import tags,因为 evalFun 在运行或编译时支持了 this 作用域
-
createElementNS() 的支持被复杂化为 {svg}=ee.use, 包含 svg,WebAudio 滤镜图- 不能
van.add(ul,state转节点) ,因为EQ必须支持爬虫和diff-特效,必须隔离JS,DOM,而不是靠跳帧检测全局states, 替换或删除其 _binds=[元素,函数,deps..] , 再在节点已移除时"GC"不能靠
ul( ()=>del? null : li() ) 修改子节点,只有“when,as=filter函数”能做GC因此,EQ里 wKV 是不需要靠返回原元素,来避免replace的
EQ选择的是
Node 和 Object.it “合一”,而不是 shallowRef() 的字典,所以它的 diff 不是在树内vars被拍平后,靠跳帧检测,而是在 JS对象图。也因此对 [1,2,3] 和 [[1],[2]] 赋值,都是既不Memo(Van做到了),也不导致<text>外ul节点替换的,只是旧值被新值“合一”了
总之,VanJS 足够小,所以这个视频分析的相当全面 #recommend
可能在程序员看来,我每天都在写 “不能运行的代码”……
但这就是设计者做事的方法 🥳
YouTube
How UI Frameworks Actually Work
A look at VanJS (https://vanjs.org/) and some core concepts such as state reactivity and DOM templating.
Check out Van's code base here: https://github.com/vanjs-org/van.
💬 Topics:
- How to use VanJS;
- What is reactive state;
- JSX and alternativess;
-…
Check out Van's code base here: https://github.com/vanjs-org/van.
💬 Topics:
- How to use VanJS;
- What is reactive state;
- JSX and alternativess;
-…
duangsuse::Echo
现在得出个理论,我直接跪了😨 obj.to({k:v1}).as(_=>k) 两词就能概括EQ的“响应式系统”,这两个词也适用于 x, 和 [x] 即遍历与map wOp 事件只会导致 wSty,wKV 变量的两类结果: - cnt(x=>x+1), dialog(q=>$Y) 'to赋值' - fmt.as(x=>`Hello ${x}`), html`text ${var}`, Eq.at({sliders},_=>) 返回 {ref:}.it 'as映射' 也就是所谓的 State-onhandle…
👀 比对了很久,终于搞懂了 VanJS 的写法和DOM更新
Van所用的不是
Van的全局 state diff 虽然导致了"GC" 问题,但比memo, Svelte的编译,已经很先进了(虽然Van天然不兼容数组diff, 即便是把每项装进state)
回到EQ,
所以看见 add,bind-update 这些逻辑时我很尴尬,因为 EQ 的
变量监听和变更检查 也是隔开,但却是通过
与同样是DSL的Van对比, EQ真正的竞争力 可能就是:
EQ里数据流是真的单向:和变量、和其他数据 合一unify
理论根基的不同,让EQ在几乎所有API上既能保持简洁,也有更完善的功能,而不只是XML的语法糖
因为这不是简单地“添加节点”,我不得不考虑到更多实际的需求,而需求.. 恰巧能覆盖到Vue,Solid 的那些优化,使优化能够基于 reasoning
Van所用的不是
state/signal(React,Solid), prop/ref(Vue2,3 DOM diff)Van的全局 state diff 虽然导致了"GC" 问题,但比memo, Svelte的编译,已经很先进了(虽然Van天然不兼容数组diff, 即便是把每项装进state)
回到EQ,
wKV, div(html/when替换) 皆是把变量合一到节点,app.it.to(st1) 把变更合一到变量树所以看见 add,bind-update 这些逻辑时我很尴尬,因为 EQ 的
.as(x=>+1) 派生变量和when节点是一回事变量监听和变更检查 也是隔开,但却是通过
obj.it 深遍历,不是分出 derive监听,updateDom 两期来“批量操作DOM”与同样是DSL的Van对比, EQ真正的竞争力 可能就是:
div(p(), ) 对Van是在“构造”DOM,对EQ则是在“解构,合一” EQ里数据流是真的单向:和变量、和其他数据 合一unify
理论根基的不同,让EQ在几乎所有API上既能保持简洁,也有更完善的功能,而不只是XML的语法糖
因为这不是简单地“添加节点”,我不得不考虑到更多实际的需求,而需求.. 恰巧能覆盖到Vue,Solid 的那些优化,使优化能够基于 reasoning
#statement
ee域
☺️ 道出EQ的精髓了(花了好久终于改好.. 很难意识到DOM居然要递归下降、“选中”事件变量、JS对象的深度合一)
EQ非响应式框架,无黑箱diff,而是针对变量&页面段;但处处都有 Vue,Svelte 的算法
"新建子节点"
内嵌CSS, bodys爬虫, as,to(天知道从 Kotlin let 设计到现在我考虑过多少) 改来改去,终于舒服了
断断续续半年的努力,居然就只是这一行字 ,感觉有点不甘心😱 但理论就是这么说的……
ee域
div(p(txt)),wOp,wSty,wKV 这些 挂载函数,与(完整)既存或新建子节点 带变量合一 降至文本层。选中或as派生一些按键量来做UX (靠 app.it.to 来合一新旧状态树/组)☺️ 道出EQ的精髓了(花了好久终于改好.. 很难意识到DOM居然要递归下降、“选中”事件变量、JS对象的深度合一)
EQ非响应式框架,无黑箱diff,而是针对变量&页面段;但处处都有 Vue,Svelte 的算法
"新建子节点"
as(数组ondiff, x=>), for
"降至文本层" when替换,html匹配, component
"新旧状态树/组" VDOM 或 Vaper,Svelte “编译期响应式”内嵌CSS, bodys爬虫, as,to(天知道从 Kotlin let 设计到现在我考虑过多少) 改来改去,终于舒服了
断断续续半年的努力,居然就只是这一行字 ,感觉有点不甘心😱 但理论就是这么说的……
duangsuse::Echo
#statement ee域 div(p(txt)),wOp,wSty,wKV 这些 挂载函数,与(完整)既存或新建子节点 带变量合一 降至文本层。选中或as派生一些按键量来做UX (靠 app.it.to 来合一新旧状态树/组) ☺️ 道出EQ的精髓了(花了好久终于改好.. 很难意识到DOM居然要递归下降、“选中”事件变量、JS对象的深度合一) EQ非响应式框架,无黑箱diff,而是针对变量&页面段;但处处都有 Vue,Svelte 的算法 "新建子节点" as(数组ondiff, x=>), for…
复制别人的技巧并不难。但没有魔法,就是最终极的魔法呀。 前端界只关心HTML 的人太多了,我的框架可不会只在UI上有用。
前端界被XML也框得太深了,而且明知道React难看还去抄hooks 真的聪明到 一点都不懂设计
React hydrate 无非就是对节点的那一侧做Memo,但包含“协调”在内,它引入了太多步骤,而 Svelte 又太魔法;它们也不过是对DOM和[{}] 做着“合一”,只是它们对JS侧太轻视了,很多技巧放JS里是独立的术语也不会有的。
他们一开始就没想好DOM模板各种用途下的本质是啥,只盯着React的响应式和自己会的前端技巧(甚至是有意采取“酷但脏”的数据结构),直接开始设计算法,结果到最后? 还不是又去开发 Vue3 VaperMode 这种“高性能编译”
我可能比他们多知道个 Prolog 和Eq双向关系,但稍微面向 ref() 设计下,或许就悟出要「带变量合一」了, 这个对API价值观,除了是有意忽视ref的重要性我想不到他们没走向细粒度,diff(refs) 的理由
猜测:Van 可能是不了解关系式编程 下的极限了,而它对数组diff 有明显缺陷
前端界被XML也框得太深了,而且明知道React难看还去抄hooks 真的聪明到 一点都不懂设计
React hydrate 无非就是对节点的那一侧做Memo,但包含“协调”在内,它引入了太多步骤,而 Svelte 又太魔法;它们也不过是对DOM和[{}] 做着“合一”,只是它们对JS侧太轻视了,很多技巧放JS里是独立的术语也不会有的。
他们一开始就没想好DOM模板各种用途下的本质是啥,只盯着React的响应式和自己会的前端技巧(甚至是有意采取“酷但脏”的数据结构),直接开始设计算法,结果到最后? 还不是又去开发 Vue3 VaperMode 这种“高性能编译”
我可能比他们多知道个 Prolog 和Eq双向关系,但稍微面向 ref() 设计下,或许就悟出要「带变量合一」了, 这个对API价值观,除了是有意忽视ref的重要性
GitHub
mini-react/docs/hydrate/hydrate源码剖析.md at master · lizuncong/mini-react
手写react、react-dom、react reconciler主流程源码,加深对react源码的理解。包括fiber,合成事件,hooks实现原理,dom diff,reconciliation,scheduler等 - lizuncong/mini-react
duangsuse::Echo
#statement ee域 div(p(txt)),wOp,wSty,wKV 这些 挂载函数,与(完整)既存或新建子节点 带变量合一 降至文本层。选中或as派生一些按键量来做UX (靠 app.it.to 来合一新旧状态树/组) ☺️ 道出EQ的精髓了(花了好久终于改好.. 很难意识到DOM居然要递归下降、“选中”事件变量、JS对象的深度合一) EQ非响应式框架,无黑箱diff,而是针对变量&页面段;但处处都有 Vue,Svelte 的算法 "新建子节点" as(数组ondiff, x=>), for…
我一直在思考为何EQ会这么“少数”,以图帮EQ查缺补漏。最像它的三个 Vue,Van,Svelte 被迫支持SSR,diff复用, 那为啥没有走向挂载渲染的「合一」
(和 baidu/san 对比很明显了。ps. san的作者的代码审美就是废的
EQ的理论完善虽然也花一个月,但它一开始就是朝“天然SSR” 的方向发展(是一个因素?)
我想最大的因素是 XML,SFC的风格 ,EQ的设计从头到尾都没正眼看过XML,JSX或文本模板,也从不关心
EQ用
Van 没有XML,但它太新了,连diff复用都还不够完善。光加个 state() 不能改变「编程范式」
他们没看过 Prolog 和 ohmjs.org 解析器,不知道可变量作为值的重要性,无法去思考事情的相通点,最终把 SSR,diff,memo 的一致性给打碎了
我讨厌Van 对「写法一致」的重视不够, ()=> 随处乱丢(和React.无JSX 学的),{onclick:} 这些感觉写法太多,而 derive(()=>) 似乎又和这类“渲染函数”无关
这种差异的背后,是“state都和node绑定,不能只和其他state” 之类的窄化,以及“常用函数名最长” 的条理无序
(和 baidu/san 对比很明显了。ps. san的作者的代码审美就是废的
EQ的理论完善虽然也花一个月,但它一开始就是朝“天然SSR” 的方向发展(是一个因素?)
我想最大的因素是 XML,SFC的风格 ,EQ的设计从头到尾都没正眼看过XML,JSX或文本模板,也从不关心
setTimeout 这些对DOM的优化幻觉(我相当敌视XML,喜欢ES6)EQ用
wOSK,elemVar 清晰穷举了DOM的本质, 而绝大部分框架是靠 @click,on-,. 这些弱类型的XML属性在做绑定。这启发EQ使用 按键变量(x=>选中) 如 CSS.rateLim(tap)(x=>), $bigBox(N2.xy(P)) 的调用风格,重构了一切Van 没有XML,但它太新了,连diff复用都还不够完善。光加个 state() 不能改变「编程范式」
他们没看过 Prolog 和 ohmjs.org 解析器,不知道可变量作为值的重要性,无法去思考事情的相通点,最终把 SSR,diff,memo 的一致性给打碎了
我讨厌Van 对「写法一致」的重视不够, ()=> 随处乱丢(和React.无JSX 学的),{onclick:} 这些感觉写法太多,而 derive(()=>) 似乎又和这类“渲染函数”无关
这种差异的背后,是“state都和node绑定,不能只和其他state” 之类的窄化,以及“常用函数名最长” 的条理无序
San
服务端渲染
从 3.8.0 开始,san 的服务器端渲染由 san-ssr 实现。如果你在使用 3.8.0 之前的 san,请参考 服务器端渲染(3.8.0 之前)。 San 的服务端渲染支持是基于 组件反解 的: 服务端输出的 HTML 中带有对视图无影响,能帮助组件了解数据与视图结构的标记片段 浏览器端,组件初始化时从标记片段理解组件结构,在后续用户操作时组件能正确响应,发挥作用 提示:由于组件运
#china #news 蛤为芯片分析:
A. 中国真的有能力锁国生产28nm的“超频”光刻机,所以敢说库存充足
B. 美国或荷兰开了口子(>7nm 商用都是意料之内),让华为遥遥领先赢麻了
方脸最后关于 LK-99 舆论火爆有个有趣的看法: 这就像苏联人,觉得第一个踏上月球成功了 就能提高生活品质,觉得自己能被新科技带飞
但其实呢, 还是要放下锅铲情节。尊重国家命运
A. 中国真的有能力锁国生产28nm的“超频”光刻机,所以敢说库存充足
B. 美国或荷兰开了口子(>7nm 商用都是意料之内),让华为遥遥领先赢麻了
方脸最后关于 LK-99 舆论火爆有个有趣的看法: 这就像苏联人,觉得第一个踏上月球成功了 就能提高生活品质,觉得自己能被新科技带飞
但其实呢, 还是要放下锅铲情节。尊重国家命运
YouTube
方脸说:麒麟9000S,真的是国货之光吗?这个中国芯到底是个什么水平?是轻舟已过万重山,突破美国封锁了吗?
00:00 开始
00:35 中国芯片四种可能的结果
01:40 四种结果的可能性
14:14 麒麟芯片的影响
00:35 中国芯片四种可能的结果
01:40 四种结果的可能性
14:14 麒麟芯片的影响
duangsuse::Echo
复制别人的技巧并不难。但没有魔法,就是最终极的魔法呀。 前端界只关心HTML 的人太多了,我的框架可不会只在UI上有用。 前端界被XML也框得太深了,而且明知道React难看还去抄hooks 真的聪明到 一点都不懂设计 React hydrate 无非就是对节点的那一侧做Memo,但包含“协调”在内,它引入了太多步骤,而 Svelte 又太魔法;它们也不过是对DOM和[{}] 做着“合一”,只是它们对JS侧太轻视了,很多技巧放JS里是独立的术语也不会有的。 他们一开始就没想好DOM模板各种用途下的本…
一些有意思的 #web 跑分
当然,这些只是用来反思对“黑科技”的过度迷信,因为JS根本不属于瓶颈—哪怕慢100倍都是 <1ms
[].join 对正常的示例都比+=更快,偏偏许多JSer把
V8 甚至为此修复了 React number preventExtensions 时的性能断层
Firefox 不能实现跨页 transfer(Blob )
强类型
Scroll listener 比 IntersectionObserver 慢一倍
当然,这些只是用来反思对“黑科技”的过度迷信,因为JS根本不属于瓶颈—哪怕慢100倍都是 <1ms
[].join 对正常的示例都比+=更快,偏偏许多JSer把
str`` 的情况拿来跑分Object.create(原型=null) 比{} 还慢, Set Map 更慢const,let 一样 ,箭头和function一样, Object.freeze() 慢百倍-但只seal() 时就一样。不要低估编译器V8 甚至为此修复了 React number preventExtensions 时的性能断层
Proxy 比 defineProperty 慢十倍createDocumentFragment() 更慢 - “减少 repaint” 正是VDOM的一个“特性”node.remove() 等于[hidden]。仍然可以重新appendFirefox 不能实现跨页 transfer(Blob )
强类型
CSS.px 更慢 ,似乎内核更接受字符串样式content="width=device-width" 或者说 touch-action: manipulation 的来历 Scroll listener 比 IntersectionObserver 慢一倍
Stack Overflow
Why is string concatenation faster than array join?
Today, I read this thread about the speed of string concatenation.
Surprisingly, string concatenation was the winner:
http://jsben.ch/#/OJ3vo
The result was opposite of what I thought. Besides, t...
Surprisingly, string concatenation was the winner:
http://jsben.ch/#/OJ3vo
The result was opposite of what I thought. Besides, t...
duangsuse::Echo
配图:方脸 官媒本想说民间团体「不用给国家添乱」,反而暴露了暖心主旋律都是能被摆拍的。 老胡本来想给市委「涿州护城河」言论洗,结果反而暴露了北京不需要河北人牺牲,也不需要纳税给河北人赔款,只是怪雄安建在了洪涝多发区。 团团只想辟谣卢沟桥冲毁,反被发现花纳税钱建的现代桥梁,竟不如历史遗迹抗洪? 牺牲13万人去捧一个雄安鬼城, ”泄洪提前2小时通知“,拒绝无证救援队,又说只遇难11人 ,这剧情和武汉爆发肺炎时、一夜清零变随阳时一样反智 涿州市民,那些车贷房贷没还完的,干了一辈子只有一间泡水楼的,现在联系不…
#china #life #news ☺️又到了五千年一直遇的暖心时刻: 王朝末年,天灾跟着人祸,无论你多“安稳奋斗”, 也会灵活拥有 泄洪区这种身份~
灾难也见民间真情!看那些有党支部的媒体🥰、水库,在泄洪前2小时还在拿着纳税钱 太平盛世 攘外安内,在台风来的前几天还“冷静”定于一尊。
它们拍手允许所有人活在现代化的热带丛林!这恩情该怎么报啊?
(正面报道)
艰难的决定,伟大的牺牲🙉
各种清零和泄洪突破了地理和历史的“桎梏”,无论你的政治倾向是否是朝鲜大清式的「没没没通过」,甚至是否在处级以上
洪水和红卫兵随时都能让你吃上绿化带❤️,成为“多数人”“人上人”的护城河
但其实呢,淹死你咳死你也不需要“割地赔款”, 它们凭啥要防灾或减灾呢? 你,就是铜墙铁壁。
https://m.youtube.com/watch?v=ZvN0rNHUtVo
灾难也见民间真情!看那些有党支部的媒体🥰、水库,在泄洪前2小时还在拿着纳税钱 太平盛世 攘外安内,在台风来的前几天还“冷静”定于一尊。
它们拍手允许所有人活在现代化的热带丛林!这恩情该怎么报啊?
(正面报道)
艰难的决定,伟大的牺牲🙉
各种清零和泄洪突破了地理和历史的“桎梏”,无论你的政治倾向是否是朝鲜大清式的「没没没通过」,甚至是否在处级以上
洪水和红卫兵随时都能让你吃上绿化带❤️,成为“多数人”“人上人”的护城河
但其实呢,淹死你咳死你也不需要“割地赔款”, 它们凭啥要防灾或减灾呢? 你,就是铜墙铁壁。
https://m.youtube.com/watch?v=ZvN0rNHUtVo
YouTube
深圳洩洪!中國地鐵滅頂⋯香港災民痛罵:又凌晨通知,怎麼逃?河北教訓沒學乖⋯一刀切懶政
中國在9/7號傍晚六點多發布,將在9/8號凌晨16分洩洪至深圳下游至香港地區,結果香港政府以及中國多家媒體,直到洩洪前的半小時至3分鐘前才發新聞通知市民⋯
讓許多人手足無措,深圳、香港多地捷運地鐵被淹,商場也是,各大主要道路甚至也被滅頂⋯為何中共明明在9/7號傍晚六點多發布,但新聞媒體出動報導時間在洩洪的前半小時呢?帶大家來分析一下⋯
📺️頻道會員:https://www.youtube.com/channel/UCvTe3Z7TZsjGzUERx4Ce6zA/join
👍不略過廣告支持我們,感謝留言按讚+分享…
讓許多人手足無措,深圳、香港多地捷運地鐵被淹,商場也是,各大主要道路甚至也被滅頂⋯為何中共明明在9/7號傍晚六點多發布,但新聞媒體出動報導時間在洩洪的前半小時呢?帶大家來分析一下⋯
📺️頻道會員:https://www.youtube.com/channel/UCvTe3Z7TZsjGzUERx4Ce6zA/join
👍不略過廣告支持我們,感謝留言按讚+分享…
duangsuse::Echo
我一直在思考为何EQ会这么“少数”,以图帮EQ查缺补漏。最像它的三个 Vue,Van,Svelte 被迫支持SSR,diff复用, 那为啥没有走向挂载渲染的「合一」 (和 baidu/san 对比很明显了。ps. san的作者的代码审美就是废的 EQ的理论完善虽然也花一个月,但它一开始就是朝“天然SSR” 的方向发展(是一个因素?) 我想最大的因素是 XML,SFC的风格 ,EQ的设计从头到尾都没正眼看过XML,JSX或文本模板,也从不关心 setTimeout 这些对DOM的优化幻觉(我相当敌视XML…
🥳 EQ的第一界API集构思好了,它构造DOM的方法,是直接把模板成分和JS值对应:
- it关键变量:
可变量等于
当然对 👨🦳👦👶 的例子,文本和age变量不对应,age就=Error 了 ;虽然不知有啥用但 Prolog 会检查满足条件
👆这些现在看起来没几行,可总的来说想了两个星期…… 一直在反转 ,无论是术语还是算法都改了三次
简单的关键字传参和emit靠
这些要素被“挂载”后
那么,想要做“防抖”就只用
……我只能说EQ的思想虽只是选中时赋值+递归合一, 但在实现时的每个细节, 都能看到那些“熟悉的面孔”:EQ真的是框架的联邦,一个有机整体,而不是由孤岛拼凑而成勉强能用的算法
- it关键变量:
html`文本${x}`, when(age.as(x=>[x>=100, x>=18]), ["👨🦳","👦"], "👼")
- 挂载函数: div(wOSK三要素, ...继续向下), as([abc], x=>bold(x), a=>ul('没有')), ee.组件({数据}.it)(挂载点)
- 递归下降$: html(..)(s) 按照s的类型挂载,与 div()(s) 唯一的不同是它不把挂载点=新建div s.nodeType, childNodes[.i], s.call(爬虫qs) 分别基于 append, 向右挂载-比如对缓存节点们 , 查询&挂载-或向结果的左右插入 ee.$(=> div$(wKV{wtf}, $选择下级(wOp监听) ) ) 可以爬取出 x.wtf ,$$监听新增可变量等于
html((e,s)=>s.既有节点? 将e.textContent或match赋值给v; 添加v并绑定replace)
as(a,when)就是基于以上赋值,列表a按
when(MultiType,{组:件}).most(a[0]) 创建缓存,add时只基于cloneNode。若匹配出的type不合适 v可以替换当然对 👨🦳👦👶 的例子,文本和age变量不对应,age就=Error 了 ;虽然不知有啥用但 Prolog 会检查满足条件
👆这些现在看起来没几行,可总的来说想了两个星期…… 一直在反转 ,无论是术语还是算法都改了三次
简单的关键字传参和emit靠
wOp(our={error:0, lang:'wtf'}),wKV{our} 这些要素被“挂载”后
our.error() 就是DOM事件了,lang也绑定某父节点。也可以 `await our.error`,这就是关系式编程的“变量”。ee.Count=({n=0})=>
button(
wOp({tap:n (x=>x+1)}),
n,'++ 是', n.as(x=>x+1)
)
你“选中赋值”了按键变量n,n被触发时,也会追加改变:如更新as复制的变量那么,想要做“防抖”就只用
1..s.rateLim(n键量)(自增)`,想要use鼠标位置就 `div(N2.xy(P)) .. 函数在左的“选中”会赋值按键量ee.Timer=({t=0, on})=>
div(
1..s.rate(t, on),
html`${t}secs`, btn(['启动'],on.as(true), //X.as() Y 是双向的
['重置'],Eq.$(_=>0, [t,on]))
) ……我只能说EQ的思想虽只是选中时赋值+递归合一, 但在实现时的每个细节, 都能看到那些“熟悉的面孔”:EQ真的是框架的联邦,一个有机整体,而不是由孤岛拼凑而成勉强能用的算法
duangsuse::Echo
🥳 EQ的第一界API集构思好了,它构造DOM的方法,是直接把模板成分和JS值对应: - it关键变量: html`文本${x}`, when(age.as(x=>[x>=100, x>=18]), ["👨🦳","👦"], "👼") - 挂载函数: div(wOSK三要素, ...继续向下), as([abc], x=>bold(x), a=>ul('没有')), ee.组件({数据}.it)(挂载点) - 递归下降$: html(..)(s) 按照s的类型挂载,与 div()(s) 唯一的不同是它不把挂载点=新建div…
- ee框架也会选中n,t-类似
- EQ会区分 123abc, [], {}.it 三类(it.按键变量) ,但它们都能被“选中”-以返回
[{组件},].diff 的本质是按key缓存
EQ的
对EQ而言,HTML就只是{k:v} 的一种形式。所以没有vDOM或响应式编译
三要素会有可选参数:
-
-
-
总的来说…… 😨 虽然原理变简单直白,完整的列出恐怕还需要验证 ;希望它真的能漂亮地实现一切
tap:n(自增) (更新button.text) ,这就是所谓“响应性”。- EQ会区分 123abc, [], {}.it 三类(it.按键变量) ,但它们都能被“选中”-以返回
.to(新值, (A,B)=>冲突合一)[{组件},].diff 的本质是按key缓存
(a=[1,]).map(x=>toStr) 这类“映射”在 a被add,filter,sort,. 后的结果,因此 [].it.v 是可变量=[当前, 欲到当前的移动增删]EQ的
a.onlys(搜索文本/函数) 就会利用数组diff过滤,而后ee利用 asBind(x=>组件(数据x), off缓存)(挂载点) 求差并 replaceChilds - 具体是 (x,e)=>(组件(数据x)(e), e)对EQ而言,HTML就只是{k:v} 的一种形式。所以没有vDOM或响应式编译
三要素会有可选参数:
-
wOp({tap:click}, 'only once') 就是 @click.prevent 了 (当然我没抄过Vue,这些都是后来去确认的)-
div(wSty({fg:color}, it)) 是基于自定义元素,如果要同时支持SSR就会转而靠<style scoped>了-
wSty({bg, $类名,$$div: {} }, '') 是js2css总的来说…… 😨 虽然原理变简单直白,完整的列出恐怕还需要验证 ;希望它真的能漂亮地实现一切
duangsuse::Echo pinned «🥳 EQ的第一界API集构思好了,它构造DOM的方法,是直接把模板成分和JS值对应: - it关键变量: html`文本${x}`, when(age.as(x=>[x>=100, x>=18]), ["👨🦳","👦"], "👼") - 挂载函数: div(wOSK三要素, ...继续向下), as([abc], x=>bold(x), a=>ul('没有')), ee.组件({数据}.it)(挂载点) - 递归下降$: html(..)(s) 按照s的类型挂载,与 div()(s) 唯一的不同是它不把挂载点=新建div…»