duangsuse::Echo
711 subscribers
4.24K photos
127 videos
583 files
6.44K links
import this:
美而不丑、明而不暗、短而不凡、长而不乱,扁平不宽,读而后码,行之天下,勿托地上天国。
异常勿吞,难过勿过,叹一真理。效率是很重要,盲目最是低效。
简明是可靠的先验,不是可靠的祭品。
知其变,守其恒,为天下式;穷其变,知不穷,得地上势。知变守恒却穷变知新,我认真理,我不认真。

技术相干订阅~
另外有 throws 闲杂频道 @dsuset
转载频道 @dsusep
极小可能会有批评zf的消息 如有不适可退出
suse小站(面向运气编程): https://WOJS.org/#/
Download Telegram
Forwarded from 科技圈🎗在花频道📮 (在花⭐️投稿📮Bot)
Ubuntu 桌面用户已超 600 万

Canonical 公布了一系列 Ubuntu 桌面数据¹:其桌面用户已超过 600 万。这一数字基于检查桌面更新的设备,不包括安装了企业防火墙或代理服务器的设备。

另外,根据 Stack Overflow 的调查²,Ubuntu 桌面占到 Linux 开发者桌面市场的 27%,是迄今为止最受开发者欢迎的 Linux 发行版;在 Steam 平台的 Linux 玩家中³,Ubuntu 是游戏用户使用最多的桌面 Linux 发行版。

参考:¹Ubuntu;²Stack Overflow;³Steam
来源Linux CN

投稿:@ZaiHuaBot
频道:@TestFlightCN
Forwarded from 层叠 - The Cascading
CEC-IDE 是一款由数字广东开发的 IDE,宣称「国企品牌,自主研发」、并「兼容 vscode 插件」。软件另提供用户登录及会员订阅功能 [1]。数字广东 (Digital Guangdong) 是由中国电子等公司共同投资成立的科技公司,是「粤省事」等平台的开发者 [2]。

由于 UI 演示图及实际软件文件结构与 Visual Studio Code 高度一致,大量网友怀疑 CEC-IDE 是套壳 Visual Studio Code 的软件,并且未有添加协议声明,违反了 MIT 协议。也有用户在 microsoft/vscode 发 issue 询问 vscode 与之的关系。

昨日,数字广东发文致歉 [3],称 CEC-IDE 的开发工具部分「使用开源VSCode,进行了少量改造」,而未有添加协议声明的原因是「版本迭代更新中出现疏忽」。

- https://cecide.digitalgd.com.cn/monorepo/app-front/home
- https://github.com/microsoft/vscode/issues/191229

1. https://www.zhihu.com/question/619023882/answer/3181662297
2. https://www.digitalgd.com.cn/
3. https://www.digitalgd.com.cn/news/12846/

#VSCode #CECIDE #China
Forwarded from Solidot
GPT-4 生成的代码 62% 包含 API 误用

2023-08-28 13:17 by 机械人生

加州圣迭戈的研究人员报告,GPT-4 生成的代码 62% 包含 API 误用。大模型展现出了非凡的自然语言理解和代码生成能力。如今软件工程师在遇到编程问题时不是去问 StackOverflow 而是去问大模型如 GPT-4。但大模型生成的代码未必安全,在软件开发环境中实际使用其生成的代码可能会带来严重的安全隐患。其中 API 误用可能会导致资源泄露和程序崩溃等种种问题。而使用大模型生成代码的用户最有可能是新人,不熟悉 AP,难以分辨其中的 API 误用。研究人员从 StackOverflow 收集了 1208 个与 Java API 相关的编程问题,评估了流行的大模型,发现即使是 GPT-4,其生成的代码中有 62% 包含 API 误用。

https://arxiv.org/abs/2308.10335

#人工智能
duangsuse::Echo
#tech #recommend #js 🧐从『函数』的定义就能知道,#编程范式 的发展史 👉 地址symbol、子程序void()、对象 SAM object、算式 x=>y 或文档树、 模式查询select [a b], a=1|a=2 : x86无结构:是弱检查指针、面条流控、256项字符集,定长数组,栈分配,加载到内核mmap(rwx..不能为READ 段错误) 是dll内地址 C过程式:是向调用栈赋值后跳过去等返回,是子程序 C#OOP:捕获了局部变量(cellvar,可变)、原型虚表到t…
#py 周刊

- Excel 支持 import pandas, statsmodels, matplotlib / seaborn 了, Guido 亲自推广(可能是云计算,要订阅)
- PowerToys添加“可交互”的截图
- Google 等各种大公司的技术blog #list
- #apple #design 设计师法则
- #learn 看美军的脏话官话(F-words)学英语 。

- 单靠 #sql 如何保存数据
- APL 里有的 py 基本列表处理式
- FastAPI 最佳实践 list
- async stdlib: 对比理解各种流行实现

- fixit linter: py 版本的 IDEA 自动迁移 (无AI), cffi: 我用什么 C parser 链接到.h 文件
- 用 difflib 开发一个文件比较工具
- KeymouseGo, ahkunwrapped py : 类似按键精灵的鼠标键盘录制和自动化操作
- quivr:生成式 AI 打造你的第二大脑, trafilatura: GUI 文本/评论 爬虫
检索非结构化的信息,可以理解成支持人工智能的 Obsidian。可以处理各种形式的文件如文本、图片、代码、音频和视频等,依赖于 ChatGPT、Docker、Supabase

- FastAPI + SSE new EventSource('/http流') API 下发文本消息
- 用py编写代码高亮图片生成 (carbon.now.sh ..)
- Streamlit 地图高亮生成
- Streamlit GPT4文件摘要工具

- Mojo #ai #rust: 对Py的渐强类型&优化 的语法改进 [waitlist]
def mandelbrot_0(c: ComplexFloat64) -> Int: #CPU FMA优化, 1Mojo = 15Numpy = 89CPy
z = c, nv = 0
for i in range(1, 200): #清晰度
if abs(z) > 2: break
z = z*z + c
nv += 1
return nv

👀 Rust 确实是资本的语言,融资1亿刀乐

#code #algorithm 埃氏素数筛
def gen_primes():
"""Generate an infinite sequence of prime numbers."""
D = {}
q = 2
while True:
if q not in D: D[q * q] = [q];yield q
else:
for p in D[q]: D.setdefault(p + q, []).append(p)
del D[q]
q += 1
Forwarded from AIM扩散力场 (零件)
Media is too big
VIEW IN TELEGRAM
【帮忙跳过广告,也能算不正当竞争?】
李跳跳有没有不正当竞争的可能?李跳跳这样的广告屏蔽软件,是否有违道德?
duangsuse::Echo
#java 看到一篇维基挺有趣 'T'物 泛型类 造于 此刻, 值 可变<T> - 读=值 - 写(:T) 值=它 - 方法1 泛型类<数>, 写(5);说(我去读) - 方法1 泛型类<N>, 写(5.5);读() (说) 绝句不使用“元类”。 T同名例、T 的变量域是隔开的(T上没有“静态”),类型保存在TYPE里 物 值() .地址 “函数,管道 等对象不能是key” - 特征码 数 - =(:值?) $YN 类 地址 …
#PLT #zhihu #wasm Moonbit 月兔编程语言alpha(reScript 作者的续作), 提供了许多算法(HAMT tire map, AVL tree) 的 code playground

语法有点像Go+Rust,支持List/Array,模式匹配和推导,但非常轻量,而且和Go一样易用,编译到WASM❤️

本来想答一下的…… 但最近还有框架在设计,因为没发现比绝句更多的功能或更清晰的模型就不想再分析了

自己在设计的框架和业界差别太大…… 看着这满屏的 let,self,func 觉得,在定稿前,我不想太仔细的看其他API。我想保持自己的术语体系
现在我不关心那些即便“学会了”,也对设计没啥价值的技术细节

——
就在刚才,我发现即便作为一个前端框架,也是可以用“递归下降”的思想做数据绑定、配合“逻辑式编程”做表单验证, 而这种的递归下降,便拥有了CSS选择器的扩充

EQ 模板函数应该接受3种情况: div(p(), p(), html`${变量}.txt`) (doc.body 添加 | .childNodes[i++] 解构 | .querySelector 匹配)
都会注册相应的KV和监听变量,从而实现爬虫、列表节点复用的功能, 按顺序解构,就是基于“编译原理”里特有的技术 - 其实就是树遍历而已

节点变量 when(x(x=>[x==0, true]), [b(x), i(x) ]) 甚至能反过来执行,验证粗体显示的只能是0 (虽然我不清楚有啥用,但2行代码 1个功能点 挺值的)

when(class { User(age) {age=rn(18,99) } }) 可以定义强类型表单,避免在 sel(age) 的程度上暴露<input>的概念,这种“低代码”不是以设计降级为代价,它也提升了数据验证&输入的一致性,容许服务端再次验证JSON格式的表单

算法世界的原理,是做不到和现有框架、和其他算法如此深度的联动的;不仅让应用更灵活, 连算法也更简单了

对我而言,(编程语言的价值== 它所提供“设计体系”的价值) ,我是没有在意“编译”到什么的
Ruby 和PHP的衰落证明,没有成体系的语法糖,没有扼要的对象接口模型,代码越多就越难增添、难复用;框架术语越多,精力的内耗就越大

就是因为心智模型能提前消灭绝大部分的问题,把本质相同的功能整合到单一写法上, 我才把这么多精力放在编程前的设计。
对代码仁慈就是对用户和程序员残忍……
Forwarded from 科技圈🎗在花频道📮 (Alfonso Sandalphon)
This media is not supported in your browser
VIEW IN TELEGRAM
字节跳动发布视频生成AI —— MagicEdit

MagicEdit 是一种出奇简单但有效的文本引导视频编辑任务的解决方案,通过在AI训练期间明确地解开内容、结构和运动信号的学习,可以实现高保真和连贯的视频到视频翻译。

这与大多数现有方法矛盾,大多数现有方法试图对它们进行联合建模,作者认为这会导致每帧画面的质量下降。结果表明 MagicEdit 的方法虽然很简单,但出色的效果支持各种下游视频编辑任务,包括风格滤镜、本地编辑、概念混合生成和扩展/局部绘制。

项目地址

投稿:@ZaiHuaBot
频道:@TestFlightCN
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); ("(",…
添加个上文:组件 比如是
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

#人工智能
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 的,只有[,] 结构,就像<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
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. #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*,async

Record&Tuple
when(class{
User(name){表单验证}
})

Stage0:ADT Enum, tail calls
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,
[{status:200,body}, body!="", fn(bodyVar)],
[Some(x), x],
[None, 0]
)

「前人造过的轮子就有点像是数轴上的有理数点:稠密,有序,无穷无尽。但是真当你用的时候,你会发现,你的实际需求有着几乎100%的概率落在有理数的缝隙里。」
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
duangsuse::Echo
#zhihu #PLT 又看到有趣的中文编程设计 ,做些科普。 👀 1.打这些太极 还不如就叫真假,另外,加语法糖并不是以混淆基本语法,以编程的一致性为代价. PHP,Ruby,Py2 和VB已经玩烂过这套“大小混写”了(你怎么不用神奇GPT编译呢?) 2.子类型对应的是强制兼容,而非隐式数值转换。 进制只是表示法,SQL那种类型只是验证位数 你说的不需要看(隐式新建类型变量)、运行时可见,Haskell、Kotlin也支持,但你对连 List<T>,T->R 都还没懂的人弱化类型,就利于他们学用新接口了?别把隐类型当成无类型…
#statement #kt 反思: 数据绑定DSL 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
Map.load<EnvVars>(environ)

这样可以避免注解,其实就是靠查参数表;所以JVM反射和编译期生成可以取代绑定DSL

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绝对不够用啊
duangsuse::Echo
🤓 #moha #js #dev Van UI框架的作者是上海交大的
#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".. 我们在数据化上做得应该更系统


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 对整个易用/复用性的必要,可以说是一种革命 ,因为它的设计重点从 @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

可能在程序员看来,我每天都在写 “不能运行的代码”……
但这就是设计者做事的方法 🥳
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所用的不是 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