duangsuse::Echo
#algorithm #FP 版的 list 累加法杨辉三角 ps. 也可以用DP和代数式推算 P2:垃圾 itertools #py #code from itertools import accumulate,islice,chain fib=iself(2,lambda x0,x1: chain([1,1], (x+y for x,y in zip(x0,x1)) )) def 杨辉(): #pascal_triangle row = [1] while True: yield…
#sql #ts Prolog 牛逼! 正确的关系式搜索+ 同时实现 parse 和 toStr 😱
#zhihu 灵感来源
5行就能实现一个str”模板“,写法相对匮乏但功能丰富,吊打 Haskell 的 TextCombinator 🥺
❤️ https://eu.swi-prolog.org/pldoc/man?section=basics
这里还有个Lisp实现
#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); ("(", e(X), ")"), !. % 单项值/字面
op(I,W) --> [C], { nth0(I0,W,C),nth0(I0,"加减乘除",I) }. 5行就能实现一个str”模板“,写法相对匮乏但功能丰富,吊打 Haskell 的 TextCombinator 🥺
❤️ https://eu.swi-prolog.org/pldoc/man?section=basics
这里还有个Lisp实现
duangsuse::Echo
举例, #ts 上有”交并集类型“ (有人认为 hs, Rust 没有子类型所以不存在集合论的,确实如此但 in-out 形变是Racket子语言里也有的,我找不到原文但TRack 是有) (我一点也不羡慕没有重载和this模块等多态技术的圆括号 😅, 模型的缺失是拿宏手动兼容 a.b.c 所弥补不了的, 就像 F# 的 |> 比不上 xx.let{}, kt 的元组 destruct 比不上 ES6 let[x,y]=P, ES6的解构又不如 Prolog 的 unify [x,1]=[2,y]...…
#FP Prolog 和 Racket 一样都有严重的语法缺陷:没有真正的等号,语法一致性也很差;也就比 #SQL 好了
或许 Lisp 的嵌套链表很”统一“,但统一并不等于简单而一致
number(X) 就是 X=num() 的意思,很多算式本该有”一个值“,而不是为了”X=1 返回 [{X:1}]“ 就放弃简化
Res 变量应该被掩盖掉,就像Go等所有现代语言都抛弃了
确实 inc1(x)=2 可能需要闭包和重载,所以我说圆括号很垃圾,因为不够”广义“的等号,和那些扭来扭去的数学希腊字或者VB,PHP一样
🥰我最爱的方向是:
- 定义式/py,rb,元编程,跨平台接口
- 关系式/模式匹配,读写转化,typing知识
- 响应式/Vue ,await和协程, 编程时所见即所得
- 跨领域/基于物理,OS,libc 等根源问题的搜索习惯
或许 Lisp 的嵌套链表很”统一“,但统一并不等于简单而一致
number(X) 就是 X=num() 的意思,很多算式本该有”一个值“,而不是为了”X=1 返回 [{X:1}]“ 就放弃简化
Res 变量应该被掩盖掉,就像Go等所有现代语言都抛弃了
struct*, char**
那样👆e(X) 就可以不用”宏“ 或 Monad 来实现隐式参数,化简3参数的 S=X+R, "2x"==2+'x' , 直接 num=[S,X,R] 就能被 repeat() 修饰了, num=["12a",X] 优于 phrase(num(X), "12","a")
(话说 hs 也真是垃圾🙉 连伪递归纯函数 都强制化了,却仍然不能求解出 x+[2,3]=[1,2,3] ?? 递归再回溯,不就是为了方便DFS吗?确实 inc1(x)=2 可能需要闭包和重载,所以我说圆括号很垃圾,因为不够”广义“的等号,和那些扭来扭去的数学希腊字或者VB,PHP一样
🥰我最爱的方向是:
- 定义式/py,rb,元编程,跨平台接口
- 关系式/模式匹配,读写转化,typing知识
- 响应式/Vue ,await和协程, 编程时所见即所得
- 跨领域/基于物理,OS,libc 等根源问题的搜索习惯
duangsuse::Echo
#tech #recommend #js 🧐从『函数』的定义就能知道,#编程范式 的发展史 👉 地址symbol、子程序void()、对象 SAM object、算式 x=>y 或文档树、 模式查询select [a b], a=1|a=2 : x86无结构:是弱检查指针、面条流控、256项字符集,定长数组,栈分配,加载到内核mmap(rwx..不能为READ 段错误) 是dll内地址 C过程式:是向调用栈赋值后跳过去等返回,是子程序 C#OOP:捕获了局部变量(cellvar,可变)、原型虚表到t…
#py 周刊
- Excel 支持
- PowerToys添加“可交互”的截图
- Google 等各种大公司的技术blog #list
- #apple #design 设计师法则
- #learn 看美军的脏话官话(F-words)学英语 。
- 单靠 #sql 如何保存数据
- APL 里有的 py 基本列表处理式
- FastAPI 最佳实践 list
- async stdlib: 对比理解各种流行实现
- fixit linter: py 版本的 IDEA 自动迁移 (无AI), cffi: 我用什么 C parser 链接到.h 文件
- 用 difflib 开发一个文件比较工具
- KeymouseGo, ahkunwrapped py : 类似按键精灵的鼠标键盘录制和自动化操作
- quivr:生成式 AI 打造你的第二大脑, trafilatura: GUI 文本/评论 爬虫
检索非结构化的信息,可以理解成支持人工智能的 Obsidian。可以处理各种形式的文件如文本、图片、代码、音频和视频等,依赖于 ChatGPT、Docker、Supabase
- FastAPI + SSE
- 用py编写代码高亮图片生成 (carbon.now.sh ..)
- Streamlit 地图高亮生成
- Streamlit GPT4文件摘要工具
- Mojo #ai #rust: 对Py的渐强类型&优化 的语法改进 [waitlist]
#code #algorithm 埃氏素数筛
- Excel 支持
import pandas, statsmodels, matplotlib / seaborn 了, Guido 亲自推广(可能是云计算,要订阅)- PowerToys添加“可交互”的截图
- Google 等各种大公司的技术blog #list
- #apple #design 设计师法则
- #learn 看美军的脏话官话(F-words)学英语 。
- 单靠 #sql 如何保存数据
- APL 里有的 py 基本列表处理式
- FastAPI 最佳实践 list
- async stdlib: 对比理解各种流行实现
- fixit linter: py 版本的 IDEA 自动迁移 (无AI), cffi: 我用什么 C parser 链接到.h 文件
- 用 difflib 开发一个文件比较工具
- KeymouseGo, ahkunwrapped py : 类似按键精灵的鼠标键盘录制和自动化操作
- quivr:生成式 AI 打造你的第二大脑, trafilatura: GUI 文本/评论 爬虫
检索非结构化的信息,可以理解成支持人工智能的 Obsidian。可以处理各种形式的文件如文本、图片、代码、音频和视频等,依赖于 ChatGPT、Docker、Supabase
- FastAPI + SSE
new EventSource('/http流') API 下发文本消息 - 用py编写代码高亮图片生成 (carbon.now.sh ..)
- Streamlit 地图高亮生成
- Streamlit GPT4文件摘要工具
- Mojo #ai #rust: 对Py的渐强类型&优化 的语法改进 [waitlist]
def mandelbrot_0(c: ComplexFloat64) -> Int: #CPU FMA优化, 1Mojo = 15Numpy = 89CPy👀 Rust 确实是资本的语言,融资1亿刀乐
z = c, nv = 0
for i in range(1, 200): #清晰度
if abs(z) > 2: break
z = z*z + c
nv += 1
return nv
#code #algorithm 埃氏素数筛
def gen_primes():
"""Generate an infinite sequence of prime numbers."""
D = {}
q = 2
while True:
if q not in D: D[q * q] = [q];yield q
else:
for p in D[q]: D.setdefault(p + q, []).append(p)
del D[q]
q += 1
Telegram
Newlearnerの自留地
#Python潮流周刊 #Newsletter
Python 潮流周刊#17:Excel 终于支持 Python 了、Meta 重磅开源新项目
🦄文章&教程
1、Excel 终于支持 Python 了!
2、如何使用 FastAPI 与 aiohttp 进行 SSE 响应开发?
3、用 FastAPI 和 Hamilton 实现的 PDF 摘要工具
4、放弃 Python 拥抱 Mojo?鹅厂工程师真实使用感受
5、Mojo 如何获得比 Python 快 35000 倍的加速?
6、APL 语言教会我的那些…
Python 潮流周刊#17:Excel 终于支持 Python 了、Meta 重磅开源新项目
🦄文章&教程
1、Excel 终于支持 Python 了!
2、如何使用 FastAPI 与 aiohttp 进行 SSE 响应开发?
3、用 FastAPI 和 Hamilton 实现的 PDF 摘要工具
4、放弃 Python 拥抱 Mojo?鹅厂工程师真实使用感受
5、Mojo 如何获得比 Python 快 35000 倍的加速?
6、APL 语言教会我的那些…
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求解器,没有了解过的朋友可能会好奇:求解器到底是什么“神器”? 简单一句话总结就是专门为世界上各行各业的复杂问题进行最优…
#post #cg #tool https://www.youtube.com/watch?v=jCd6XfWLZsg
#sql https://apvarun.github.io/graphize/
https://orml.openrndr.org/orml/#:~:text=orml-dbface
https://pixijs.com/8.x/tutorials/getting-started#4
http://fabricjs.com/demos/
唉呀 Creative Programming 的业余和部署差异怎么就那么大呢
ShaderToy.com 和 p5js.org 可以说是3D和粒子模拟的老牌了
我觉得可以和 https://ncase.me/joy/demo/turtle/ turtletoy.net 的小乌龟 儿童编程 比, 还有 CSS houdini.how
和 https://eternal.rob.computer/ cables.gl
http://paperjs.org/examples/candy-crash/ animejs.com 这些是不够力的
https://github.com/jagenjo/litegraph.js?tab=readme-ov-file#projects-using-it comfyUI #blender
https://github.com/cai-hust/manim-tutorial-CN
https://rossning92.github.io/movy/?file=examples/demo/movy-logo.js
http://tridiv.com/
用散点transform:画吗.. https://petertyliu.github.io/toaster/
用 CSS + HTML 画三维物体的可视化编辑器。
#sql https://apvarun.github.io/graphize/
https://orml.openrndr.org/orml/#:~:text=orml-dbface
https://pixijs.com/8.x/tutorials/getting-started#4
http://fabricjs.com/demos/
唉呀 Creative Programming 的业余和部署差异怎么就那么大呢
ShaderToy.com 和 p5js.org 可以说是3D和粒子模拟的老牌了
bunny.rotation += 0.1 * time.deltaTime; 这种程度CG还搞模块化我觉得可以和 https://ncase.me/joy/demo/turtle/ turtletoy.net 的小乌龟 儿童编程 比, 还有 CSS houdini.how
和 https://eternal.rob.computer/ cables.gl
http://paperjs.org/examples/candy-crash/ animejs.com 这些是不够力的
https://github.com/jagenjo/litegraph.js?tab=readme-ov-file#projects-using-it comfyUI #blender
https://github.com/cai-hust/manim-tutorial-CN
https://rossning92.github.io/movy/?file=examples/demo/movy-logo.js
http://tridiv.com/
用散点transform:画吗.. https://petertyliu.github.io/toaster/
用 CSS + HTML 画三维物体的可视化编辑器。
YouTube
Top 6 Tools to Turn Code into Beautiful Diagrams
Get a Free System Design PDF with 158 pages by subscribing to our weekly newsletter: https://bit.ly/bytebytegoytTopic
Animation tools: Adobe Illustrator and After Effects.
Checkout our bestselling System Design Interview books:
Volume 1: https://amzn.to/3Ou7gkd…
Animation tools: Adobe Illustrator and After Effects.
Checkout our bestselling System Design Interview books:
Volume 1: https://amzn.to/3Ou7gkd…
#learn #bash with #tool 入门+优质冷知识 😋
图为 asciinema.org/explore 。没有 #linux 的极客可打开 WebVM.io
Linux Deploy; (Mac)Git Bash; winetricks; screenfetch 甚至 bashttpd; pacman/OpenRC init 基于bash
shell 是类似 Windows.ps1 但使用纯文本或行IO的脚本编程语言。 每当你看见awk|sed|grep ,那就是在 #sql select访问属性、文本替换、where过滤了
Dijkstra说,用BASIC编程的人“脑子已经坏了”,作为运维你要尽力避免这一点。用AI写命令思路也是要正确! 😨
因此在思考时,你应当用pwsh的API模型:
更不是 网关=
— 快捷键 (
⬆️⬇️滚动历史, Alt/Fn⬅️➡️ 跳词/跳行,Tab补齐, ls \ mydir 或fc:多行命令
^=Ctrl, M=Alt e=ESC
^M T 打开cmd窗口 ^L清屏 ^D退出
!cd 执行最近1次cd开头的命令, sudo !! 补齐为上一条命令
touch a; ls $_ #操作同一个文件
^a^b 改参数重执行
^U ^Y 剪切和粘贴行,nano同款
*.mp4 ^xg #查看符合正择的文件,免ls|grep
^A# ^E# 意为正则/^$/。script录制时(例如
^M F1~F6 一般含几个tty串口,通过 echo>/dev/tty2 即w;write,您可以装得像电脑有第二个人在用一样 还需要协作 😅
图为 asciinema.org/explore 。没有 #linux 的极客可打开 WebVM.io
Linux Deploy; (Mac)Git Bash; winetricks; screenfetch 甚至 bashttpd; pacman/OpenRC init 基于bash
shell 是类似 Windows.ps1 但使用纯文本或行IO的脚本编程语言。 每当你看见awk|sed|grep ,那就是在 #sql select访问属性、文本替换、where过滤了
Dijkstra说,用BASIC编程的人“脑子已经坏了”,作为运维你要尽力避免这一点。用AI写命令思路也是要正确! 😨
因此在思考时,你应当用pwsh的API模型:
Get-Date|select Year; dir|?{$_.CreationTime.Year -lt 2024} ,而不止是 date '+%Y' ; find . -maxdepth 1 -type f -not -newerct 2023.12.31更不是 网关=
ip r|awk '{print $3}' 这样的糟粕— 快捷键 (
bind -p|grep '"\\C')⬆️⬇️滚动历史, Alt/Fn⬅️➡️ 跳词/跳行,Tab补齐, ls \ mydir 或fc:多行命令
nl $HISTFILE|tac|less 默认保留500条可清空^=Ctrl, M=Alt e=ESC
^M T 打开cmd窗口 ^L清屏 ^D退出
!cd 执行最近1次cd开头的命令, sudo !! 补齐为上一条命令
touch a; ls $_ #操作同一个文件
^a^b 改参数重执行
^U ^Y 剪切和粘贴行,nano同款
*.mp4 ^xg #查看符合正择的文件,免ls|grep
^A# ^E# 意为正则/^$/。script录制时(例如
history 3) 添加注释 ^M F1~F6 一般含几个tty串口,通过 echo>/dev/tty2 即w;write,您可以装得像电脑有第二个人在用一样 还需要协作 😅
橘橘橘子汁 & 🍊
https://zhuanlan.zhihu.com/p/707493606 虽然确实是可行的但是这是什么玩意😇
#您知道吗? #cs #dnn #wasm 计科长青树一瞥:递归下降、梯度下降 (1)
*编程的赞歌就是(组合compose)的赞歌,软工的伟大就是(复用reuse)的伟大!*
复用就是腾讯嘛!但,什么是组合?流行乐队是组合?
在《几何原本》里有这样一条公理:“整体”是由部分构造堆上去的。 无论物理的原子分子、化学的单质单剂、生物的组织系统、儿童编程的二分查找,甚至您编写的{语句}(算式) 定义表(),总少不了分治算法的影子;而与递归对应得最直观的树,除了带kwarg的视图描述树XML、文件夹管理和正则匹配的前/后缀树Trie、OIer的必修KMP图(: Trie+FailGoto),更有梗图里常被实现为SortedSetOrMap的红黑树RBTree(: AVL) --作为按int KHash()预分组K-V查找的一种补充。
不过,今天咱调戏的不是高深的算法或数理化,而是程序员的自我修养:表达式、解释、编译、类型检查和推理。
🤓不少语法看似是ES6,Kotlin,Java20+,C++里高深莫测的新特性,其实,只是因为它们的设计混乱带来的大误会! 软件工程界的基岩,原本很简单?
- 计算器🧮("1+1"):数据值 是不支持forif或(vars)=>函数/JSON文档的解释器,最简单的理解是 x=1; eval[+,1]。对内存的利用方式过于单一,就像🔑C语言的.o .so 只是靠LD互调用的object{static{}},或者VB一代难加函数的"红石命令",毫无扩展性还要另写头文件 自然被淘汰
- 解释📠("expr(1+1)"):值或行为 程序员唯一必须调用的接口。tree-walk(递归遍历算式)非解释器的专利、VM不是编译器的秘技。对x86汇编的执行也叫硬件解释,旧安卓通过转译arm汇编.so库到x86做兼容,就像IKVM对“JVM汇编”仍能再次转译到IL
- 编译 就是解释器的缓存📑:记住自顶向下遍历时的套路,直接自底向上组装值(lisp转RPN),很像二叉树vs(堆,一种树状数组)!这除了要重新实现重复/判定/ret&&break跳转的流控,还可将RPN栈指令集优化为局部读写-按类型复用。
要求手动编译的语言均属慢速原型,会标注或推理出类型签名,从而🔑以限界实现提速和多态(重写重载、记住变量名的指针,即担保栈size恒定)。 ANTLR等“状态机”编译器的输出便是自底向上,正好颠倒于主动read()流到js栈的PEG,不过,它们其实是慢的虚拟机。
类型的本质是简洁的🔑常量「黑盒测试」,它与表达式同构,执行方法也相同!
- 类型检查 就是只解释 def f(x:T):R 里":右侧"的算式,以插入 (f T R) 这样的SQL行。x编译后是arg[0]:一个空悬指针,但T.fns却是有血有肉的"反射"常量。把每个 x:T=1 换为 x=T!
x+x 的语意为查询 (+ T T)、1+"" 查找函数签名 (+ int str)、 u.id (.id User Ret?) 便能检查误拼写和空指针
不难发现,这些都是效仿numpy重载个运算符就能实现的,并不需要学编译原理写解析器!这也是 hamcrest.org http Test库断言组合器的原理
泛型class/fn/var和赋值 的推理规则是一样的。
例如把 <TR> as([Box, T], T=>R):R 与 as(Box(1), str) 深度重合时,新建两个TypeVar(void),它们会在 Int==T, R==str 的检查时被向上赋值,从而填充[Box,int]里的类型T、as调用里的R,并照顾到 i32->i64等转换及子类规则
同为编译期遍历,你还可以思考下 let[x0,x1]=a 如何被实现的,以及在运行期是否能模拟?
学习元编程有何好处🌝?因为可以从根源理解yield/await、纯函数、模式匹配、模板宏等“新”特性,凭什么能简化旧实践!
- 闭包和协程closure&coro 便是编译比解释好实现的两个特性。 compiler 通过{let;}的动态作用域(原型链..) 区分符号的LEGB来源(Local Enclosed外层局部 Global Builtin常量),从而能把 (x=>y=>x+y) 化为对象值 f_y=((x,y)=>).bind(x);Lua能查出跳转到表达式的指针,y=yield x 便能在return前,把函数的局部栈保存回 g.next/pr.then
- 模板constexpr 让闭包关于常量创建,如何? ((x,y)=>x+y).bind(1) 就是 1+y, ((k,s)=>s[read+k]() ).bind("Int") 就是readInt,*[map(print,0~9)] 就是循环展开,这些就是预处理的价值!反射和const只是对eval(并缓存)之「二段求值」的阉割
- 副作用effects #FP bros异常抨击print这种“无法被值存储的、有非局部干扰的赋值”并推广他们的赎罪券:Monad……这却是因为他们并不懂「定义式编程」!
React signal(x=0) (1) 就是一个不纯的赋值,但,它导致的x=1却能被广播为参数、被保存和复现!🔑这还能叫“状态变更泄露难题”么?
并且,它还偷走了"FP独有的模式匹配"。对赋值副作用的录制,更是bash,vimrc类格式经久不衰的原因
说准点,这些都是 #SQL 的老大Prolog所原创并推崇的-:变量作为值,逻辑式编程!
*整体大于局部;与另一结构重合的结构,之中的值相等 --几何原本*
⏳在通读本文时,也可以参考以下实例:
coroutine=由用户run()的线程
*调用栈是数组,协程栈是回调构成的链表
诸分治排序可视化
手动babel脱糖一个async函数
知乎:分词解析vs解释
实现一个HTTP DSL
Var(signalObj)如何跨越进程和网络:句柄、登录cookie、JWT
def(): return this 是何方神圣?
在解释时缓存代码的Tk GUI
Trie们和字典输入法的实现
关于class Visitor {se(e:Add_AB), se(e:Int)} 和Eval/Dump接口的融合
实现文本流递归下降、四则运算逆波兰、 JSON.org
Prolog binop #parser
计科原神:认识WASM/LLVM IR和JIT, webVM.io
*编程的赞歌就是(组合compose)的赞歌,软工的伟大就是(复用reuse)的伟大!*
复用就是腾讯嘛!但,什么是组合?流行乐队是组合?
在《几何原本》里有这样一条公理:“整体”是由部分构造堆上去的。 无论物理的原子分子、化学的单质单剂、生物的组织系统、儿童编程的二分查找,甚至您编写的{语句}(算式) 定义表(),总少不了分治算法的影子;而与递归对应得最直观的树,除了带kwarg的视图描述树XML、文件夹管理和正则匹配的前/后缀树Trie、OIer的必修KMP图(: Trie+FailGoto),更有梗图里常被实现为SortedSetOrMap的红黑树RBTree(: AVL) --作为按int KHash()预分组K-V查找的一种补充。
不过,今天咱调戏的不是高深的算法或数理化,而是程序员的自我修养:表达式、解释、编译、类型检查和推理。
🤓不少语法看似是ES6,Kotlin,Java20+,C++里高深莫测的新特性,其实,只是因为它们的设计混乱带来的大误会! 软件工程界的基岩,原本很简单?
- 计算器🧮("1+1"):数据值 是不支持forif或(vars)=>函数/JSON文档的解释器,最简单的理解是 x=1; eval[+,1]。对内存的利用方式过于单一,就像🔑C语言的.o .so 只是靠LD互调用的object{static{}},或者VB一代难加函数的"红石命令",毫无扩展性还要另写头文件 自然被淘汰
- 解释📠("expr(1+1)"):值或行为 程序员唯一必须调用的接口。tree-walk(递归遍历算式)非解释器的专利、VM不是编译器的秘技。对x86汇编的执行也叫硬件解释,旧安卓通过转译arm汇编.so库到x86做兼容,就像IKVM对“JVM汇编”仍能再次转译到IL
- 编译 就是解释器的缓存📑:记住自顶向下遍历时的套路,直接自底向上组装值(lisp转RPN),很像二叉树vs(堆,一种树状数组)!这除了要重新实现重复/判定/ret&&break跳转的流控,还可将RPN栈指令集优化为局部读写-按类型复用。
要求手动编译的语言均属慢速原型,会标注或推理出类型签名,从而🔑以限界实现提速和多态(重写重载、记住变量名的指针,即担保栈size恒定)。 ANTLR等“状态机”编译器的输出便是自底向上,正好颠倒于主动read()流到js栈的PEG,不过,它们其实是慢的虚拟机。
类型的本质是简洁的🔑常量「黑盒测试」,它与表达式同构,执行方法也相同!
- 类型检查 就是只解释 def f(x:T):R 里":右侧"的算式,以插入 (f T R) 这样的SQL行。x编译后是arg[0]:一个空悬指针,但T.fns却是有血有肉的"反射"常量。把每个 x:T=1 换为 x=T!
x+x 的语意为查询 (+ T T)、1+"" 查找函数签名 (+ int str)、 u.id (.id User Ret?) 便能检查误拼写和空指针
不难发现,这些都是效仿numpy重载个运算符就能实现的,并不需要学编译原理写解析器!这也是 hamcrest.org http Test库断言组合器的原理
泛型class/fn/var和赋值 的推理规则是一样的。
例如把 <TR> as([Box, T], T=>R):R 与 as(Box(1), str) 深度重合时,新建两个TypeVar(void),它们会在 Int==T, R==str 的检查时被向上赋值,从而填充[Box,int]里的类型T、as调用里的R,并照顾到 i32->i64等转换及子类规则
同为编译期遍历,你还可以思考下 let[x0,x1]=a 如何被实现的,以及在运行期是否能模拟?
学习元编程有何好处🌝?因为可以从根源理解yield/await、纯函数、模式匹配、模板宏等“新”特性,凭什么能简化旧实践!
- 闭包和协程closure&coro 便是编译比解释好实现的两个特性。 compiler 通过{let;}的动态作用域(原型链..) 区分符号的LEGB来源(Local Enclosed外层局部 Global Builtin常量),从而能把 (x=>y=>x+y) 化为对象值 f_y=((x,y)=>).bind(x);Lua能查出跳转到表达式的指针,y=yield x 便能在return前,把函数的局部栈保存回 g.next/pr.then
- 模板constexpr 让闭包关于常量创建,如何? ((x,y)=>x+y).bind(1) 就是 1+y, ((k,s)=>s[read+k]() ).bind("Int") 就是readInt,*[map(print,0~9)] 就是循环展开,这些就是预处理的价值!反射和const只是对eval(并缓存)之「二段求值」的阉割
- 副作用effects #FP bros异常抨击print这种“无法被值存储的、有非局部干扰的赋值”并推广他们的赎罪券:Monad……这却是因为他们并不懂「定义式编程」!
React signal(x=0) (1) 就是一个不纯的赋值,但,它导致的x=1却能被广播为参数、被保存和复现!🔑这还能叫“状态变更泄露难题”么?
并且,它还偷走了"FP独有的模式匹配"。对赋值副作用的录制,更是bash,vimrc类格式经久不衰的原因
说准点,这些都是 #SQL 的老大Prolog所原创并推崇的-:变量作为值,逻辑式编程!
*整体大于局部;与另一结构重合的结构,之中的值相等 --几何原本*
⏳在通读本文时,也可以参考以下实例:
coroutine=由用户run()的线程
*调用栈是数组,协程栈是回调构成的链表
诸分治排序可视化
手动babel脱糖一个async函数
知乎:分词解析vs解释
实现一个HTTP DSL
Var(signalObj)如何跨越进程和网络:句柄、登录cookie、JWT
def(): return this 是何方神圣?
在解释时缓存代码的Tk GUI
Trie们和字典输入法的实现
关于class Visitor {se(e:Add_AB), se(e:Int)} 和Eval/Dump接口的融合
实现文本流递归下降、四则运算逆波兰、 JSON.org
Prolog binop #parser
计科原神:认识WASM/LLVM IR和JIT, webVM.io
dnaugsuz
#java oop 面试题 https://www.bennyhuo.com/2023/08/29/new-book-metaprogramming/#more 哈哈😄,这个好玩 1.(final T)在Gradle里是开发规范,但和final var一样对性能无影响 凑字数 final class是常用法,有些人在使用了虚方法(=构造期传函数)时会对其他项打final,幸好kt里是非open var即封闭、不可变 2final的类名上变量支持常量折叠如 if(DEBUG) 3 JVM.utf16文本…
duangsuse:
nonlocal x=的那条? 总比在C++里到处[]() 或move||要好
大家都不知道闭包捕获引用这些,这首先就要把那些XXer 的SAM类变成函数,然后才有非局部赋值问题
java虽然总八股值和引用,但大家总是不重赋值或深拷贝
我举那个py的例子算是好的,因为py这个畜生是直接把局部创建的cell()给捕获了。。
for a[0] in range 是有效的,许多人搞不明白
duangsuse:
orm就是把class 带上where sort 绑定到sql TABLE
基本上还应该带pager
Spring负责把http路径转到类路径,绑定个函数签名
理论上,pgsql 应该直接回应http请求的😂
90%的代码不过是做鉴权这样的中间件AOP
这一切,都是从PHP和XMLHttpRequest开始
唉,万能http
所以说AOP啊,pre post一加
你看有多少不是纯CRUD
不少小公司和C#的都是直接调用sql函数,不用后端
结果最后还是让程序员充当aigc了是吧。。
那些代码看一眼都算码农啊。。
怎么能容忍90%都是跨端复制的逻辑呢?
你不写,他们也会以合规为由要求写
jpa难道不能和sql模板打配合?
graphql.io 好,百度也有个json ql叫啥 https://baidu.github.io/amis/zh-CN/components/crud?page=1
凑字数能力很强
#sql 可垃圾着呢,我还写过生成sql的查询语言 https://t.me/dsuse/17740
读着自然?都是骗人的, SQsu 都比它更“人类”
select id from 狗 where (月龄>6 and 高>40);
aka 取狗(月龄>6 and 高>40)
正宗的关系式写法是:
狗(id,高,月龄), 月龄>6, 高>40
区区filterSort的模板不值得从ORM,CMS,低代码 这些里面分出个后端开发来
http路径就是类路径,类结构就是方便转码和校验sql数据
绝大部分的app并不需要后端框架,只要pg支持http风格的sql语句和json化,加个鉴权分页什么的。
如果不是pg存储过程的语法垃圾没类库,它就登顶了
#haha #bilibili
pg的存储函数没有类库,也不好 json io, java 才充当了这个协议转换垫片
因此许多SaaS对象存储都是NoSQL的,因为这种RPC架构冗余代码太多🌚
然而在EE程序员逆天才的智锐随变下,无论是生成xml或暴露路由表对象的服务器,绑定函数的方法都非常冗余, demo的匮乏程度更是让人叹为观止
甚至连五星逼格的rust都不禁这样评价:
它们好像连classpath就是URL模板的这回事都搞不清楚,方法签名绑定也做不好,还@什么原神数据来codegen😋
很牛逼吗?fastapi,django, 正常语言到处都在用,放javakt就是高手了,这是🐮逼还是装嫩?
完全无法理解MyBatis为什么比jpa流行,还煞有介事的搞面试题
一个 sql``${} 调用模板罢了
一个被专门做来AI生成的语言,那肯定是垃圾
甚至,ORM都是一种浪费,因为70%的字段根本不会被访问,只是复制到数据库,又复制回js或php式模板侧
连最基本的程数同构都没学过,compose 后才开始搞DSL,更谈何避免Header绑定和分页参数的重复、PUT DELETED POST三方法的多态融合,更别说理解http调用与sql、与bash命令行的同质了。
人家import fire可是0代码就能提供命令行,甚至colab UI。
java元编程能吗?逆天 才EE程序员没那个心智模型!🌝
nonlocal x=的那条? 总比在C++里到处[]() 或move||要好
大家都不知道闭包捕获引用这些,这首先就要把那些XXer 的SAM类变成函数,然后才有非局部赋值问题
java虽然总八股值和引用,但大家总是不重赋值或深拷贝
我举那个py的例子算是好的,因为py这个畜生是直接把局部创建的cell()给捕获了。。
for a[0] in range 是有效的,许多人搞不明白
duangsuse:
orm就是把class 带上where sort 绑定到sql TABLE
基本上还应该带pager
Spring负责把http路径转到类路径,绑定个函数签名
理论上,pgsql 应该直接回应http请求的😂
90%的代码不过是做鉴权这样的中间件AOP
这一切,都是从PHP和XMLHttpRequest开始
唉,万能http
所以说AOP啊,pre post一加
你看有多少不是纯CRUD
不少小公司和C#的都是直接调用sql函数,不用后端
结果最后还是让程序员充当aigc了是吧。。
那些代码看一眼都算码农啊。。
怎么能容忍90%都是跨端复制的逻辑呢?
你不写,他们也会以合规为由要求写
jpa难道不能和sql模板打配合?
graphql.io 好,百度也有个json ql叫啥 https://baidu.github.io/amis/zh-CN/components/crud?page=1
凑字数能力很强
#sql 可垃圾着呢,我还写过生成sql的查询语言 https://t.me/dsuse/17740
读着自然?都是骗人的, SQsu 都比它更“人类”
select id from 狗 where (月龄>6 and 高>40);
aka 取狗(月龄>6 and 高>40)
正宗的关系式写法是:
狗(id,高,月龄), 月龄>6, 高>40
区区filterSort的模板不值得从ORM,CMS,低代码 这些里面分出个后端开发来
http路径就是类路径,类结构就是方便转码和校验sql数据
绝大部分的app并不需要后端框架,只要pg支持http风格的sql语句和json化,加个鉴权分页什么的。
如果不是pg存储过程的语法垃圾没类库,它就登顶了
#haha #bilibili
pg的存储函数没有类库,也不好 json io, java 才充当了这个协议转换垫片
因此许多SaaS对象存储都是NoSQL的,因为这种RPC架构冗余代码太多🌚
然而在EE程序员逆天才的智锐随变下,无论是生成xml或暴露路由表对象的服务器,绑定函数的方法都非常冗余, demo的匮乏程度更是让人叹为观止
甚至连五星逼格的rust都不禁这样评价:
它们好像连classpath就是URL模板的这回事都搞不清楚,方法签名绑定也做不好,还@什么原神数据来codegen😋
很牛逼吗?fastapi,django, 正常语言到处都在用,放javakt就是高手了,这是🐮逼还是装嫩?
完全无法理解MyBatis为什么比jpa流行,还煞有介事的搞面试题
一个 sql``${} 调用模板罢了
一个被专门做来AI生成的语言,那肯定是垃圾
甚至,ORM都是一种浪费,因为70%的字段根本不会被访问,只是复制到数据库,又复制回js或php式模板侧
连最基本的程数同构都没学过,compose 后才开始搞DSL,更谈何避免Header绑定和分页参数的重复、PUT DELETED POST三方法的多态融合,更别说理解http调用与sql、与bash命令行的同质了。
人家import fire可是0代码就能提供命令行,甚至colab UI。
java元编程能吗?逆天 才EE程序员没那个心智模型!🌝
Telegram
duangsuse::Echo
#plt #sql #java 嗯 我前两个月有几天做了一个中文的SQL,并不是机翻,这几周可能会重置给到代码生成和DBA UI的功能,大家可以来学学SQL的写法:
https://duangsuse.github.io/tv/%E9%BB%91%E4%BA%86/db.htm
https://duangsuse.github.io/tv/%E9%BB%91%E4%BA%86/db.htm
#dalao https://www.kxxt.dev/blog/programming-thoughts/2022-04-16/
https://lutaonan.com/blog/code-artists/ #ai #dev 第二次提及了,不符合刻板印象的 #js 人 👍
把 AI 当作是你的员工,就像某一天你突然只需要 $20 一个月就能招无数多愿意帮你打工的人,你很快就会发现,你最终会面临两种局面:
局面1:你将手足无措,你突然发现如果你不是实现函数的那个人,你就不知道你应该做什么了。从前你沾沾自喜的手写快排,手写红黑树突然变得一文不值,无处施展。
局面2:你将如虎添翼,你突然发现你曾经有很多想法没有精力和时间去实现,现在突然有这么多廉价劳动力将不厌其烦地帮你写代码
在这里我要申明,这篇文章我是写给有一定经验的程序员看的。对于没有什么经验的程序员,多写点代码总是好的
就像下面这个例子,我只要说一句 add tanstack query provider 就能让 AI 帮我把 @tanstack/query 加到我的程序里,但如果你没有任何代码经验,你连 query 是什么都不知道
#sql
https://github.com/duckdb/pg_duckdb
https://github.com/asg017/sqlite-vec
#asm C语言的变量符号
https://t.me/kaedeharakazuha17/3548?comment=26435
https://evian-zhang.github.io/learn-assembly-on-Apple-Silicon-Mac/1-底层的整数.html
https://nan-archive.vercel.app/debugger
#bash
https://github.com/kxxt/tracexec?tab=readme-ov-file#origin
可是 stra execve 也可以
https://lutaonan.com/blog/code-artists/ #ai #dev 第二次提及了,不符合刻板印象的 #js 人 👍
把 AI 当作是你的员工,就像某一天你突然只需要 $20 一个月就能招无数多愿意帮你打工的人,你很快就会发现,你最终会面临两种局面:
局面1:你将手足无措,你突然发现如果你不是实现函数的那个人,你就不知道你应该做什么了。从前你沾沾自喜的手写快排,手写红黑树突然变得一文不值,无处施展。
局面2:你将如虎添翼,你突然发现你曾经有很多想法没有精力和时间去实现,现在突然有这么多廉价劳动力将不厌其烦地帮你写代码
在这里我要申明,这篇文章我是写给有一定经验的程序员看的。对于没有什么经验的程序员,多写点代码总是好的
就像下面这个例子,我只要说一句 add tanstack query provider 就能让 AI 帮我把 @tanstack/query 加到我的程序里,但如果你没有任何代码经验,你连 query 是什么都不知道
#sql
https://github.com/duckdb/pg_duckdb
https://github.com/asg017/sqlite-vec
#asm C语言的变量符号
https://t.me/kaedeharakazuha17/3548?comment=26435
https://evian-zhang.github.io/learn-assembly-on-Apple-Silicon-Mac/1-底层的整数.html
https://nan-archive.vercel.app/debugger
#bash
https://github.com/kxxt/tracexec?tab=readme-ov-file#origin
可是 stra execve 也可以
alias stra='strace --quiet=attach,exit -f -e "signal=!chld" -e'
www.kxxt.dev
[编程感想] 2022年4月16日
最近在进行开发的时候, 总有一种感觉, 我感觉编程时很多知识是通过尝试来尝试出来的,而不是通过阅读文档得来的。我并不清楚这是我的个人体验还是很多人的共同感受。但是,经过思考,我发现这种方式存在着一些问题: 通过尝试得来的知识有时是不准确的,甚至会造成非常严重的后果,一些…
duangsuse::Echo
#PLT #learn 文中提到一个Futa对应关系(第一类二村映射 first Futamura projection), 展开讲讲还蛮有趣 🙉 首先,js人都会写计算器的,和 echo input/server 一样的难度 1+2*3 十(1, X(2,3)) -7 十=(A,B)=>A+B 这被称为「前缀式polish notation」,是Lisp的国是 教个小诀窍:js里函数只是一种字面常量,可以被for生成 Object.entries("十一Xノ").forEach(([i,x])=> …
>火之魔女: 不过unification我是想写好久了(应该按年计)但是一直没写的(
https://github.com/duangsuse/mkey 写过,不过落后很久了 #sql
这算法就是
reify([a]) 解引用一下=[1] ,其实也挺有趣,包括npm也在牵强附会这玩意,真让人搞不懂从哪看的
http://minikanren.org/ 使用了一个自有的def: yield 实现,对 a&b 顺序执行,a|b 保存a的回溯以及交替yield ,但 inf(a,x): a=x|inf(a,x+1) 这种递归好像要套一层
append-out 生成加法表是比较知名的范例 https://www.adamsolove.com/microScopeKanren/
https://tca.github.io/veneer/editor.html https://swish.swi-prolog.org/
https://tomstu.art/hello-declarative-world
logicalVars 的真正力量是用在AST里实现函数参数、类型参数及推理等等,比如 vars(x=> Fn([x], [x 1 +])
所谓的HOAS ... 还真挺搞笑的,PLT人怎么会用字符串表示变量??
可以在js里直接解释,也能被整齐替换为为 iload_0 之类的编译
也包括推理
然并暖。 国内讲这个都都是局限于那几个术语和过程,真够无聊的。
unification(变-量叠合) 不是解方程的办法(不能取代sympy.solve),但React都在用它,只是在用一种很低性能的赝品(Svelte和Compose也是,快但丑)
PHP拼接SQL而不是用 (?)生成匿名函数, 一群PHD也这么搞,结果现在搞出个 AST v2,就“数学且高阶”了。指望这群人纠正IT界的错误实践? 呵
Prolog已经50岁了,Lisp计算图和深先遍历则更久远,它们的思想稍微补丁一点,就能对今天的编程产生巨大的改变。 只是把"变量"这个概念初次写对,就说是Higher-Order tree了,真幽默啊PLT
(Lua lparser.c 在第一遍历就会查好栈/闭包/全局表的具体地址,这是所谓“不理论”的算法人,人家的var最开始就不是str,更别说Ruby和C符号呢。 PLT人只是目标更简单,并非语意更明确!)
如果ES6支持模式匹配时直接把Prolog的变量作为值学过来,React就可以带着它随地大小变的"FP" memo消失了
full: https://t.me/dsuses/5341
https://github.com/duangsuse/mkey 写过,不过落后很久了 #sql
这算法就是
unify(a,b); unify(a,1); unify(1,a) 得出 a.v==1==b.v reify([a]) 解引用一下=[1] ,其实也挺有趣,包括npm也在牵强附会这玩意,真让人搞不懂从哪看的
http://minikanren.org/ 使用了一个自有的def: yield 实现,对 a&b 顺序执行,a|b 保存a的回溯以及交替yield ,但 inf(a,x): a=x|inf(a,x+1) 这种递归好像要套一层
append-out 生成加法表是比较知名的范例 https://www.adamsolove.com/microScopeKanren/
https://tca.github.io/veneer/editor.html https://swish.swi-prolog.org/
https://tomstu.art/hello-declarative-world
logicalVars 的真正力量是用在AST里实现函数参数、类型参数及推理等等,比如 vars(x=> Fn([x], [x 1 +])
所谓的HOAS ... 还真挺搞笑的,PLT人怎么会用字符串表示变量??
可以在js里直接解释,也能被整齐替换为为 iload_0 之类的编译
也包括推理
fun let(:[T Box], :[Fn1 T R]): [R Box] 了, unify([T Box], [Int Box]) 一下就出来了,再给[(R=Any) Box]做一个freeze(reify),比模式匹配不知道优美多少倍然并暖。 国内讲这个都都是局限于那几个术语和过程,真够无聊的。
unification(变-量叠合) 不是解方程的办法(不能取代sympy.solve),但React都在用它,只是在用一种很低性能的赝品(Svelte和Compose也是,快但丑)
PHP拼接SQL而不是用 (?)生成匿名函数, 一群PHD也这么搞,结果现在搞出个 AST v2,就“数学且高阶”了。指望这群人纠正IT界的错误实践? 呵
Prolog已经50岁了,Lisp计算图和深先遍历则更久远,它们的思想稍微补丁一点,就能对今天的编程产生巨大的改变。 只是把"变量"这个概念初次写对,就说是Higher-Order tree了,真幽默啊PLT
(Lua lparser.c 在第一遍历就会查好栈/闭包/全局表的具体地址,这是所谓“不理论”的算法人,人家的var最开始就不是str,更别说Ruby和C符号呢。 PLT人只是目标更简单,并非语意更明确!)
如果ES6支持模式匹配时直接把Prolog的变量作为值学过来,React就可以带着它随地大小变的"FP" memo消失了
full: https://t.me/dsuses/5341