Programming languages 有更好的C吗?

Programming languages 有更好的C吗?,programming-languages,language-features,real-time,Programming Languages,Language Features,Real Time,我想要一个更好的C。让我解释一下: 我用C语言编写了很多程序,这是有实时需求的应用程序所必需的,比如音频编程、机器人技术、设备驱动程序等等 虽然我喜欢C,但在与Haskell相处了很长时间后,有一件事让我感到不安,那就是缺少合适的类型系统。也就是说,只要你想写一个更通用的函数,比如说操纵一个泛型指针的东西(比如说泛型链表),你就必须将它强制转换为void*或其他任何类型,这样你就失去了所有的类型信息。它是一个全有或全无的系统,它不允许您在编写泛型函数的同时不失去类型检查的所有优点 C++不能解决

我想要一个更好的C。让我解释一下:

我用C语言编写了很多程序,这是有实时需求的应用程序所必需的,比如音频编程、机器人技术、设备驱动程序等等

虽然我喜欢C,但在与Haskell相处了很长时间后,有一件事让我感到不安,那就是缺少合适的类型系统。也就是说,只要你想写一个更通用的函数,比如说操纵一个泛型指针的东西(比如说泛型链表),你就必须将它强制转换为
void*
或其他任何类型,这样你就失去了所有的类型信息。它是一个全有或全无的系统,它不允许您在编写泛型函数的同时不失去类型检查的所有优点


C++不能解决这个问题。我不想用C++。我发现OO类和模板令人头痛

Haskell及其类型类确实解决了这个问题。您可以拥有语义上有用的类型,并使用类型约束来编写对类型类进行操作的函数,这些类型类不依赖于
void

但在我工作的领域,我不能使用Haskell,因为它不具备实时功能——主要是由于垃圾收集。之所以需要GC,是因为在没有自动内存管理的情况下,很难进行分配繁重的函数式编程。然而,在类型类的概念中没有任何特定的东西与C的语义相违背。我想要C语言,但要使用Haskell可靠的类型系统,以帮助我编写类型良好的系统。然而,我真的想要C:我想要控制内存管理,我想要知道数据结构是如何布局的,我想要使用(类型良好的)指针算法,我想要易变性

有这样的语言吗?如果是这样,为什么它在低级编程中不更受欢迎

旁白:我知道在这个方向上有一些小型的语言实验,但我对在现实项目中真正有用的东西感兴趣。我对发展成熟的语言很感兴趣,但对“玩具”语言不感兴趣

我应该补充一点,我听说过,这很有趣,但我无法为我编译它(Ubuntu),而且我还没有听说过任何实际使用它的项目。。我们欢迎在这方面提出任何其他建议


谢谢

我不确定旋风处于什么状态,但这为标准C提供了更多的安全性。
D
在某种程度上也可以被视为“更好的C”,但它的状态不是很清楚,因为它的大脑在标准库中分裂

我选择的“更好的C”语言是。它还很年轻,但很有趣。它为您提供了OO,而不需要
C++
。它使您能够轻松访问C接口(您可以“覆盖”C结构,并在调用外部库时正常使用它们/以这种方式控制内存布局)。默认情况下,它使用GC,但如果您确实不想要它,可以将其关闭(但这意味着您不能再使用标准库集合而不泄漏)


另一条评论提到了Ada,我已经忘记了,但这提醒了我:有一种
Oberon
,它应该是一种安全的(-er)语言,但它也包含垃圾收集机制。

我对Haskell不太了解,但是如果你想要一个强大的类型系统,可以看看Ada。它大量用于航空航天应用的嵌入式系统。SIGADA moto是“我们信任的强类型”。但是,如果您必须使用Windows/Linux类型的设备驱动程序,它将没有多大用处

它不那么受欢迎的几个原因:

  • 详细语法——设计为可读,而不是写
  • 编译器在历史上是昂贵的
  • 与国防部和设计委员会的关系,程序员似乎对此感到不满
我认为事实是大多数程序员不喜欢强类型系统。

可能会提供您想要的。它有一个非常丰富的类型系统,但如果需要,您仍然可以控制内存布局。它有不受限制的指针,比如C。它是垃圾收集的,但是你不必使用垃圾收集器,如果你真的想要的话,你可以编写你自己的内存管理代码

但是,我不确定您可以在多大程度上将类型丰富性与希望使用的低级方法相结合


如果您找到了适合您需要的东西,请告诉我们。

您可能还想看看。这是一种严肃的语言,不是一种玩具,但它还没有准备好,而且可能不会及时准备好,对你有任何用处


尽管如此,BitC的一个特定设计目标是支持与Haskell样式类型系统结合的低级开发。它最初是为了支持郊狼微内核的开发而设计的。我认为郊狼已经灭绝了,但比特币显然仍在开发中。

关于比特币或语言呢?

因为还没有人提出它:我认为比特币是更好的比特币的一个很好的候选者!特别是因为您喜欢Haskell,因此喜欢使用强类型的函数式编程。请注意,ATS似乎是专门为系统编程和硬实时应用程序设计的,因为大多数ATS都不需要垃圾收集

如果你检查一下,你会发现性能和C.基本上是一致的。我认为这是非常令人印象深刻的,因为现代的C编译器有很多年和几年的优化工作,而ATS基本上是由一个人开发的。虽然提供类似安全特性的其他语言通常会引入开销,但ATS确保完全在编译时完成,因此产生与C非常相似的性能特性

引用网站:

什么是自动测试系统? ATS是一种静态类型的编程语言,它将实现与形式规范统一起来。它配备了一个高度表达的类型系统,该系统植根于框架应用类型系统,从而为该语言命名。特别是,ATS中有从属类型和线性类型。这个
nim c --cpu:avr --os:standalone --deadCodeElim:on --genScript x.nim