适用于Windows、Linux或Mac的ML IDE和编译器

29

我需要在机器学习中写一些代码,这是我第一次使用该语言。 是否有适用于标准ML的开发环境(最好是在Windows下)?我尝试过谷歌搜索(和StackOverFlow!),但是我只找到了用于Linux的普通编译器(最多带有交互式控制台),没有IDE或Eclipse/NetBeans插件。 有什么建议吗?

6个回答

23

如何在Sublime Text 2中配置SML

对于那些喜欢用Sublime Text而不是Emacs作为编程SML的编辑器首选的人,下面的指南描述了如何配置Sublime Text以适用于SML。

要使此指南适用于您,您必须已经安装了smlnj

步骤1:安装Sublime Text和Package Control

首先,下载Sublime Text 2。确保下载版本2,因为SML语法支持尚未与版本3兼容。

Sublime Text支持一组惊人的软件包(即插件),可以分别安装。其中之一叫做Package Control。您必须首先安装Package Control才能直接从编辑器安装其他包。提供的链接说明了安装此程序包所需执行的操作。

步骤2:安装SML和Sublime REPL

现在,由于您已经安装了Package Control,因此安装其他软件包将非常容易。我们现在必须安装两个软件包:SML以支持编程语言的语法突出显示功能,并且SublimeREPL是一个增加了许多不同编程语言的REPL功能的软件包,可用于Sublime Text。

要安装这些软件包,您必须转到菜单并查找“工具”->“命令面板”,然后键入“Install Package”。在搜索框中,写下要安装的软件包名称,从找到的列表中选择程序包,然后按Enter键将其安装。对于上述两个软件包,请执行此操作:“SML”和“ SublimeREPL”

一旦您安装了SML程序包,如果您打开SML文件,则应该会在编辑器中获得语法突出显示功能。它甚至提供了一个名为Son of Obsidian的Sublime Text主题,您可以在首选项->颜色方案-> SML->Son of Obsidian中启用它。但是,您无需启用主题即可使用SML,这只是一种偏好。

一旦您安装了SublimeREPL程序包,您将能够转到菜单“工具”->“SublimeREPL”->“SML”,并打开支持使用SML程序包的语法突出显示,以及命令历史记录、行编辑和自动完成的SML REPL会话。如果您在左侧选项卡中有SML代码文件,在右侧选项卡中有SML REPL会话,则可以使生活变得非常简单。您可以通过使用“View”->“Layout”选项来完成此操作。

步骤3:键盘快捷键

现在,让我们添加一些键盘快捷键以适用于REPL。SublimeREPL程序包提供了少量的键盘配置,提供的可能不适用于SML REPL。因此,这是我通常要做的事情。

  • 首先进入“Preferences -> Browse Packages”
  • 进入SublimeREPL/config/SML子文件夹。
  • 在Sublime Text中编辑文件Default.sublime-commands。该文件包含Tools -> SublimeREPL菜单中当前的SML菜单选项。因此,我们现在将更改它以创建第二个选项,该选项可以在新的SML REPL会话中运行现有文件。我的编辑后文件如下所示。请注意“id”字段。我们可以定义任意数量的不同命令,并给它们不同的ID。在下一步中,我们将定义每个命令的功能。

[
    {
        "caption": "SublimeREPL: SML",
        "command": "run_existing_window_command", "args":
        {
            "id": "repl_sml",
            "file": "config/SML/Main.sublime-menu"
        }
    },
    {
        "caption": "SublimeREPL: SML - Run File",
        "command": "run_existing_window_command", "args":
        {
            "id": "repl_sml_run",
            "file": "config/SML/Main.sublime-menu"
        }
    }    
]
现在,在与前面的文件相同的目录中,编辑Main.sublime-menu文件。该文件包含上述每个定义命令的详细信息。我的编辑文件定义了上述两个命令,一个是简单地打开REPL,另一个是将当前文件打开到REPL中。它看起来如下所示:
[
     {
        "id": "tools",        
        "children":
        [{
            "caption": "SublimeREPL",
            "mnemonic": "r",
            "id": "SublimeREPL",
            "children":
            [{
                "caption": "SML",
                "id": "SML",
                "children": [
                    {"command": "repl_open",
                     "caption": "SML",
                     "id": "repl_sml",
                     "args": {
                        "type": "subprocess",
                        "encoding": "utf8",
                        "cmd": ["sml"],
                        "cwd": "$file_path",
                        "external_id": "sml",
                        "syntax": "Packages/SML (Standard ML)/sml.tmLanguage"
                        }
                    },
                    {"command": "repl_open",
                     "caption": "SML - Run Current File",
                     "id": "repl_sml_run",
                     "args": {
                        "type": "subprocess",
                        "encoding": "utf8",
                        "cmd": ["sml", "$file_basename"],
                        "cwd": "$file_path",
                        "external_id": "sml",
                        "syntax": "Packages/SML (Standard ML)/sml.tmLanguage"
                        }
                    }
                ]                                
            }]
        }]
    }
]
最后一步是为这两个命令添加键盘快捷方式。转到“首选项”->“按键绑定用户”,并使用以下两个额外的命令编辑文件。请随意更改我的键,并使用您认为合适的任何其他快捷键,前提是它们未用于其他功能。
[
    {  
      "keys":["ctrl+alt+j","k"],   
      "command": "repl_open",      
      "args": {  
           "type": "subprocess",  
           "encoding": "utf8",  
           "cmd": ["sml"],  
           "cwd": "$file_path",  
           "syntax": "Packages/SML (Standard ML)/sml.tmLanguage",
           "external_id": "sml"
      }  
    } ,
    {  
      "keys":["ctrl+alt+j","m"],   
      "command": "repl_open",      
      "args": {  
           "type": "subprocess",  
           "encoding": "utf8",  
           "cmd": ["sml", "$file_basename"],  
           "cwd": "$file_path",  
           "syntax": "Packages/SML (Standard ML)/sml.tmLanguage",
           "external_id": "sml"
      }  
    }  
]

完成了。现在,您只需按CTRL+JK即可打开SML REPL(这是按Ctrl + Alt + J,然后释放键并按K)。如果您正在使用SML文件进行工作,则可以按CTRL+JM将其发送到新的SML REPL会话中。

第四步:构建系统

Sublime Text提供配置选项,允许您解析代码文件并确定是否存在问题,并告诉您问题所在的确切位置。为此,我们必须配置一个“构建系统”。该配置文件告诉Sublime Text要运行哪个命令以及如何解释输出。如果SML解析器无法解析或执行程序,则输出将告诉您问题所在的位置。构建系统允许我们定义一个正则表达式来解析这种输出,并帮助Sublime Text找到包含问题的行和列。

转到“首选项”->“浏览程序包”,在用户文件夹下创建一个名为SML.sublime-build的新文件,并将文件定义如下:

{  
  "cmd": ["/usr/local/bin/sml","$file"],  
  "selector": "source.sml",  
  "working_dir": "$file_path",
  "file_regex": "^(.*\\.sml):(\\d+)\\.(\\d+)(\\-(\\d+)\\.(\\d+))?\\s(.*)$"
 } 

请确保在你的系统中替换命令路径为有效路径。保存文件后,可以进入菜单并选择Tools -> Build System -> SML。然后,您可以使用Tools -> Build来解析文件并查找任何错误。通过使用菜单选项Tools -> Build Result -> Next Result和Previous Result,您可以在构建系统检测到的错误之间导航,并且Sublime Text将把光标定位到由SML编译器报告的错误的准确位置。

我上面的正则表达式可能不是最好的,所以随意进行改进。

就这样。使用SML和Sublime Text开始编码吧。


21
您可以使用 Isabelle/jEdit 作为 Isabelle/ML 或官方标准 ML(SML'97)的集成开发环境(IDE)。底层的 ML 系统是 Poly/ML,其支持多核硬件。

严格来说,Isabelle 环境用于交互式和自动定理证明,但其 SML IDE 支持 是相当复杂的:源文件在用户编辑时进行静态检查和语义评估。注释的源代码包含有关推断类型、定义位置引用等的标记。

快速开始,请查看文档面板中的示例部分,输入 src/Tools/SML/Examples.thy(截至 Isabelle2014)。

SML-PIDE


我们能听到一些关于这种复杂性的细节吗?除了语法高亮之外,它还提供了什么? - Gergely
2
例如跳转到声明和悬停以发现任意子表达式的类型。 - Lars Noschinski
1
一张漂亮的图片,但打开示例只会给出一个文件。如何获取SML文件和REPL并在它们之间进行传输? - mmmmmm
这是一种基于编辑器的模型(没有 REPL):您只需更改 sml 文件,就可以在输出面板中查看其评估结果。 - Makarius
我打开了一个 .sml 文件进行编辑并保存,但输出仍然为空白,所以只有一张图片。 - mmmmmm
不需要保存文件:编辑器直接管理内容。请注意,您需要一个包含SML_file命令以引用您的文件的封闭.thy文件。(顺便说一句,这不是讨论论坛;如果您有具体问题,我建议您访问https://lists.cam.ac.uk/mailman/listinfo/cl-isabelle-users) - Makarius

12

在Windows上使用SML时,我一直使用SML/NJ编译和Notepad++编辑(Notepad++支持Caml的语法高亮,对于您的需要来说应该与SML相同)。

正如提到的,对于ML来说,一个简单的编辑器就足够了。


7
对于SML,有一些Emacs模式可用。请查看http://mlton.org/Emacs以获取更多信息。
sml-mode应该为您提供一个良好的编写SML代码的环境。Eclipse等工具是由于Java需要许多样板文件(如访问器、适配器等)而开发的。如果您需要同样的功能来处理ML,则应仔细检查是否过度设计。
编辑:顺便说一句,SMLNJ附带了一个eclipse插件。我不能发布链接,只需在Google上搜索"smlnj eclipse"即可。

1
Eclipse有许多对于标准文本编辑非常有用的功能。像上面那样的抱怨并不是很有效。 - Lii

6
我正在开发适用于 Windows 的 Scheme IDE,它被称为“Babbage”。它还有 OCaml 和 SML 模式。它类似于极简版的 Emacs。Babbage 非常简单,并且具有类似于 Windows 的按键分配。Babbage 是 Unicode 编辑器。 http://homepage1.nifty.com/~skz/Entry/babbage.html

2

Eclipse可以安装很多有用的功能,无需安装繁琐的特定语言插件。

我为新语言设置Eclipse的指南进行维护。以下是其中一些重点:

  • 语法高亮可以使用Eclipse Colorer或插件来实现。这些插件提供了许多语言的语法高亮,包括SML和OCaml。可以使用自定义颜色文件轻松添加新语言。

  • 要在Eclipse内部使用外部编译器进行构建,可以使用标准的程序构建器功能。当发出正常的构建项目命令时,将运行构建器。要设置新的构建器:项目属性 -> 构建器 -> 新建... -> 程序或使用下面的Laid Build Marker插件。

  • 要从外部构建器中捕获编译错误和警告,可以使用构建输出解析器。 Laid Builder Marker是一个实现此类解析器的插件。解析器会在编辑器和问题视图中放置问题标记。此插件还可用于向项目添加程序构建器。Cabal的构建器可用作起点。

  • 要从Eclipse内部运行编译的程序,请使用外部工具功能。 (运行 -> 外部工具)

  • 可以使用其他Laid Project插件中的一些扩展支持代码导航和文本选择:可以使用Marker Block Selection插件选择括号包含的文本。可以使用Editor Utilities插件跳转到由空行分隔的代码块,等等。

  • 使用标准的单词完成命令(Shift+Alt+7)作为简单的内容辅助。

  • 使用标准的切换块选择命令(Shift+Alt+A)同时在多行上插入/删除行注释。

  • 一些其他有用的标准Eclipse功能包括:

    • 打开资源命令(Ctrl+Shift+R
    • 文件搜索命令(Ctrl+H
    • 书签功能(编辑 -> 添加书签)。请确保选中下一个/上一个导航中包含框(首选项 -> 通用 -> 编辑器 -> 文本编辑器 -> 注释 -> 书签)。

更新 Laid 项目的站点:

https://bitbucket.org/lii/laid_language_tools/src/master/se.lidestrom.laid.update_site/

更新 Eclipse Colorer 网站:

http://colorer.sourceforge.net/eclipsecolorer/

免责声明:我是Laid项目的作者。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接