Questions tagged «language-design»

涉及编程语言的设计和结构的问题。



4
将类似C ++的const引入语言有什么问题?
我对C ++的想法感兴趣,而const不是特定的执行(例如Castingaway const)。 以C#为例-它缺少类似于C ++的const,其原因是通常的-人员和时间。在这里,另外,似乎C#团队研究了C ++的const市场营销CLR 执行情况,并且在这一点上已经足够了(请参阅为什么在c#和const参数中没有const成员方法;谢谢Svick)。如果我们走得更远,还有其他吗? 还有更深的东西吗?以多重继承为例-通常(对于用户)它很难理解,因此没有添加到语言中(例如钻石问题)。 在《自然》杂志中是否存在某种const问题,那就是让语言最好避免这种问题?像确定const是深还是浅之类的东西(有了const容器,这意味着我也不能添加新元素或更改现有元素;如果元素属于引用类型怎么办)? 更新:虽然我提到C#,因此从历史的角度出发,但我对const语言潜在问题的性质感兴趣。 这不是语言的挑战。请忽略当前趋势或受欢迎程度等因素-我只对技术问题感兴趣-谢谢。

5
为什么Python比Java慢但比PHP快[关闭]
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案会得到事实,参考或专业知识的支持,但是这个问题可能会引起辩论,争论,民意调查或扩展讨论。如果您认为此问题可以解决并且可以重新提出,请访问帮助中心以获取指导。 7年前关闭。 我已经多次看过各种基准测试,这些基准测试表明一堆语言如何执行给定任务。 这些基准测试始终表明Python比Java慢,比PHP快,我不知道为什么会这样。 Java,Python和PHP在虚拟机中运行 所有这三种语言都将其程序转换为可在操作系统之上运行的自定义字节码-因此,没有一种语言可在本地运行 Java和Python都可以“编译”(.pyc对于Python),但Python的__main__模块未编译 Python和PHP是动态类型的,而Java是静态类型的-这就是Java速度更快的原因,如果是,请说明这如何影响速度。 而且,即使dynamic-vs-static参数正确,也不能解释为什么PHP比Python慢​​-因为两者都是动态语言。 你可以看到一些基准这里和这里,并在这里


10
函数重载?是或否[关闭]
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案会得到事实,参考或专业知识的支持,但是这个问题可能会引起辩论,争论,民意调查或扩展讨论。如果您认为此问题可以解决并且可以重新提出,请访问帮助中心以获取指导。 6年前关闭。 我正在开发一种静态和强类型的编译语言,并且正在重新考虑是否将函数重载作为一种语言功能包括在内的想法。我意识到我有点偏颇,主要来自C[++|#]背景。 支持和反对在语言中包含函数重载的最有说服力的论据是什么? 编辑:没有人有反对意见吗? 伯特兰·迈耶(Bertrand Meyer,埃菲尔铁塔的创建者早在1985/1986年)就将方法重载称为:(源) 一种虚荣机制,不会使OO语言的语义能力发挥任何作用,但会妨碍可读性并使每个人的任务变得复杂 现在这些是一些笼统的概括,但是他是一个聪明的人,所以我可以肯定地说他可以根据需要支持它们。实际上,他几乎让Brad Abrams(CLSv1开发人员之一)确信.NET不应该支持方法重载。(来源)这是一些有力的东西。谁能说明他的思想,以及25年后他的观点是否仍然合理?

3
事后看来,基于XML的XAML是错误的还是好的方法?
XAML本质上是XML的子集。据说将XAML基于XML的主要好处之一是可以使用现有工具进行解析。尽管(语法上不重要的)属性值将保持文本形式并需要进一步解析,但它在很大程度上可以。 用XML派生的语言描述GUI有两种主要选择。一种是做WinForms所做的事情,并用真实的代码对其进行描述。尽管它并非完全没有优势,但这样做有很多问题(将XAML与这种方法进行比较是一个问题)。另一个主要的替代方案是设计专门针对手头任务的全新语法。这通常称为领域特定语言。 因此,事后看来,作为对子孙后代的一个教训,将XAML基于XML是一个好主意,还是作为一种定制设计的领域特定语言会更好?如果我们要设计一个更好的UI框架,我们应该选择XML还是自定义DSL? 由于积极地思考现状要容易得多,尤其是社区非常喜欢的现状,因此,我将举一些示例理由说明为什么在XML之上进行构建可能会被认为是错误的。 基于XML的语言有其作用:解析起来要容易得多(核心解析器已经可用),所需的设计工作要少得多,并且对于第三方开发人员来说,替代解析器也要容易编写。 但是由此产生的语言可能会以各种方式令人不满意。这很冗长。如果更改某物的类型,则需要在结束标记中进行更改。它对评论的支持很差;注释掉属性是不可能的。XML对属性的内容有一些限制。标记扩展必须建立在XML语法的“顶部”,而不是深入和完美地集成到其中。而且,我个人最喜欢的是,如果您通过属性设置内容,则使用的语法与将内容属性设置为完全相同的语法完全不同。 也有人说,由于每个人都了解XML,因此XAML需要的学习较少。严格来说,这是事实,但是学习语法只是学习新UI框架的一小部分时间。正是框架的概念使曲线变得陡峭。此外,基于XML的语言的特质实际上可能会添加到“需要学习”的篮子中。 易于解析会抵消这些缺点吗?下一个很酷的框架是否应该延续这一传统,还是应该花时间设计出色的DSL,而DSL是现有工具无法解析的,并且每个人都需要学习其语法? PS并非每个人都对XAML和WPF感到困惑,但是有些人对此感到困惑。XAML是类似XML的东西。WPF是支持绑定,主题化,硬件加速和许多其他很酷功能的框架。

8
为什么C ++仍然“混合”
在一个相关的问题上,已经阐明了为什么C ++在许多方面与C不兼容。但是,C ++仍然是“混合” *语言。不幸的是,许多程序员仍然将C ++视为“具有流和内置字符串的C”。这导致了非常糟糕的书面代码,因为它既不是C ++也不是C。恕我直言,如果语言/编译器在某种程度上强迫程序员编写更优雅的代码,那会更好。那么是否有理由保持现代C ++(例如C ++ 0x和将来的版本)混合在一起? *混合是指程序员决定是否使用他/她:标准字符串和流,类,默认名称空间以外的名称空间等。

9
职业建议:编程语言理论博士学位[关闭]
关闭。这个问题是题外话。它当前不接受答案。 想改善这个问题吗? 更新问题,使它成为软件工程堆栈交换的主题。 6年前关闭。 我对编程语言的理论非常感兴趣,并打算在该主题上申请博士学位,但我想对研究生教育后的职业有更多了解。除了当教授,我还能获得什么职业?

3
Ruby创建者为什么选择使用符号的概念?
tl; dr:是否会有语言不可知的符号定义,以及是否有其他语言的符号? 那么,为什么Ruby创建者symbols在语言中使用的概念? 我是从非橄榄球程序员的角度提出这个问题的。我学习了许多其他语言,但没有发现需要指定我是否在处理Ruby所调用的语言symbols。 主要的问题是, symbols Ruby存在以提高性能,还是仅仅因为语言的编写方式而需要? Ruby中的程序会比Python或Javascript对应的程序轻和/或快吗?如果是这样,那是因为symbols吗? 由于Ruby的目的之一是易于人类阅读和编写,难道其创建者不能通过在解释器本身中实现这些改进来简化编码过程吗(就像其他语言一样)? 似乎每个人都只想知道symbols它们是什么以及如何使用它们,而不是为什么首先要知道它们的存在。

5
当定义写在源代码的末尾时,为什么需要用C语言对数据和函数进行“声明”?
考虑下面的“ C”代码: #include<stdio.h> main() { printf("func:%d",Func_i()); } Func_i() { int i=3; return i; } Func_i()是在源代码的末尾定义的,并且在main()。中使用之前没有提供声明。在编译器Func_i()进入的时候main(),它出来main()并找到了Func_i()。编译器会以某种方式找到返回的值Func_i()并将其提供给printf()。我也知道,编译器无法找到返回类型的Func_i()。它在默认情况下需要(猜测?)的返回类型的Func_i()是int。就是说,如果代码具有float Func_i(),编译器将给出错误:的类型冲突Func_i()。 从上面的讨论中我们看到: 编译器可以找到由返回的值Func_i()。 如果编译器可以找到返回的值Func_i()由未来的出来main()和向下搜索源代码,那么为什么就不能找到Func_i(),它的类型明确提及。 编译器必须知道它Func_i()是float类型的-这就是为什么它会产生冲突类型的错误的原因。 如果编译器知道该Func_i类型为float类型,那么为什么仍假定它Func_i()为int类型,并给出类型冲突的错误?为什么不强制使它Func_i()成为float类型。 我对变量声明也有同样的疑问。考虑下面的“ C”代码: #include<stdio.h> main() { /* [extern int Data_i;]--omitted the declaration */ printf("func:%d and Var:%d",Func_i(),Data_i); } Func_i() { int i=3; return i; } int Data_i=4; 编译器给出错误:未声明“ Data_i”(此函数中的首次使用)。 当编译器看到 Func_i(),它会进入源代码以查找Func_()返回的值。为什么编译器不能对变量Data_i做同样的事情? …

1
Groovy是否遵循Tennent的通信原理?
这是对Tennent的通信原理的有趣讨论,以及Neal Gafter的简短描述: 该原理规定,将表达式或语句包装在闭包中然后立即调用时,其含义应与包装在闭包中之前的含义相同。在将代码包装在闭包中时,语义上的任何更改都可能是该语言的缺陷。 Groovy语言是否遵循此原则?


2
Microsoft是否不鼓励在C#中使用'var'?(VS2017)
我正在看即将到来的Visual Studio 2017。 在标题为“ 提高生产力 ”的部分下,有一张Visual Studio图像,用于将所有出现的var替换为显式类型。 该代码显然有一些问题,Visual Studio已将其识别为“需要修复”。 我想仔细检查一下我对C#中var用法的理解,因此我读了Eric Lippert在2011年发表的一篇文章,文章名称为隐式类型的使用和滥用。 埃里克(Eric)说: 必要时使用var;当您使用匿名类型时。 当声明的类型对初始化器来说很明显时,请使用var,尤其是在创建对象时。这消除了冗余。 如果代码强调变量的语义“业务目的”并轻视变量存储的“机械”细节,请考虑使用var。 如果需要这样做,则必须使用显式类型,以便正确理解和维护代码。 无论是否使用“ var”,都使用描述性变量名称。变量名称应代表变量的语义,而不是变量存储的详细信息;“ decimalRate”不好;“ interestRate”很好。 我认为代码中的大多数var用法都可以。我认为不要将var用于读取的位... var tweetReady = workouts [ ... ] ...因为它不是100%立即是什么类型,但是即使那样我还是很快就知道它是boolean。 这部分的var用法... var listOfTweets = new List<string>(); ...在我看来完全像var的用法一样,因为我认为执行以下操作是多余的: List<string> listOfTweets = new List<string>(); 尽管根据Eric所说的,变量应该可能是tweets而不是listOfTweets。 更改所有var用途的原因是什么?我缺少此代码有什么问题吗?

7
在Java中,为什么使受保护成员可以访问同一包的类?
从官方文件 ... 修饰符类包子类世界 公开YYYY 受保护的YYYN 没有修饰符YYNN 私人YNNN 问题是,我不记得有一个用例,在该用例中,我需要从同一包中的类访问受保护的成员。 执行此操作的原因是什么? 编辑:为澄清起见,我正在寻找一个特定的用例,其中同一包中的子类和类都需要访问受保护的字段或方法。 package some.package; public class A { protected void protectedMethod(){ // do something } } package another.package; public class B extends A{ public void someMethod(){ // accessible because B is a subclass of A protectedMethod(); } } package some.package; public class …

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.