标签: language-design

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

宏:有什么好处?

保罗格雷厄姆写道:

例如,类型似乎是取之不尽的研究论文来源,尽管静态类型似乎排除了真正的宏 - 否则,在我看来,没有语言值得使用.

宏有什么大不了的?我没有花很多时间与他们在一起,但是从我使用过的旧版C/C++开始,他们似乎在模板/泛型存在之前主要用作黑客.

这很难想象

DECLARELIST(StrList, string);
StrList slist;
Run Code Online (Sandbox Code Playgroud)

在某种程度上比较好

List<String> slist;
Run Code Online (Sandbox Code Playgroud)

我错过了什么吗?

然后有作为伪函数的用法,如MAKEPOINTS:

POINTS MAKEPOINTS(
    DWORD dwValue
);
Run Code Online (Sandbox Code Playgroud)

为什么不将它定义为函数呢?这是一些优化,您可以避免代码重复,而不会增加另一个堆栈帧的开销吗?

然后还有涉及GOTO的棘手的控制流程,这似乎是值得怀疑的.

宏的优点是什么?它们的类型安全性较低(在C和C++中)(对吧?).没有他们,保罗格雷厄姆为什么不计划?

macros language-design

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

C的主要缺陷

C语言的主要缺陷是什么?如何在采访中回答这个问题?我的意思是C Lack现在与新语言比较了什么?

c language-design

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

函数参数(例如在Python中)

什么是[函数]参数?它们用于什么?
我最近开始学习Python; 我是编程的新手,我为这个基本问题道歉.

在每个Python教程中,我都会讨论参数.我已经找到了这个问题的答案,并找到了很多答案,但对我来说,这些答案有点难以理解.我可能只是缺少一些概念背景.
所以...当我定义一个函数时,括号中的东西用于什么?例:

def hi( This is the part that i dont get):
     print 'hi'
Run Code Online (Sandbox Code Playgroud)

编辑:
与此相关的两个后续问题后来在这里被关闭和合并,因此部分答案的部分脱离背景特征.
后续问题是:[转述]

python arguments language-design function argument-passing

0
推荐指数
3
解决办法
1万
查看次数

为什么Java数组确实不可扩展?

可能重复:
为什么数组不可扩展?

我开始学习Java,因为我的计算机科学学校的任务需要这种语言,我喜欢这门语言.但是,我已经看到Java数组不可扩展 - 也就是说 - 在使用它们之前必须声明它们的长度,并且它不能进一步更改.

我想知道为什么会这样?为什么Java语言设计者选择这样制作数组呢?我想这是出于性能问题,但我不确定.

提前谢谢大家.

java programming-languages language-design

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

引入rvalue引用实际上有用吗?

将rvalue引用引入C++的典型原因是在评估复杂的C++表达式时消除(优化)多余的复制.

但是,C++ 98/C++ 03 有两种编译器优化技术,它们基本上用于相同的目的,即

有没有任何真实的用例,当上述技术(使用适当编写的代码)无法消除多余的复制,但右值引用可以成功吗?

c++ language-design rvalue-reference c++11

0
推荐指数
2
解决办法
439
查看次数

为什么C#使调用者为具有可选参数的方法提供实际参数值?

本博客的最后一部分解释了以下内容:http://lostechies.com/jimmybogard/2010/05/18/caveats-of-c-4-0-optional-parameters/

但我仍然想知道为什么.

我最近遇到了Scala的默认参数.

在Scala中,被调用者为具有默认值的参数提供实际值.因此,不必重新编译所有调用者以使用更新的默认参数值.

如果Scala可以做到,我猜C#也可以做到.

所以为什么?他们为什么设计它容易出错?

编辑:

容易出错可能过于强烈,所以我的问题更像是这样:

为什么它的设计方式是默认参数的版本控制不会影响调用者?

c# scala language-design optional-parameters default-parameters

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

为什么不在c#6中显式初始化readonly自动实现属性?

更新1
看起来我的英语非常糟糕,或者人们只是不吝啬...了解我的要求或只是看帖子的标题.

C#5规范明确规定:

由于支持字段不可访问,因此只能通过属性访问器读取和写入,即使在包含类型中也是如此.这意味着自动实现的只读或只写属性没有意义,并且是不允许的.

public string MyProperty {get;}没有任何意义,但编译器发出getter甚至没有对缺乏setter的争论也没有任何代价.备用字段将使用默认值进行初始化.这是什么意思?这意味着设计人员花了一些精力来实现验证,以引入可能遗漏的功能.

我们现在考虑C#6:

在C#6中,引入了自动实现属性的初始化.

public string FirstName { get; set; } = "Jane";
Run Code Online (Sandbox Code Playgroud)

要么

public string FirstName { get; } = "Jane";
Run Code Online (Sandbox Code Playgroud)

在后一种情况下,属性也可以在构造函数中设置:

public class Program
{
    public string ImagePath { get; }

    public static void Main()
    {    
    }

    public Program()
    {
        ImagePath = "";
    }      
}
Run Code Online (Sandbox Code Playgroud)

但只能在声明属性的类的构造函数中.派生类不能设置属性的值.

现在问问自己这个属性意味着什么,如果它没有在构造函数中初始化:

property string My {get;}
Run Code Online (Sandbox Code Playgroud)

这是C#5禁止财产的100%等价物.没有任何意义.
但是这种在C#5中无效的声明在C#6中变得有效.然而,语义根本没有改变:没有显式初始化,这个属性是无用的.

这就是我要问的原因:

为什么不在c#6中显式初始化readonly自动实现的属性?

我希望看到的答案是:

  • 要么揭穿我对C#6变化的初步假设
  • 或者解释编译器设计者如何以及为什么改变他们对有意义的东西以及什么没有意义的想法.

我发现答案It's by design完全无关紧要.这只是一个事实.我寻找原因.我不相信编译器设计者只需抛硬币就可以决定编译器行为的变化.

这是一个很好的答案的 …

c# language-design c#-6.0

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

为什么你只能用特征指定类型限制?

在Rust中,您只能使用特征来指定类型限制,例如:<T: A + B>,A和B必须是traits,它们不能是i32或者是原始类型f64.

trait Foo {}

impl Foo for i32 {}

fn blah<T: i32>(val: T) {
    //     ^^^ works if this is Foo
    println!("hello\n");
}

fn main() {
    let toast: i32 = 33;
    blah(toast);
}
Run Code Online (Sandbox Code Playgroud)

你可以通过实现原语的特征解决这个问题,但为什么语言的设计者不会让你使用原语作为限制呢?

language-design rust

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

意思是什么 - "IronPython是Python编程语言的一种实现"

我知道问题看起来是广泛和主观的,但我对IronPython的这个定义无处不在 - " IronPython是Python编程语言的实现 "如果有任何SO帖子准确回答这个问题,请随意将其标记为重复.

到目前为止,我对此的理解是:

1)Iron python只是用C#编写的托管库(IronPython.dll)并使用CLR

2)Iron python托管代码在内部使用标准Python库(作为Iron Python的一部分安装)来使用DLR弥补差距.

这里的任何python代码的实际执行运行时间是多少?是Python解释器吗?这个解释器是否在不同的进程中运行?

3)IronPython.dll公开api以与任何其他.net语言集成python代码.

我确信某些地方我的理解是不正确的 - " IronPython是Python编程语言的一种实现 "因为从这看起来像Python语言是一种契约,它规定了你如何编写检查条件if condition和实现者如铁python照顾将其转换为IL代码.是这样的吗?

感谢任何帮助或指针.

c# python ironpython dynamic-language-runtime language-design

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