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

欢迎!请查看关于页面了解有关该功能的一些更多信息。

+4
Clojure CLI
重新标记

这是为新加入者设计的,包括那些安装额外工具并非易事的人。

从作为一名教师的角度来看,如果仅使用CLI工具就能创建一个绝对最小化的项目,那就太好了。“必须手动完成或使用第三方工具”可能会阻碍我的某些学生,也可能阻碍其他新用户。在课堂环境中,学生们使用不同的计算机和操作系统,具有不同的背景,一些对开发者来说看似微不足道的问题(例如,操作系统添加隐藏文件扩展名,编辑器编码文本,OS路径问题等)可能会产生很多令人沮丧的摩擦。

我所说的“绝对最小化项目”是指包含一个空的deps.edn的目录,并包含一个src文件夹,该文件夹包含一个与顶级文件夹同名的子文件夹,它又包含一个单文件(最好是core.clj),只包含一个最简ns表达式,其命名空间名称与文件夹和文件名称相匹配,除此之外没有其他内容。

我明白关于CLI工具是否应支持更强大的项目创建功能的更一般问题有很多要考虑,如果要这样做,那么应该创建哪些类型的项目,如何组织等等。但我在这里的要求是如此地微小,以至于我希望它可以独立于更一般的问题来考虑。我也希望这个最小项目创建功能可以独立于更一般的问题来考虑,因为我认为这将大大简化某些新用户群体的加入。

初步想法
在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是不审慎的。至少不作为发布特性。

4. 重复

clj-new和deps-new已经提供了创建项目的方式,并且一个最小的Scratch模板似乎已经涵盖了原始发帖者的需求(以我有限的理解)
https://github.com/seancorfield/deps-new#create-a-minimal-scratch-project

这可以作为课程安装指令的一部分(连同Java和Clojure CLI一同提供)或复制到学生电脑上的用户配置

还有更多问题,但这主要取决于原始发帖者请求的范围。

编辑 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
by
by
在这里胡乱思考……如果我们考虑特殊情况,比如我的第一个Clojure项目,而非创建任何一般的项目的命令行工具,这可以是get-started-with-clojure之旅的一部分。创建的项目可以类似于这个https://github.com/PEZ/clojure-zero,没有基于web的内容和不是Calva特定的。关键是它可能包含非常少的内容,而README可以提供下一步要做什么的指导。我将提供另一个我自己的启动项目作为例子:https://github.com/PEZ/clojure-get-started-mini

创建项目的命令行可以支持一些小配置的选择,如果未提供任何选项,脚本将进入提示。选项可能包括
* 创建Clojure或ClojureScript或两者的启动项目吗?
* 创建带有get-started说明的README吗?
* 创建适合哪个编辑器的说明?Calva/CIDER/Cursive
* 在源文件中包含get-started注释吗?
* 包含针对的get-started材料吗?

get-started材料的内容可以类似于Calva的get-started材料的方式进行众包:https://github.com/BetterThanTomorrow/dram(在配置方面需要更多思考,但无论如何,我只是想强调这个概念,而不是具体的解决方案。)
by
虽然所有这些配置选项和入门材料可能都很棒,但并不明显哪一个是正确的,并且包含可能使某些背景变得混乱和不必要的很多提示/文本等可能会产生反效果。

如果理解正确,对于所需的最小项目,争议并不多。例如,我认为我定义的结构几乎是最小的,使得Calva可以打开并让您工作,唯一不是完全必要的部分是避免单个段命名空间。

因此,如果CLI工具能够创建此类最小项目的话,那就太好了。所有的“入门材料”都可以在其他地方提供,然后如果人们对内容有争议,他们可以制作替代版本。在此期间,新用户能够开始使用Clojure,而无需单独使用项目创建工具或从头创建项目。
它不需要向用户提供大量的选项。可以是一个项目类型选项,如果省略,将显示提示

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

这有点像在Pages或Keynote中创建新文档时的样子。它打开一个对话框,您可以选择创建空白文档或从模板创建。

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](https://vscode.js.cn/api/get-started/your-first-extension)
...