Questions tagged «programming-languages»

用于指示计算机执行计算步骤以完成任务的人工语言。它们允许程序员与计算机进行通信。

6
静态类型在更大的项目中真的有什么帮助?
在脚本编程语言网站的首页上进行好奇时,我遇到了这段话: 当系统太大而无法控制时,可以添加静态类型。 这让我记住,在许多静态的,已编译的语言(例如Java)和动态的,解释性语言(主要是Python,因为它使用较多,但它是大多数脚本语言之间共享的“问题”)之间的宗教战争中,静态地抱怨之一打字语言对动态打字语言的拥护者认为,它们不能很好地扩展到较大的项目,因为“有一天,您会忘记函数的返回类型,而必须查找它,而使用静态打字语言时,一切被明确声明”。 我从不理解这种说法。老实说,即使您声明了函数的返回类型,在编写了许多行代码之后,您也可能会忘记它,而您仍然必须返回到使用的搜索功能声明它的行。您的文本编辑器进行检查。 另外,当函数使用声明时type funcname()...,type您将不得不在调用该函数的每一行中进行搜索,因为您只知道funcname,而在Python之类的代码中,您只会搜索def funcname或function funcname只发生一次,在声明。 而且,使用REPL可以很容易地测试一个函数是否具有不同输入的返回类型,而对于静态类型的语言,您需要添加一些代码行并重新编译所有内容才能知道所声明的类型。 因此,除了知道函数的返回类型显然不是静态类型语言的强项之外,静态类型在更大的项目中真的有什么帮助?

3
C的“真实”变量大小有用吗?
一直以来,我一直将C的积极特性(实际上是它的实现,如gcc,clang等)打动我的一件事是,它在运行时不会在您自己的变量旁边存储任何隐藏信息。我的意思是,例如,如果您想要类型为“ uint16_t”的变量“ x”,则可以确定“ x”将仅占用2个字节的空间(并且不会携带任何隐藏信息,例如其类型等) )。同样,如果要使用100个整数的数组,则可以确保它与100个整数一样大。 但是,我越想为此功能提出具体的用例,就越想知道它实际上是否具有任何实际优势。到目前为止,我唯一能想到的就是它显然需要更少的RAM。对于有限的环境(例如AVR芯片等),这无疑是一个巨大的优势,但是对于日常的台式机/服务器用例而言,这似乎无关紧要。我正在考虑的另一种可能性是,它对于访问硬件或映射内存区域(例如,用于VGA输出等)可能很有用/至关重要。 我的问题:没有此功能,是否有任何具体的领域无法实现或只能非常繁琐地实现? 附言:请告诉我您是否有更好的名字!;)

5
OOP语言和类型的类
在编程语言理论中,类型是一组值。例如,类型“ int”是所有整数值的集合。 在OOP语言中,类是类型,是吗? 当一个类定义了一个以上的成员时,例如 class myclass{ int a; double b; } 当我们谈论课程时,我们的意思是 “ (a,b)哪里a是一个整数,并且b是一个双精度数”,或者 “ { (x,y)| x是整数,y是双精度}”吗? 实例myclass是什么意思? “ (a,b)哪里a是一个整数,并且b是一个双精度数”,或者 一个对象,该对象占用一个内存空间,并且可以(不一定是空)可以存储对象(x,y),xint 在哪里,ydouble在哪里?

4
为什么科学编程语言如此怪异?[关闭]
已关闭。这个问题是基于观点的。它当前不接受答案。 想改善这个问题吗?更新问题,以便通过编辑此帖子以事实和引用的形式回答。 6年前关闭。 在我看来,与通用语言相比,用于科学和工程的编程语言一直很奇怪。我脑海中浮现出一些例子: 在Matlab中,每个函数都必须放在单独的文件中 在R中,<-是赋值运算符,与几乎所有其他语言中的=相对 Matlab,R,Julia等都被1索引 Matlab使用%进行注释,而不是标准的#或// 当然,这些语言都具有几种设计功能,实际上使它们更易于用于科学应用,例如更自然的矩阵符号。尽管如此,他们全都莫名其妙地做出了所有这些奇怪的选择,这些选择并没有使任何事情变得容易,并且如果语言设计者只是选择做其他99%的语言所做的事情,就很容易避免。是供应商锁定的原因吗?缺乏与更广泛的软件开发社区的联系?还有吗 我阅读了此主题,但并没有找到令人满意的解释。仅仅因为R被设计为科学语言并不意味着它必须完全忽略约定并使用<-代替=。

3
当编程语言设计人员决定取模运算结果采用什么符号时,使用什么原理?
通过走出去模运算(同时探索之间的区别我走进林荫道rem和mod我碰上了): 在数学中,模运算的结果是欧几里得除法的余数。但是,其他约定也是可能的。计算机和计算器具有多种存储和表示数字的方式;因此,它们对模运算的定义取决于编程语言和/或底层硬件。 问题: 通过欧几里得除法运算,我发现此运算的余数始终为正(或0)。底层计算机硬件的哪些限制迫使编程语言设计师与数学有所不同? 每种编程语言都有其预定义或未定义的规则,根据这些规则,取模运算的结果将得到其符号。制定这些规则时采用什么理由?并且如果底层硬件是问题所在,那么规则是否不应该根据编程语言而独立于编程语言而改变?

1
数学需要了解Haskell类型系统背后的理论吗?
最近,我对Haskell产生了浓厚的兴趣。 在尝试学习新概念(例如,forall关键字和ST monad)和一般的Haskell的类型系统时,我不断地从类别理论和lambda演算中学习概念。所以,我想知道: 数学的其他哪些分支对于深入了解Haskell的类型系统也很重要? 我可以放弃对这些数学的严格研究,而是专注于某些相关概念吗?(例如,lambda演算中的量词。)如果是,那么哪些概念必不可少? 我希望很快能学到类型和编程语言,但是,请提出您认为合适的其他替代阅读资源。

1
是否有一种程序可以说明不同编程语言的大多数功能和用法?
我们都知道,“敏捷的棕色狐狸跳过了懒狗”被用作印刷和字体的基准。 我想知道编程语言是否有类似的“懒狗”。 有太多不同的编程语言,它们具有各种相似或不同的功能和语法。问题是:当同时使用不同的语言时,用户会感到困惑。 尽管不同语言之间存在很多差异,但必须存在一些共同点,即任务或例程。如果我们用不同的语言执行相同的任务,并尝试涵盖最常用的功能,那么语言学习或比较将变得更加容易。 这种程序不需要很长,就像教程一样,但是足够通用和抽象。是否存在?



8
过去的If语句数组,循环…现在呢?
一年前,当我不断碰壁时,我放弃了编程。我正在重新研究该主题,因为我想创建基本的Android应用程序。但是我觉得我有限的知识是不够的。 这是我的问题。 我已经阅读了几本书,并观看了有关C#/ Java的视频教程,并跟随了示例,然后完成了这本书。最后,他们似乎总是让我对下一步该怎么做感到震惊。 这是什么意思,他们从基本的“ hello world”应用程序一直教您到if和array,然后看似希望您知道如何进入编码世界并创建任何东西。 我在这里想念什么吗?我知道这些是所有程序的基础,但我读过的书从未真正向我展示下一步该怎么做。 我想简单的答案是“开始编码”,但是在哪里?例如,我读过“ Head First Java”。直到他们告诉你把学到的一切都用来制作狗赛车游戏为止。 “不要欺骗并查看提供的源代码,您现在应该可以做到这一点。” _这不是确切的引用,但基本上就是我被告知的…… 半个小时前,他们只是在解释如何做数组,然后我毫无理论地打算创建一个工作游戏? 我之所以这样问,是因为我担心这至少是我应该知道的,至少开始编码了,但是感觉就像是给了我一个小工具箱,并被告知要建造一座摩天大楼。 谢谢你的建议


5
是否有允许您对类型进行算术设置的编程语言?
出于好奇,是否存在允许您对类型进行设置算术以创建新类型的语言?就像是: interface A { void a(); void b(); } interface B { void b(); void c(); } interface C = A & B; // has b() interface D = A | B; // has a(), b() and c() interface E = (A & B) ^ B; // has c() 我知道在某些语言中可以表达这些想法(即Java具有List<Comparable …

3
具有副作用的封闭器是否被视为“功能样式”?
许多现代编程语言都支持某种闭包概念,即一段代码(一个块或一个函数) 可以被视为一个值,因此可以存储在变量中,传递给代码的不同部分,可以在一个程序的一部分中定义,并可以在同一程序的完全不同的部分中调用。 可以从定义它的上下文中捕获变量,并在以后调用它时访问它们(可能在完全不同的上下文中)。 这是用Scala编写的闭包示例: def filterList(xs: List[Int], lowerBound: Int): List[Int] = xs.filter(x => x >= lowerBound) 函数文字x => x >= lowerBound包含free变量lowerBound,该变量由filterList具有相同名称的函数的参数关闭(绑定)。该闭包将传递给library方法filter,该方法可以作为常规函数重复调用它。 我已经在该站点上阅读了很多问题和答案,据我所知,术语闭包通常会自动与函数式编程和函数式编程风格相关联。 维基百科上的函数编程的定义为: 在计算机科学中,函数式编程是一种编程范例,将计算视为对数学函数的评估,并避免了状态数据和可变数据。与强调状态变化的命令式编程风格相反,它强调函数的应用。 并进一步 在函数代码中,函数的输出值仅取决于输入到函数的参数。消除副作用可以使理解和预测程序的行为变得更加容易,这是开发函数式编程的主要动机之一。 另一方面,编程语言提供的许多闭包构造允许闭包捕获非局部变量并在调用闭包时对其进行更改,从而对定义它们的环境产生副作用。 在这种情况下,闭包实现了函数编程的第一个想法(函数是可以像其他值一样移动的一流实体),却忽略了第二个想法(避免了副作用)。 带有副作用的闭包的这种使用是否被视为功能样式,还是被视为可以用于功能性和非功能性编程样式的更通用的构造?是否有关于该主题的文献? 重要的提示 我不是在质疑副作用或关闭副作用的有用性。另外,我对讨论带或不带副作用的闭合的优缺点没有兴趣。 我只想知道函数编程的支持者是否仍将使用此类闭包视为函数样式,或者相反,在使用函数样式时不鼓励使用此类闭包。

4
如果从头开始设计易于使用TDD的新语言,会怎么样?
在使用某些最常见的语言(Java,C#,Java等)时,当您想要完全TDD代码时,有时似乎与该语言存在分歧。 例如,在Java和C#中,您将要模拟类的任何依赖关系,大多数模拟框架将建议您模拟接口而不是类。这通常意味着您有多个接口且只有一个实现(这种效果更加明显,因为TDD会迫使您编写大量较小的类)。让您正确模拟具体类的解决方案可以做一些事情,例如更改编译器或覆盖类加载器等,这很讨厌。 那么,如果从头开始设计一种对TDD来说很棒的语言,它将是什么样?可能是某种语言级别的方式来描述依赖项(而不是将接口传递给构造函数),并且能够不明确地分离类的接口?

3
为什么.NET模块将模块文件名与名称空间分开?
在Scheme编程语言(R6RS标准)的实现中,我可以如下导入模块: (import (abc def xyz)) 系统将尝试寻找一个文件$DIR/abc/def/xyz.sls,该文件$DIR是您保存Scheme模块的某个目录。xyz.sls是模块的源代码,如有必要,它可以即时进行编译。 在这方面,Ruby,Python和Perl模块系统相似。 另一方面,C#涉及更多。 首先,您必须根据每个项目引用dll文件。您必须明确引用每个。这比说要复杂得多,将dll文件拖放到目录中,然后让C#按名称进行选择。 其次,dll文件名与dll提供的名称空间之间没有一一对应的命名关系。我可以体会这种灵活性,但是它也可以一发不可收拾。 为了具体化,如果我说这话using abc.def.xyz;,C#会尝试abc/def/xyz.dll在C#知道要查找的某个目录中找到一个文件(可以根据每个项目进行配置),那就太好了。 我发现处理模块的Ruby,Python,Perl,Scheme方法更加优雅。新兴语言似乎倾向于更简单的设计。 为什么.NET / C#世界以额外的间接级别以这种方式执行操作?

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.