duangsuse::Echo
717 subscribers
4.26K photos
130 videos
583 files
6.48K links
import this:
美而不丑、明而不暗、短而不凡、长而不乱,扁平不宽,读而后码,行之天下,勿托地上天国。
异常勿吞,难过勿过,叹一真理。效率是很重要,盲目最是低效。
简明是可靠的先验,不是可靠的祭品。
知其变,守其恒,为天下式;穷其变,知不穷,得地上势。知变守恒却穷变知新,我认真理,我不认真。

技术相干订阅~
另外有 throws 闲杂频道 @dsuset
转载频道 @dsusep
极小可能会有批评zf的消息 如有不适可退出
suse小站(面向运气编程): https://WOJS.org/#/
Download Telegram
#China #今日头条 #Haha #bear 轻松一下:据传有头条测试员工,拿习大大的俊脸当背景图还被特赦,P0 级生产事故🌚

🐻📸:别看这次闹得欢,事后要拉清单的!不要做这种不和谐的事情。
Forwarded from 可爱 鸭鸭
Forwarded from &'a ::rynco::UntitledChannel (Rynco Maekawa)
千里冰封 | PLCT 公开演讲:当我们在谈论编程语言的时候我们在谈论什么
https://ice1000.org/notes/plct-tt-intro
作为本领域的频道主动苏当然也会作总结。#plt 😋

当然,我现在非常重视实践能力以及同代码量应用范畴的最大化,可能会希望编译器不只能做单纯/直白的一种结构转换,而能带有更多边角信息(行号 等)的复用,从这点来说也必须向大佬学习(开发了 ImGui binding)。

「当我们谈编程语言,实际是在讨论很多门相对独立的语言」
谈语言除了好看与否、红火与否、高大上与否,当然离不开『语言工具』,如构筑并管理『语法树』图结构的『解析器』(其亦可同时实现代码高亮)、做代码生成转化的『编译器』,以及提供(sizeof 等)信息和静态断言的类型检查器,不然就虚无缥缈了。

一般编程语言构造除了(可能的)解决领域应用痛点,模块化(易用于解决大型问题)、类型安全(尽早地保证正确性和性能)、表达式(用于描述计算) 是它的必须;举了个例子, #Kotlinpackage/import#Rustmod/use 可以说是一种东西,不少语言带有的特性是跨语言的(替换并不影响语言的表现力)。

他提到,『宏(macro)』作为编译期能展开 减少冗余代码量的特性,以及「类型与表达式语言更亲近」的事实(Kotlin 对执行中断类型 Nothing 的处理印证了这点)

「相同类型的表达式互换不影响 well-typedness」

“程序可以有无限个、类型在大多数系统下也是有无限种。
数学上讨论无限大的对象(如无穷数列)的时候往往会涉及对这个对象的结构找有限的、被重复的规律,所以我们也对程序找了规律。

我们『构造』程序和类型的手段是有限的——比如在 C 语言里面,那些值类型就是几个单独的类型,然后我们能用结构体(struct)、union、数组(T[])、指针(T*)等功能从已有的类型构造新类型。(enum 本质类似 int 的 typealias 、数组 T[] 类似能以相似语法 new 的 T*)

编程者仅有这些手段——可以说所有的类型都是由这些「基础构造」方法互相缝合构造出来的,手段是有限的,正如语法的 BNF(形式化文法 即规范) 是有限的。”

类型理论上,构造值被称为 introduction ,利用它们去计算称为 elimination (这名字像问题的出现和消逝),这些都要定规则:

数值『字面量(literal)』都是 int 类型的实例(int 值)
指针类型 T*,若有 ((T)expr) 那么 (&expr) 的类型就是 T*

我们可以对 int 值施用数值运算的运算符、判等(及大小)、按位且或非 交并补(A - B, a&~b)运算
指针类型 T* 的实例 a,可以解引用 (*a) 得到型为 T 的结果,或者说 *((T*)a).item 实际代表 a->item ,要以这种读内存、解指向的方式参与计算

类型上的信息编码:如果我们能用 T 类型及其 intro/elim 去实现出 T1 类型的 intro/elim,那可以说 T 是一个比 T1 更 general(概括性) 的类型,实现其操作(即 from/into) 的过程我们称之为『编码(encode)』,也听有说法表示 T1与T 是等价(equivalent) 的。

上篇感觉有点意思的是,提到了「操作语义」「指称(指代?)语义」「范畴语义」,也就是编程范式了,表述式(即过程式)、定义式、关系式(逻辑),这些要素在语言中各有取舍。 Java 就是 OOP 表述式化(switch, new List 等强调很重)、 Kotlin 则定义式化(if 有表达式型更有多分支 when,提倡 map/reduce/associate 等列表处理函数,连 break 也是表达式),范式没有绝对的归类,每个语言都是独一无二的。

我们可以说『语义』是程序的「执行方式」,比如函数调用的语义就是把函数体的语义拿出来,把里面的形参(formal parameters)引用(reference),换(substitute)成实参(arguments),然后这个函数体的语义就是这个函数调用的语义。
我们也可以说这个编程语言实际上是某个更基础的语言的『高级形式』,比如可以用「翻译出汇编的方式」来讨论 C 程序的语义

比如我有调用 f(a),那么它的语义就是『f 的函数体』中『所有对参数的引用』全部换成 a 的语义后得到的一坨,同样是表达式的东西的语义。(当然调用前 f 得被声名为只能有一个参数、或不定长参数的函数,而且能找到函数体,这个参数的类型和表达式 a 的类型相同,或者兼容)

事实上,这分别就对应着解释型(interpreted)语言和编译型(compiled)语言!是不是感觉和常见的编译原理知识联系到一起了?

相关资料:
https://t.me/dsuse/14926
https://t.me/dsuse/14705
在本苏的频道搜 UpValue 可以得到很多相关知识。说句题外话,本苏觉得语言实现的重点在于规范化程序结构和数据模型,
表达式(中缀算符链、结合优先级、前缀算符和后缀 e.item, e[idx] 等)、
语句和控制流(if when while do for, break continue)、
函数也即子程序调用与作用域(call/return, scoping, inline...) 、
类型转换与数值宽度提升、
这四点是要注意的,此外镇静解析(即部分解析)策略与良好的错误报告、基于编译单元/函数体的增量解析、常量折叠、评估损益自动内联,以及 基础的组合(struct,T[])/分支(union,A|B)数据结构 是必不可少的。

中篇和结尾的学术性内容就不说了,睡大觉喽。😝

另外冰封竟然用中文了,第一眼看莫名觉得有点突兀,久违的中文博客。😊

我做不了总结的是,比较 Haskell/Scala 的部分以及 Coq (实际的逻辑关系编程…… 但其目的就是过类型检查 而不是写普通应用了,当然蛤丝科不带副作用能不能编程,当然也是可以的,因为计算机就有按顺序执行的能力)
#JS #web #statement 😒 想想这几年也是沧海桑田啊,首先不会有人拼接 HTML 字符串 innerHTML= 了,其次 JQuery 也很小化了, Array.prototype.forEach 取代 $.each 、 fetch 和 await/async 取代 $.ajax/onSuccess 和裸的 XHR ,纯 DOM 无扩展变得可能(复用层次提升,也不需要 JQ 的简写了),甚至 ui 都有 Vue,Angular 和 React 从动态/静态角度生成代码,不用去手写、操纵裸 DOM
Forwarded from Deleted Account
https://weibo.com/1260797924/JCwTdv3Pl #wechat #weibo #statement 呃,我忘了之前是不是有说不转发 @Drakeets ,所以只发微博链接
瞄一眼看到「微信已经架构性死亡了,没有新工程师来做...」但是估计是 tg 快照,很快没有了
https://t.me/c/1119848546/29191 #mark #net 可爱的 ping 圣诞树
Forwarded from Jkkoi
搞了个机器人来清除 网址跟踪参数

@CleanURLbot
https://t.me/c/1119848546/29280 #mark #Android apk diff... 想着 mode 和 size unit 大概可以手改,数据/界面分离... 🤔