标签: language-design

为什么C++继承机制不透明?

例如,为什么没有语言支持来检查vtable?为什么我不能用新的成员函数替换成员函数?我有一种直觉,认为有很多方法可以很好地利用这些功能.

有没有其他语言可以让我做这些事情?

c++ inheritance language-design vtable

1
推荐指数
4
解决办法
599
查看次数

集合初始化语法,用于什么?

我们可以使用像这样的功能

public static List<T> New<T>(params T[] items) {
    return new List<T>(items);
}
Run Code Online (Sandbox Code Playgroud)

更重要的是它更好

var list = new List<int> {1,2,3};
var list = List.New(1,2,3);
Run Code Online (Sandbox Code Playgroud)

那么,当我们真的需要使用它时?

字典

public static Dictionary<T, K> New<T, K>(T key, K value) {
    return new Dictionary<T,K>().FAdd(key, value);
}

var dict = new Dictionary<int, string>(){
 {1, "a"},
 {2, "b"}
};

var dict = Dict.New(1,"a").FAdd(2, "b");
Run Code Online (Sandbox Code Playgroud)

为什么它更好,键入推断

var x = new Dictionary<string, List<int>>(){
   {"a", new List<int>{1}},
   {"b", new List<int>{2}},
}

var x = Dict.New("a", List.New(1)).FAdd("b", List.New(2));
Run Code Online (Sandbox Code Playgroud)

c# language-agnostic language-features programming-languages language-design

1
推荐指数
2
解决办法
358
查看次数


Python Math Regex

我正在用Python创建一种编程语言,而我基本语言中缺少的一个主要组件就是能够解析数学方程式.我有解析数学的函数,但我需要能够检查输入是否是数学方程式.我正在寻找匹配3*x ^(4*y)+ 1-(7*y*z/x)之类的正则表达式.

python regex math parsing language-design

1
推荐指数
1
解决办法
1948
查看次数

是否存在具有更高阶条件的语言?

有时,我有一个控制结构(if,for,...),并且根据条件我要么使用控制结构,要么只执行主体.作为一个简单的例子,我可以在C中执行以下操作,但它非常难看:

#ifdef APPLY_FILTER
if (filter()) {
#endif
    // do something
#ifdef APPLY_FILTER
}
#endif
Run Code Online (Sandbox Code Playgroud)

如果我在运行时只知道apply_filter,它也不起作用.当然,在这种情况下,我只需将代码更改为:

if (apply_filter && filter())
Run Code Online (Sandbox Code Playgroud)

但这在任意控制结构的一般情况下不起作用.(我手边没有一个很好的例子,但最近我有一些代码可以从这样的功能中获益很多.)

是否有任何语言我可以应用条件来控制结构,即具有更高阶的条件?在伪代码中,上面的例子是:

<if apply_filter>
if (filter()) {
    //  ...
}
Run Code Online (Sandbox Code Playgroud)

或者更复杂的例子,如果一个varable在函数中设置了包装代码并将其作为一个线程启动:

<if (run_on_thread)>
  void thread() {
<endif>

  for (int i = 0; i < 10; i++) {
      printf("%d\n", i);
      sleep(1);
  }

<if (run_on_thread)>
  }
  start_thread(&thread);
<endif>
Run Code Online (Sandbox Code Playgroud)

(实际上,在这个例子中,我可以想象为meta条件赋一个名称甚至是有用的,以确保顶部和底部s同步.)

我可以想象这样的东西是LISP中的一个功能,对吧?

language-design control-structure

1
推荐指数
1
解决办法
101
查看次数

如何实现一种功能语言

我正在努力学习命令式和函数式语言之间的差异.
而且,我想了解闭包以及如何实现垃圾收集器.所以我决定尝试为函数式语言实现解释器.

由于我不熟悉函数式语言,因此我很难设计它.是否有一些关于简单函数语言的语法和语义的资源?有关如何执行此操作的教程将非常有用.

functional-programming language-design language-implementation

1
推荐指数
2
解决办法
1360
查看次数

覆盖方法中访问修饰符的用途是什么?

为什么在C#am中我需要指定我覆盖的方法的访问修饰符,如果我不更改它?在这种情况下,根本不指定任何访问修饰符会不会更简单,更合乎逻辑?

(只是为了澄清:我写这个问题并不是因为我认为我比语言设计师更聪明,但因为我确信他们有充分的理由让我无法理解.)

编辑:我不是在问我们为什么不能改变访问修饰符,而是为什么我们必须冗余地指定它.

c# overriding language-design

1
推荐指数
1
解决办法
168
查看次数

是否有任何Java计划添加隐式Getters和Setter?

有没有人知道是否有计划为类变量添加隐式getter和setter?

我正在考虑当前的Scala代码,它已经允许这样做了.类似下面的内容,如果你没有定义一个getter/setter它会使用该值,但是如果你为它使用的值定义一个getter/setter而不是一个直接变量调用.

class A{
    int value = 3;
}

class B{
    int value = 3;
    public int value(){
        return value;
    }
}

// in some method
A a = new A();
System.out.println(a.value); 
B b = new B();
System.out.println(b.value); // <-- no () for accessing value even though it uses the getter
Run Code Online (Sandbox Code Playgroud)

java scala language-design getter-setter

1
推荐指数
1
解决办法
1034
查看次数

为什么有JVM指令`monitorenter/monitorexit`但没有`wait/notifyAll`(它们是本机调用)?

当我们编写时,synchronized(some_object){}我们可以看到两个JVM指令monitorenter/monitorexit作为字节代码发出.

当我们编写时,synchronized(some_object){some_object.wait()}我希望看到特殊的JVM指令wait,但是没有 - 而是wait/notify实现为本机C函数.

为什么会出现这种不一致(要么将它们全部作为JNI还是作为java字节代码)?是否存在特定(历史)原因或仅仅是品味问题?

上下文:我对此感兴趣,因为monitorenter/monitorexit/wait/notify在字节码中包含所有内容将允许"不处理JNI的JavaByteCode程序正确性验证程序"来验证不使用JNI的并发Java程序.目前,这种假设工具必须解决等待/通知.

java bytecode language-design

1
推荐指数
1
解决办法
606
查看次数

为什么Java设计者限制在静态上下文中使用非静态变量?

我知道无法从静态上下文中引用非静态变量.我想知道为什么Java设计师做出了这个限制.

我已经检查了Stack Overflow,并且有很多类似的问题和答案,但我想知道确切的原因.

java static language-design

1
推荐指数
1
解决办法
62
查看次数