duangsuse::Echo
#Windows #powershell #code https://gist.github.com/Trumeet/5b36d7af84c73160f110b27d4e759db0 草,还能这么玩(shell 调用 extern 啊, Add-Type -MemberDefinition C# 代码) $ShellAbout = @' [DllImport("Shell32.dll")] public static extern int ShellAbout(IntPtr hwnd, string szApp…
#Java #code #rewrite https://gist.github.com/duangsuse/59bfe0cc0875a095ea88fac40717e1f5#file-cosmic-java-L193
帮鱼塔改造了一下他之前随手写的一个…… 感觉自己对 Java 了解还不深,必须经常学习一个。
[堆污染_掌心童林-CSDN博客](https://blog.csdn.net/palmtale/article/details/9302711)
[如何使用 Java 泛型来避免 ClassCastException - java宝典 - 博客园](https://www.cnblogs.com/java-bible/archive/2021/01/18/14293646.html)
[SafeVarargs的用法 – 宿宝臣的博客](http://softlab.sdut.edu.cn/blog/subaochen/2017/04/safevarargs%E7%9A%84%E7%94%A8%E6%B3%95/) 这几个 #typing #plt #recommended #blog #DontKnow
帮鱼塔改造了一下他之前随手写的一个…… 感觉自己对 Java 了解还不深,必须经常学习一个。
[堆污染_掌心童林-CSDN博客](https://blog.csdn.net/palmtale/article/details/9302711)
[如何使用 Java 泛型来避免 ClassCastException - java宝典 - 博客园](https://www.cnblogs.com/java-bible/archive/2021/01/18/14293646.html)
[SafeVarargs的用法 – 宿宝臣的博客](http://softlab.sdut.edu.cn/blog/subaochen/2017/04/safevarargs%E7%9A%84%E7%94%A8%E6%B3%95/) 这几个 #typing #plt #recommended #blog #DontKnow
https
://github.com/CASC-Lang/CASC我会一如往常在频道里进行项目结构分析,然后用与 C# 相对的 Java (竟然不是 Kotlin... )进行一些并行的重写工作。
之所以用 #Java 写这样富于技巧的 #CE 编译器 程序,是因为我想常常新口味了…… 一些原来 Kotlin 里有的我也用 TypeScript 重写过
原项目是一个“能编译繁简体中文、甚至英语”的编译器,目标是对简体程序员可用。
ChAoS_UnItY (Chaos Unity) 开发,由 C# minisk-compiler.net 起意,后者是一个通俗的基础教程示范,也囊括对 IDE 等语言工具 暴露 parser 、 type checker 等“更远的”工作的示范。 #recommended
程式碼範例
一加二十一是二十二 == True这个没啥,相关知识: 算符链 InfixPattern/«Lua设计与实现» 相关章节; 中文数值 NumUnit/han() #learn
(1 + 9 - 7) 是 (一 加 九 減 七)
1 + 九 減 7
https://github.com/CASC-Lang/CASC/releases/tag/v0.0.1 看了以后我 🤔了很久,发现连 () 都是“运算符”而且还是 "TP"(tech. preview) 后我头疼了(显然我必须改掉这些设计)
而且它的文档表达的 OUA(Operator Unacceptable, 不接受数学形式) 让我也晕了一下
build 没什么好说的, azure CI + dotnet SDK .NET 5.0, publish build artifacts, NUnit tests
其 build.cmd 就是 dotnet build src/+test-proj/
那么看下关键点——词法、语法、计算与类型转换、作用域和函数调用。
Lexer.cs: Whitespace
char.IsWhiteSpace
(为 " \t\n\r"
优化), Identifier/Keyword char.IsLetter
, 整体是 _position, _kind:SyntaxKind 实现的,有趣的是 identifier text 是靠算 span 再 slice 取的,本身倾向流式
Peek(offset), Current, LookAhead=Peek(1), '\u0000' EOF
但不完全第一个
readonly List<char>
无使用写的是:
加 減 乘 除 點 開 閉 正 負 且 或 反(非,!) 是 不(是,!=) 赋(=)
开闭括号的我感觉有点奇怪。
加正+減負-命名都像
乘*除/
(){}
且 &&
或 ||
反!
!= 不是
是==
賦=
SyntaxKind.BangEqualsToken(!=) .StarToken(*) .SlashToken(/)
这样其中 ==, &&, ||, != 的需消歧义,但没有 lookahead 而是以状态机区分、「不是」「反」「赋」 都是别名
0123456789零一二三四五六七八九
壹貳參肆伍陆柒捌玖拾十百千萬億
靠外置
ReadNumberToken();
读数另外都做了 ReportBadCharacter 的错误记录工作
以上皆返回
SyntaxToken
,试用 SyntaxFacts.GetText
拿内文,如果则用当前 span 取 substring 。Parser.cs:
CompilationUnit, Stmt, BlockStmt, VariableDeclaration, ExprStmt, VariableDeclaration, Expr, BlockStmt, Stmt, ExprStmt, Expr, Expr, AssignmentExpr, AssignmentExpr, AssignmentExpr, BinaryExpr, BinaryExpr, BinaryExpr, PrimaryExpr, BinaryExpr, PrimaryExpr, ParenthesizedExpr, BooleanExpr, NumberExpr, NameExpr, NumberExpr, ParenthesizedExpr, Expr, BooleanExpr, NameExpr
其中带 Binding(他没解释但估计是作用域上下文,但我很好奇为什么要给每个 Node 键一个 BoundedXXX) 支持的:
BlockStatement, ExpressionStatement, VariableDeclaration
LiteralExpression, VariableExpression, AssignmentExpression, UnaryExpression, BinaryExpression
感觉挺无聊的,还是开始重写吧 🤐
不对,把 Text/Stream, Binding, ChineseParser.cs 上的痛点先说下才能继续
架构的问题太大了,尤其是 Original/WithBinding AST, 这个绝对要想办法削掉
其实 Java 的基础面向对象结构绝对不比 C#,我不用 Lombok 但会争取 Kotlin 移植可能,作为休闲弄几天吧。
GitHub
CASC-Lang/CASC
a handwritten compiler which can compile English or Manderin or even mixed codes! - CASC-Lang/CASC
#bilibili #recommended #Python #code Matlab? https://b23.tv/BV16A411H7Cj
《把所有汉字叠加会看到什么?》
逆推出的相关知识均由三言 方提供。
2.视频由本人使用AE制作,汉字叠加动画用OC模拟(c4d 渲染器)生成。
#DontKnow 一个 OTF 装不下 Unicode 的所有汉字,要三个才够;
叠加汉字会得到■,所以必须加透明度才更有价值;
分析了楷体、仿宋、微软雅黑、唐诗宋词体、细报体等字体,有测试不同方块字结构和日文、韩文,分析了一下造字的基本知识,和汉字的结构。
开始还以为叠字动画是 Ae 手作的,第一秒后都是动画重复,没想到竟真的生成了每一个字的图片导入 c4d... 🌝明明只用一个位图也够精确的
#zhihu https://www.zhihu.com/question/394175264/answer/1221223455
原回答,下面相关代码要的自己 OCR 补上 main 函数。
感觉也挺麻烦的,需要分几次 filter 出特定结构的方块字,取得字形去叠加
《把所有汉字叠加会看到什么?》
逆推出的相关知识均由三言 方提供。
2.视频由本人使用AE制作,汉字叠加动画用OC模拟(c4d 渲染器)生成。
#DontKnow 一个 OTF 装不下 Unicode 的所有汉字,要三个才够;
叠加汉字会得到■,所以必须加透明度才更有价值;
分析了楷体、仿宋、微软雅黑、唐诗宋词体、细报体等字体,有测试不同方块字结构和日文、韩文,分析了一下造字的基本知识,和汉字的结构。
开始还以为叠字动画是 Ae 手作的,第一秒后都是动画重复,没想到竟真的生成了每一个字的图片导入 c4d... 🌝明明只用一个位图也够精确的
#zhihu https://www.zhihu.com/question/394175264/answer/1221223455
原回答,下面相关代码要的自己 OCR 补上 main 函数。
感觉也挺麻烦的,需要分几次 filter 出特定结构的方块字,取得字形去叠加
Bilibili
把所有汉字叠在一起,会看到什么? - oooooohmygosh_哔哩哔哩 (゜-゜)つロ 干杯~-bilibili
这是一次由@3type_三言 发起的实验。将所有汉字重叠在一起,会发生什么?
#aop #security #recommended #DontKnow #Android 哇,之前早有闻大名的面向侧面编程 #reveng 框架 Frida (frida.re) 竟然这么能干,看来是我大意了,没注意示例😱
https://forum.90sec.com/t/topic/95
“Inject your own scripts into black box processes. Hook any function, spy on crypto APIs or trace private application code, no source code needed. Edit, hit save, and instantly see the results”
方便力,想到以前动态 inspect 执行情况和 Object 的 AndBug debugger ,Frida 的能力更有意思啊,同样能做函数断点
🧐收集各种开放性动态(frida,jdwp,oat_dexdump)、静态(r2,apktool,jad,smalivm)逆向工具,也挺多啊g
https://forum.90sec.com/t/topic/95
“Inject your own scripts into black box processes. Hook any function, spy on crypto APIs or trace private application code, no source code needed. Edit, hit save, and instantly see the results”
方便力,想到以前动态 inspect 执行情况和 Object 的 AndBug debugger ,Frida 的能力更有意思啊,同样能做函数断点
🧐收集各种开放性动态(frida,jdwp,oat_dexdump)、静态(r2,apktool,jad,smalivm)逆向工具,也挺多啊g
90Sec
frida入门级详细讲解
frida入门级详细讲解 观文须知 由于文章在编辑时使用的markdown,但论坛禁止调用外部图床,为了方便编写,文章未提供图片,如果真的对frida感兴趣,可以根据文章内容对操作进行复现。 文章后半部分充斥着大量的java、python和javascript代码,可能会产生不良副作用,如有不适请快速关闭页面,因此产生的不良后果本人概不负责。 读万卷书,不如行万里路;行万里路,不如阅人无数。 环境准备 Android Studio(其他APP开发IDE也可以) mumu模拟器(重点安利对象,无广…
#recommended #Web #design #blog #China #statement https://diygod.me/2020/
新冠肺炎的各种世态炎凉过后,被自如管家闯了卧室, DIYGod 仍然保持着日常,最后选择了开始筹划移民加拿大。 我们怀念他。 🌚
执法部门和稀泥,看起来好像是侵权方和受害方皆大欢喜,其实法律和法制保护的就是每个人的贴身权益,闯荡者租的房、工程师996的身体、新冠肺炎患者的隐私,没有一个是轻轻松松意思意思就能过去的,公义的天平偏向一边,会埋下严重的隐患
那些只会看着笑话,开始嘲讽“不安分者”的人怎么会明白、感同身受呢?
可惜社会不会因为一小部分人而改变的,而大佬也只能尽力想办法移民国外。 “能跑的都跑了,剩下的继续互相伤害互相指责,自生自灭吧”
冷漠。 那些人在笑韩国的民生和公义被财阀控制,陷于金钱至上的泥沼,却没有发现国内情况开始逐渐恶化,并且,不同于韩国,没有人能站出来发出不同的声音,反对的声音!因为民众眼里不安分就是罪,死也要死在温水的锅里! 😐
大佬的博客设计很细心啊,加载速度快、banner 优雅地使用了字体而非像素图,背景和 click 粒子动画都给人很甜的感觉😋
真希望有一天我也能实现一个类似的
新冠肺炎的各种世态炎凉过后,被自如管家闯了卧室, DIYGod 仍然保持着日常,最后选择了开始筹划移民加拿大。 我们怀念他。 🌚
执法部门和稀泥,看起来好像是侵权方和受害方皆大欢喜,其实法律和法制保护的就是每个人的贴身权益,闯荡者租的房、工程师996的身体、新冠肺炎患者的隐私,没有一个是轻轻松松意思意思就能过去的,公义的天平偏向一边,会埋下严重的隐患
那些只会看着笑话,开始嘲讽“不安分者”的人怎么会明白、感同身受呢?
可惜社会不会因为一小部分人而改变的,而大佬也只能尽力想办法移民国外。 “能跑的都跑了,剩下的继续互相伤害互相指责,自生自灭吧”
冷漠。 那些人在笑韩国的民生和公义被财阀控制,陷于金钱至上的泥沼,却没有发现国内情况开始逐渐恶化,并且,不同于韩国,没有人能站出来发出不同的声音,反对的声音!因为民众眼里不安分就是罪,死也要死在温水的锅里! 😐
大佬的博客设计很细心啊,加载速度快、banner 优雅地使用了字体而非像素图,背景和 click 粒子动画都给人很甜的感觉😋
真希望有一天我也能实现一个类似的
2020 年终总结 - DIYgod
今年对很多人来说都是非同寻常的一年,对我更是如此 🦠 新冠疫情
1 月爆发的新冠疫情直到今天还在持续,疫情初期的恐慌和绝望还历历在目:1 月 20 日一夜之间全国的口罩和板蓝根双黄连被抢购一空、互联网完全被负面疫情话题占据、感染人数像火箭一样猛增、前线防护用品严重紧缺…
1 月爆发的新冠疫情直到今天还在持续,疫情初期的恐慌和绝望还历历在目:1 月 20 日一夜之间全国的口罩和板蓝根双黄连被抢购一空、互联网完全被负面疫情话题占据、感染人数像火箭一样猛增、前线防护用品严重紧缺…
#ai #game #web #algorithm #recommended 不是 canvas , 是 table grid event
彩球的绘制是 SVG (drawBall)、移动动画是 bfs 寻径+await sleep、弹框是 GitHub:xrr2016/tata
https://tttttt.me/c/1243351201/14430 👈 还有高分截图
彩球的绘制是 SVG (drawBall)、移动动画是 bfs 寻径+await sleep、弹框是 GitHub:xrr2016/tata
document.write(eval(prompt("run something...","alert(\"meow\")")));
草... 作者博客就这些https://tttttt.me/c/1243351201/14430 👈 还有高分截图
https://github.com/stevenjoezhang/live2d-widget #js es6 #web #acg #recommended #game 可爱~ 😋 Live2D 模型小挂件 ,按空格键支持一个绘制炮弹小游戏,可以打掉页面元素呢……
#Kotlin #lib #recommended #functional 小值/验证 IO 库
https://github.com/fork-handles/forkhandles/tree/trunk/values4k#show
这个作者感觉可以,尤其是他也很重视程序的一致性(对称性)
In order to maintain symmetry (and to ensure that we can support inline classes), this method is present on the
Little strange but actually consistent because the display and parse logic should NOT be part of the Value itself, but be separated logically.
像
可以手工验证但这不好看,根本解决方法是定义并引用新类型
原来 Factory 在 Kotlin 的标准是
https://github.com/fork-handles/forkhandles/tree/trunk/values4k#show
这个作者感觉可以,尤其是他也很重视程序的一致性(对称性)
In order to maintain symmetry (and to ensure that we can support inline classes), this method is present on the
ValueFactory
instance.Little strange but actually consistent because the display and parse logic should NOT be part of the Value itself, but be separated logically.
像
fun transferMoneyTo(amount: Int, sortCode: String, accountNumber: String)
是不安全的,因为它有 Int,String 值但值无格式(如非负数什么的)可以手工验证但这不好看,根本解决方法是定义并引用新类型
inline class SortCode(override val value: String): Value<String>尤其是可以 inline (新 Kotlin 限定),然后这种方法强化的类型(格式)安全还可以保证
toString()
时把密码码掉什么的(取原值就用 SortCode.show(c)
了)。class Money private constructor(value: Int) : AbstractValue<Int>(value) {然后就可以
companion object : ValueFactory<Money, Int>(::Money, 1.minValue)
}
class AccountNumber private constructor(value: String) : StringValue(value) {
companion object : StringValueFactory<AccountNumber>(::AccountNumber, "\\d{8}".regex)
}
Money.parse("123"), Money.of(123), Money.of(0)/*throw IAE*/, ofOrNull, ofResult4k/*库自定Result<T>类型*/
这样原来 Factory 在 Kotlin 的标准是
ofXXX(_)
😋 很好看GitHub
fork-handles/forkhandles
Foundational libraries for Kotlin. Contribute to fork-handles/forkhandles development by creating an account on GitHub.
草 #art #tools #recommended #drawing #learn 这个 Zim 居然是包含一个大 UI 库,各种 CG 示例和控件工具巨多,而且是基于这个看起来独立的 https://createjs.com/ ... 贵圈真牛
NIO 什么的居然都是猫名,看着主页那么杂乱 Logo 有点糊我还以为不是资深弄的呢,没想到是真・大牛
https://zimjs.com/about.html, https://zimjs.com/examples.html
一个 canvas 整得想 ppt 一样,但非常吼玩 还有 https://createjs.com/tools
NIO 什么的居然都是猫名,看着主页那么杂乱 Logo 有点糊我还以为不是资深弄的呢,没想到是真・大牛
https://zimjs.com/about.html, https://zimjs.com/examples.html
一个 canvas 整得想 ppt 一样,但非常吼玩 还有 https://createjs.com/tools
Createjs
CreateJS | A suite of JavaScript libraries and tools designed for working with HTML5
A suite of modular libraries and tools which work together or independently to enable rich interactive content on open web technologies via HTML5.
https://stackoverflow.com/questions/48124372/pointermove-event-not-working-with-touch-why-not
#web #dev 触屏支持
吃一堑长一智,这个下次就有经验了……😅 #recommended #html
#web #dev 触屏支持
吃一堑长一智,这个下次就有经验了……😅 #recommended #html
Stack Overflow
`pointermove` event not working with touch. Why not?
I have this pen:
https://codepen.io/anon/pen/eyKeqK
If you try it on a touch-screen device (f.e. visit the pen on your phone) you'll notice that when you drag, the white light (the little sphere)...
https://codepen.io/anon/pen/eyKeqK
If you try it on a touch-screen device (f.e. visit the pen on your phone) you'll notice that when you drag, the white light (the little sphere)...
#web #dev #recommended #GitHub 仓库 VSCode 、 YouTube 视频下载工具 https://github.com/justjavac/1s (不是原作者, #moha 玩梗)
直接在二级域名 github 后面 +1s 即可 https://github1s.com/
直接在二级域名 github 后面 +1s 即可 https://github1s.com/
GitHub
GitHub - justjavac/1s: 天若有情天亦老,我为网站加一秒
天若有情天亦老,我为网站加一秒. Contribute to justjavac/1s development by creating an account on GitHub.
#recommended #linux #backend #cplusplus #Python https://tttttt.me/c/1492060815/96087, https://tttttt.me/c/1492060815/95986 Q:这个群是干嘛的?
A:《捕蛇者说》是一档播客节目,可前往官网(pythonhunter.org)或各大播客平台(苹果、小宇宙、Spotify 等)收听。本群是捕蛇者说播客的听众群,讨论技术和非技术的各种话题。
Twitter: @pythonhunter__
发电支持我们:https://afdian.net/@pythonhunter
A:《捕蛇者说》是一档播客节目,可前往官网(pythonhunter.org)或各大播客平台(苹果、小宇宙、Spotify 等)收听。本群是捕蛇者说播客的听众群,讨论技术和非技术的各种话题。
Twitter: @pythonhunter__
发电支持我们:https://afdian.net/@pythonhunter
duangsuse::Echo
王垠对CS科班编译原理侧重点的质疑是对的(然而并没暖用,就像教育也不只是为培育人才一样;你没法让所有人相信简单是对的 倒不如说是老师举例和对照的方法不好,LL 这样入门级的程序编号化还是比较好教的,可是他们一举例就是很生硬,非常莫名其妙的常量 也不先说目标,上来就“贴代码”、贴做的图(也不简洁、记流水帐),让人很迷糊: ③ T → FT ' FIRST ( T ) = { ( id } ④ T' → *FT ' |ε FIRST ( T' ) = {* ε } ⑤ F → (E)|id FIRST ( F…
https://zhuanlan.zhihu.com/p/99509681 #reveng #recommended #ce 虚拟机壳都弱爆了,不影响性能的OLLVM多好(那自动重构命名和类全名 的岂不是仍不够强 草..
在纵向70% state= angr汇编符号执行, -3行: 若执行踏入了 相关块addrs, 返回其目标地址,否则忽略此分支(消除无用块. hook地址是块内最后call)
然后会修复真实块间加jmp
把假条件 cmovz(zf?1:2) 改成jz +jmp 后随地址
在纵向70% state= angr汇编符号执行, -3行: 若执行踏入了 相关块addrs, 返回其目标地址,否则忽略此分支(消除无用块. hook地址是块内最后call)
然后会修复真实块间加jmp
把假条件 cmovz(zf?1:2) 改成jz +jmp 后随地址
duangsuse::Echo
#plt 呃,这几天眼睛有点疼,那个网页重构也接近尾声了(目的就是交个PR),马上把雄狮扭眼的”热度蹭完“,我就能开始二进制pybind了 ……但是到2月我就必须开始制作一个H5动画礼物,以现在这个效率…… (而且之前说的 Java 入门又鸽子了,尽管对话框和离线javac的问题解决,其他内容还是需费精力 说真的我没一次蹭上国内热度,因为每次都是我趁机学了些”没用的“(比如彩字符画、粒子动画、MBR程序、C指针和数组啦),然后数据不好看 😂 这次也是一样,我用shift重映射圆心距l=1~len 环上像…
我太阳,才发现这个别人能发博文的东西,我竟然连标题和名字都没起,试运行成功贴上就pass了…… 这不是在线教SICP(程序的构造和解释)吗🤪 #lisp #fp #zhihu #statement
放到以前我绝对搞大新闻一样,就像之前仿造(但也没成功)Lice 时专门建了项目画了logo,然后文档拼缀别人的,最后模板代码写完不会了 🙈
但说起来,元编程最后也不过是编程。你了解编程语言,很好,但语言只是载体,美丽的、各种各样的应用才是我们的最终目的。
你能写编译器,很好,但也不过是完成了文本模式和树遍历,加上一些理论。 编译器的中/后端分析优化 也是同样的处理流程,也有简单和最优的做法,「编译器」,对这个流程而言并不特殊。「编程」,对代码可变的计算机并不特殊。
就像让语言运行(尽管一些没执行序)于计算机的工具,也竟只不过是种应用,如果你了解可复用的前缀解析器:
#js #code #parsing
顺便一提: eCall 的首项其实不是
那么语言的实现,以及各种DSL(make,ant.xml) 与普通CLI程序(grep,sed,..)没啥不同。 得到了菜刀,就更要懂得取舍其能力。 菜刀不能用来干什么? 如果这么用,人多后风险是什么? 怎么最简及最优地添加功能? 这才是编程语言爱好者该思考的问题。 编程语言是更精确的自然语言,优化一篇文章和优化一段代码,是存在不少相似性的;编程和数学都能”提升思维“,但编程更擅长表达。表达也是智力。
解释或编译,JIT为REPL执行或动态优化,都是相同目标的不同选择,大同小异,关键在懂得它和已知知识的差异。
(补充: Fun,Call,var 在函数式一般称 abs,app,subst .当然王某那篇 就没有用这些稀奇名字. 我这里没有let-in 和 (+ 的 prim 操作,都是通过JS 函数相互引入。换Java用reflect也可
Java/Kt实现之所以长,是因为要强类型检查 而且fun eval() 和override啥的重复许多遍,语义上并没有新概念
C/Py实现之所以长,是在文法期(lex-yacc)和纸面推导磨叽太久、语言本身特性缺失(union:int nodeTag)和
工程界一般科普做个计算器(Node/队列指针)还是很直接的,可是不能表达变量和按语序参数,会造成很多问题(CSS支持变量后就变贼有用了)
毕竟大家开始学编程时都是按直觉的,
你把东西写长,不会让它更”生产“或”可配置“ ”易懂“;写短,不会”更快“或”有内涵“,语义不多不少,它就在那。我觉得这是仍没见过汇编的程序员该有的认识。不知道为什么,重视语义的人很少,仿佛世界上只有语法和”JSON,YAML“这些名字,而操作它们的库API也都是孤立的,并不存在一个”概念“把所有的一切语法和表象连起来。
举个例子,S表达式就能表示HTML🙃。有人想过拿JSON保存这个吧,但是因为含大量children:[]被怼,但S表达式
现在不少人就把它的影子当新DSL呢!我们是不是该说这是「历史倒流」呢🌝
也有许多往JS内嵌XML呢! 作为代码移植的好帮手,还真是十分有必要不独立转化而新建jsx语言呢,这样就能在单文件写html了不是?
语言对程序员来说并不遥远。它笼罩着编程的方方面面。
无论是以何种形式使用,对语言的理解决定程序员的能力,并不是做的事多了,就懂语言。
解释器实现不是不能自顶向下拆开讲,因为许多人某层面就知道那一种做法(比如刚才
另一方面咱领域人少,一些只顾自己写开心的魔法师(人和领域是互相选择的。冷门专业冷门人)就多些,真正做科普的就少
我们从小就被教导要努力向谁看齐、要按套路管理自己的生活乃至一生,要给各种技术排名次、造『鄙视链』,可是我看到许多Vlogger,每个人都有不同的经济条件、地理位置和性格,但真的无法把他们的视频风格分出高低谁谁淘汰,他们都能让你开阔眼界——普通的生活也能如此有意思,原来做记录也可以不像在记录,却达到更好效果。
确实,技术不是最难解决的问题;把眼光放开阔,许多问题或许就是人为制造,可以从更远的地方追溯修整方案呢! #recommended
谁告诉你 combinator 和 Maybe 及类型推导,跨编译就是函数式专属的(Kotlin),谁说逻辑式就必须复杂(miniKanren),谁说{}或end 最严谨(Python),Web怎么会只有”前端“功能呢(ES6+H5API)
如果世界上存在最优的编程语言——是哪个? 最简单的/功能最多的/最快的?
许多衡量标准本身就是冲突的,先有目的,然后才有最优解。 先懂为什么,然后才看做法
我们所学的知识和理论,有多少是罔顾了原因,只有做法和自恰性的? 文档并不是只有易理解与否,还有与现实、与其他的对应性,因为编程是一件实事,目的之下一切可替换的事。
到最后你才发现,根本不存在最优解,你所看到的优秀,不过是圈子里广为流传的假象。 世界上那么多人,所谓的大牛仍是天外有天,为什么你必须向他学习呢,难道你不能有比他做得好/做得广泛之处吗。
语言不重要,思想重要。
放下排名、放下”最佳实践“,做自己想做的
放到以前我绝对搞大新闻一样,就像之前仿造(但也没成功)Lice 时专门建了项目画了logo,然后文档拼缀别人的,最后模板代码写完不会了 🙈
但说起来,元编程最后也不过是编程。你了解编程语言,很好,但语言只是载体,美丽的、各种各样的应用才是我们的最终目的。
你能写编译器,很好,但也不过是完成了文本模式和树遍历,加上一些理论。 编译器的中/后端分析优化 也是同样的处理流程,也有简单和最优的做法,「编译器」,对这个流程而言并不特殊。「编程」,对代码可变的计算机并不特殊。
就像让语言运行(尽管一些没执行序)于计算机的工具,也竟只不过是种应用,如果你了解可复用的前缀解析器:
#js #code #parsing
feed=(s,i=0)=>d/*+peek -take*/=>{let q=d<0,r;if(q)d=-d;r=s.slice(i,i+d);if(q)i+=d; return r}
feed=(s,i=0)=>d=>d<0?(d=-d,s.slice(i,i+d,i+=d) ): s.slice(i,i+d) //返回前可加过滤空格(当前tok==0? 跳空格)和'\n'数行号
sign=s=>{let k=s(1),i; if(-1!= (i="+-正负".indexOf(k)) )return i%2==1}
num=s=>{let n=0,di;for(;/\d/.test(di=s(1));)n=n*10+(s(-1)-'0'); return n} //可以用-0 确保for至少有1次.
Seq=(...ps)=>s=>{let a=[],p;for(p of ps){r=p(s);if(!r)break;a.push(r)} return a}
pSelf=pOf=>{let p=s=>p(s); p.give=(P=pOf(p))=>p=P; return p}//wait give
"+123 负3 正2 -1".split(' ').map(code=>
Seq(sign,num)(feed(code)) )
呃,测试就不做了,大家作为小练习吧(反正外面也没讲的,不信你搜(顺便一提: eCall 的首项其实不是
d[kf]
,能继续(yes?fa:fb)(1)
,这也是个易混点。 let x=1 in e 与 ((\x. e) 1) 不完全一样,前者不涉及”函数作值“那么语言的实现,以及各种DSL(make,ant.xml) 与普通CLI程序(grep,sed,..)没啥不同。 得到了菜刀,就更要懂得取舍其能力。 菜刀不能用来干什么? 如果这么用,人多后风险是什么? 怎么最简及最优地添加功能? 这才是编程语言爱好者该思考的问题。 编程语言是更精确的自然语言,优化一篇文章和优化一段代码,是存在不少相似性的;编程和数学都能”提升思维“,但编程更擅长表达。表达也是智力。
解释或编译,JIT为REPL执行或动态优化,都是相同目标的不同选择,大同小异,关键在懂得它和已知知识的差异。
(补充: Fun,Call,var 在函数式一般称 abs,app,subst .当然王某那篇 就没有用这些稀奇名字. 我这里没有let-in 和 (+ 的 prim 操作,都是通过JS 函数相互引入。换Java用reflect也可
Java/Kt实现之所以长,是因为要强类型检查 而且fun eval() 和override啥的重复许多遍,语义上并没有新概念
C/Py实现之所以长,是在文法期(lex-yacc)和纸面推导磨叽太久、语言本身特性缺失(union:int nodeTag)和
__init__
这种,而且但凡是个公开lib作者都爱过度设计(overdesign),很难写简洁的parser工程界一般科普做个计算器(Node/队列指针)还是很直接的,可是不能表达变量和按语序参数,会造成很多问题(CSS支持变量后就变贼有用了)
毕竟大家开始学编程时都是按直觉的,
int n; new ListSeter(){ void f(List a){a[0]=n;} }
里new了的Type实质是函数(SAM单方法接口),而SAM实质又是包含n和算式的数据(闭包),for(i0;i<;i++)
是 for(i in 0..N)
这样都没想过吧。 框架定义,我就用,这是外国 Java 在 Kotlin 出现后如此被动的原因。 😅你把东西写长,不会让它更”生产“或”可配置“ ”易懂“;写短,不会”更快“或”有内涵“,语义不多不少,它就在那。我觉得这是仍没见过汇编的程序员该有的认识。不知道为什么,重视语义的人很少,仿佛世界上只有语法和”JSON,YAML“这些名字,而操作它们的库API也都是孤立的,并不存在一个”概念“把所有的一切语法和表象连起来。
举个例子,S表达式就能表示HTML🙃。有人想过拿JSON保存这个吧,但是因为含大量children:[]被怼,但S表达式
(div.wtf (id xx) (a (href xx title 上级))
就能表示HTML-DOM。现在不少人就把它的影子当新DSL呢!我们是不是该说这是「历史倒流」呢🌝
也有许多往JS内嵌XML呢! 作为代码移植的好帮手,还真是十分有必要不独立转化而新建jsx语言呢,这样就能在单文件写html了不是?
语言对程序员来说并不遥远。它笼罩着编程的方方面面。
无论是以何种形式使用,对语言的理解决定程序员的能力,并不是做的事多了,就懂语言。
解释器实现不是不能自顶向下拆开讲,因为许多人某层面就知道那一种做法(比如刚才
zipMap
我不提出来 理解难度就++, 或者我写一大堆XXNode, 人也get不到调用和查变量的重点),他觉得无可替换(或者”这就是最快的“),而篇幅又巨大,对初学者会非常不友好另一方面咱领域人少,一些只顾自己写开心的魔法师(人和领域是互相选择的。冷门专业冷门人)就多些,真正做科普的就少
我们从小就被教导要努力向谁看齐、要按套路管理自己的生活乃至一生,要给各种技术排名次、造『鄙视链』,可是我看到许多Vlogger,每个人都有不同的经济条件、地理位置和性格,但真的无法把他们的视频风格分出高低谁谁淘汰,他们都能让你开阔眼界——普通的生活也能如此有意思,原来做记录也可以不像在记录,却达到更好效果。
确实,技术不是最难解决的问题;把眼光放开阔,许多问题或许就是人为制造,可以从更远的地方追溯修整方案呢! #recommended
谁告诉你 combinator 和 Maybe 及类型推导,跨编译就是函数式专属的(Kotlin),谁说逻辑式就必须复杂(miniKanren),谁说{}或end 最严谨(Python),Web怎么会只有”前端“功能呢(ES6+H5API)
如果世界上存在最优的编程语言——是哪个? 最简单的/功能最多的/最快的?
许多衡量标准本身就是冲突的,先有目的,然后才有最优解。 先懂为什么,然后才看做法
我们所学的知识和理论,有多少是罔顾了原因,只有做法和自恰性的? 文档并不是只有易理解与否,还有与现实、与其他的对应性,因为编程是一件实事,目的之下一切可替换的事。
到最后你才发现,根本不存在最优解,你所看到的优秀,不过是圈子里广为流传的假象。 世界上那么多人,所谓的大牛仍是天外有天,为什么你必须向他学习呢,难道你不能有比他做得好/做得广泛之处吗。
语言不重要,思想重要。
放下排名、放下”最佳实践“,做自己想做的
Htmleaf
基于HTML5 WebGL的图像扭曲变形动画特效效果演示_jQuery之家-自由分享jQuery、html5、css3的插件库
这是一款基于HTML5 WebGL的图像扭曲变形动画特效。该特效中,通过Three.js来制作从一幅缩略图,扭曲变形为全屏大图的动画特效,共有6种炫酷的动画效果。