有哪些理论和/或实验性编程语言特性?

7
我正在设计一种编程语言,纯粹是为了好玩,并且想尽可能添加许多实验性的特性,使得在其中编程变得完全不同,而不像Brainf*ck或Malbolge那样糟糕。
然而,我似乎很难想出新东西来,但我相信有很多讨论过但从未真正尝试过的东西。
目前有哪些实验性的语言特性或概念没有在主流语言中实现?
例如:如果我在1960年问这个问题,答案可能是“面向对象编程”。
我相信计算机科学家们有很多尚未实现的想法(最近)。
5个回答

4

当前研究领域之一是依赖类型。目前还有很多可以做的事情,尚未完成。


一个完整的依赖类型系统有两个主要问题:类型推断和类型检查都是不可判定的,因此可能无法停止。 - Jon Purdy
@JonPurdy:Coq和Agda都具有依赖类型,但它们都不会出现您提到的问题。 - Blaisorblade

2
DWIMNWIS(做我意,不要按我说的做)。
更严肃地说,一个绝对伟大的特性(很难或几乎不可能实现)将是一种语言程序可以被证明不包含并发问题的能力。
至于必须具备的功能,我会说 lambda表达式一等函数。虽然它们并不新颖或理论化(今年Lisp多少岁了?),但它们非常强大,并且许多语言都缺少这些功能。

他们已经做过了,我想是用COBOL做的,哦...算了。 - Gary Rake
现在几乎没有一种编程语言不支持lambda和高阶函数了。 - sepp2k

1
非顺序执行(来自数据流编程的思想),这样表达式在其依赖项被满足时进行评估。因此:
print(msg)
msg = "Hello World" 

这是一个有效的程序。所有变量都类似于电子表格中的单元格。

    print i
    range(1..100) => i
    # prints 1 to 100

研究这种范式的变化传播属性的影响是很有趣的。然而,设计这样的语言是一个巨大的挑战,当考虑到条件、迭代等问题以及可能出现的同步问题时,它开始变得混乱。


0

阅读ACM和IEEE的出版物以获取研究想法


0
这里有一个想法;如果有人写了它,他们必须给我版权信用!自动内置任意矩阵模板,使得这些矩阵不是数学类型,而更像是存储或结构类型。根据模板参数,这些矩阵可以简单到标量值,也可以复杂到理论上近乎无限维的实体,如果计算机能够允许它而不会耗尽内存,但在实践中,这将受限于架构、操作系统和编译器整数或积分类型大小的固有细节。因此,一个低维度的体积矩阵可能是3维的,但由于它可能看起来像这样:Matrix<type, 1000000000,1000000000,1000000000> matOutOfBounds,所以会耗尽内存,而一个更高维度的矩阵,例如Matrix<type, 2,2,2,2,2,2,2,2>,它是一个8D体积矩阵。如果它们是“完美矩阵”,就可以进行简化。也就是说,每个维度都有相同数量的元素,而不管它们有多少维。例如:<3,3> <3,3,3> <3,3,3,3> 都是完美矩阵。简化将是Matrix<type, 4^4>,与Matrix<type, 4,4,4,4>相同,给出一个4x4x4x4的4D体积矩阵,其中有96个元素在一个4D结构中。其中“Matrix”将是一个3D体积矩阵,具有许多元素,但具有3D体积结构,因为我们当前的时钟和指南针是这样运作的,即360度到整个圆,60分钟,60秒,除了有那么多浮点存储元素。

下面的内容目前看起来像是某人会在他们的项目中包含的可能的C++库; 但这里的想法是将其作为内置语言类型。然后,任何使用您的语言和编译器的人都可以随意使用它们。他们可以使用任意数量的维度,例如此模板所描绘的:

// Header Declaration
template<typename ClassType, unsigned int...>
matrix{
}; // No need to show body just declaration for concept

// User Code Would Be
matrix<float,2,3,4,5,7> mat; // This would create a 2x3x4x5x7 matrix that is a 5th dimensional volumetric matrix

// Default type
matrix<int> mat2; // This creates a 1x1 matrix that would in essence be a scalar.

现在我展示的是C++可变模板的当前语法。这里的想法是这些矩阵容器将成为内置类型!

想要使它们数学化?当然可以,但用户必须定义自己的“算法、方法、函数或例程”。

它们必须被独立定义的原因是:

mat<float, 3,3,3> mat1; 3x3x3  3D Volumetric Matrix  -    27 elements
mat<float,   5,5> mat2;   5x5  2D Linear-Quadratic (Area) Matrix -  25 elements
mat<int,   6,7,8> mat3; 6x7x8  3D Volumetric Matrix -    336 elements

mat<bool, 8>      mat4;   1x8  1D Linear Matrix (Array); transpose?
                  mat4::transpose; // built in - now 8x1 matrix
                  mat4::transpose; // back to 1x8.

class TheMotherLoad {// Many members and methods };
// ...
mat<TheMotherLoad*, 9,9,9,9,9,9,9,9,9> mat9;
// simplified version
mat<TheMotherLoad*, 9^9> mat9
// A 9 Dimensional Volumetric container So the first the would be a Cube
// with its sides having a length of 9 cells where the Volume 9^3 is the 
// First Order of what a Volumetric Matrix is.  
// Anything less is linear or quadratic either it being a scalar, 
// translation, an array, a line, a point, a vector, rotation, quadratic and area )
// Now that we have a cube that has 729 elements and the next 
// three 9s which are the 4th, 5th & 6th dimensions would act as another
// 9x9x9 matrix surrounding the first 3 dimensions respectively. 
// Finally the 7th, 8th & 9th dimensions defines the "outer matrix" 
// that also has "9x9x9" elements. So in total the number of elements 
// in this matrix would be 729^3 and for every 

由于矩阵的属性决定了可以对它们进行哪种类型的数学运算,因此必须在外部进行。


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