更新
我现在决定和Clojure一起去。
LispDev还没有准备好,Eclipse / cusp不够稳定让我觉得不舒服。
至于Clojure,在经历了一个漫长的,非常令人沮丧的非常讨厌的过程,试图让Eclipse / CCW,Netbeans / Enclojure和IntelliJ / La Clojure工作之后,我终于让Eclipse / CCW工作了。其余的仍处于大多数破碎状态。
(如果我接触它,我将记录 me 使Eclipse / CCW工作所需的内容。)
所以现在,我打算用它。我可能会回到CL,查看LispWorks和AllegroLisp的免费版本,但在Microsoft CLR环境中工作时,Clojure对我来说感觉更自然。
感谢大家的帮助。
原始问题
我是一名非常熟悉Visual Studio的C#开发人员(使用Resharper)。
我是Lisps的新手。我最近对Common Lisp和Clojure都感兴趣,并且发现了很多关于它们的好材料。
我尝试过Emacs + Slime,但这感觉就像是一个非常倒退,过时的解决方案。我毫不怀疑它的力量,但它的可用性与我以前的习惯完全不同。除了语言之外,我不想使用IDE。
Clojure和CL都有Eclipse插件。还有一些我见过的Clojure选项。由于我不是Java开发人员,所以我对这些IDE一无所知。
Eclipse是一个很好的起点吗?还有其他好的选择吗?
编辑:
以下是我习惯的功能:
大多数内容都可以在右键单击上下文菜单中找到,或者在您输入时作为悬停组合框或文本框提供。
我不是说emacs / slime不能这样做,但如果确实如此,它就不会在可用性技术方面使用任何类似的东西。
答案 0 :(得分:7)
如果你已经习惯了Visual Studio并且想要一个类似的产品用于Lisp,那么等价物可能就是一个类似的商业IDE。我所知道的最重要的是Allegro和Lispworks。
虽然我已经尝试过演示,但我并没有亲自将其中任何一个用于实际工作(即一个大项目)。他们似乎很好,如果有点复杂和奇怪的用户界面,但没有比史莱姆更好,值得我的钱。但如果你想要像VS这样的东西,它们可能就是你想要的东西。
FWIW,我在Emacs中同时使用C#和Common Lisp,我发现Slime比我迄今为止编辑C#的任何模式都要好10倍。想想看,我不知道任何我宁愿使用的语言或平台的开发环境 - 它就是那么好。
您可能遇到的一个问题是,Lisp本身的语言与您习惯使用的旧方式不再适用的语言不同,因此任何 IDE可能看起来“向后”您。 (我在C#之前很久就学会了Lisp,而且C#似乎倒退并且和我约会!)因此,你不是学习一些Slime命令(你真的不需要它们),而是学习IDE命令,这可能并不容易。你,因为概念是相同的,不一定映射到类似VS的IDE功能。
但无论你选择什么,祝你好运!
答案 1 :(得分:4)
C#主要用于批处理模式。 IDE显示了这一点。它知道固定语言的语法,调用编译器并使用各种工具的输出,如编译器。
Common Lisp略有不同。 IDE可以集成到Common Lisp(Allegro CL,LispWorks,CCL)中,也可以像Emacs一样连接到正在运行的Lisp(SLIME / Emacs)。主要的发展模式是互动的。程序正在运行,IDE会对其进行修改。
对于Emacs,使用带有扩展Paredit和Redshank的SLIME。请参阅:Editing Lisp Code with Emacs。
语法高亮和自动注释(每个人都有这个,所以这是一个有争议的点)
这是由IDE提供的。
自动完成功能和变量名称
这是由IDE提供的。
实时显示所有函数重载和参数,以及在键入参数时向上/向下滚动列表的功能
Common Lisp没有'重载'。可以在IDE中浏览泛型函数(CLOS)。
代码改进的语法建议,能够为你做(“使用const”,“转换为LINQ表达式(FP)”,“变量永远不会被分配给”,“变量永远不会使用“,”变量可以为null“,”函数永远不会被使用“,等等。
Lisp编译器输出提示和警告。一些人也有风格建议。
CL-USER 15> (defun foo(a b)a) FOO
CL-USER 16> (编译'foo) ;;; * FOO中的警告:B已绑定但未引用 FOO
像LispWorks这样的实现可以浏览一组警告和错误。
提取方法/函数重构:选择一个文本块,然后将其提取到一个新函数中。
工具可以做到这一点。参见例如Redshank。
创建变量重构:选择一个文本块并创建一个变量(例如,让一个)
Reshank。
重命名重构:重命名函数或变量声明,使用它的所有其他函数都将更新(自动搜索/替换)
使用IDE的搜索和替换工具。请注意,由于Lisp具有可编程语法,因此无法以一般方式解决该问题。
转到方法/函数的定义,变量
间位。 ,Meta-X编辑定义
查找特定方法/功能的用法/参考,变量
谁在IDE中调用功能。
基于文件夹的集成项目管理工具和构建工具
请参阅系统工具。
“将类移动到新文件”,它根据类名创建一个新文件,并包含其所有方法
Common Lisp不能以这种方式工作。方法和类没有像C#那样连接。
“基于类类型重命名文件”,如果更改类名,则重命名文件
Common Lisp不能以这种方式工作。一个人不会为一个班级写一个文件。
F9 /点击该行左侧添加/删除断点
取决于IDE。使用BREAK功能。
F10 / F11在调试时进入或超过代码,同时带有箭头和突出显示以显示当前正在执行的代码(进入func执行,或者只是在此处执行)
使用STEP或IDE工具功能。
大多数内容都可以在右键单击上下文菜单中找到,或者在您输入时作为悬停的组合框或文本框提供。
是
我认为您需要更详细地查看SLIME,因为它与您通常的常见Lisp功能(如STEP,BREAK和TRACE)相结合所描述的内容很多。
阅读LispWorks IDE的手册可能也很有用,它提供了便携式GUI中的等效功能以及更多功能:
Lispworks for Windows, IDE User Guide
我不是说emacs / slime不能这样做,但如果确实如此,它就不会在可用性技术方面使用类似的东西。
SLIME基于Emacs,因此它的UI形成了它。例如,LispWorks使用Emacs的想法主要仅用于编辑器组件(它基于用Common Lisp编写的类似Emacs的编辑器)。 LispWorks使用GUI工具进行类浏览,通用功能浏览,系统管理,调试器,检查器等。
答案 2 :(得分:3)
也许你应该试试Jabberwocky。
答案 3 :(得分:2)
Allegro Common Lisp有一个IDE提供它可能是有意义的(虽然我不确定你是否可以将它与其他Lisps一起使用)。 Eclipse插件名为Cusp,可以找到here,虽然有一个名为lispdev的here的分支,可能最近更新了。
在Lisp Game Wiki上可能会有一些有用的东西,特别是有用的应用程序页面here。
我个人喜欢使用Emacs + Slime和一些emacs工具,这些工具旨在使其更像IDE。
答案 4 :(得分:1)
如果您是Lisp的新手,而不是目前的emacs用户,那么我强烈推荐使用Allegro Lisp或LispWorks的免费版本。或者,如果您要使用Scheme路线,PLT Scheme(现在称为Racket)。
这三个都有非常丰富的IDE功能。调用树,提前输入,编辑器内断点,以及传统IDE中常用的大部分内容。
答案 5 :(得分:1)
我知道这是一个老问题但是 - 对于Clojure来说 - Nightcode怎么样?我同样也不想浪费语言学习时间来学习新的编辑器(即Emacs / SLIME)。我发现Nightcode非常实用。
我发现自己现在想要Nightcode支持Common Lisp(也许是ABCL的形式)!
答案 6 :(得分:1)
虽然这个问题已经过时了,并且OP已转向Clojure,但我认为这仍然是一个有效的问题,特别是对于那些希望学习Common Lisp并且不愿意从Visual Studio切换或只是想学习新东西的人使用他们熟悉的工具,至少可以减少进入如此优秀语言的障碍,这与提出这个问题的原因相同。
我写了一篇文章,使用Visual Studio as a Lisp IDE来解释如何实现这一目标,这对于EMACS + SLIME组合几乎是一个很好的替代。
实现此设置的步骤如下:
通过上面的设置,您将拥有一个嵌入式REPL,将鼠标悬停在Lisp函数/宏上将为您提供带有签名和定义的工具提示。这应该完成原始问题中要求的大部分功能。
可能令人遗憾的是,在提出这个问题的时候,这些工具还不够成熟/创建,无法像现在那样完全整合,或者当时没有人知道或感兴趣。< / p>
作为奖励,如果您已经熟悉C ++,我的建议是检查Embeddable Common Lisp(ECL),因为这允许您将Lisp嵌入到C ++代码中或从Lisp调用C ++,这有多棒是与Visual Studio结合吗?