language-design

    0热度

    2回答

    我目前做一个基于JVM的编程语言。我没有使用运算符,而是选择将符号作为方法名称,并为原始数据类型创建编译器引用类。这些注释是以Bytecode指令作为参数的所谓的@Intrinsic注释。编译器使用这些来在每次调用时生成字节码,而不是INVOKE指令。 我现在想知道这个(公开)注释是否可以用来做任何事情在JVM上的恶意,如果它应该由编译器的限制,例如通过静态分析。 (语言本身也支持字节码表达式)

    0热度

    2回答

    我知道Python有一个强大的多任务功能,例如。我们可以做 a, b = 1, 2 a, (b, c) = 1, (2, 3) 甚至 for a, (b, c) in [(1, (2, 3)), ]: print a, b, c 但是这是怎么实现的?它是一个语法糖还是更复杂的东西?

    1热度

    1回答

    我刚刚得知,C++允许同样的法律代码: 12; //just an expression -- expression statement to be exact int i = 45; (i > 0) ? i-- : 1; Altghough它可能不是最好的pracitce,我可以看到一些有用的情况,其中使用表达式作为一个完整的语句可能帮助。所以,我只是想知道,为什么Java中没有类似的功

    0热度

    1回答

    我一直认为很好的ruby特性是nil默认用于索引/哈希查找,例如, [1, 2, 3][42] # => nil { foo: :bar }[:spam] # => nil 有,为什么在Ruby的设计或Ruby on Rails的核心扩展,这还没有扩展到嵌套查询工作(而不是抛出NoMethodError: undefined method '[]' for nil:NilClass)理由

    2热度

    3回答

    我目前正在开发支持运算符重载和自定义运算符的基于JVM的编程语言。我想坚持使用Java,并使用+运算符进行字符串连接,并且在我的语言中实现并完美工作。然而,运营商也可用于各种其他地方,例如将元素添加到集合: public interface Collection[E] { // ... public Collection[E] +(E element) // ...

    0热度

    1回答

    有一段时间以来,我一直对某种语言(如Java或C)中常量成员的作用感到困惑。我明白,在源代码级别,它们可以防止某些关键成员发生变化和变化,但是在编译或解释时,它们和变量成员之间是否存在任何区别,或者它们都只是指向内存地址的指针? 我想可能编译器/解释器必须实现一些特殊的东西来允许一个变量是可变的,当处理一个常量成员时它可能不需要这样做(可能使执行速度更快或使用更少的内存?) ,这是真的还是我完全错

    2热度

    2回答

    的std::string访问者(back,front,at,和operator[])具有const和非const过载,如下: char& x(); const char& x() const; 为什么第二版本返回const参考,而不是简单地返回char价值(作为副本)? 根据rules of thumb on how to pass objects around,当不需要修改原始值时,不应该

    0热度

    2回答

    假设一个语言的划分运算符(/)向-infinity四舍五入。 除了潜在的性能提升之外,在包括算术移位运算符(如>>)的语言中是否还有任何用处,假设x >> y将等于x/(2 ** y)?

    11热度

    2回答

    这剪断将运行,没有任何抱怨两个和的NodeJS浏览器: this.return = function (x) { return x }; console.log (this.return(1)); 我期待它有一个语法错误要失败硬。 我的意思是,我可以理解为什么this['return']工程..但我总是虽然return是一个词法分析关键字? 是JavaScript的上下文敏感语

    12热度

    4回答

    function A: Boolean; function B: Boolean; 我(不小心)写了这个: A or B; 取而代之的是: if not A then B; 编译器拒绝第一种形式,我很好奇,为什么? 短路评估他们都会做同样的事情,他们不会? 澄清:我想知道为什么这个语言不是为了让我的表达作为一个陈述而设计的。