Forwarded from Solidot
Blender 4.0 释出
2023-11-15 00:01 by 镜中世界
开源 3D 建模软件 Blender 释出了 4.0 版本。主要新特性包括:Cycles 支持光和影的耦合,支持光滑表面的路径引导,支持苹果 Metal API 的 MetalRT 硬件光线追踪,HIP 后端支持 AMD RDNA2 和 RDNA3 APU,默认 UI 字体 Inter,Linux 和 macOS 版最低要求 OpenGL 4.3,等等。更多可浏览发布公告。
https://wiki.blender.org/wiki/Reference/Release_Notes/4.0
#开源
2023-11-15 00:01 by 镜中世界
开源 3D 建模软件 Blender 释出了 4.0 版本。主要新特性包括:Cycles 支持光和影的耦合,支持光滑表面的路径引导,支持苹果 Metal API 的 MetalRT 硬件光线追踪,HIP 后端支持 AMD RDNA2 和 RDNA3 APU,默认 UI 字体 Inter,Linux 和 macOS 版最低要求 OpenGL 4.3,等等。更多可浏览发布公告。
https://wiki.blender.org/wiki/Reference/Release_Notes/4.0
#开源
👍2
duangsuse::Echo
cg($dyn) 生成了 ()=>(a=3,f=(a)=>(a+1),r0=[f(1),a]) ,运行正常 - just(a) - f()=a f just(0)() 那再来一个 with(DSL)$lex=[[], [just, [[a], [f,[[],[a] ]], [f] ]], [f,[0, 0,[just]]], [0, f] //“类型推导”差到不能直接调用 ] ()=>(just=(a)=>(f=()=>(a),f),f=just(0),f()) 是0而不是3 实际上,()=>…
这位 Pixel #PLT #dalao 真是太清醒了,十分 #recommend
https://rigaux.org/language-study/language-study-slides/img13.htm
https://note.sbwcwso.com/
大佬对编程范式的了解很广。我是在 https://blog.vero.site/post/noulith 的codegolf语言看到的 🤔这语言的
ppt显示
这不比as,when is in 强多了,还有新的Fn表达式 🤔
https://rigaux.org/language-study/language-study-slides/img13.htm
https://note.sbwcwso.com/
大佬对编程范式的了解很广。我是在 https://blog.vero.site/post/noulith 的codegolf语言看到的 🤔这语言的
a append= x 统一了列表和"str"的不可变,但我不喜欢ppt显示
class Eq a where
(==): a a -> bool
(!=): a a -> bool
不过绝句早就是关系式编程了,纯函数算什么(这几天新增的更改,SQL JOIN)- Str find(:Str) Idx
[me.iEach]*2 .:
i0\<i, me[i0+i]==s[i], i==n: return i0
- Any`+`(u:Int) me.[Int too]+u
- Int desc me.{0 "zero" 1~10"small" or "{me}"}
这不比as,when is in 强多了,还有新的Fn表达式 🤔
val add: Int.(Int)->Int = {x,y->x+y}
at add Fn.[Int Int A2]:A+B
type 'u'Num
- `==`(:u) YN
type Any
- == (:Any?) YN
- `\=`(:[Any? me], :Any?) YNSbwcwso
mznote
计算机基础知识博客, 个人博客
Forwarded from Solidot
16 岁少年用 Blender 创建的动画赢得了英国 YAY UK 动画奖
2023-11-16 22:19 by 破译滑铁卢
面向英国年轻人的 YAY UK(Young Animator of the Year)公布了 2023 年的获奖者:16 岁的 Euan Garbut 赢得了 15-18 年龄组的最佳动画奖:他在一分钟内描述了未来世界机器人给人类制作食物的过程。主办方称,该奖项由英国动画和 VFX 工作室的专业人士评选,开源 3D 建模软件 Blender 让年轻一代制作出令人称奇的动画成为可能。Euan Garbut 称他用 Blender 制作动画,Davinci Resolve 用于颜色分级 (colour grading)。
https://younganimator.uk/winners
https://younganimator.uk/winner/1699875910225x437970782709919500
https://news.ycombinator.com/item?id=38282166
#科幻
2023-11-16 22:19 by 破译滑铁卢
面向英国年轻人的 YAY UK(Young Animator of the Year)公布了 2023 年的获奖者:16 岁的 Euan Garbut 赢得了 15-18 年龄组的最佳动画奖:他在一分钟内描述了未来世界机器人给人类制作食物的过程。主办方称,该奖项由英国动画和 VFX 工作室的专业人士评选,开源 3D 建模软件 Blender 让年轻一代制作出令人称奇的动画成为可能。Euan Garbut 称他用 Blender 制作动画,Davinci Resolve 用于颜色分级 (colour grading)。
https://younganimator.uk/winners
https://younganimator.uk/winner/1699875910225x437970782709919500
https://news.ycombinator.com/item?id=38282166
#科幻
duangsuse::Echo
#blog #meme 看到易语言还在VB++ 的范式旁徘徊 😅,并且觉得编程语言 是种必须特色和备案的「核心技术」… 我想复刻下这2007年文章的口吻: “绝句.ju”十分钟入门教程 作者:转载必须注明出处 亲爱的朋友,您愿意花十分钟的时间,来了解一门全新的编程语言“绝句.未公开”吗?(搞笑向 btw. 很难想象标准库与ES7接轨,拥有函续、不/可变数据集、流/叠加、双主语的绝句,还能用“合规”的记法支持VB7时代的“正统中文编程”👀 - 起点 将123写到屏幕 100.123:[x] …
绝句的py化已经走向了YAML和Go的形状,已经不像那个满是def和class的语言了
最开始绝句不满Kotlin的两点,就是
但那时反思主要是在中文语意上,而且当时执意给let mut穿小鞋:
随着:块渗透进print、流控、异步…… 开始流行一种
这种有趣的断言,把整个语言分为「式算折词典」5级, as: 就是“一折”能新建变量和ret的算式, 因此尾递归 也能以极其廉价的方式编写
然后,我把易语言用户的猜数字又写了一遍
最开始绝句不满Kotlin的两点,就是
List<T> fun<T> ,. 不对仗,以及一大堆 (private)val 前缀不够简洁但那时反思主要是在中文语意上,而且当时执意给let mut穿小鞋:
量i=0;变数,j初0;常数 PI=3.14
后来const被规范为常量折叠API,变数和量也就区分为 在,i 0。 在这时,j 0 。这时主要的麻烦是 at: a 1; b 2: +1 的最佳实践有:块 时很难看随着:块渗透进print、流控、异步…… 开始流行一种
- Dog bark (say: 'what {sound}'); - f'x' as:(x+1) 的全表达式风格这种有趣的断言,把整个语言分为「式算折词典」5级, as: 就是“一折”能新建变量和ret的算式, 因此尾递归 也能以极其廉价的方式编写
- id'ab'(b=0) as:于是,现在的变量声明,变得符合人类习惯了。而且走向彻底的隐类型--伴随着对OOP的彻底分析,从而知道只有在type接口里,必须能写明类型
now(a+1,b-1) : b==0
a
- 比赛 std.[Int as]:
红队 2
篮队 10
场 Inc.[Str Ln](1):"List<String>"
max(红队,篮队)
- 赋值 做,
a [{0~9} ]!
a加10
这时 0,i;求和
这时i<a.n,
求和 =,+ a[i]
i去右移
说,'{求和} {a}' 然后,我把易语言用户的猜数字又写了一遍
将123写到屏幕
100.123,[x]
(将x)写到屏幕
回
名 'T' `将`(:T) “名记平权”
- [文 将]`写到屏幕` 说,'{它}'
(0~10)(x), “如果(0 < x < 10)”。
(0~~10)(x), “如果(0 < x \< 10)”
(0的右~10的左)(x), “如果(0 \< x \< 10) ,因为数学(>18) 不自然,我换了”
这时,a 1;b 2
变数去换(a、b)
""{a==2, b==1}!
Telegram
duangsues.is_a? SaltedFish
名 启动类
^名
- main
说,'祖国您好!'
将123写到屏幕
100.123,[x]
(将x)写到屏幕
回
名 'T' `将`(:T) “名记平权”
- [文 将]`写到屏幕` 说,'{它}'
典 游戏
- 猜
猜 猜数字().[游戏 也]
猜去猜
(0~10)(x), “如果(0 < x < 10)”。
(0~~10)(x), “如果(0 < x \< 10)”
(0的右~10的左)(x), “如果(0 \< x \< 10) ,因为数学(>18) 不自然,我换了”…
^名
- main
说,'祖国您好!'
将123写到屏幕
100.123,[x]
(将x)写到屏幕
回
名 'T' `将`(:T) “名记平权”
- [文 将]`写到屏幕` 说,'{它}'
典 游戏
- 猜
猜 猜数字().[游戏 也]
猜去猜
(0~10)(x), “如果(0 < x < 10)”。
(0~~10)(x), “如果(0 < x \< 10)”
(0的右~10的左)(x), “如果(0 \< x \< 10) ,因为数学(>18) 不自然,我换了”…
👎1
#statement ☺️绝句是帮我「改良编程」的望远镜,我现在设计的JS变量绑定框架、CLI结构体解析器, 都需要它的理论完善,才能在简洁+完备上打败既有框架
我不会因为太慢,或者貌似很「不切实际」,就暂停完善绝句模型。 在产生任何设计问题前,就该把错误扼杀掉--而不是日复一日上StackOverflow 去堆砌GPT都能写的脚本。
这是我编程的骄傲,是我口中「编程」的定义
也是因为它有太多值得我学习的地方。比如
就比如4天前的Svelte5 大会吧,
说白了,就是js数据模型的缺失,导致jsx和vue那些模板一套一套的。 稍微允许[a,b,1.] 变量入驻数据,给let[]= 匹配加点料,DOM本身就是MVVM框架
#recommend 重构浣熊
https://refactoring.guru/refactoring/when
我不会因为太慢,或者貌似很「不切实际」,就暂停完善绝句模型。 在产生任何设计问题前,就该把错误扼杀掉--而不是日复一日上StackOverflow 去堆砌GPT都能写的脚本。
这是我编程的骄傲,是我口中「编程」的定义
也是因为它有太多值得我学习的地方。比如
(FS .txt/[a]):[str] str("Jack"~~"Rose") 就可以完成编解码+IO 。缺少了 Eq(两换),停留在 fromStr/toStr 的认知,是做不到这个程度的就比如4天前的Svelte5 大会吧,
ww.eg=({width=10,height=20, it},
w1=width.as(x=>x*1),
area=Saw((w1,height)=>w1*height )(w1,height),
)=>
div(
(s,e)=>{Saw(console.log, area); 1..s.then(it({width:20})) },
area
)
都能写得这么规范,要React那些函数式框架有什么用呢?说白了,就是js数据模型的缺失,导致jsx和vue那些模板一套一套的。 稍微允许[a,b,1.] 变量入驻数据,给let[]= 匹配加点料,DOM本身就是MVVM框架
#recommend 重构浣熊
https://refactoring.guru/refactoring/when
refactoring.guru
When to refactor
#PLT #OOP #design
☺️ 绝句的OOP部分完结了。 包含type,name,named 「典-构造器 interface」「名-class」「曾名-加构器」3种概念
type 类似Rust的 enum Either{A(A),B(B)} ,但可以外部扩展
但name呢? 传统的 abstract class有啥用?? 我很想扔掉它们,我在SO上搜了很多,但没人说服我为何「组合优于继承」(甚至这句话居然是OOP专家说的
但它对语意真的没有啥贡献? 只是像Scala那样,简单把同名的 struct+trait 连起来,而且逼你单继承??
我是更看好Rust的impl式多态,包括py的Protcol,虽然很复杂 {}构造器也很乱,但类型的限界都很清楚,不像今日JVM C# 这些接口子类分不清的
---
其实我清楚,class比接口允许「更准的构造顺序..函定性」,它根本就是--js的传函数字典 ,或者说类=可改传的多项函数 接口=dyn字典
如果你写过愚蠢的 android.view.Listener ,会发现它们乐此不疲地把本该叫lambda()-> 的变量搞成override,所谓的设计模式。。。
^type 就是默认参数的另一种写法而已,而 ^type impl? 可以选择不封闭既有值
绝句主张函数与Fn值的统一,但考虑
期望未来能找到更彻底的「解决语法」(想到一个,除了构造器、加构器, 还有
只要我换成
btw. 绝句的结构写起来真是太爽了,可惜表现力比不上纯数据的JS。 希望在词级 算式级 也有更新的发现
btw. 我打算把语言改叫《海经》了,因为这个时代,已经不适合在单句和算式级别,纠结代码怎么写了。 手写的代码都在词乃至类型级别, 而且绝句一开始是为逗句缩进起名, 但如今它的对象和集合模型比缩进有趣一些
☺️ 绝句的OOP部分完结了。 包含type,name,named 「典-构造器 interface」「名-class」「曾名-加构器」3种概念
type 类似Rust的 enum Either{A(A),B(B)} ,但可以外部扩展
type Zoo impl??named 类似inner class,但可以外部扩展
Zebra(:Name,:Age) //<>列方向是cols
Elephant(:Height) //^v行方向是Conds
type Zoo
power Int
Tiger(); Lion() //和enum WithData()一样,生成构造器
type Inc Int{>0} //类型只是N个字典+几个新词的组合
type 'T'Pairs [T T Col2] //所以,没有啥typealias
Point(0,0).Arc(10)
type Any
Point'xy'(_:Int)
named Point.Arc(r:Int) //加构器
- draw 画圆
好吧,写错了,Any的Point构造器,理论上无法继承:type数据间不可以组合但name呢? 传统的 abstract class有啥用?? 我很想扔掉它们,我在SO上搜了很多,但没人说服我为何「组合优于继承」(甚至这句话居然是OOP专家说的
type Geo这个语法是为OOP兼容保留(override fun 啥的太扯了),好像比接口多提供个构造器、protected复用(被Utils取代了)、final等「更准的函定性」
- draw
name Point'xy'(_:Int) Geo
^type
- flip Point
^type impl
- draw 画1px圆
但它对语意真的没有啥贡献? 只是像Scala那样,简单把同名的 struct+trait 连起来,而且逼你单继承??
我是更看好Rust的impl式多态,包括py的Protcol,虽然很复杂 {}构造器也很乱,但类型的限界都很清楚,不像今日JVM C# 这些接口子类分不清的
---
其实我清楚,class比接口允许「更准的构造顺序..函定性」,它根本就是--js的传函数字典 ,或者说类=可改传的多项函数 接口=dyn字典
如果你写过愚蠢的 android.view.Listener ,会发现它们乐此不疲地把本该叫lambda()-> 的变量搞成override,所谓的设计模式。。。
^type 就是默认参数的另一种写法而已,而 ^type impl? 可以选择不封闭既有值
绝句主张函数与Fn值的统一,但考虑
- f'xy' 和 F.[Int Int a2] 本不一致,无法在语法上实现静态-动态类型的交融期望未来能找到更彻底的「解决语法」(想到一个,除了构造器、加构器, 还有
type mv(src, dstFile) 这种「默认参器」只要我换成
name mv(src, dstFile) ,是否就把函数和class联系起来了? 😋btw. 绝句的结构写起来真是太爽了,可惜表现力比不上纯数据的JS。 希望在词级 算式级 也有更新的发现
btw. 我打算把语言改叫《海经》了,因为这个时代,已经不适合在单句和算式级别,纠结代码怎么写了。 手写的代码都在词乃至类型级别, 而且绝句一开始是为逗句缩进起名, 但如今它的对象和集合模型比缩进有趣一些
duangsuse::Echo
#PLT #OOP #design ☺️ 绝句的OOP部分完结了。 包含type,name,named 「典-构造器 interface」「名-class」「曾名-加构器」3种概念 type 类似Rust的 enum Either{A(A),B(B)} ,但可以外部扩展 type Zoo impl?? Zebra(:Name,:Age) //<>列方向是cols Elephant(:Height) //^v行方向是Conds type Zoo power Int Tiger();…
啊,真好。问题解决了 🥰
这样让默认参器基于函数值,OOP和FP,二者就对仗了
name Point'xy'(_:Int) Geo
^type
- flip Point
^type impl
- draw 画1px圆
type draw默认参(x=0,y=0) Geo
- flip 不翻转
- draw 同上
draw :.
-y 10
-flip 翻转函数 这样让默认参器基于函数值,OOP和FP,二者就对仗了
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); ("(",…
#PLT #sql https://zhuanlan.zhihu.com/p/646479383
Z3-SMT 是SAT(可行性求解器)的增强版,即一种sympy 。比Prolog更擅长解数值,甚至能解数独(迫真 ,解决cargo的依赖版本(原神
这API还真挺Pythonic
这种问题貌似Prolog不用限定类型都能解。 定义 Bool(A) 无非是为了重载,那And(bools) 有啥别的语意-即搜索范围呢? 强类型逻辑式编程?好奇怪的搭配
稍微对比几个同类项,都不会这么白象化逻辑式编程
#zhihu 上看到一些逆天观念,C的设计错误:
1:单返回值这个设计可能是受了数学上的f(x,y...)的影响
真的需要多返回值的时候,C就只能用指针搪塞一下了
2:连续不等式
如果 a > b > c, 则……
3: void不是类型
1. Go就支持func (ret, err) 。所以不仅调用难以组合,Err体系也给弄成错的,因为err!=nil时函数不可能有值
2. 写成 (a > b > c) 还是
3. 数学没有void,所以我赞成省略类型=void
还有一些不逆天的C错误:
"\0" 不是数组,argv无法单作为值
赋值是表达式,而且允许
if, while, for 的小括号和大括号,switch break
Z3-SMT 是SAT(可行性求解器)的增强版,即一种sympy 。比Prolog更擅长解数值,甚至能解数独(迫真 ,解决cargo的依赖版本(原神
from z3 import *Z3的API这么复杂,又要add check 又.model的, 不如和Keras做个联动,支持机器学习+逻辑编程好了。 哦,原来 state.add(x==1) 只能执行1次 不是flowgraph啊?
A, B, C = Bools('A B C')
# 创建一个求解器
s = Solver()
# 添加约束条件
s.add(Or(And(A, B), And(Not(A), C)))
# 检查是否存在解
if s.check() == sat:
这API还真挺Pythonic
这种问题貌似Prolog不用限定类型都能解。 定义 Bool(A) 无非是为了重载,那And(bools) 有啥别的语意-即搜索范围呢? 强类型逻辑式编程?好奇怪的搭配
稍微对比几个同类项,都不会这么白象化逻辑式编程
#zhihu 上看到一些逆天观念,C的设计错误:
1:单返回值这个设计可能是受了数学上的f(x,y...)的影响
真的需要多返回值的时候,C就只能用指针搪塞一下了
2:连续不等式
如果 a > b > c, 则……
3: void不是类型
1. Go就支持func (ret, err) 。所以不仅调用难以组合,Err体系也给弄成错的,因为err!=nil时函数不可能有值
2. 写成 (a > b > c) 还是
(a>=x>=c) & (a~b)(x) ? 过了这个村, for(x) 和 x inbounds range 就不可能一致了3. 数学没有void,所以我赞成省略类型=void
还有一些不逆天的C错误:
"\0" 不是数组,argv无法单作为值
赋值是表达式,而且允许
for(;b-c;) c+ --b; b--;//c+b-1, b-=2强制转换语法 (T)+xx、类型前置,这个的影响非常深远,带来的麻烦无穷无尽
if, while, for 的小括号和大括号,switch break
for (i = 1; i <= 10; i++) ,这个 (1~10):[i] 也很毒瘤了知乎专栏
Z3:考公行测轻松应对,排班问题一键解决的"神器"?
上一期我们介绍了 Webassembly,这一期我们将会给大家介绍2015年SIGPLAN 获奖作品Z3求解器,没有了解过的朋友可能会好奇:求解器到底是什么“神器”? 简单一句话总结就是专门为世界上各行各业的复杂问题进行最优…
duangsuse::Echo
#PLT #sql https://zhuanlan.zhihu.com/p/646479383 Z3-SMT 是SAT(可行性求解器)的增强版,即一种sympy 。比Prolog更擅长解数值,甚至能解数独(迫真 ,解决cargo的依赖版本(原神 from z3 import * A, B, C = Bools('A B C') # 创建一个求解器 s = Solver() # 添加约束条件 s.add(Or(And(A, B), And(Not(A), C))) # 检查是否存在解 if s.check()…
还有一些FP的错误 #design »=:
(我们知道,OOP对象 constructor() 就是一个“多方法函数”,等同
- 函数作为值并不稀奇, 相反,滥用 partial(f) 与compose而非this链来隐藏参数,虽等价于 obj.bind.f ,却是一种无序亦无类型的表达习惯。typeclass是和C一样的无心智模型,这种散漫 不值得被崇拜
Python,Rust,Go 都使用了self参数,我觉得rs有 &mut self 和new()模式还算有理由的(当然这比OOP Factory还丑),但那些过于执着理论优雅,忽视程序员阅读时间的设计,还是不可原谅,还不如JS的f.call(this)
- curry 更是一种堪比Builder的,对传参的过度设计。它没有(还不允许有)名字,所以和那些新语言的 tuple(vs. Pair) 一样,造成了()函数或{}结构间的不一致
- FP好像都有「优秀的模块化和列表处理」,但对比py的同类项就会发现那些只是「因祸得福」。FP的所有工程性技巧都建立在这种“妙手”偶得上。正常做法的SEO被他们挤掉了
- 高复用组合、语意化、响应式 并非函数式的专利,而是它们做的功能少,而以为自己更懂原则 😅。它们的定义式还不如Excel
- 纯函数不够对称。基于(可loop化)递归的算式,本可以兼容
- FRP Reactive 和各种State,Signal就是因为缺少「模式作为值」诞生的。 既然公式该作用于「变量」,副作用又指什么?
- 数学不优雅。 数学用x<a,用A=[x y] 处理数据时,没考虑定义-引用双侧的简洁性 (区间,访问链,.)。 这导致加法独立于函数:
- 真正区别了
- (&&print) vs (&) 这特性就像赋值表达式一样,是已被a?:b修正的可读性灾难,而函数式竟把 pass by lazy 当高性能卖点-这还不如Go指针/C宏 的多返回
- 就像0+1,Monad范畴也有自函子id作为(+0) 。而Monad.map就等同于this链,链处理当然好玩—而且无赋值,比如
所以IO Monad 还可以处理异常(级联返回)。但这值得业界学习吗? 比如 xs.map(x=>),fold 的语意该是
Ramda 和各种 immutable data 已经给JS带来很大麻烦了,还被说不严谨 ,其实那些人就是闲
👀
总而言之,但凡在加某种语法或「特殊处理」前,稍微想下使用频率,去与既有语法对比下, 都不会传承这样的问题
数学的问题是过于形式,缺乏读音和链式表达命名, 但某些编程就是太「实在」了,早该分析词频,删掉某些过度设计和常用词了
(我们知道,OOP对象 constructor() 就是一个“多方法函数”,等同
when(arg0, {run:(self)=>overridedFun ,.})的闭包。是这样的「高阶函数」- 函数作为值并不稀奇, 相反,滥用 partial(f) 与compose而非this链来隐藏参数,虽等价于 obj.bind.f ,却是一种无序亦无类型的表达习惯。typeclass是和C一样的无心智模型,这种散漫 不值得被崇拜
Python,Rust,Go 都使用了self参数,我觉得rs有 &mut self 和new()模式还算有理由的(当然这比OOP Factory还丑),但那些过于执着理论优雅,忽视程序员阅读时间的设计,还是不可原谅,还不如JS的f.call(this)
- curry 更是一种堪比Builder的,对传参的过度设计。它没有(还不允许有)名字,所以和那些新语言的 tuple(vs. Pair) 一样,造成了()函数或{}结构间的不一致
- FP好像都有「优秀的模块化和列表处理」,但对比py的同类项就会发现那些只是「因祸得福」。FP的所有工程性技巧都建立在这种“妙手”偶得上。正常做法的SEO被他们挤掉了
- 高复用组合、语意化、响应式 并非函数式的专利,而是它们做的功能少,而以为自己更懂原则 😅。它们的定义式还不如Excel
- 纯函数不够对称。基于(可loop化)递归的算式,本可以兼容
A+1, 1+B, A+B 这些逻辑推导的情况,但FP们空有一堆公式,却连 A=1,1=A 都做不到,还需为 pat match 内定语法!- FRP Reactive 和各种State,Signal就是因为缺少「模式作为值」诞生的。 既然公式该作用于「变量」,副作用又指什么?
全局=值, printed="" 能改变关系算式(引用透明)吗?- 数学不优雅。 数学用x<a,用A=[x y] 处理数据时,没考虑定义-引用双侧的简洁性 (区间,访问链,.)。 这导致加法独立于函数:
1.+(2).+(3) vs +(+(1,2),3)
确实数学不只是符号,但像数形结合时,也只能说Desmos,matlab和GL比手绘好得多、有条理的多,相信对几何图论也是如此- 真正区别了
(+) vs (++) 的是物理性Vector,而Haskell没有哪怕为 List Int 实现加法,却说""+""和1+2 的交换律不一样。所谓「无意义的严谨」 🤓- (&&print) vs (&) 这特性就像赋值表达式一样,是已被a?:b修正的可读性灾难,而函数式竟把 pass by lazy 当高性能卖点-这还不如Go指针/C宏 的多返回
- 就像0+1,Monad范畴也有自函子id作为(+0) 。而Monad.map就等同于this链,链处理当然好玩—而且无赋值,比如
obj?takeIf{}?.let{} 和 yield (yield needFetch).blob() 所以IO Monad 还可以处理异常(级联返回)。但这值得业界学习吗? 比如 xs.map(x=>),fold 的语意该是
xs.as:[x], xs(Sum) 或Eqs(A,B)双转化Ramda 和各种 immutable data 已经给JS带来很大麻烦了,还被说不严谨 ,其实那些人就是闲
👀
总而言之,但凡在加某种语法或「特殊处理」前,稍微想下使用频率,去与既有语法对比下, 都不会传承这样的问题
数学的问题是过于形式,缺乏读音和链式表达命名, 但某些编程就是太「实在」了,早该分析词频,删掉某些过度设计和常用词了
duangsuse::Echo
还有一些FP的错误 #design »=: (我们知道,OOP对象 constructor() 就是一个“多方法函数”,等同 when(arg0, {run:(self)=>overridedFun ,.})的闭包。是这样的「高阶函数」 - 函数作为值并不稀奇, 相反,滥用 partial(f) 与compose而非this链来隐藏参数,虽等价于 obj.bind.f ,却是一种无序亦无类型的表达习惯。typeclass是和C一样的无心智模型,这种散漫 不值得被崇拜 Python,Rust,Go 都…
https://www.zhihu.com/question/631144121/answer/3299457578
#js #java #web #news React系还有一张刁图,让我感叹
目前还只有JS能做str安全注入
当然20年前C#就支持ASP, Razor还支持
原来Javaer才意识到自己只是 CRUD boy??
#js #java #web #news React系还有一张刁图,让我感叹
sql`${}` 居然都能成为稀奇事(虽然之前我想用但没找到包。貌似用BaaS有 prisma 目前还只有JS能做str安全注入
当然20年前C#就支持ASP, Razor还支持
<button formAction="@( () => await Db( $"INSERT INTO Bookmarks VALUES ( {slug} )" ) )" >
前后端同构当然更合理(并不是像PHP那样的伪共用),但不要区分use client和use server更好原来Javaer才意识到自己只是 CRUD boy??
duangsuse::Echo
还有一些FP的错误 #design »=: (我们知道,OOP对象 constructor() 就是一个“多方法函数”,等同 when(arg0, {run:(self)=>overridedFun ,.})的闭包。是这样的「高阶函数」 - 函数作为值并不稀奇, 相反,滥用 partial(f) 与compose而非this链来隐藏参数,虽等价于 obj.bind.f ,却是一种无序亦无类型的表达习惯。typeclass是和C一样的无心智模型,这种散漫 不值得被崇拜 Python,Rust,Go 都…
#PLT #FP https://www.zhihu.com/question/28292740/answer/3297148810
看 moonbit 提到 (Node)Visitor 设计模式,觉得有趣就复述下 👀
Oleg Kiseylov教授等人提出的Tagless Final技术,那就是直接抽象Expr的构造器集,这样函数会随着新子类被覆写,就像 Factory (天哪,FPer在搞事情前都不查重的吗)
其实呢,[Show ExprV] 等于 [Str ExprV],这么写是因为 Haskell 的 class (Exprv t) 是按t重载的,不能手动指定Vshow
static成员实现不是subtype-=元类 时能做到的(这相当于有能+接口的“全局工厂” 比如说.. Gson 的那种)
同样,
但, #Rust 它们就是因为self参数,才这么无结构:
看 moonbit 提到 (Node)Visitor 设计模式,觉得有趣就复述下 👀
Lit(1):Add(me,Lit(2)).eval==3因为OOP无法外部扩展fun,但能加子类,所以请Visitor松耦合(py astor 靠字典,无需样板代码)
?? Expr
Lit'n'
Add'AB'(_:Expr)
- show me .:
Lit: "{n}"
Add: "{A.show}+{B.show}"
- eval me .:
Lit: n.[Num too]
Add: A.eval+B.eval
?? 'R'Expr.Vis按道理 Show(add_3) 比 add_3(Show()) 优雅。但谁叫OOP是靠this @singledispatch 。不过OO的overload+override比Haskell归类性好多了
- as(:Add) R
- as(:Lit) R //因此 Lit'n' 有 - as(f:Expr.Vis) f(me)
me Show() [Str Expr.Vis]
- as(:Lit) "{n}"
me Eval() [Num Expr.Vis]
Oleg Kiseylov教授等人提出的Tagless Final技术,那就是直接抽象Expr的构造器集,这样函数会随着新子类被覆写,就像 Factory (天哪,FPer在搞事情前都不查重的吗)
-'V'(V [Int ExprV]) code1 V.Lit(1)- 添加的Node会被新V1show实现,因为现在Lit们 是能被class的函数
funcs Vshow [Show ExprV]
- Lit(NAME, :Show) show.res
funcs Vpostfix //逆波兰化
?? 'u'ExprV
^name
- Lit(:u)u
- Add'AB'(_:u)u
?? Column
Show(res:Str)
Eval(res:Num)
?? 'u'ExprV1 ExprV
其实呢,[Show ExprV] 等于 [Str ExprV],这么写是因为 Haskell 的 class (Exprv t) 是按t重载的,不能手动指定Vshow
static成员实现不是subtype-=元类 时能做到的(这相当于有能+接口的“全局工厂” 比如说.. Gson 的那种)
同样,
IntArray() fastutil 这些用复制粘贴特化泛型,也是因为 class 不是能被overload的 fun 但, #Rust 它们就是因为self参数,才这么无结构:
trait ExprGADT {
type Expr<T>;
fn lit(i: i32) -> Self::Expr<i32>;
fn neg<N>(A: Self::Expr<N>) -> Self::Expr<N>;
}
魔法并不是免费的,我们要牢记它的意图场景。Zhihu
什么是函数式编程思维? - 知乎
函数式编程现在已经被越来越多地被应用到工业软件中。例如,应用广泛的编程语言Java在迭代到Java 8的时候…
#FP #statement
https://www.zhihu.com/question/596624832/answer/3091106978
Lisp应该不算函数式编程语言吧,它唯一的好处就是在只有C--BCPL的世代支持了GC、选择了非符号的括树风格,用链表取代单步forif。 但是心智模型依然在C99附近徘徊啊,强检查数据之外,其范式并没有比C出众吧?甚至Lua的闭包和yield比圆括号们跨场景对称
范式说到底是「拆分数据上文」的方式啊。 无论FP的单方法函数、高阶组合、tvar窄化推导+GADT,还是OOP的多方法函数、this链、<T>+extends,直到运行时强转的语言……决定软件质量的并非自动测试,并非理论,而是对领域上文的正确列举
所谓PLT,编程语言理论, 就是为了正确理解应用惯用的输入结构、的分层次逻辑。只为尝试茴字的全N种写法 去学咋做翻译器,是种工程吧?
其实在我眼里,Haskell也不能算「定义式编程」的。 反而是numpy,ffmpeg,Matlab,Word这些软件拥有最定义式的、纯度最高的代码接口,而且,它们才是数学和线代的最前沿。把计科理解为数学的人,真的单纯得可爱。
一些连「行前缀重复」都消除不了的语言啊,连细粒度Reactive都改靠lazymemo的纯函数,鼓吹什么point-free (本质是this链) 和类型推导与扩展性,怎么看都不入「定义式+函数式」的大雅之堂吧?
无论类型还是函式、算式的定义语法上,都有2~3种“同样优秀方案”的语言, 能设计成这样的“形式化”语言,被称为优美且自然吗?
何况,基于 trait{} impl{} 与局部(associative type) 式的多态(multi-typed),不能说比子类型和<>类型好, 只能说是毫无使用处,而且在故作高深vs拖泥带水间反复横跳吧
倒不如说,这些语法项的选型,就是因为无用处才能显得混乱。 一旦有了能改变旧套路的灵感,没有什么理论是不能赋予价值的,哪怕只是看个乐子,都比只把跨界复制当作学习融入的人们强
编程语言呢,不是指责顾客挑食或“愚蠢”的 世代都有的聪明人。它是把烂程序、烂写法削好吃的厨师
魔法与应用,是不能对立的。 好的白魔法,终将取代黑箱子里的坏魔法。 像我这样,却会觉得JSPy,rb更懂纯函数DSL, HTML+CSS或JSON就是语法树和宏,Prolog就是更好看的SQL或Excel
编程技能不应该特殊化。打败程序员的,往往不是同行,反而是跨界的新手
https://www.zhihu.com/question/596624832/answer/3091106978
Lisp应该不算函数式编程语言吧,它唯一的好处就是在只有C--BCPL的世代支持了GC、选择了非符号的括树风格,用链表取代单步forif。 但是心智模型依然在C99附近徘徊啊,强检查数据之外,其范式并没有比C出众吧?甚至Lua的闭包和yield比圆括号们跨场景对称
范式说到底是「拆分数据上文」的方式啊。 无论FP的单方法函数、高阶组合、tvar窄化推导+GADT,还是OOP的多方法函数、this链、<T>+extends,直到运行时强转的语言……决定软件质量的并非自动测试,并非理论,而是对领域上文的正确列举
所谓PLT,编程语言理论, 就是为了正确理解应用惯用的输入结构、的分层次逻辑。只为尝试茴字的全N种写法 去学咋做翻译器,是种工程吧?
其实在我眼里,Haskell也不能算「定义式编程」的。 反而是numpy,ffmpeg,Matlab,Word这些软件拥有最定义式的、纯度最高的代码接口,而且,它们才是数学和线代的最前沿。把计科理解为数学的人,真的单纯得可爱。
一些连「行前缀重复」都消除不了的语言啊,连细粒度Reactive都改靠lazymemo的纯函数,鼓吹什么point-free (本质是this链) 和类型推导与扩展性,怎么看都不入「定义式+函数式」的大雅之堂吧?
无论类型还是函式、算式的定义语法上,都有2~3种“同样优秀方案”的语言, 能设计成这样的“形式化”语言,被称为优美且自然吗?
何况,基于 trait{} impl{} 与局部(associative type) 式的多态(multi-typed),不能说比子类型和<>类型好, 只能说是毫无使用处,而且在故作高深vs拖泥带水间反复横跳吧
倒不如说,这些语法项的选型,就是因为无用处才能显得混乱。 一旦有了能改变旧套路的灵感,没有什么理论是不能赋予价值的,哪怕只是看个乐子,都比只把跨界复制当作学习融入的人们强
编程语言呢,不是指责顾客挑食或“愚蠢”的 世代都有的聪明人。它是把烂程序、烂写法削好吃的厨师
魔法与应用,是不能对立的。 好的白魔法,终将取代黑箱子里的坏魔法。 像我这样,却会觉得JSPy,rb更懂纯函数DSL, HTML+CSS或JSON就是语法树和宏,Prolog就是更好看的SQL或Excel
编程技能不应该特殊化。打败程序员的,往往不是同行,反而是跨界的新手
有时也觉得 #CS 界 #IT 界挺魔幻的,60~70年前的矩阵和协程,Lisp式的DSL,到今天还有框架 😔
当然,numpy和 Go func, kotlin.coro, Rust derive宏 已经远不是Fortran,OpenResty那些东西可比拟的
但究其根本,我觉得今天CS+IT的佼佼者,不少lib依然在犯70年前它们先辈的错误。
对于协程这个特性,究竟是DOM,node那样不靠package就包揽一切,还是像Go那样作为噱头,Erlang那样基于Actor,Kt这样与时俱进 最为正统呢?
拿js模拟过……
可能直到AI广泛辅助编程,这些问题都不会有答案
但我清楚AI无法完成写法的形式化,只能从根源上,让用户指定开多大线程池完成多少种Task,这些术语的差异才会伴随着“优化选项”消失
C 那种argc+argvec 的list,也只是术语的差异吗? 恐怕除了样板代码的多少,这些语言作为“app设计器”,也有根本不同
——
在我看来,无论是工业界最流行的语言,还是协程的理论讨论, 都是没有取得统一模型的
换句话说,每个语言有它的优点
这不是一件好事。 一个没有取得共识的工具,会阻碍人的泛化思考,会把编程当成一件机械的编码任务
其实明白编程和数学里的泛用性,又如何呢? 有人为此挣到钱,有人选择删了公开博客, 但到最后随着时代向前,知识也没啥可稀奇的吧
即便如此,我选择把编程视为一种乐趣和创作。
我不需要言辞间的“朴素” “平凡不难”,对于创作者来说,灵感,才能成为汗水里掷地有声的内核。 🕊
当然,numpy和 Go func, kotlin.coro, Rust derive宏 已经远不是Fortran,OpenResty那些东西可比拟的
但究其根本,我觉得今天CS+IT的佼佼者,不少lib依然在犯70年前它们先辈的错误。
对于协程这个特性,究竟是DOM,node那样不靠package就包揽一切,还是像Go那样作为噱头,Erlang那样基于Actor,Kt这样与时俱进 最为正统呢?
拿js模拟过……
总之就当自动传f1(回调),f局部变量在回调中, 所以调用f()能选择何时何处执行我想,大家都被限制在自己的编程生态圈,不去思考这些差异背后的进步方向,可能才是编程之道吧……
Kt的结构化并发确实很有意思,但要谈可用性,JS的手动撤销和自动Dispatch更实在
btw一句,我讲的比较详细,但我对CPS不感兴趣,
主要是为了把回调链表与callstack、OS线程 做类比。确实编译原理和OS是分不开
本群人均素质挺高啊,都知道coroutine是靠CPS
但我更喜欢不纯粹的理论
有时我觉得这些也没必要说的, 我反复思考有好几年了,但它们终究是三句话讲完的程度呢
因为JS最开始是 func*(){} yield Promise,没有async
async是因为JS不能直接把函续交给then,要先yield给执行器(对等协程vs上下级协程)
Ruby的call/cc, C的"setjmp" 就是对等协程,它们符合CPS的刻板印象但不好用…… 总之异步编程反人类
异步编程也可以很美好的,比如 Reactive 就遥遥领先于Java,PHP这一套。 Nextjs应该是新时代的服务端语言
可能直到AI广泛辅助编程,这些问题都不会有答案
但我清楚AI无法完成写法的形式化,只能从根源上,让用户指定开多大线程池完成多少种Task,这些术语的差异才会伴随着“优化选项”消失
C 那种argc+argvec 的list,也只是术语的差异吗? 恐怕除了样板代码的多少,这些语言作为“app设计器”,也有根本不同
——
在我看来,无论是工业界最流行的语言,还是协程的理论讨论, 都是没有取得统一模型的
换句话说,每个语言有它的优点
这不是一件好事。 一个没有取得共识的工具,会阻碍人的泛化思考,会把编程当成一件机械的编码任务
其实明白编程和数学里的泛用性,又如何呢? 有人为此挣到钱,有人选择删了公开博客, 但到最后随着时代向前,知识也没啥可稀奇的吧
即便如此,我选择把编程视为一种乐趣和创作。
我不需要言辞间的“朴素” “平凡不难”,对于创作者来说,灵感,才能成为汗水里掷地有声的内核。 🕊
Telegram
duangsuse::Echo
#FP #math 的一些 #statement
#tool html bookmarklet data:text/html;utf8,<body ContentEditable>
—10÷3=3…1
被大佬建议写成 =(3)3+1 即m=qn+r (r<q)形式的“短除法” ,理由是...没交换律
“理论家布尔巴基有个笑话: 1+2当然是2加1,因为整数对加法构成阿贝尔群”
当然,纠结这些除和除以工程意义不大
ax+i=b; x,i=divmod(b,a) 的可变量元组数学里可是没有。函数只是“…
#tool html bookmarklet data:text/html;utf8,<body ContentEditable>
—10÷3=3…1
被大佬建议写成 =(3)3+1 即m=qn+r (r<q)形式的“短除法” ,理由是...没交换律
“理论家布尔巴基有个笑话: 1+2当然是2加1,因为整数对加法构成阿贝尔群”
当然,纠结这些除和除以工程意义不大
ax+i=b; x,i=divmod(b,a) 的可变量元组数学里可是没有。函数只是“…
#china 方脸
《我的要求不算高》: 中国的韩台梦碎,从10年买房变期待不烂尾
22:00 错失风口,中国无法变成发达国家了
县城经济:为公仆消费者服务,由大城市买单
李老师: 吃个蛋炒饭都被”出“征,生活政治化不可避(悲)
Leonard: 祖国的1千亿空间站 与 14国凑钱出来的空间站
vs 12.3 东航飞港中一个发动机掉叶 #news
^#IT ”开猿节流“ 的风反哺国内,BAT类大厂服务出现宕机,滴滴宕机12h
现在的中文互联网也太抽象了,没想到一首歌都有这种内涵…… 😅
《我的要求不算高》: 中国的韩台梦碎,从10年买房变期待不烂尾
22:00 错失风口,中国无法变成发达国家了
县城经济:为公仆消费者服务,由大城市买单
李老师: 吃个蛋炒饭都被”出“征,生活政治化不可避(悲)
Leonard: 祖国的1千亿空间站 与 14国凑钱出来的空间站
vs 12.3 东航飞港中一个发动机掉叶 #news
^#IT ”开猿节流“ 的风反哺国内,BAT类大厂服务出现宕机,滴滴宕机12h
现在的中文互联网也太抽象了,没想到一首歌都有这种内涵…… 😅
YouTube
方脸说:破碎的中国梦,衰退的中国经济,中国梦无法实现的根本原因是什么?习近平到底犯了什么样的根本性错误?没有政治改革,难有经济成功,并非是一句戏言,中等收入陷阱,韩台道路,发达国家。
00:00 黄渤用一首歌证明了中国梦的破碎
03:34 中国梦,其实就是韩台梦
08:26 不进行政治改革,让我们无法成为韩台那样的发达国家
19:19 习近平的摸着石头过河
21:17 灾难或许是持久的
03:34 中国梦,其实就是韩台梦
08:26 不进行政治改革,让我们无法成为韩台那样的发达国家
19:19 习近平的摸着石头过河
21:17 灾难或许是持久的
Forwarded from 层叠 - The Cascading
Mozilla 发布 llamafile,将 LLM 模型打包为「跨系统」的单文件可执行格式。
llamafile 可以利用 llama.cpp 及 Cosmopolitan Libc 将 LLM 模型(它们通常有至少数 GB 大小)的命令行版本或网页版本打包为单个可执行文件,并可在 Windows、macOS、Linux,甚至 BSD 系系统上执行。
- https://github.com/Mozilla-Ocho/llamafile
- https://hacks.mozilla.org/2023/11/introducing-llamafile/
#Mozilla
llamafile 可以利用 llama.cpp 及 Cosmopolitan Libc 将 LLM 模型(它们通常有至少数 GB 大小)的命令行版本或网页版本打包为单个可执行文件,并可在 Windows、macOS、Linux,甚至 BSD 系系统上执行。
- https://github.com/Mozilla-Ocho/llamafile
- https://hacks.mozilla.org/2023/11/introducing-llamafile/
#Mozilla
GitHub
GitHub - mozilla-ai/llamafile: Distribute and run LLMs with a single file.
Distribute and run LLMs with a single file. Contribute to mozilla-ai/llamafile development by creating an account on GitHub.
#design #plt
最近在整理的编程范式有点让我头疼…… 这个或许对学OOP有帮助吧:
最近在整理的编程范式有点让我头疼…… 这个或许对学OOP有帮助吧:
//行列状多态,就是说一个类型由 字典C=A+B 定义这样的好处是 sealed,data class 都非常简单-甚至多种子类都语法一致,与 #Haskell GADT 不同的是,它支持附带函数与隐式this
?? C A
b1 Str
- b2 Int
//以上声明里没写,故需要另加构造器
?? C
Cat(name:Str, b1="demo")
- b2 b1.(0).Int
Camel(ver=0)
b1 "Hi"
- b2 0
?? 'AB'Columns //泛型,单位状类型如果是新类型,还可以定义Enum甚至表格
Pair(:A,:B)
Triple(:A,:B,:C)
?? 'AB'way2
posL [A mayNO] //val posL: A?
posR [B mayNO]
Left(v:A) ; Right(v:B)
?? RGB学起来有点让人费解(当然这是我设计的), 虽说类型和值都是「构造器」,这样的大杂烩也太奇怪了(但,比用到再单独地学好吧?)
R;G;B
?? 调料
甜 Int ; 咸 Int
- 咸 id==1 or 咸>1
醋 (0 0)
盐 (0 1)
duangsuse::Echo
#design #plt 最近在整理的编程范式有点让我头疼…… 这个或许对学OOP有帮助吧: //行列状多态,就是说一个类型由 字典C=A+B 定义 ?? C A b1 Str - b2 Int //以上声明里没写,故需要另加构造器 ?? C Cat(name:Str, b1="demo") - b2 b1.(0).Int Camel(ver=0) b1 "Hi" - b2 0 这样的好处是 sealed,data class 都非常简单-甚至多种子类都语法一致,与…
不过和Rust蛮搭的,甚至比 struct,trait,impl 方便(1个 ?? 把这仨+enum 都包齐了)。 这些??本质上都是1+N个 OOP class
而abstract class 更适合用「段造器」,就是需要传入 参数+override fun 的"类函数"字典。标准写法称为三段论,第一段仅限重写函数和注解/变量
由 ??,-, my 新建的词都可以被“多音”,这是此语法的某种底线,所以class才必须拆成open多态和final扩展两部分,减少耦合性
过度重视外部可扩展,不一定是好事。接口化的东西难于设计,但是,VB那种难于扩展的语言都被淘汰了
姑且就把「段造器」视为「行列状多态」的补充
真的好复杂啊…… 整理的时候还又简化过了 🙄
想要保留kt的兼容,就是需要class继承,但这么一想,非要隔离struct和方法又很不OOP
而abstract class 更适合用「段造器」,就是需要传入 参数+override fun 的"类函数"字典。标准写法称为三段论,第一段仅限重写函数和注解/变量
my Row() Animal(id:Str)很丑吧?这是向Rust看齐(我讨厌 struct+impl)
- Str "野兽罢了"
^??
age 0
- speak Str
my Animal
- 年轻 age<3
my [Animal]Dog() //复制器即怎么说呢…… 我觉得 行列状多态、单位状类型 吊打Kotlin,但段造器也太破坏画风了,可以视为故意做烂的语法盐
my Animal(id) Dog(id:Str)
?? Animal.Dog() //加构器,不支持三段论
?? hello(name="Jack") //加参器,用于多次调用。btw, 三段论的第四段是 ^name 即 static{},不需要fun语句或匿名object{}
由 ??,-, my 新建的词都可以被“多音”,这是此语法的某种底线,所以class才必须拆成open多态和final扩展两部分,减少耦合性
过度重视外部可扩展,不一定是好事。接口化的东西难于设计,但是,VB那种难于扩展的语言都被淘汰了
姑且就把「段造器」视为「行列状多态」的补充
真的好复杂啊…… 整理的时候还又简化过了 🙄
想要保留kt的兼容,就是需要class继承,但这么一想,非要隔离struct和方法又很不OOP
❤1
duangsuse::Echo
#design #plt 最近在整理的编程范式有点让我头疼…… 这个或许对学OOP有帮助吧: //行列状多态,就是说一个类型由 字典C=A+B 定义 ?? C A b1 Str - b2 Int //以上声明里没写,故需要另加构造器 ?? C Cat(name:Str, b1="demo") - b2 b1.(0).Int Camel(ver=0) b1 "Hi" - b2 0 这样的好处是 sealed,data class 都非常简单-甚至多种子类都语法一致,与…
昨天提到的头疼点,现在修好了,希望以后能实现吧
顺便读篇#zhihu 文吧 https://www.zhihu.com/question/40675600/answer/3310038891
>代数数据类型是所有高级特性的基础, 比如
首先,你想用实例的个数表达「类型」? SQL Table 就是如此啊,但是有啥用
比如你想做DFS吗? 链表又对应哪种数字? 加和乘,只有在穷举里才算有用抽象吧?
你能说说Unit值为何优于void吗? 对kt而言,`nul?: return` 必须是表达式,`listOf<Unit> ` 也叫“有意义”
但这语法仍然是种层级混乱的错误,还不如让异常作为值
对于向量,相同的维度算是「本质上相同」,但对于Int-Str 之类的格式而言,「等价」有比靠信息量更准确的定义
>统一函数和方法调用,写程序就能一 '.' 到底
问题主要是class T 的耦合性和反射,如果用 impl T{} 和宏就没问题了,这么说py也很面向函数
不过,函数=方法是需要查重载表的,可能要扩充全局作用域
另外,
>HKT 作为高阶抽象, 表达能力极强, 能有效减少冗余代码.
是吗?
这个Fine/Fail 很适合TAB,但如果
说到底,Monad链还是和CPS走得很近,CPS,传函续,拿语法糖封装后 也终究是会产生“回调地狱”吧?比如在fold时要手动透传Monad这个"this"..
>Refinement Type 消除代码中无用的assert,还可以附带SMT
Ada就支持整数区间检查,我发誓你不会想写那种代码的
当然强类型typealias取代各种check是好的,尤其,对Web后端友好
>Dependent Type
翻译这个类型体操,还不如写 SWI-Prolog.org ,同样是“y=x”检查,但人家的bool运算能告诉你,具体有几个类型匹配约束
>First Class Continuation, Call/CC
闭包里break,kt是用inline的方法,我觉得这是唯一合理的实现,其他都是滥用过程式编程
传函续可以实现函数级线程(有栈协程),
ruby callcc 反而是在模拟longjmp(),是throw的一种底层实现
>Delimited Continuation
语言级别的 fork.. 好像线程池Dispatchers
Linux滥用fork&execve 最初是因为pthreads不稳定, 说实话进程隔离除了防崩外,在有GC的语言里该式微了
至少MapReduce(Promise.all)和node不依赖多进程
传函续比调用栈优越的一点是,除了能实现yield(调用式协程) 它也是不依赖OS内核的线程
可惜是kt和rs的实现还不如Go简洁,kt更是把
所以,这些和 Algebraic Effects 有什么关系?数学递等式是小学内容吧? 还是说DFS深先遍历是数值算法?
蹭热度也要有限度的吧,我是说CS+Math概念股为啥这么不搭调。 CS人也要攀关系吗?
程序需要证明? 这和IT学生,用自己那几张电子表格去定义现实世界的「用户」一样逗, 还有那个被AI突破的 NLP领域,哦, 原来人类都是先学结构化语法,才有思维逻辑的? 倒果为因。
>effects能实现错误路径
py里用yield Err 也能实现catch,实际上js async最初就是这么来的
Java SEH <此设计< runCatching
这个catch 是在语句级实现了OOP class 注入函数的灵活性,我不觉得能inline有啥大不了的
Kt coro 在suspend前也不会创建状态机,但这个
作为函数的类型化,effect明显优于Monad和subtyping,但这里方向错了
把异常和协程混一起,最终也只会发现异常路径除了报错就是默认值,不值得作为流控,而且async任务也不支持0开销
第一点参数注入,OOP是基于class Context,对框架和DSL更自然,算是因祸得福,笨有笨的好处
『THE WORLD』是有进程级支持的,如果没fork不方便调试器重开的话,把『CRIU』移植到gdb上
比让编程语言越俎代庖强,不就是保留个调用栈的事,很新吗? syscall和线程调度都在做,知道原理就够了,老模型新应用嘛
>Partial Evaluation
Rust和Crystal都以0开销为卖点,C++则支持template和
常量折叠或至少内联,姑且是普遍的「分段求值」了,八成编译器并不包含源语言的运行时,也不支持Lisp qquote式的「符号作为值」
TS, D的enum T=f() 貌似更符合应用,但我反对创建类型体操和值“两门语言”
这样比reflect或codegen强,也曾是弱类型的专利,很好理解,因为那些垃圾静态语言连心智模型(简洁的AST)都没有,也不关心JSON和多态struct的绑定,只想着新语言能编译了
明明能“映射到目标语言”,却无法解释它,是很奇怪的事情啊! 尤其是要映射为“原创的”栈机或IR调用图。单独的编译步骤,算是蠢的JIT缓存吧
另外,py里很容易同时实现执行+翻译 双语义:https://github.com/duangsuse-valid-projects/TkGUI
btw. #js React #dalao
https://overreacted.io/algebraic-effects-for-the-rest-of-us/
^如果catch 能返回给throw会怎么样呢? 这类似依赖注入。 我想了会,觉得还是OOP扩充this.fun 比不透明地传递catch要好
https://overreacted.io/goodbye-clean-code/
^如何给SVG rect, arc. class Shape{} 开发编辑器? 不知道继承或接口的人为4个点加四个fun,然后组合为9宫格 .. 但他们赢了,因为团队比可维护性重要!
中国的精英主义,和普世的个人主义的主要区别, 是「是否需要向别人,解释自己的英明决策」, 这涉及人权vs工具人的不同。
爱因斯坦和费曼,并不是中式意义的精英
再谈到“战争贩子”的伪善,同样是种避重就轻: 不谴责宣战的慈禧,反而说练兵强武的李鸿章是资本家; 不反省自己没把对方当人,反说他们蠢,不可「教化」
降低重复的抽象、对特例的适配性,都是必须的。 因为,代码都是多余的,只有心智模型和设计是意义,而只有完全删掉重复才是专业性的语言
https://github.com/denysdovhan/wtfjs/blob/master/README-zh-cn.md
^#js 的 BaNaNa 等名梗,还要注意: .1+.2!=.3, [1,20,3].sort() 是按字符排序 🤪
顺便读篇#zhihu 文吧 https://www.zhihu.com/question/40675600/answer/3310038891
>代数数据类型是所有高级特性的基础, 比如
0 = never, 1 = unit, 2 = bool.. NaN=void
>定义和类型以及积类型(sum prod), 所有类型就都可以组合出来。相同的 ADT 编码意味着这两个类型本质上相同首先,你想用实例的个数表达「类型」? SQL Table 就是如此啊,但是有啥用
比如你想做DFS吗? 链表又对应哪种数字? 加和乘,只有在穷举里才算有用抽象吧?
你能说说Unit值为何优于void吗? 对kt而言,`nul?: return` 必须是表达式,`listOf<Unit> ` 也叫“有意义”
但这语法仍然是种层级混乱的错误,还不如让异常作为值
对于向量,相同的维度算是「本质上相同」,但对于Int-Str 之类的格式而言,「等价」有比靠信息量更准确的定义
>统一函数和方法调用,写程序就能一 '.' 到底
问题主要是class T 的耦合性和反射,如果用 impl T{} 和宏就没问题了,这么说py也很面向函数
不过,函数=方法是需要查重载表的,可能要扩充全局作用域
另外,
match,for i {break} 都可以数据化为dict或takewhile>HKT 作为高阶抽象, 表达能力极强, 能有效减少冗余代码.
是吗?
Maybe<T>, [T Maybe]类型 vs "T?"Result<T> vs 具有特殊assert方法的 "T?" 哪个实用呢这个Fine/Fail 很适合TAB,但如果
fetch()!! ; f?.run{} 就能错误处理,谁会用 if let=Some?说到底,Monad链还是和CPS走得很近,CPS,传函续,拿语法糖封装后 也终究是会产生“回调地狱”吧?比如在fold时要手动透传Monad这个"this"..
>Refinement Type 消除代码中无用的assert,还可以附带SMT
Ada就支持整数区间检查,我发誓你不会想写那种代码的
当然强类型typealias取代各种check是好的,尤其,对Web后端友好
>Dependent Type
翻译这个类型体操,还不如写 SWI-Prolog.org ,同样是“y=x”检查,但人家的bool运算能告诉你,具体有几个类型匹配约束
>First Class Continuation, Call/CC
闭包里break,kt是用inline的方法,我觉得这是唯一合理的实现,其他都是滥用过程式编程
传函续可以实现函数级线程(有栈协程),
forEach{break()} 属于是没捕获整个调用栈,是异步遍历-cancelTaskruby callcc 反而是在模拟longjmp(),是throw的一种底层实现
>Delimited Continuation
语言级别的 fork.. 好像线程池Dispatchers
Linux滥用fork&execve 最初是因为pthreads不稳定, 说实话进程隔离除了防崩外,在有GC的语言里该式微了
至少MapReduce(Promise.all)和node不依赖多进程
传函续比调用栈优越的一点是,除了能实现yield(调用式协程) 它也是不依赖OS内核的线程
可惜是kt和rs的实现还不如Go简洁,kt更是把
launchThread.join() 玩得亲妈不认识了,非常地C++呢所以,这些和 Algebraic Effects 有什么关系?数学递等式是小学内容吧? 还是说DFS深先遍历是数值算法?
蹭热度也要有限度的吧,我是说CS+Math概念股为啥这么不搭调。 CS人也要攀关系吗?
程序需要证明? 这和IT学生,用自己那几张电子表格去定义现实世界的「用户」一样逗, 还有那个被AI突破的 NLP领域,哦, 原来人类都是先学结构化语法,才有思维逻辑的? 倒果为因。
>effects能实现错误路径
py里用yield Err 也能实现catch,实际上js async最初就是这么来的
Java SEH <此设计< runCatching
这个catch 是在语句级实现了OOP class 注入函数的灵活性,我不觉得能inline有啥大不了的
Kt coro 在suspend前也不会创建状态机,但这个
effect f()->r 呢只是 open fun 的另一种写法,它不涉及闭包作为函数的类型化,effect明显优于Monad和subtyping,但这里方向错了
把异常和协程混一起,最终也只会发现异常路径除了报错就是默认值,不值得作为流控,而且async任务也不支持0开销
第一点参数注入,OOP是基于class Context,对框架和DSL更自然,算是因祸得福,笨有笨的好处
『THE WORLD』是有进程级支持的,如果没fork不方便调试器重开的话,把『CRIU』移植到gdb上
比让编程语言越俎代庖强,不就是保留个调用栈的事,很新吗? syscall和线程调度都在做,知道原理就够了,老模型新应用嘛
>Partial Evaluation
Rust和Crystal都以0开销为卖点,C++则支持template和
constexpr int f() 两种范式的宏常量折叠或至少内联,姑且是普遍的「分段求值」了,八成编译器并不包含源语言的运行时,也不支持Lisp qquote式的「符号作为值」
TS, D的enum T=f() 貌似更符合应用,但我反对创建类型体操和值“两门语言”
这样比reflect或codegen强,也曾是弱类型的专利,很好理解,因为那些垃圾静态语言连心智模型(简洁的AST)都没有,也不关心JSON和多态struct的绑定,只想着新语言能编译了
明明能“映射到目标语言”,却无法解释它,是很奇怪的事情啊! 尤其是要映射为“原创的”栈机或IR调用图。单独的编译步骤,算是蠢的JIT缓存吧
另外,py里很容易同时实现执行+翻译 双语义:https://github.com/duangsuse-valid-projects/TkGUI
btw. #js React #dalao
https://overreacted.io/algebraic-effects-for-the-rest-of-us/
^如果catch 能返回给throw会怎么样呢? 这类似依赖注入。 我想了会,觉得还是OOP扩充this.fun 比不透明地传递catch要好
https://overreacted.io/goodbye-clean-code/
^如何给SVG rect, arc. class Shape{} 开发编辑器? 不知道继承或接口的人为4个点加四个fun,然后组合为9宫格 .. 但他们赢了,因为团队比可维护性重要!
中国的精英主义,和普世的个人主义的主要区别, 是「是否需要向别人,解释自己的英明决策」, 这涉及人权vs工具人的不同。
爱因斯坦和费曼,并不是中式意义的精英
再谈到“战争贩子”的伪善,同样是种避重就轻: 不谴责宣战的慈禧,反而说练兵强武的李鸿章是资本家; 不反省自己没把对方当人,反说他们蠢,不可「教化」
降低重复的抽象、对特例的适配性,都是必须的。 因为,代码都是多余的,只有心智模型和设计是意义,而只有完全删掉重复才是专业性的语言
https://github.com/denysdovhan/wtfjs/blob/master/README-zh-cn.md
^#js 的 BaNaNa 等名梗,还要注意: .1+.2!=.3, [1,20,3].sort() 是按字符排序 🤪
duangsuse::Echo
#dev #android 面试题 🤔 - 技术上提升最大的一个项目,展开介绍 对比业界同种算法流行和不流行实现、重写自己的任何项目,都比从事GPT都能完成的原型要好 - 为什么选择 Flutter,在业务方面学到了什么 Compose界原神的名气真的太大了,居然能用Navbar,Tab等自带组件,居然能调style! - Java 里重载和重写的区别 在编译期vs运行期确定函数,改方法签名vs改子类值 - 什么是线程安全 避免共享变量(不相交),或使用Atomic/独占锁 避免读写异步 - Service…
#dev #android #backend 面试题 🤔
- OSI 七层是哪七层
物理,数据链路: WiFi,BLE,eth,rndis驱动
网络传输: IP4,6 , iptables, socket(TCP) UDP
会话表示 Header cookie,json
App 众多Web3.0论坛,.
- HTTP 在哪一层?有些什么内容?
在L5~L6,负责请求响应和MIME类型,暴露为 调用+回调 +Header环境变量
除了会话,HTTP也能做文件传输和填表
- GET 和 POST 核心差异是什么?
body是否为form等私密数据
- HTTP 状态码有哪些?
{2,3,4,5}xx 各指代: 正常 重定向 请求出错 服务出错
- Java 的基本类型有哪些?拆包解包了解过吗?
值类型8种:BSCIJFDZ, byte8 short,char16 默认int32 long64 f32 默认double64 bool
值在放入List,. 前被装箱为Integer,.
Str不能修改,但相等比较也需要用java.lang. 函数 ,称为引用类型
jadx 可用于反编译,但如果是aapt+dx 会默认混淆函数名的
- Java 的访问修饰符有哪些?类级的 final 作用是什么?
可见性 private protected public 默认internal=包私有
确定性 final abstract default
final class或成员不含(函数)变量,等价于struct,因此不应该生成可供覆写的get/setter
- Java 的基本类是什么?有哪些方法?equals 和 == 有什么区别?重载重写是什么?
所有类型的Base class 是Object{eq,hash,toStr ,wait,notify同步锁 }
== 只比较GC对象的引用,而 (1.equals) 需要先valueOf装箱
重载=编译期0开销查找fun invoke()的重写,静态类型的专利
- Java 的常用类型有哪些?immutable 和 mutable 的 list 差异是什么?LinkedList 和 ArrayList 的差异是什么?
java.util.可变性 是从Kotlin抄的,弱类型assert
一般,只在嵌入式设备用易于增长的链表
- HashMap 了解哪些?规避哈希碰撞的方式有哪些?
类似RegExp 地狱回溯,long hashCode() 作为分组key的相同,也会给DDoS可乘之机
因此,对于用户输入的field,可以将其忽略,只用str,int作为Key
C系语言一般用 BTree,AVL 二分法实现KV查找。 如果是要问带锁的/fastutil的 Map实现,或者getOrPut 等惯用法……
- 项目里用到了 Xposed,它的原理是什么?
作为Xp插件的apk们会被 app_process 随 XposedBridge.jar framework.jar加载
在活动前loadPkg时,利用变量或函数名(转为native),修改其JNI代码指针,使调用前先查找覆盖表
- 了解过哪些设计模式?他们分别是什么?
Adapter,Delegate,Proxy,Observer/ 类型转换或AOP覆写
Factory,Visitor,Chain/跨平台的new()方法, 判断"type"的方法, 事件冒泡
被新语言淘汰的:😅👎
Singleton,Builder-Prototype,Command/ 模拟字典、复制数据、枚举操作
Strategy,Bridge,Facade / 函数字典和import式模块
- 单例模式的实现有哪些?可以手撕一个吗?
JVM上的static 已经支持了RAII。也可以用DCL懒加载
- OSI 七层是哪七层
物理,数据链路: WiFi,BLE,eth,rndis驱动
网络传输: IP4,6 , iptables, socket(TCP) UDP
会话表示 Header cookie,json
App 众多Web3.0论坛,.
- HTTP 在哪一层?有些什么内容?
在L5~L6,负责请求响应和MIME类型,暴露为 调用+回调 +Header环境变量
除了会话,HTTP也能做文件传输和填表
- GET 和 POST 核心差异是什么?
body是否为form等私密数据
- HTTP 状态码有哪些?
{2,3,4,5}xx 各指代: 正常 重定向 请求出错 服务出错
- Java 的基本类型有哪些?拆包解包了解过吗?
值类型8种:BSCIJFDZ, byte8 short,char16 默认int32 long64 f32 默认double64 bool
值在放入List,. 前被装箱为Integer,.
Str不能修改,但相等比较也需要用java.lang. 函数 ,称为引用类型
jadx 可用于反编译,但如果是aapt+dx 会默认混淆函数名的
- Java 的访问修饰符有哪些?类级的 final 作用是什么?
可见性 private protected public 默认internal=包私有
确定性 final abstract default
final class或成员不含(函数)变量,等价于struct,因此不应该生成可供覆写的get/setter
- Java 的基本类是什么?有哪些方法?equals 和 == 有什么区别?重载重写是什么?
所有类型的Base class 是Object{eq,hash,toStr ,wait,notify同步锁 }
== 只比较GC对象的引用,而 (1.equals) 需要先valueOf装箱
重载=编译期0开销查找fun invoke()的重写,静态类型的专利
- Java 的常用类型有哪些?immutable 和 mutable 的 list 差异是什么?LinkedList 和 ArrayList 的差异是什么?
java.util.可变性 是从Kotlin抄的,弱类型assert
一般,只在嵌入式设备用易于增长的链表
- HashMap 了解哪些?规避哈希碰撞的方式有哪些?
类似RegExp 地狱回溯,long hashCode() 作为分组key的相同,也会给DDoS可乘之机
因此,对于用户输入的field,可以将其忽略,只用str,int作为Key
C系语言一般用 BTree,AVL 二分法实现KV查找。 如果是要问带锁的/fastutil的 Map实现,或者getOrPut 等惯用法……
- 项目里用到了 Xposed,它的原理是什么?
作为Xp插件的apk们会被 app_process 随 XposedBridge.jar framework.jar加载
在活动前loadPkg时,利用变量或函数名(转为native),修改其JNI代码指针,使调用前先查找覆盖表
- 了解过哪些设计模式?他们分别是什么?
Adapter,Delegate,Proxy,Observer/ 类型转换或AOP覆写
Factory,Visitor,Chain/跨平台的new()方法, 判断"type"的方法, 事件冒泡
被新语言淘汰的:😅👎
Singleton,Builder-Prototype,Command/ 模拟字典、复制数据、枚举操作
Strategy,Bridge,Facade / 函数字典和import式模块
- 单例模式的实现有哪些?可以手撕一个吗?
JVM上的static 已经支持了RAII。也可以用DCL懒加载
@JVM_volatile var cache
get()=run{ //保证单次执行
if(null==cache) sync(this){ if(null==cache) cache=init()}
return cache
}
duangsuse::Echo
#dev #android #backend 面试题 🤔 - OSI 七层是哪七层 物理,数据链路: WiFi,BLE,eth,rndis驱动 网络传输: IP4,6 , iptables, socket(TCP) UDP 会话表示 Header cookie,json App 众多Web3.0论坛,. - HTTP 在哪一层?有些什么内容? 在L5~L6,负责请求响应和MIME类型,暴露为 调用+回调 +Header环境变量 除了会话,HTTP也能做文件传输和填表 - GET 和 POST 核心差异是什么?…
发现了奇特的OSI术语定义:HTTP是L7(应用层)协议
没错,在IP4层模型里,HTTP只能是应用层, 但就我对操作系统和Web传输的了解,负责MIME、托起HTML的http: 居然比FTP/NFS,SQL还高两层?
- 没错,HTTP自己就能作静态站应用,就像IRC。 一个被淘汰很多年的方向了
- HTTP如果是应用层,它的用户就是bot user 或者测试工程师吧?
- 那么,比HTTP高的HTML还是表示层吗? socket() 字节流「三次握手」称为会话?? 所以TCP,TLS不该叫传输层了?
- 那么,Accept-Encoding:gzip 和HTML里的charset="" 也算应用层属性? MIME这些由Blink或Flash处理的玩意,并不比HTML更应用层?
- RFC7230 的说法都是错的,对js和java而言,连接并不是无状态的
- 越来越多人在用 long-poll 轮询和cookie,而Header字典毫无疑问就是为了配置这些缓存缓冲
- 这种stateful 并不比 mysql:login 链接弱--SQL也支持多客户端
- SOCKS5 和HTTP代理, 因为需要登录,是否能算会话层? 但SOCKS明显和TLS一样,是传输层
算了,反正SOCKS也不够用,还不是要有人再外套一层混淆协议
当然这些OSI模型都无所谓, 那些XML,cookie,请求响应,投射到编程的世界,也就只是对象、句柄和回调 文件上传什么的
原来下发个文件就能叫应用层,curl wget netcat 叫客户端,这也太IP了 #linux #net #learn
没错,在IP4层模型里,HTTP只能是应用层, 但就我对操作系统和Web传输的了解,负责MIME、托起HTML的http: 居然比FTP/NFS,SQL还高两层?
- 没错,HTTP自己就能作静态站应用,就像IRC。 一个被淘汰很多年的方向了
- HTTP如果是应用层,它的用户就是bot user 或者测试工程师吧?
- 那么,比HTTP高的HTML还是表示层吗? socket() 字节流「三次握手」称为会话?? 所以TCP,TLS不该叫传输层了?
- 那么,Accept-Encoding:gzip 和HTML里的charset="" 也算应用层属性? MIME这些由Blink或Flash处理的玩意,并不比HTML更应用层?
- RFC7230 的说法都是错的,对js和java而言,连接并不是无状态的
- 越来越多人在用 long-poll 轮询和cookie,而Header字典毫无疑问就是为了配置这些缓存缓冲
- 这种stateful 并不比 mysql:login 链接弱--SQL也支持多客户端
- SOCKS5 和HTTP代理, 因为需要登录,是否能算会话层? 但SOCKS明显和TLS一样,是传输层
算了,反正SOCKS也不够用,还不是要有人再外套一层混淆协议
当然这些OSI模型都无所谓, 那些XML,cookie,请求响应,投射到编程的世界,也就只是对象、句柄和回调 文件上传什么的
原来下发个文件就能叫应用层,curl wget netcat 叫客户端,这也太IP了 #linux #net #learn