2024年Clojure状态调查!分享您的想法。

欢迎!请参阅关于页面了解有关此工作的更多信息。

+4
Clojure CLI
重标记

这适用于欢迎新用户,包括那些安装额外工具不是很简单的情况。

从我的教师角度出发,如果只使用命令行工具就能创建出绝对最小化的项目,那将是非常棒的。对于一些学生来说,“必须手动完成或使用第三方工具”是一个障碍,预计对新用户来说也是如此。在课堂环境下,学生们使用不同的机器和操作系统,并且有着不同的背景,一些对开发者来说可能微不足道的问题(如操作系统添加隐藏文件扩展名、文本编码的编辑器、OS路径问题等)会产生大量令人气馁的摩擦。

我所说的“绝对最小化项目”指的是一个包含空白{}的deps.edn文件的目录,此外还包含一个包含与顶级文件夹同名子文件夹的src文件夹,该子文件夹再包含一个名为core.clj的单个文件,该文件仅包含一个最小的ns表达式,命名空间名称与文件夹和文件名称相匹配,没有其他内容。

我理解,关于命令行工具是否应该支持更强大的项目创建功能,这个问题有很多值得思考的地方,以及如果应该,应该创建什么样的项目,该如何组织等。但我在这里的要求是如此简单,以至于我希望它可以独立于更一般问题的考虑。我也希望这个最小化项目创建功能可以独立于更一般的问题来考虑,因为它会显著简化一些新用户的入门过程。

初步想法
在安装Clojure CLI时包括一个`.config/clojure/tools/project.edn`配置文件,当执行命令`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中引入项目创建工具。至少在发布的版本特征之外。

重提旧事

clj-new和deps-new已经提供创建项目的方法,一个最小的临时模板似乎满足了原作者的需求(据我有限的理解)
https://github.com/seancorfield/deps-new#create-a-minimal-scratch-project

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

还有更多的问题,但那完全取决于原作者请求的范围。
关于"理解超最小型项目的价值",我的当前用途是在一门将Clojure作为编程语言的本科课程中,但Clojure和软件开发都不是该课程的主要焦点。

我目前的学习课程是关于进化计算,但我也为AI和其它主题的课程做过类似的事情,我还知道其他计算机科学系的同事也在他们的其它课程中做了类似的事情。理想情况下,学生应该能够安装一个东西,然后就能开始输入、编辑、评估和保存与我们学习主题相关的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
by
by
在此大声想一下...如果我们考虑特殊情况“my-first-clojure-project”,而不是创建任何一般项目,这可能是“开始使用Clojure”旅程的一部分美好之处。创建的项目可以与这个类似: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(在配置方面需要更多思考,但无论如何,这只是我想强调的概念,而不是解决方案。)
by
虽然所有这些配置选项和起步材料可能都很棒,但并不明显应该选择哪些,而且在某些情况下包括可能会让人困惑或不必要的许多提示/文本等,可能反而适得其反。

如果理解正确,所需的最小项目的争议点很少。例如,我认为我定义的结构接近Calva打开并让您工作的最小结构,唯一的并非完全必要部分是避免单一段命名空间。

因此,如果CLI工具可以创建此类最小项目将非常好。所有“入门材料”都可以在别处提供,然后如果人们对内容有异议,他们可以创建替代版本。与此同时,新用户可以在不获取单独的项目创建工具或从头开始创建项目的情况下开始使用Clojure。
by
无需向用户展示众多选项。可以是一个项目类型选项,如果省略,将显示提示

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

这有点像在Pages或Keynote中创建新文档时。它会打开一个对话框,让您选择创建空白文档或使用模板。Google Drive也有类似的操作

https://user-images.githubusercontent.com/30010/224144517-d9fce7d3-1feb-40ea-9c63-3de0f0ee1b70.png

只有在您选择非空白选项时,才会出现更多提示。许多创建项目的工具都像这样工作。当创建VS Code扩展时,建议使用“yo”,这允许您使用提示配置项目: https://vscode.js.cn/api/get-started/your-first-extension
...