Forwarded from dnaugsuz
https://t.me/dsuse_tmp/605
你看,如果我简单地去用 code template,能够把这个『模板』中重复的部分抽提出来吗?能够让我理解 travis 的配置综合模型吗?
实际上重复也是学习本身依赖的重要因素
你看,如果我简单地去用 code template,能够把这个『模板』中重复的部分抽提出来吗?能够让我理解 travis 的配置综合模型吗?
实际上重复也是学习本身依赖的重要因素
Telegram
/tmp/duangsuse.sock
第二遍,我们需要 docker 的 build, depoly
language: minimal
service:
- docker
install:
- VERSION=$(git rev-list --count HEAD)
- VERSION_HEAD=$(git rev-parse --verify HEAD | head -c7)
- echo $DOCKER_PASS | docker login --password-stdin $DOCKER_REGISTRY -u…
language: minimal
service:
- docker
install:
- VERSION=$(git rev-list --count HEAD)
- VERSION_HEAD=$(git rev-parse --verify HEAD | head -c7)
- echo $DOCKER_PASS | docker login --password-stdin $DOCKER_REGISTRY -u…
duangsuse Throws
#statement #dev
有人说『学习的本质是重复』『学习的本质是记忆』,其实未必真是的,但我这里想告诉大家
就是:实践很重要 不要害怕实践 不要害怕去把编程,开新工程当成日常来做(甚至带一点 build system / project management / depolyment 的)
我之所以要当『复读机』,一方面是因为我一直是『复读机』(实际上也没那么严重,甚至比很多人好一些),另一方面是我应该永远学习下去,『未满』才是最好的样子。
所以复读机 我也要当! 在复读的过程中,我训练了自己对代码的阅读记忆能力、看到了各种编程风格,多次的复读,让我有机会深化对模型和技术的理解,让我能够在『刻板』的基础上做出『创新』,并且保证了以后的实践里,我总是能够在第一时间想到『怎么做』
使用模板是好事,因为它避免了重复,可是它却不能让你『弄懂』弄明白
总是『理解记忆』也是好事,可是它却不能保证你真正理解了、记住了,有时候你总是会想不到一些事情、总是会发现自己又忘记了,这样要再次去查
”再次去查“是我最讨厌的东西,因为它意味着,我得重新理解,我对之前的知识还不够深刻以至于要『再次找』,而且它会浪费大量的时间、会搞坏你的心情、阻止你对当前程序的兴趣和理解
我很讨厌『用到就去查』,因为这不利于我系统的理解。你们可以看到,我发的每篇比较长的广播,都是相对系统完整的知识,不是『某个功能,已经有了什么数据,有啥 API 完成某操作』『某件看起来了不得的事情,我实现它的 point 在哪里』然后简单一两行、几个截图完事
相反的,我总是先系统学习某种技术,对于大的系统我会一个一个小片的理解消化,并且在过程中我会留下不少实践编程的碎片,而且不止一种语言。我希望我的每行代码都是有确切理解验证的。 — 就是,必须有编写可运行/可使用代码的验证
这个看起来愚蠢的行为的解释,我已经给出了,你觉得呢?
在信息技术 软件工程里更是如此,缺乏实践验证的理解,你怎么知道你用的时候就真正理解了?
现在那个什么 『Agile Development』 的 TestDrivenDevelopment,仅仅从它对『测试』的看重上,我觉得是对的。因为实际应用要的是至少『有效』『工作』的代码,不是看起来没什么问题实际上无法在某些正常情况下工作的 buggy 代码。
错误发现的越早,其产生的不良影响就越小。
系统理解的战线拖延得越长、产生的误解和漏洞越多,其对实际编程和后继学习产生的不良影响就越大。
这个道理,套用到个人对技术的理解上,不也是一样吗? #statement
就是:实践很重要 不要害怕实践 不要害怕去把编程,开新工程当成日常来做(甚至带一点 build system / project management / depolyment 的)
我之所以要当『复读机』,一方面是因为我一直是『复读机』(实际上也没那么严重,甚至比很多人好一些),另一方面是我应该永远学习下去,『未满』才是最好的样子。
所以复读机 我也要当! 在复读的过程中,我训练了自己对代码的阅读记忆能力、看到了各种编程风格,多次的复读,让我有机会深化对模型和技术的理解,让我能够在『刻板』的基础上做出『创新』,并且保证了以后的实践里,我总是能够在第一时间想到『怎么做』
使用模板是好事,因为它避免了重复,可是它却不能让你『弄懂』弄明白
总是『理解记忆』也是好事,可是它却不能保证你真正理解了、记住了,有时候你总是会想不到一些事情、总是会发现自己又忘记了,这样要再次去查
”再次去查“是我最讨厌的东西,因为它意味着,我得重新理解,我对之前的知识还不够深刻以至于要『再次找』,而且它会浪费大量的时间、会搞坏你的心情、阻止你对当前程序的兴趣和理解
我很讨厌『用到就去查』,因为这不利于我系统的理解。你们可以看到,我发的每篇比较长的广播,都是相对系统完整的知识,不是『某个功能,已经有了什么数据,有啥 API 完成某操作』『某件看起来了不得的事情,我实现它的 point 在哪里』然后简单一两行、几个截图完事
相反的,我总是先系统学习某种技术,对于大的系统我会一个一个小片的理解消化,并且在过程中我会留下不少实践编程的碎片,而且不止一种语言。我希望我的每行代码都是有确切理解验证的。 — 就是,必须有编写可运行/可使用代码的验证
这个看起来愚蠢的行为的解释,我已经给出了,你觉得呢?
在信息技术 软件工程里更是如此,缺乏实践验证的理解,你怎么知道你用的时候就真正理解了?
现在那个什么 『Agile Development』 的 TestDrivenDevelopment,仅仅从它对『测试』的看重上,我觉得是对的。因为实际应用要的是至少『有效』『工作』的代码,不是看起来没什么问题实际上无法在某些正常情况下工作的 buggy 代码。
错误发现的越早,其产生的不良影响就越小。
系统理解的战线拖延得越长、产生的误解和漏洞越多,其对实际编程和后继学习产生的不良影响就越大。
这个道理,套用到个人对技术的理解上,不也是一样吗? #statement
#Huawei 我觉得鼓吹微内核 是不必要的
用就用,吹个什么劲呢?
而且这是他提出的?需要我去找 wiki 吗?虽然我不是 os-dev,但什么概念不概念骗不了我,微内核结构崇尚内核层只做尽可能少的工作、提供必要的系统服务和限制比如 CPU 调度、进程管理、内存管理、驱动 IO 交互分配,把更多诸如硬件驱动、文件系统、网络栈的任务和高级服务做在更高的 Ring 或者用户空间,这个概念,使用 Rust 开发操作系统内核的人早就知道了,诸多 os 学生也都知道它不是什么新概念,这,拿来吹?
在本土长大的中国人也不蠢,可缺的却恰恰巧是『蠢』的精神,有些时候太看重『得失』了、太看重一小块地方了,像什么呢?
吹个什么劲呢?不如好好看看,新系统改革了什么、不兼容了什么、出来应用层该去怎么解决、性能还能怎么优化,还有多少协议、硬件驱动、服务要支持,有多少结构设计有问题不得不慢慢废弃
我希望以后就不要用 MCU 了,要是都用 PLD 用 VHDL Verilog 什么的设计程序就好了
我也希望大家都去使用 IDEA,Emacs 什么的是被抛弃的东西,他们没有用处。
我也希望你们都去使用 Linux,其他什么杂牌 比如 JRockitVE 就算了,不需要 🌚
毕竟这不都是 IoT 时代么,所以,不需要不为 IoT 优化的东西
当然,我的话前提是:这位大牛声称微内核概念是他提出的,他是没强调是『首次提出』,营销真妙啊
当然,如果是 IoT 短时延分布式计算就算了
确定时延,如果硬件的延迟不能确定,调度往往也会失败的,这是『软实时』
优先级这不用说,大概是除了 DOS 这单任务 OS 谁都有,就连当年的 Apollo 11 AGC 使用的进程调度程序都有优先级抢占的功能 🌚
谁告诉你们,『mobile/watch/car/laptop』不可共享『生态』了?我看这个生态系统,如果不是在中国这个只需要 『QQ 王者 微信 微博 抖音 头条』的地方,怕不是要成为生物圈 II 吧 🌝
什么?你们居然把 OSI 7 层架构和类 IP 架构拿来比,还是作为自己的『优势』??? 🌝
OSI: 0@[物理层 数据链路层] 1@[网络层 传输层 会话层 表示层] 应用层
IP: 网络访问层 网络层 传输层 应用层
华为: 1=『极简协议』(我开始怀疑是不是明德扬做的 emmm)
🤔 这种拿十年前技术的劣势绿叶衬红花,来体现出自己的高明... 我只能说,好营销!
—
不过那个计算资源分布式最大化利用还是比较好的,大概是创新(也有可能只是我之前没听说过)
不过,如果前提是,必须都是鸿蒙的话,如果不开放的话 🌚 不得不说,大厂『良心』啊!
—
形式化方法。哦,我还是第一次知道原来华为内部有函数式程序员 🌚
打算怎么形式化证明?SMT?
自写公式翻译器保证正确?
另外,谁告诉你们 Linus 对 Linux 的安全很不负责了?谁告诉你们 OpenBSD 因为没有『形式化方法』就怎么样了?
这个 flag 立的不错,贬低别人和夸赞自己相结合,这很中国。不过我想说,Linux 的代码质量可真不是吃素的,他们也是以『形式化方法』的质量和理论要求每一行代码。
—
运行时库也能统一,就说明你们根本没做过包管理,要不然就是营销那边得到的技术支持太少了,厉害了 🌚👍
—
总之:目前还是观望。批判辣鸡营销。Harmony 是 12 年上海交大早就立项的,期待稳定和创新、希望软件环境的问题可以解决,并且都有他们说的那么好。
用就用,吹个什么劲呢?
而且这是他提出的?需要我去找 wiki 吗?虽然我不是 os-dev,但什么概念不概念骗不了我,微内核结构崇尚内核层只做尽可能少的工作、提供必要的系统服务和限制比如 CPU 调度、进程管理、内存管理、驱动 IO 交互分配,把更多诸如硬件驱动、文件系统、网络栈的任务和高级服务做在更高的 Ring 或者用户空间,这个概念,使用 Rust 开发操作系统内核的人早就知道了,诸多 os 学生也都知道它不是什么新概念,这,拿来吹?
也就是说,手机和车载设备的用途不同,灌入同样系统无必要,但它们可以采用同样的内核,部署不同的界面或功能。这 TMD 不是废话,Linux => GNU/Linux 不是最好的例子,能够是中国人提出的『概念』?该向计算机视觉领域的杨立昆学习,人家的卷积神经网络是新概念。可惜虽然是中国人,却只是华裔,可惜啊可惜。
在本土长大的中国人也不蠢,可缺的却恰恰巧是『蠢』的精神,有些时候太看重『得失』了、太看重一小块地方了,像什么呢?
吹个什么劲呢?不如好好看看,新系统改革了什么、不兼容了什么、出来应用层该去怎么解决、性能还能怎么优化,还有多少协议、硬件驱动、服务要支持,有多少结构设计有问题不得不慢慢废弃
余承东表示,希望未来的操作系统,都使用微内核。所以我也希望未来的计算机微处理器,都使用 RISC 架构。辣鸡 CISC。
我希望以后就不要用 MCU 了,要是都用 PLD 用 VHDL Verilog 什么的设计程序就好了
我也希望大家都去使用 IDEA,Emacs 什么的是被抛弃的东西,他们没有用处。
我也希望你们都去使用 Linux,其他什么杂牌 比如 JRockitVE 就算了,不需要 🌚
毕竟这不都是 IoT 时代么,所以,不需要不为 IoT 优化的东西
当然,我的话前提是:这位大牛声称微内核概念是他提出的,他是没强调是『首次提出』,营销真妙啊
这是分布式架构首次用于终端 OS 可以实现跨终端无缝协同体验。嗯,所以说 Internet 就不是分布式架构了,看来 IETF IEEE 的”傻逼“们几十年白干了,就缺你们伟大的创新,厉害了。加油。
当然,如果是 IoT 短时延分布式计算就算了
确定时延引擎可在任务执行前分配系统中任务执行优先级及时限进行调度处理,优先级高的任务资源将优先保障调度,应用响应时延降低25.7%。你说的好像是 RTOS 处理资源调度的时候一个常见的优化,不过确定时延的确是实时操作系统的特性了 🌚
确定时延,如果硬件的延迟不能确定,调度往往也会失败的,这是『软实时』
优先级这不用说,大概是除了 DOS 这单任务 OS 谁都有,就连当年的 Apollo 11 AGC 使用的进程调度程序都有优先级抢占的功能 🌚
鸿蒙微内核结构小巧的特性使IPC(进程间通信)性能大大提高,进程通信效率较现有系统提升5倍。不错,这点是微内核架构的优势,5 倍也很正常啊,UNIX 系进程贼 ***
谁告诉你们,『mobile/watch/car/laptop』不可共享『生态』了?我看这个生态系统,如果不是在中国这个只需要 『QQ 王者 微信 微博 抖音 头条』的地方,怕不是要成为生物圈 II 吧 🌝
什么?你们居然把 OSI 7 层架构和类 IP 架构拿来比,还是作为自己的『优势』??? 🌝
OSI: 0@[物理层 数据链路层] 1@[网络层 传输层 会话层 表示层] 应用层
IP: 网络访问层 网络层 传输层 应用层
华为: 1=『极简协议』(我开始怀疑是不是明德扬做的 emmm)
🤔 这种拿十年前技术的劣势绿叶衬红花,来体现出自己的高明... 我只能说,好营销!
—
不过那个计算资源分布式最大化利用还是比较好的,大概是创新(也有可能只是我之前没听说过)
不过,如果前提是,必须都是鸿蒙的话,如果不开放的话 🌚 不得不说,大厂『良心』啊!
—
形式化方法。哦,我还是第一次知道原来华为内部有函数式程序员 🌚
打算怎么形式化证明?SMT?
自写公式翻译器保证正确?
另外,谁告诉你们 Linus 对 Linux 的安全很不负责了?谁告诉你们 OpenBSD 因为没有『形式化方法』就怎么样了?
这个 flag 立的不错,贬低别人和夸赞自己相结合,这很中国。不过我想说,Linux 的代码质量可真不是吃素的,他们也是以『形式化方法』的质量和理论要求每一行代码。
—
运行时库也能统一,就说明你们根本没做过包管理,要不然就是营销那边得到的技术支持太少了,厉害了 🌚👍
—
总之:目前还是观望。批判辣鸡营销。Harmony 是 12 年上海交大早就立项的,期待稳定和创新、希望软件环境的问题可以解决,并且都有他们说的那么好。
酷 壳 - CoolShell
Linux 2.6.39-rc3的一个插曲 | | 酷 壳 - CoolShell
2011年4月12日,Linux 2.6.39-rc3发布了,Linus Torvalds写了一个发布邮件,其中包含了一个长长的为这个版本做过贡献的人员名单,这个名单中有很多看上去应该是中国人的名字,我挺为他们感到骄傲的(不知道你是否还记得以前本站的"Linux是由谁写的")。 不过,没过一会,发现了一个bug,经过大家的调查(2.6.38版没有发现这个问题),很快,找到了原因
Forwarded from cnBeta.COM中文业界资讯站
华为正式发布自有操作系统鸿蒙OS
华为开发者大会于8月9日-8月11日举行,华为消费者业务 CEO、华为技术有限公司常务董事余承东以《全场景时代新体验与新生态》为题发表演讲,正式宣布自有操作系统:鸿蒙。
据余承东介绍,鸿蒙OS是基于微内核的全场景分布式OS,这是分布式架构首次用于终端OS,可以实现跨终端无缝协同体验。
根据余承东的说法,安卓有超过1亿行代码,内核就超过2000万行,但一般用户用到的代码不到8%,整体比较冗余,在IoT时代这既没必要也不需要。
由此他提出了“微内核”的概念,也是鸿蒙OS的特点之一。区别于“宏内核”,微内核采用同一套操作平台,针对不同硬件能力的产品进行部署,并采用分布式架构,提升效率。
也就是说,手机和车载设备的用途不同,灌入同样系统无必要,但它们可以采用同样的内核,部署不同的界面或功能。
余承东表示,希望未来的操作系统,都使用微内核。据介绍,鸿蒙OS是基于微内核的全场景分布式OS,这是分布式架构首次用于终端OS,可以实现跨终端无缝协同体验。
PC版:https://www.cnbeta.com/articles/soft/876919.htm
手机版:https://m.cnbeta.com/view/876919.htm
华为开发者大会于8月9日-8月11日举行,华为消费者业务 CEO、华为技术有限公司常务董事余承东以《全场景时代新体验与新生态》为题发表演讲,正式宣布自有操作系统:鸿蒙。
据余承东介绍,鸿蒙OS是基于微内核的全场景分布式OS,这是分布式架构首次用于终端OS,可以实现跨终端无缝协同体验。
根据余承东的说法,安卓有超过1亿行代码,内核就超过2000万行,但一般用户用到的代码不到8%,整体比较冗余,在IoT时代这既没必要也不需要。
由此他提出了“微内核”的概念,也是鸿蒙OS的特点之一。区别于“宏内核”,微内核采用同一套操作平台,针对不同硬件能力的产品进行部署,并采用分布式架构,提升效率。
也就是说,手机和车载设备的用途不同,灌入同样系统无必要,但它们可以采用同样的内核,部署不同的界面或功能。
余承东表示,希望未来的操作系统,都使用微内核。据介绍,鸿蒙OS是基于微内核的全场景分布式OS,这是分布式架构首次用于终端OS,可以实现跨终端无缝协同体验。
PC版:https://www.cnbeta.com/articles/soft/876919.htm
手机版:https://m.cnbeta.com/view/876919.htm
cnBeta
华为正式发布自有操作系统鸿蒙OS 分布式架构首次用于终端
华为开发者大会于8月9日-8月11日举行,华为消费者业务CEO、华为技术有限公司常务董事余承东以《全场景时代新体验与新生态》为题发表演讲,正式宣布自有操作系统:鸿蒙。据余承东介绍,鸿蒙OS是基于微内核的全场景分布式OS,这是分布式架构首次用于终端OS,可以实现跨终端无缝协同体验。
duangsuse::Echo
#Huawei 我觉得鼓吹微内核 是不必要的 用就用,吹个什么劲呢? 而且这是他提出的?需要我去找 wiki 吗?虽然我不是 os-dev,但什么概念不概念骗不了我,微内核结构崇尚内核层只做尽可能少的工作、提供必要的系统服务和限制比如 CPU 调度、进程管理、内存管理、驱动 IO 交互分配,把更多诸如硬件驱动、文件系统、网络栈的任务和高级服务做在更高的 Ring 或者用户空间,这个概念,使用 Rust 开发操作系统内核的人早就知道了,诸多 os 学生也都知道它不是什么新概念,这,拿来吹? 也就是说,手机…
https://github.com/huawei-iot/HarmonyOS/blob/master/src/Harmony/Harmony/Tools/CodeMatcher.cs#L88
亲爱的蛤为,你告诉我,这叫『形式化设计方法』 🌚
你告诉我,这是函数式的风格,这种程序员,可能使用所谓的『形式化方法』
你告诉我,所谓的 HarmonyOS 居然是一个教科书一般死板的编译器中层
还是,所谓的『开源』OS 现在还没开源?还是 LiteOS 开源了?
静观其变。
亲爱的蛤为,你告诉我,这叫『形式化设计方法』 🌚
你告诉我,这是函数式的风格,这种程序员,可能使用所谓的『形式化方法』
你告诉我,所谓的 HarmonyOS 居然是一个教科书一般死板的编译器中层
还是,所谓的『开源』OS 现在还没开源?还是 LiteOS 开源了?
静观其变。
GitHub
huawei-iot/HarmonyOS
鸿蒙系统资料。Docs about HarmonyOS. Contribute to huawei-iot/HarmonyOS development by creating an account on GitHub.
duangsuse::Echo
https://github.com/huawei-iot/HarmonyOS/blob/master/src/Harmony/Harmony/Tools/CodeMatcher.cs#L88 亲爱的蛤为,你告诉我,这叫『形式化设计方法』 🌚 你告诉我,这是函数式的风格,这种程序员,可能使用所谓的『形式化方法』 你告诉我,所谓的 HarmonyOS 居然是一个教科书一般死板的编译器中层 还是,所谓的『开源』OS 现在还没开源?还是 LiteOS 开源了? 静观其变。
A library for patching, replacing and decorating .NET and Mono methods during runtime. 🌚 噢,我看错了,原来这个是复制别人的...
duangsuse::Echo
我要死了,上海交大的部分在哪里? 😡
https://github.com/huawei-iot/HarmonyOS/tree/master/src/LiteOS/Huawei_LiteOS_Kernel/Huawei_LiteOS/kernel/base
见好就收,这部分我很喜欢,是一个小操作系统内核,我还不清楚它的架构,但很轻量。
内核包含 Priority-based tasking、Timer,soft timer、Mem box、sempohre 实现、mutex 实现、events、queue、IPC 等功能,不含接口定义只有四十多个源码文件,大部分是 C,一些 C 导出的汇编(ARM Cortex-M4)函数存在移植的目录下
安全 不确定 它是嵌入式内核
我有以后重写它的愿望,这样基于实例的学习(和监督机器学习无关啊...) 也有助于我了解 操作系统 的简单理论
见好就收,这部分我很喜欢,是一个小操作系统内核,我还不清楚它的架构,但很轻量。
内核包含 Priority-based tasking、Timer,soft timer、Mem box、sempohre 实现、mutex 实现、events、queue、IPC 等功能,不含接口定义只有四十多个源码文件,大部分是 C,一些 C 导出的汇编(ARM Cortex-M4)函数存在移植的目录下
安全 不确定 它是嵌入式内核
我有以后重写它的愿望,这样基于实例的学习(和监督机器学习无关啊...) 也有助于我了解 操作系统 的简单理论
Huawei_LiteOS: Huawei LiteOS是华为面向物联网领域开发的一个基于实时内核的轻量级操作系统。本项目属于华为物联网操作系统Huawei LiteOS源码,现有基础内核支持任务管理、内存管理、时间管理、通信机制、中断管理、队列管理、事件管理、定时器等操作系统基础组件,更好地支持低功耗场景,支持tickless机制,支持定时器对齐。所以蛤为开源了这个后我应该消停一会了...
GitHub
huawei-iot/HarmonyOS
鸿蒙系统资料。Docs about HarmonyOS. Contribute to huawei-iot/HarmonyOS development by creating an account on GitHub.
总结:静观其变。蛤为的 HarmonyOS 现在还没有正式开源,里很多 related resources 和项目开源大概还需要几个月的时间吧。 #Huawei
#sysadmin 妈耶,新内核
Linux duangsuse.moe 5.2.7-100.fc29.x86_64 #1 SMP Thu Aug 8 05:30:19 UTC 2019 x86_64 x86_64 x86_64 GNU/Linux Nvidia 驱动没有支持,害的我移除了 modprobe blacklist 和 kernel parameter,改回 xorg.conf 滚回了 nouveau,果然这个稳定性还是重要啊!
duangsuse::Echo
http://www.yinwang.org/blog-cn/2017/05/25/dsl
不同领域需要的,绝大部分时候只是针对该领域写出的“库代码”,而不是完全不同的“新语言”。分析大部分所谓 DSL,你会发现它们不过提取了通用程序语言里的一部分,比如结构定义,算术表达式,逻辑表达式,条件语句,等等。极少有 DSL 是不能用通用的程序语言构造表示的。绝大部分时候你都可以用一种通用的语言,写出满足领域需求的库代码,然后领域里的人就可以调用库函数来完成他们的任务。这一段王垠说的可以说是废话,那是当然啦,可是也体现了王垠写文章最大的缺点 — 就是他总是喜欢吹毛求疵去批判各种其实 模棱两可 的概念和技术,而且通通是选择其中最差的举例子、只看辣鸡的那一面,而且说了也不提出改进的意见,基本就是一票否决掉,并且建议大家都不要用
这段话改编一下,我是否可以这么说:
不同赛道需要的,绝大部分时候只是针对该赛道组装的“组装车”,而不是完全不同的“新车型”。
分析大部分所谓新型车,你会发现它们不过提取了通用赛车组件里的一部分,比如车轮,ESP,尾翼,载重,等等。
极少有新型车是不能用通用的汽车构造表示的。
绝大部分时候你都可以开一种所有赛道通用的组装车,开出满足竞赛需求的成绩,然后队里的人就可以套用蹩脚的组装来完成他们的任务,无须考虑组织是否妥帖好用。
duangsuse::Echo
http://www.yinwang.org/blog-cn/2017/05/25/dsl
最近去设计的 GalScript 不是一门 DSL,它是定义良好的通用程序设计语言,当然也可以当成 DSL 用,因为它的语法比较灵活,有缩进文法、自定义 prefix, infix, postfix operator,也可以在高阶函数上耍些小把戏,和 Scala 一样,GalScript 也有 implicit arguments(所以 Haskell 的 typeclass 和 instance 其实在 Gal 里都有等价物,虽然 Gal 不支持 parameterized type... Gal 是有虚方法的,这意味着 HM 的 Type class 当然可以实现啊),所以它能够相对比较好的完成 EDSL 的任务
至于 Scheme 系的,也是有很长积累的语言了,我不敢拿它和 Scheme 比
Scheme 的不是不好,但是... 我不知道这个为什么能够拿来吹,Scheme 的宏很强大,但它所基于的概念很简单,甚至不如 Rust 宏(当然我只是从概念的复杂性上讲,虽然两者都能实现,两者语言面向的问题不一样,Rust 复杂一些也是没办法的 核心一样)
比如 Racket 吧,我拿 GeekSpec 举个简单的例子,Racket 里这其实非常简单
Scheme 系可以说是自省(inspect)能力最强的语言了,所以你才能在语言内部定义 AST transform 什么的,当然 Scala 也有 Def macro 就是(实际上现在学术派点的语言都有)
比如我当时设计 GeekSpec 的时候有这么个简单的语法示例
getUsers(limit: Int) -> List of User = /users
抽提一下可以变成这样
我们来定义一个宏,把它搞成这样。个人不是很了解 Racket 的 binding 什么的(迫真,怎么可能,就是有点看不清那个 pattern matching 是干啥子)
为了演示方便,我只定义能够抽提上面那个示例的,整个的语法当然不包括在内(但我个人是反对王垠完全否认 DSL 的态度的,谁说 DSL 不能让解决问题更容易?谁想写一大堆『库函数调用』的冗余代码?)
Scheme 写起来配对括号好淡疼... REPL
至于 Scheme 系的,也是有很长积累的语言了,我不敢拿它和 Scheme 比
Scheme 的不是不好,但是... 我不知道这个为什么能够拿来吹,Scheme 的宏很强大,但它所基于的概念很简单,甚至不如 Rust 宏(当然我只是从概念的复杂性上讲,虽然两者都能实现,两者语言面向的问题不一样,Rust 复杂一些也是没办法的 核心一样)
比如 Racket 吧,我拿 GeekSpec 举个简单的例子,Racket 里这其实非常简单
Scheme 系可以说是自省(inspect)能力最强的语言了,所以你才能在语言内部定义 AST transform 什么的,当然 Scala 也有 Def macro 就是(实际上现在学术派点的语言都有)
比如我当时设计 GeekSpec 的时候有这么个简单的语法示例
getUsers(limit: Int) -> List of User = /users
抽提一下可以变成这样
((GET | POST | PUT | DELETE) '@')? interfName '(' Arg* ')' '->' Ret '=' path
Arg = name ':' typeName
Ret = typeName | typeName 'of' typeName
我们在 Scheme 该怎么定义这种 macro 呢?看看这个(api getUsers (limit: Int) -> List of User = /users)
'("getUsers" (list '(limit Int)) '(of List User) "/users") 怎么样?我们来定义一个宏,把它搞成这样。个人不是很了解 Racket 的 binding 什么的(迫真,怎么可能,就是有点看不清那个 pattern matching 是干啥子)
为了演示方便,我只定义能够抽提上面那个示例的,整个的语法当然不包括在内(但我个人是反对王垠完全否认 DSL 的态度的,谁说 DSL 不能让解决问题更容易?谁想写一大堆『库函数调用』的冗余代码?)
(define (extract-arglist al)好像不 work... 大概,所以算了。
(map (lambda (xx)
(let {[x (symbol->string xx)]}
(let {[lx (string-length x)]}
(if (eq? #\: (string-ref x (- lx 1)))
(string-trim x ":") x)))) al))
(define-syntax api (syntax-rules ()
{ [_ name args _ rett _ url] #'(name (map extract-arglist args) (list just rett) url)
; [_ name args _ retc _ rett _ url] #'(name (map extract-arglist args) '(of retc rett) url)
}))
Scheme 写起来配对括号好淡疼... REPL
duangsuse::Echo
没事,你这是 sublanguage
也不是,因为 GalScript 还是有很多『超集』的语言特性的
sublanguage 因为我 Scheme 不好很浪费时间,Scheme 的特色就是元编程了,不过我基本不用 Scheme...
sublanguage 因为我 Scheme 不好很浪费时间,Scheme 的特色就是元编程了,不过我基本不用 Scheme...
duangsuse::Echo
也不是,因为 GalScript 还是有很多『超集』的语言特性的 sublanguage 因为我 Scheme 不好很浪费时间,Scheme 的特色就是元编程了,不过我基本不用 Scheme...
我直接因为 Scheme 自带函数太少所以不会写 Scheme
伸出手就缺 Common Lisp 里自带的函数,太难受了
伸出手就缺 Common Lisp 里自带的函数,太难受了
duangsuse::Echo
啊,超的部分不是靠内化实现的吗(
不是啊,那只是一种实现方式而已,GalScript 取材于 JavaScript, Ruby, ES6, Scala, Kotlin, C++,但不打算当任何一个的『子集』
你可以看看这个,不过 Gal 的... 我这周可能想办法发一点...
你可以看看这个,不过 Gal 的... 我这周可能想办法发一点...
Telegram
/tmp/duangsuse.sock
实现的难点在学校里已经考虑过了,我觉得是时间问题
难点一方面在解析器上,它是 2D syntax,支持缩进语义所以非常灵活
一方面是在新的 reverse pattern matching 上面,我下了好大功夫设计,而且还很难实现(但是一些基础的 reverse pattern 不难实现)
譬如上面那个 match x + 1 = n 这个,n=1
此时解释实现需构造一个 MixPattern 对象 MixPattern(+1, Unknown("x")) 就可以了,它接受一个输入,然后把输入 -1…
难点一方面在解析器上,它是 2D syntax,支持缩进语义所以非常灵活
一方面是在新的 reverse pattern matching 上面,我下了好大功夫设计,而且还很难实现(但是一些基础的 reverse pattern 不难实现)
譬如上面那个 match x + 1 = n 这个,n=1
此时解释实现需构造一个 MixPattern 对象 MixPattern(+1, Unknown("x")) 就可以了,它接受一个输入,然后把输入 -1…
好,这样就最自由不过了。
啊对了,我看下来,首先是倍感不急了:要这样的话就应该慢慢做,保证质量。
未来可能要考虑 Geekapk 改名。或许可以先看看 Fuchsia OS 的安装包后缀名叫啥了。
啊对了,我看下来,首先是倍感不急了:要这样的话就应该慢慢做,保证质量。
未来可能要考虑 Geekapk 改名。或许可以先看看 Fuchsia OS 的安装包后缀名叫啥了。
duangsuse::Echo
我直接因为 Scheme 自带函数太少所以不会写 Scheme 伸出手就缺 Common Lisp 里自带的函数,太难受了
自带函数不是问题,问题是不会写 Haskell 也不可能会写 Scheme (跑
主要是 Racket 的 pattern matching... 总觉得没有 Haskell 的好用
而且字符串处理什么的 都是要 string->list, list->string 的,如果不会 car/cdr/null? 很麻烦
Racket 还是 R*RS 加了一大堆 cdddr cddaar cdar, ddd 我到没意见,aaa 是什么意思,难不成 head 还能取 N 次?
主要是 Racket 的 pattern matching... 总觉得没有 Haskell 的好用
而且字符串处理什么的 都是要 string->list, list->string 的,如果不会 car/cdr/null? 很麻烦
Racket 还是 R*RS 加了一大堆 cdddr cddaar cdar, ddd 我到没意见,aaa 是什么意思,难不成 head 还能取 N 次?