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
Forwarded from CyanChannel Archive
现在用 Google 搜索缩写 “GPT” 已经不能在首页看到关于 “GUID Partition Table”(GUID 分区表)的结果了。实际上翻了两三页也基本上都是 ChatGPT 的内容。
P.S. 印象中有一张图就是在描述这个现象,“I miss the Internet when searching GPT gives you GUID Partition table”
P.S. 印象中有一张图就是在描述这个现象,“I miss the Internet when searching GPT gives you GUID Partition table”
duangsuse::Echo
#py #code #recommend 说到有趣的py接口,有个 iself() def read_as_io(f): class T(io.TextIOBase): read=lambda o,size: f(o) return T -匿名对象 之前写贪吃蛇 snk.c 就用到链表 不想缓冲区溢出的话Vec还是好的。C里你要实现[] 需要懂链表/strcat, rust 里你写 Vec<i32> push 就好了 Rust的生命周期现在基本不需要考虑(尤其是对应用开发时), type infer…
#py 周刊阅读笔记
https://t.me/NewlearnerChannel/12060
https://t.me/NewlearnerChannel/12097
https://www.kdnuggets.com/why-you-should-not-overuse-list-comprehensions-in-python
#code
# Parse&flatten the JSON string with deep"inner_key" into a Python dictionary
这个也不想,因为用match和递归更常见吧,elif isinstance 是什么py2地狱绘图
https://bernsteinbear.com//blog/simple-python-repl/#:~:text=readline%20API
https://www.skywind.me/blog/archives/2761
如何利用RegExp/创建REPL
出自 https://docs.python.org/3.11/library/re.html
#js #code 当输入 "3 hello 1world" 时展开缩写,并且补齐出现过的词
就用 <body ContentEditable>+CSS.hilights 示例吧?
https://jsbin.com/kamufijomu/edit?js,output 😅
参考^回复,这样就有分词和括号配对高亮了?
—续周刊
https://github.com/stickfigure/blog/wiki/How-to-(and-how-not-to)-design-REST-APIs
十多项 REST API 的最佳实践规则,解释了规则的含义及实现
作者嘲笑了几家公司被广泛使用的 API,将它们作为规则的反例。
[Django 5.0 发布了!](https://docs.djangoproject.com/en/5.0/releases/5.0)
新增`Field.db_default` 参数,可设置由数据库计算的日期等默认值;`GeneratedField` 可以创建由数据库计算的列,简化了表单字段相关元素的呈现
FastAPI 已经支持
[kolo VSCode 插件:查看 Django 应用的执行过程](https://github.com/kolofordjango/kolo)
具有帧可视化、漂亮的火焰图、显示执行了 SQL 查询的代码行
[autometrics-py:函数级的指标监测工具](https://github.com/autometrics-dev/autometrics-py)
只加一个装饰器,可检测函数的请求率、错误率和延迟,开箱即用仪表板、自定义告警、运行开销小
https://dev.to/taipy/new-open-source-vs-old-open-source-33k7
10 组在 Python 社区很知名的库的替代库,这里最没争议的估计是 Ruff 替代 Pylint,
其它则还有:Taipy/Streamlit、Polars/Pandas、Dask/PySpark、PyTorch/TensorFlow ……
[Python 借助 Gopy 库实现调用 Go.whl 包](https://last9.io/blog/using-golang-package-in-python-using-gopy/)
https://preslav.me/2023/11/27/python-is-easy-golang-is-simple-simple-is-not-easy/#:~:text=also%20at%20the-,core%20of%20Django,-%2C%20which%20speaks%20to
[对比 Python 与 Rust 的编程习惯用法](https://programming-idioms.org/cheatsheet/Python/Rust) 有意思的网站,可比较不同编程语言在 300 多项习惯用法上的区别
就像 https://component-party.dev/
https://kobzol.github.io/rust/python/2023/05/20/writing-python-like-its-rust.html
从 Rust 中学到的一些编程习惯:使用类型提示、使用数据类代替元组或字典、使用代数数据类型、使用“newtype”、使用构造函数、使用互斥锁等
[Python 工具箱系列文章](https://www.cnblogs.com/shanxihualu/p/17391082.html)
这是一个系列文章,目前包含 31 篇文章,最近介绍的几个工具是数据库相关的:Neo4j(一个 NoSQL 图数据库,使用 Py2neo 操作)、PostgreSQL
[trogon:为 CLI 程序生成友好的GUI](https://github.com/Textualize/trogon)
[当在终端输入“ls”后会发生什么?](https://www.warp.dev/blog/what-happens-when-you-open-a-terminal-and-enter-ls)(英文)
有一道很类似的常见的面试题:“当在浏览器输入 google.com 后会发生什么?”
[solara:一个纯 python、React-风格的ipywidget框架](https://github.com/widgetti/solara)
[用tkinter、PySimpleGUI 和 Jupyter Notebook 播放 GIF?](https://www.blog.pythonlibrary.org/2023/12/05/viewing-an-animated-gif-with-python/)
https://toga.readthedocs.io/en/stable/tutorial/tutorial-0.html#:~:text=()%0A%0A%20%20%20%20button%20%3D-,toga.Button,-(%22Hello%20world
Toga是跨平台的pyGUI
kanban-python:终端中的看板应用程序,和Vue TUI 一样
https://t.me/NewlearnerChannel/12060
https://t.me/NewlearnerChannel/12097
https://www.kdnuggets.com/why-you-should-not-overuse-list-comprehensions-in-python
#code
primes =lambda upper_limit: [x for x in range(2, upper_limit + 1) if x > 1 and all(x % i != 0 for i in range(2, int(math.sqrt(x)) + 1))]后面
primes(50)
#拆分后
is_prime=lambda num: num > 1 and all(num % i != 0 for i in range(2, int(math.sqrt(num)) + 1))
primes = [x
for x in range(2, 50 + 1)
if is_prime(x)
]
def flatten_matrix(matrix):求和排序的我不想写,因为明显可以用 yield和np.vectorize
def find_prime_indices(matrix, flattened_matrix):
# Parse&flatten the JSON string with deep"inner_key" into a Python dictionary
这个也不想,因为用match和递归更常见吧,elif isinstance 是什么py2地狱绘图
https://bernsteinbear.com//blog/simple-python-repl/#:~:text=readline%20API
https://www.skywind.me/blog/archives/2761
如何利用RegExp/创建REPL
出自 https://docs.python.org/3.11/library/re.html
#js #code 当输入 "3 hello 1world" 时展开缩写,并且补齐出现过的词
Lexer=kv=>{
let re=Object.keys(kv).map(x=>`(${x})`).join('|'), mf=Object.values(kv),m,i,j=0
re=RegExp(re, 'gy')
return (s,ontok)=>{
for(m of re[Symbol.matchAll](s)) ontok(
mf[(j=m.findIndex((x,i)=>null!=x &&i!=0))-1](m[j]), (i=m.index), i+m[0].length
)
}
}
f=Lexer({
'\\d+':parseInt,
'[a-zA-Z]+':s=>s,
'\\s+'(){}
})
rep=(txt,on, n=null)=>f(txt,x=> (x==null)?on(' '):
(x.substr)? (on(x.repeat(n)),n=null) :
(n=x)
)
buildAry=(f,a=[])=>(f(x=>a.push(x)), a)
buildAry(rep.bind(0,"3hi 1end")).join('')
因为JS部分都这么长,还是懒得移植到PyExecJS了,总之分词器、括号配对啥的可以靠正则,提供补齐列表也不难就用 <body ContentEditable>+CSS.hilights 示例吧?
https://jsbin.com/kamufijomu/edit?js,output 😅
参考^回复,这样就有分词和括号配对高亮了?
—续周刊
https://github.com/stickfigure/blog/wiki/How-to-(and-how-not-to)-design-REST-APIs
十多项 REST API 的最佳实践规则,解释了规则的含义及实现
作者嘲笑了几家公司被广泛使用的 API,将它们作为规则的反例。
[Django 5.0 发布了!](https://docs.djangoproject.com/en/5.0/releases/5.0)
新增`Field.db_default` 参数,可设置由数据库计算的日期等默认值;`GeneratedField` 可以创建由数据库计算的列,简化了表单字段相关元素的呈现
FastAPI 已经支持
python-dependency-injector 实现依赖注入的方法。[kolo VSCode 插件:查看 Django 应用的执行过程](https://github.com/kolofordjango/kolo)
具有帧可视化、漂亮的火焰图、显示执行了 SQL 查询的代码行
[autometrics-py:函数级的指标监测工具](https://github.com/autometrics-dev/autometrics-py)
只加一个装饰器,可检测函数的请求率、错误率和延迟,开箱即用仪表板、自定义告警、运行开销小
https://dev.to/taipy/new-open-source-vs-old-open-source-33k7
10 组在 Python 社区很知名的库的替代库,这里最没争议的估计是 Ruff 替代 Pylint,
其它则还有:Taipy/Streamlit、Polars/Pandas、Dask/PySpark、PyTorch/TensorFlow ……
[Python 借助 Gopy 库实现调用 Go.whl 包](https://last9.io/blog/using-golang-package-in-python-using-gopy/)
https://preslav.me/2023/11/27/python-is-easy-golang-is-simple-simple-is-not-easy/#:~:text=also%20at%20the-,core%20of%20Django,-%2C%20which%20speaks%20to
[对比 Python 与 Rust 的编程习惯用法](https://programming-idioms.org/cheatsheet/Python/Rust) 有意思的网站,可比较不同编程语言在 300 多项习惯用法上的区别
就像 https://component-party.dev/
https://kobzol.github.io/rust/python/2023/05/20/writing-python-like-its-rust.html
从 Rust 中学到的一些编程习惯:使用类型提示、使用数据类代替元组或字典、使用代数数据类型、使用“newtype”、使用构造函数、使用互斥锁等
[Python 工具箱系列文章](https://www.cnblogs.com/shanxihualu/p/17391082.html)
这是一个系列文章,目前包含 31 篇文章,最近介绍的几个工具是数据库相关的:Neo4j(一个 NoSQL 图数据库,使用 Py2neo 操作)、PostgreSQL
[trogon:为 CLI 程序生成友好的GUI](https://github.com/Textualize/trogon)
[当在终端输入“ls”后会发生什么?](https://www.warp.dev/blog/what-happens-when-you-open-a-terminal-and-enter-ls)(英文)
有一道很类似的常见的面试题:“当在浏览器输入 google.com 后会发生什么?”
[solara:一个纯 python、React-风格的ipywidget框架](https://github.com/widgetti/solara)
[用tkinter、PySimpleGUI 和 Jupyter Notebook 播放 GIF?](https://www.blog.pythonlibrary.org/2023/12/05/viewing-an-animated-gif-with-python/)
https://toga.readthedocs.io/en/stable/tutorial/tutorial-0.html#:~:text=()%0A%0A%20%20%20%20button%20%3D-,toga.Button,-(%22Hello%20world
Toga是跨平台的pyGUI
kanban-python:终端中的看板应用程序,和Vue TUI 一样
Telegram
Newlearnerの自留地
#Python潮流周刊
Python 潮流周刊#27:应该如何处理程序的错误?
🦄文章&教程
1、将 Python 错误作为值:比较 Go 和 Rust 的使用模式
2、调试 Django 中的 CSRF 失败/403 禁止错误
3、对 Python 环境和包管理工具的公正分析
4、让我们一起创建一个 Python 调试器
5、揭开 Python 3.12 的面纱:Python 世界有哪些新东西?
6、Python 的哈希表指南
7、运行不可信的 Python 代码
8、了解 Linux cp 命令并用…
Python 潮流周刊#27:应该如何处理程序的错误?
🦄文章&教程
1、将 Python 错误作为值:比较 Go 和 Rust 的使用模式
2、调试 Django 中的 CSRF 失败/403 禁止错误
3、对 Python 环境和包管理工具的公正分析
4、让我们一起创建一个 Python 调试器
5、揭开 Python 3.12 的面纱:Python 世界有哪些新东西?
6、Python 的哈希表指南
7、运行不可信的 Python 代码
8、了解 Linux cp 命令并用…