28

我必须用 ML 编写一些代码,这是我第一次使用这种语言。有标准 ML 的开发环境吗?(最好在 Windows 下)。我尝试了谷歌搜索(和 stackOverFlowing !),但我发现的只是 Linux 的普通编译器(最多带有交互式控制台),但没有 IDE 或 Eclipse/NetBeans 插件。有什么建议么 ?

4

6 回答 6

22

如何使用 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 支持一组惊人的包(即插件),您可以单独安装它们。其中一个包称为包控制。您必须首先安装包控制才能直接从编辑器安装其他包。提供的链接说明了安装此软件包所需的操作。

第 2 步:安装 SML 和 Sublime REPL

现在您已经安装了包控制,安装其他包将非常容易。我们现在必须安装两个包:支持编程语言语法高亮功能的 SML 和 SublimeREPL,正如您可能猜到的,它是一个为 Sublime Text 添加了许多不同编程语言的 REPL 功能的包。

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

一旦你安装了 SML 包,如果你打开一个 SML 文件,你应该在编辑器中获得语法高亮功能。它甚至提供了一个名为 Son of Obsidian 的 Sublime Text 主题,您可以在 Preferences -> Color Scheme -> SML -> Son of Obsidian 中启用它。但是您不需要启用主题以使用 SML,这只是一个偏好。

一旦你安装了 SublimeREPL 包,你将能够进入菜单工具 -> SublimeREPL -> SML 并打开一个 SML REPL 会话,该会话将支持使用 SML 包的语法高亮、命令历史记录、行编辑和自动完成。如果您打开两个并排的选项卡,您可以让您的生活变得非常轻松,在您的左侧选项卡中,您可以拥有您的 SML 代码文件,在您的右侧,您可以使用 SML REPL 会话。您可以使用 View -> Layout 选项来做到这一点。

第 3 步:键盘快捷键

现在让我们添加一些键盘快捷键来使用 REPL。SublimeREPL 包提供的键盘配置很少,并且提供的那些可能无法与 SML REPL 很好地配合使用。所以这就是我通常做的事情。

  • 首先转到首选项-> 浏览包
  • 进入 SublimeREPL/config/SML 子文件夹。
  • Default.sublime-commands在 Sublime Text 中编辑文件。该文件包含 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"
                            }
                        }
                    ]                                
                }]
            }]
        }
    ]
    
  • 最后一步是为这两个命令添加键盘快捷键。转到 Preferences -> Key Bindings User 并使用以下两个附加命令编辑文件。随意更改我的键并使用您认为合适的任何其他快捷键,前提是它们不用于其他功能。

    [
        {  
          "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+J来打开 SML REPL K (这是按 Ctrl+Alt+J,然后松开按键并按 K)。如果您当前正在处理 SML 文件,您可以按CTRL+ JM将其发送到新的 SML REPL 会话。

第 4 步:构建系统

Sublime Text 提供的配置允许您解析代码文件并确定是否有问题,并让您确切知道问题出在哪里。为了做到这一点,我们必须配置一个“构建系统”。配置只是一个文件,它告诉 sublime text 运行什么命令以及如何解释输出。如果 sml 解析器无法解析或执行您的程序,那么输出会告诉您问题出在哪里。构建系统让我们定义一个正则表达式来解析这样的输出并帮助 Sublime text 找到包含问题的行和列。

转到 Preferences -> Browse Packages 并在 User 文件夹下创建一个名为SML.sublime-build并定义文件的新文件,如下所示:

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

确保将命令路径替换为系统中的有效路径。保存文件后,您可以转到菜单并选择工具 -> 构建系统 -> SML。然后,要检查您的文件,您可以执行 Tools -> Build 来解析您的文件并查找任何错误。通过使用菜单选项工具 -> 构建结果 -> 下一个结果和上一个结果,您可以在构建系统选项检测到的错误之间导航,Sublime Text 会将光标定位在 SML 编译器报告的错误的确切位置.

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

就是这样。你已经准备好开始使用 SML 和 Sublime Text 进行编码了。

于 2014-10-16T12:16:25.993 回答
19

您可以使用Isabelle/jEdit作为 Isabelle/ML 或官方标准 ML (SML'97) 的 IDE。底层 ML 系统是Poly/ML,它以支持多核硬件而著称。

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

作为快速入门,请参阅文档面板的示例部分,条目src/Tools/SML/Examples.thy(截至 Isabelle2014)。

SML-PIDE

于 2013-12-07T20:13:42.110 回答
11

在 Windows 上使用 SML 时,我一直使用SML/NJ进行编译,使用Notepad++进行编辑(Notepad++ 具有针对 Caml 的语法着色,根据您的需要,它应该与 SML 相同)。

如前所述,对于 ML,一个简单的编辑器就足够了。

于 2010-01-10T11:06:57.657 回答
7

对于 SML,存在一些 Emacs 模式。查看http://mlton.org/Emacs了解更多信息。

sml 模式应该为您提供编写 SML 代码的良好环境。Eclipse & Co. 的开发是因为 java 需要大量样板文件,如访问器、适配器等。如果您需要 ML 相同的功能,那么您应该仔细检查您是否没有过度设计。

编辑:顺便说一下,SMLNJ 附带了一个 Eclipse 插件。我不能发布链接,只是谷歌 smlnj eclipse 。

于 2010-01-10T10:56:11.920 回答
6

我正在为 Windows 开发 Scheme IDE。它被称为“巴贝奇”。它还具有 OCaml 和 SML 模式。它就像一个最低限度的 Emacs。Babbage 非常简单,并且有像 key assignment 这样的窗口。Babbage 是 Unicode 编辑器。

http://homepage1.nifty.com/~skz/Entry/babbage.html

于 2011-09-20T20:17:59.430 回答
2

Eclipse 可以设置为获得很多有用的功能,而无需复杂的特定语言插件。

我维护了一个为新语言设置 Eclipse 的指南。该文件的一些亮点:

  • 可以使用Eclipse Colorer添加语法颜色。它们是为大量语言(包括 SML 和 OCaml)提供语法颜色的插件。使用自定义颜色文件可以轻松添加新语言。

  • 要使用 Eclipse 内部的外部编译器进行构建,可以使用标准的Program Builder 功能生成器在发出正常的Build Project命令时运行。要设置新的构建器:Project Properties -> Builders -> New... -> Program或使用下面的 Laid Build Marker 插件。

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

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

  • 可以使用其他一些 Laid Project 插件添加对代码导航和文​​本选择的扩展支持: Marker Block Selection插件可用于选择括号括起来的文本。Editor Utilities插件可用于在由空行分隔的代码块之间跳转。

  • 使用标准的Word Completion命令 ( Shift+Alt+7 ) 作为穷人的内容辅助。

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

  • 其他一些有用的标准 Eclipse 特性包括:

    • 打开资源命令 ( Ctrl +Shift+R )
    • 文件搜索命令 ( Ctrl +H )
    • 书签功能(编辑 -> 添加书签)。确保选中Include in next/prev 导航框(Preferences -> General -> Editors -> Text Editors -> Annotations -> Bookmarks)。

Laid 项目的更新站点:

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

Eclipse Colorer 的更新站点:

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

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

于 2013-07-20T10:42:04.643 回答