适用于C#Developer的Common Lisp IDE?

时间:2011-02-18 14:39:47

标签: c# visual-studio eclipse ide common-lisp

更新

我现在决定和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是一个很好的起点吗?还有其他好的选择吗?

编辑:

以下是我习惯的功能:

  • 语法高亮和自动注释(每个人都有这个,所以这是一个有争议的点)
  • 自动完成功能和变量名称
  • 实时显示所有函数重载和参数,以及在键入参数时向上/向下箭头的功能
  • 代码改进的语法建议,能够为您完成(“使用const”,“转换为LINQ表达式(FP)”,“变量永远不会分配给”,“变量永远不会被使用” ,“变量可以为null”,“函数永远不会被使用”等。)
  • 提取方法/功能重构:选择一个文本块,然后将其提取到新函数中
  • 创建变量重构:选择一个文本块并创建一个变量(例如,let)
  • 重命名重构:重命名函数或变量声明,使用它的所有其他函数将被更新(自动搜索/替换)
  • 转到方法/函数的定义,变量
  • 查找特定方法/功能的用法/参考,变量
  • 基于文件夹的集成项目管理工具和构建工具
  • “将类移动到新文件”,它根据类名创建一个新文件,并包含其所有方法
  • “基于类类型重命名文件”,如果更改类名称,则重命名文件
  • F9 /单击该行左侧以添加/删除断点
  • F10 / F11在调试时进入或超过代码,同时带有箭头和突出显示以显示当前正在执行的代码(进入func执行,或者只是在此处执行)

大多数内容都可以在右键单击上下文菜单中找到,或者在您输入时作为悬停组合框或文本框提供。

我不是说emacs / slime不能这样做,但如果确实如此,它就不会在可用性技术方面使用任何类似的东西。

7 个答案:

答案 0 :(得分:7)

如果你已经习惯了Visual Studio并且想要一个类似的产品用于Lisp,那么等价物可能就是一个类似的商业IDE。我所知道的最重要的是AllegroLispworks

虽然我已经尝试过演示,但我并没有亲自将其中任何一个用于实际工作(即一个大项目)。他们似乎很好,如果有点复杂和奇怪的用户界面,但没有比史莱姆更好,值得我的钱。但如果你想要像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

还有LispIDELisp Studio

答案 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非常实用。

https://nightcode.info/

我发现自己现在想要Nightcode支持Common Lisp(也许是ABCL的形式)!

答案 6 :(得分:1)

虽然这个问题已经过时了,并且OP已转向Clojure,但我认为这仍然是一个有效的问题,特别是对于那些希望学习Common Lisp并且不愿意从Visual Studio切换或只是想学习新东西的人使用他们熟悉的工具,至少可以减少进入如此优秀语言的障碍,这与提出这个问题的原因相同。

我写了一篇文章,使用Visual Studio as a Lisp IDE来解释如何实现这一目标,这对于EMACS + SLIME组合几乎是一个很好的替代。

实现此设置的步骤如下:

  1. Visual Studio 2015(显然是主要成分)
  2. Lisp Integration Visual Studio Extension。
  3. 已安装ConEmu并抓取ConEmuIntegration Visual Studio Extension
  4. 您选择的Common Lisp实现,在%PATH%中设置(通过环境设置)
  5. 通过上面的设置,您将拥有一个嵌入式REPL,将鼠标悬停在Lisp函数/宏上将为您提供带有签名和定义的工具提示。这应该完成原始问题中要求的大部分功能。

    可能令人遗憾的是,在提出这个问题的时候,这些工具还不够成熟/创建,无法像现在那样完全整合,或者当时没有人知道或感兴趣。< / p>

    作为奖励,如果您已经熟悉C ++,我的建议是检查Embeddable Common Lisp(ECL),因为这允许您将Lisp嵌入到C ++代码中或从Lisp调用C ++,这有多棒是与Visual Studio结合吗?