寻找满足这几个要求的编程语言

发布于 2024-12-10 13:46:36 字数 897 浏览 0 评论 0原文

寻求编程语言。必须具有以下品质(按字符中功能长度的升序排列):

  • 已编译的
  • 命名空间
  • 垃圾收集
  • 省略 OOP 功能!
  • 固定数量的类型
  • 在 Mac OS X 上可用
  • 第一类函数 首选
  • 动态类型
  • 闭包(词法作用域)
  • 可以与 C 库(ncurses 等)交互
  • 在 Linux 上的可用性是一个优点,但不是必需的

--

为了提供更多上下文,我想要能够使用它为 linux/BSD/Mac 编写命令行实用程序,这些实用程序可能会也可能不会使用现有的 C 库(例如 ncurses 等)。

更新澄清:

命名空间: 当我可以创建一个名为 string< 的新命名空间时,我希望避免将函数命名为 string_strip /code> 并在其中定义一个名为 strip 的函数。

省略 OOP 功能:具有某个功能而我没有使用该功能的语言与故意省略该功能的语言之间肯定存在差异。如果我想使用 Go 但不接触任何与 OOP 相关的内容,我就无法使用大部分标准库。

固定数量的类型:为什么没有 OOP 的语言会为您提供创建自定义“类型”的选项?如果没有 OOP,类型意味着什么?它可能只用于类型的组合,即。 a Person = struct { Name, Age },而您可以使用 Hash 或 Map 来完成此操作。

首选动态类型:类型推断很好,我猜......

Seeking programming language. Must have the following qualities (in order of ascending length of feature in characters):

  • Compiled
  • Namespaces
  • Garbage collection
  • Omits OOP features!
  • Fixed number of types
  • Available on Mac OS X
  • First-class functions
  • Dynamic typing preferred
  • Closures (lexical scoping)
  • Can interface with C libraries (ncurses, etc)
  • Availability on linux a plus but not necessary

--

To give a little more context, I want to be able to use it to write command-line utilities for linux/BSD/Mac, which may or may not use existing C libraries (such as ncurses, etc).

Update for clarification:

Namespaces: I want to avoid having to name my function string_strip when I could create a new namespace called string and define in it a function named strip.

Omits OOP Features: There's definitely a difference between a language having a feature and me not using it, versus the language intentionally omitting it. If I wanted to use Go but without touching anything OOP-related, I couldn't use most of the standard library.

Fixed number of types: Why would a languages without OOP give you the option of creating a custom "type"? What does type even mean without OOP? It would probably just be used for composition of types, ie. a Person = struct { Name, Age }, whereas you could do this with a Hash or Map just fine.

Dynamic typing preferred: Type inference is fine, I guess......

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

爱情眠于流年 2024-12-17 13:46:36

我不确定你所说的命名空间是什么意思,但你不是在描述Scheme吗?

I'm not sure what you mean by namespaces, but aren't you describing Scheme?

昔梦 2024-12-17 13:46:36

好吧,我将尝试提出一些几乎满足所有要求的语言:

  • Haskell (静态类型)
    • 特别是 GHC 发行版 - 它已编译(或可以发出 LLVM 代码)
    • 它使用类似于命名空间的模块
    • 它是垃圾收集的,它不是面向对象的语言
    • 我不太理解“固定数量的类型”,因为 Haskell 为您提供了类型,但您可以创建更多类型,并且 Haskell 支持 代数类型和模式匹配
    • 它适用于所有 Win/Mac/Linux
    • 它具有一流的函数和闭包(毕竟是函数式语言)
    • 并且它可以与 C 库交互。

  • Erlang
    • 它有一个字节码编译器,如果您使用的是 Intel x86 系列 CPU,则有一个名为 HiPE
    • 动态类型
    • 不是面向对象的语言,它接近函数式
    • 有 8 个基元和 2 个复合类型 - 如果您想要一个集合,您可以构建它们的列表或元组
    • 是否收集垃圾
    • 具有(不可变的)闭包
    • 拥有一流的功能
    • 支持 Windows、Mac、Linux
    • 具有充当命名空间保护器的包
    • C 绑定 - Erlang 有端口驱动程序Erlang 本机接口

Well, I'll try to put forth some languages that fit almost every single requirement:

  • Haskell (which is statically typed)
    • specifically the GHC distribution - it's compiled (or can emit LLVM code)
    • it uses modules which are kind of like Namespaces
    • it's garbage collected, it is not an OO language
    • I don't particularly understand 'fixed number of types', as Haskell gives you types, but you can create more, and Haskell supports algebraic types and pattern matching
    • it's available on all Win/Mac/Linux
    • it has first class functions and closures (functional language after all)
    • and it can interface with C libraries.

  • Erlang
    • it has a bytecode compiler, and if you're on an Intel x86-family CPU, there is a native compiler called HiPE.
    • Dynamically typed
    • Not an OO language, it's near-functional
    • Has 8 primitives and 2 compound types - if you want a collection you're building a list or tuple of them
    • Is garbage collected
    • Has (immutable) closures
    • Has first class functions
    • Windows, Mac, Linux supported
    • Has packages which act as the namespace protectors
    • C bindings - Erlang has port drivers and Erlang Native Interface.
吖咩 2024-12-17 13:46:36

查看Racket(基于Scheme)。

它有一个 FFI。我用它为 SQLite 和 ODBC 创建了 FFI 绑定,并且我发现 FFI 非常有用且方便。

“命名空间”对我来说含糊不清。 Racket有一个模块系统,它也有所谓的命名空间,它们是一流的顶级环境对象。

它没有“固定数量的类型”。我根本不明白这个要求。

Check out Racket (based on Scheme).

It has an FFI. I've created FFI bindings for SQLite and ODBC with it, and I've found the FFI to be useful and convenient.

"Namespaces" is ambiguous to me. Racket has a module system, and it also has what it calls namespaces, which are first-class top-level environment objects.

It does not have "a fixed number of types". I don't understand that requirement at all.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文