如果你要设计一种编程语言,你会怎么做呢?你会加入什么功能?你会漏掉什么?静态的还是动态的?强类型还是弱类型?编译或解释?为你的答案辩护。
发布于 2010-09-02 21:42:57
因此,我的语言将类似于Erlang中的并发性,但与类型类似,如Haskell和GUI框架(如WPF.NET )。
发布于 2010-09-02 17:47:18
注意:我在这篇文章中使用了类似C的语法来描述特性,但我并不挑剔语法本身,只要它不是像所有关键字都是大写的那样荒谬。
在语言中,我想要的第一个特性是带有可选动态类型的静态类型。原因是静态类型允许您( a)尽早捕获错误,而不是延迟;( b)大多数代码都是隐式静态类型的,不管语言是否做出了区分。然而,有几个用例动态类型是非常有用的。例如,当从文件中读取数据时,您通常有不同类型的字段,而动态类型使异构容器变得容易。所以,我的理想语言是这样的:
//variable declarations
int anInt = 42 //anInt is now irrevocably an integer and assigning another type to it is an error
vartype aVariable = 42 //aVariable is currently an integer, but any type can be assigned to it in the future
//function definitions
int countElements(Collection c)
{
return c.count();
}
//c HAS to be a collection, since countElements doesn't make sense otherwise
void addToCollection(Collection& c, vartype v)
{
c.append(v)
}
//c is passed by reference here我希望该语言要么提前编译,要么编译JIT,但不是纯粹的解释,原因是速度。这与第一点联系在一起,因为优化编译器/抖动在优化静态类型化代码时会容易得多,而动态类型化代码可以保持原样。
语言必须支持函数式编程结构,而函数应该是一流的对象.
语言应该允许您编写面向对象的代码,但也应该允许简单的命令式代码。也就是说,应该可以这样写一个hello world程序:
int main(string<> args=null)
{
printf("hello, world");
return 0;
}
// this code also demonstrates two other features,
// default arguments for functions (not explained further)
// and immutable lists like string<> (see 6. Built-in datatypes)名称空间是一件好事。很小的东西应该进入全局命名空间。但是,如果必须将内容放在全局命名空间中,则可以(ala C++)。
作为内置数据类型,该语言必须具有以下构造:
int数据类型或类型。如果只有一种int类型,它应该有无限的范围。如果有更多,则应该将隐式向上转换为能够保持计算结果的最小类型,其中最大的是无限范围类型。float类型,相当于IEEE 754 double。list类型,它被实现为一个双链接列表或一个包含指向每个元素的指针的连续内存块。list类型,其作用类似于数组,但其大小在创建后不能更改。string类型,默认为不可变。map或dict类型,包含不可变的键和可变和/或不可变的值。vartyped。boolean型null或none类型。set类型decimal类型fixed类型,它实现一个不动点数。decimal、float和fixed类型应该共享完全相同的公共接口(通过继承或鸭子类型),允许将它们透明地传递到函数并从函数返回。父类型可以称为real。
您应该能够同时通过值和引用调用函数,缺省值是值(即在函数中创建和操作参数的副本)。
语言应该有指针和允许指针算法。指针只能静态输入(以避免void*的噩梦)。显式不允许vartype指针。具有指针和指针算术允许将该语言作为一种系统编程语言认真使用。
对于8.,该语言应该允许在必要的情况下使用内联汇编语言代码。
该语言应该是最安全的使用,支持异常处理等。指针算法和内联程序集可以降级到代码中显式标记为不安全的部分。允许使用不安全的代码,但强烈禁止使用。
语言标准应指定程序在所有情况下的行为方式,除非代码明确标记为不安全,也就是说,在不安全块之外不应该有未定义的行为。这允许将该语言用作一种可行的应用程序开发语言,同时还允许您在其中编写操作系统。
这是我目前所能想到的,但我会编辑/更新这篇文章,因为我会想到更多的事情。
发布于 2010-10-06 17:46:20
下面是我要加入的一系列功能:
类似
Lisp风格
优点:
(eval "your data files")哈斯克尔风格
优点:
Python风格
优点:
允许基于类型的函数重载,类似于CL的defgeneric:
(define (+ (a <int>) (b <int>))
(ints-add a b))
(define (+ (a <string>) (b <string>))
(string-concat a b))
(define (+ a b)
(add-generic a b))C风格
缺点:
想想看,除了编译和系统编程位之外,这或多或少地定义了方案。这可以通过使用libguile和用C语言编写这些位元来解决。
https://softwareengineering.stackexchange.com/questions/487
复制相似问题