2024 Clojure状况调查!中分享您的想法。

欢迎!请查看关于 页面以获取更多关于本站如何运作的信息。

+4
Clojure CLI
重新标记

这是为新成员加入而设计的,包括那些安装额外工具比较复杂的用户。

从我的教师角度来看,如果可以仅使用CLI工具创建一个绝对最小化项目,那将非常棒。"必须手动完成或使用第三方工具"是阻碍一些学生的问题,也大概是新用户的问题。在一个班级环境中,学生使用不同的机器和操作系统,背景不同,可能产生许多对开发者来说微不足道但却令人沮丧的问题(例如,操作系统添加隐藏文件扩展名、编辑器编码文本、操作系统路径问题等)。

我所说的“绝对最小化项目”是指一个目录,包含一个 deps.edn 文件,其中包含一个空对象,还有一个包含一个子目录的 src 文件夹,这个子目录与顶级文件夹具有相同的名称,该子目录又包含一个名为 core.clj 的单个文件,该文件只包含一个最小化的 ns 表达式,其命名空间名称与文件夹和文件名匹配,没有任何其他内容。

我明白,关于CLI工具是否应该支持更强大的项目创建功能,以及如果这样的话,它应该创建什么样的项目,如何组织等问题,还有很多需要考虑。但我在这里要求的是如此简化,我希望它能独立于更普遍的问题被认为是可考虑的。我也希望这个最小项目创建功能独立于更普遍的问题被认为是可考虑的,因为我认为这将极大地简化某些新用户群体的加入。

初步想法
将一个 `.config/clojure/tools/project.edn` 配置与 Clojure CLI 安装一起包含,该配置将在执行 `clojure -Tproject create` 命令时运行 seancorfield/deps-new。

这似乎可以提供一个解决问题的方案,而不会将大量的代码设计引入 Clojure CLI。

或者,该类可以克隆(或下载包含相关别名和工具的 zip 归档)用户配置,而无需直接为 Clojure CLI 设计项目工具

> 我假设 git clone 位于范围之内,因为有多种方法在桌面 UI、Web UI 等中执行此操作,因此似乎不会超出原始贴主的目标受众(我已经多次以这种方法与使用无代码产品的人合作过)

理解超最小项目价值
我难以理解超最小 Clojure 项目的价值,部分原因是我假设这个请求没有详细说明将要如何使用它(课程计划的范围是什么)

关于 Clojure 的教学方式和所教授范围的详细说明将有助于理解其价值。否则,它似乎非常具体于原始贴主的需求,而不是一个对社区有用的工具。

我的担忧是

1. 依赖于隐含的配置知识

一个只包含 `{}` 的项目配置文件自然会引发问题:这是如何工作的,进而讨论 Clojure CLI 如何将 Clojure 依赖项引入并添加 `src` 到类路径

2. 缺乏支持学习的示例

包含一个最小的 `:paths` 和 `:deps` 配置将提供一种简单的方式来展示添加更多配置时的语法要求(这很难判断是否在范围之外)

同样可以论证为包含一个别名,例如测试运行器

3. 为特定用例创建内容

我认为在没有考虑更广泛的社区需求的情况下,不应在 Clojure CLI 中引入项目创建工具。至少不应作为发布功能。

4. 重新发明

clj-new 和 deps-new 已提供创建项目的方法,而最小刮擦模板似乎满足了原始贴主的所需(根据我的有限理解)
https://github.com/seancorfield/deps-new#create-a-minimal-scratch-project

这可以是课程安装说明的一部分(包括 Java 和 Clojure CLI),或者复制到学生电脑上的用户配置

有更多问题,但这主要取决于原始贴主请求的范围。
by
编辑 by
关于“理解极简项目的价值”,我现在的使用场景是在一门课程中,这门课程使用了Clojure作为编程语言,但Clojure和软件开发都不是课程的主要焦点。

我目前的课程是关于进化计算,但我为人工智能和其他主题的课程也做过类似的事情,我知道其他计算机科学系的教师在其他课程中也做了类似的事情。理想情况下,学生只需要安装一件东西,然后就能开始输入/编辑/评估/保存与我们正在研究的话题相关的Clojure表达式(以进化计算为例)。也许我们无法完全达到“安装一件东西”的理想状态,但让从零开始编写/编辑/运行Clojure代码的路径尽可能短是最理想的。我认为这不仅仅适用于我正在教授的课程的学生,也适用于可能以各种其他背景和目的独立接触Clojure的人。

如果deps.edn是一种支持的项目管理方式,并且确实存在最小化的“新文档”项目结构,那么在您已经进行的安装(CLI工具)中提供创建最小项目的方法将会非常好。

据我所知,我们只需要一个deps.edn文件,该文件必须包含一个映射,但该映射可以是空的。然后我们需要一个src目录。由于单段命名空间被严格禁止,我们需要在src中创建一个文件夹。然后我们的新文档(除了正确构造的ns表达式外都是空的)将位于该文件夹中。

我明白,一旦我们考虑任何事情,就有很多选项,而且不清楚如何组织它们。但我认为我的建议并没有涉及到这一点。

因为目前我们为我的课程使用的工具不会创建项目,我目前确实通过课程的网站分发一个最小项目。但原因有几个并不理想。一方面,我必须给我的最小项目起名字,学生需要更改目录名称和文件内容才能更改它。对于不在我的课程中的学生(以及我怀疑,从各种角度和背景以及各种目的接触Clojure的其他人)来说,这是在开始编写/编辑/运行代码之前必须找到和解决的事情。

关于John Stevenson的具体担忧

1. 我班上的学生不一定需要了解{}在deps.edn中的工作方式,或者CLI如何导入Clojure依赖,或者任何关于类路径的内容。如果他们最终需要了解其中的任何内容,他们可以在以后学习。无论如何,如果了解这些内容对于开始编写/编辑/运行Clojure代码不是必需的,那将非常好。

2. 我同意,支持学习的例子是一个很好的主意。我希望看到更多。我上次检查时,以为clojure.org上的依赖项说明材料在例子中跳到了复杂的示例,但没有像我希望的那样清晰说明如何做基本的事情。但我确实认为这不在讨论范围内。

3. 我认为这并不真的是一个特定的用例。大多数文字处理软件都有“新建文档”功能,虽然我猜你们可以说这只是为了那些没有预先存在的模板或创建新文档的独立软件的“特殊用例”的人们,但我认为“新建文档”功能对很多人来说是非常有用的。由于许多Clojure编辑器和工具都需要项目,Clojure的“新建文档”功能将创建一个项目。在这个比喻中,最小项目就类似于大多数文字处理器中的空白文档。

4. 有其他软件可以创建项目真是太好了。如果我们不需要其他软件来创建最小项目就更好了。

1 答案

0
在此大胆思考……如果我们考虑特殊的用例,my-first-clojure-project,而不是创建任何项目的通用情况,这可能是clojure-get-started旅程的不错一部分。创建的项目可以类似于这个 https://github.com/PEZ/clojure-zero, 没有基于网络的组件,也不是Calva特定的。关键是它可能内容非常少,README可以提供下一步行动的指南。我将添加另一个我的入门项目作为例子: https://github.com/PEZ/clojure-get-started-mini

创建项目的命令行可以支持一些小配置的选择,脚本可以将未提供的任何选项转换为提示。选项可以包括:
* 创建Clojure或ClojureScript或两者兼备的入门项目?
* 创建带入门指令的README文件?
* 为哪个编辑器创建指令?Calva/CIDER/Cursive
* 在源文件中是否包含“入门”注释?
* 包含为 <编辑器> 定制的“入门”材料?

“入门”材料的内容可以采用类似于 Calva 的入门材料的方式进行众筹:[https://github.com/BetterThanTomorrow/dram](https://github.com/BetterThanTomorrow/dram)(在配置方面需要更多思考,但无论如何,我想强调的是概念,而不是解决方案。)
by
虽然所有这些配置选项和入门材料可能都非常棒,但并不明显知道该使用哪些选项,包含大量可能在某些情况下令人困惑和不必要的提示/文本等可能会适得其反。

如果我的理解正确,所需的最小项目的争议性很小。例如,我认为我定义的结构几乎是最小化的,以使 Calva 能够打开并允许您使用它,唯一不是完全必要的部分是避免单个命名空间段。

因此,如果 CLI 工具能生成这种类型的最小项目就好了。所有的“入门材料”都可以在其他地方获得,并且如果人们对内容有不同意见,他们可以创建替代版本。在此期间,新用户可以开始使用 Clojure 而不需要单独的项目创建工具或从头创建项目。
by
不需要向用户展示太多选项。可以是一个项目类型选项,如果省略则显示提示

1. 创建一个空 Clojure 项目
2. 创建一个空 ClojureScript 项目
3. 创建一个空的 Clojure + ClojureScript 项目
4. 创建一个“入门”项目

这有点像在 Pages 或 Keynote 中创建新的文档时的情况。它会打开一个对话框,您可以选择创建空文档或从模板中选择。Google Drive 也做了类似的事情



只有您选择非空选项时,才会获得更多提示。许多创建项目的工具都是这样工作的。在创建 VS Code 扩展时,建议使用 `yo`,它通过提示让您稍微配置一下项目:[https://vscode.js.cn/api/get-started/your-first-extension](https://vscode.js.cn/api/get-started/your-first-extension)
...