返回首页
最新
我一直觉得能够在帮助年轻一代学习技能以拥有光明未来的角色中工作是很酷的。这种角色我通过几种方式来实现(作为父母、机器人导师、学校董事会顾问和主日学校老师),我怀疑大多数HN读者也有相同的角色和感受。在培养软件技能方面,显而易见的是,学生和我都需要一个高效的软件环境,以便我们能够共同工作。经验丰富的工程师与初学者共同工作的这一主题是我创建`dk`作为脚本工具的背景。
我的测试对象是修过一两门AP计算机科学课程的学生(美国的高中计算机科学课程),其中一些学生曾和我实习。我需要解决几个问题:
- 开发环境必须简单易设,编程语言不能太复杂。
- 认识到编写小的、易于测试的工作单元(例如“脚本”)是我发现的初级程序员开发大型应用程序的唯一方法。
- 便宜的、受限的开发硬件(例如,内存有限且没有管理员权限的学校电脑)有时用于部署到廉价硬件目标(例如,二手安卓平板)。
我的解决方案是编写一个名为`dk`的独立二进制文件,它将脚本作为工作单元,交叉编译为独立的可执行文件,并按需下载所需的运行时和系统根。它大致位于Python和Go的同一领域。
`dk`可用于Windows、macOS和Linux/glibc主机,支持越来越多的交叉编译目标。你的`dk`脚本几乎是OCaml 4的一个完整子集:所有`dk`脚本都是OCaml,但并非所有OCaml代码都可以在`dk`中运行。与常规OCaml的其他不同之处在于,`dk`附带了一个大型库,并且我认为任何功能如果在所有支持的操作系统上都无法正常工作,就算是有缺陷的。
上述`dk`的起源确实有些奇怪(且简略),所以我并没有预料到`dk`会成为一个通用的脚本工具。然而,它确实成为了。我可以将我手写的软件封装、重用并组织成一组`dk`脚本。
温馨提示:`dk`中的交叉编译支持最近进行了全面改造,并不是所有的错误都已修复。错误信息不太友好(你需要向上滚动才能看到根本原因和解决方案),但它们会有所改善。有些进度条缺失。此外,还有一些实验性功能……`uv`风格的导入和交互式解释器是其中重要的功能……这些功能故意文档不足,因为我担心`dk`的API表面。
但它仍然运行良好,你可以在示例部分看到一些实际应用。如果你能试用一下并给`dk`一些反馈,我将非常感激!问题列表在这里:<a href="https://github.com/diskuv/dk/issues">https://github.com/diskuv/dk/issues</a>。