Questions tagged «programming-languages»

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


23
什么是好的编程隐喻?[关闭]
我指的是向非程序员解释什么是编程。我确保在创建此问题之前先搜索类似的问题,但是我发现的几个问题似乎回避了这个问题,我特别希望看到一些隐喻或类比。我个人发现通过使用隐喻或类比向某人解释一些技术性的内容比较容易。 我对此感兴趣的原因是,因为很多人每天都会遇到程序员的工作,但是如果您问普通人一个程序员是什么或干什么,他们并不真正知道。这会导致某些误解(例如“ [...],但我认为您的计算机性能不错!”) 我真的很想在那儿找到最好的。我希望能够轻松地向某人解释我的职业选择。当然,至少是总体思路。 我个人没有一个可靠的语言,但是我已经考虑了很久,而且我通常倾向于使用“语言”隐喻,因为我们碰巧知道计算机可以理解的一种语言,因此我们能够告诉计算机该做什么。做或“教”他们解决我们的问题。 例如: 想象一下,在另一个现实中,存在具有人工智能的类人机器人,有些人能够通过一种通用语言(英语的一种变体)与它们进行通信。这些可以与机器人通信的人可以教他们如何解决某些问题或完成某些任务,例如做家务。 好吧,尽管还没有像这样的机器人,但我们这个时代的程序员就像那些人一样,但是他们没有与机器人交流,而是与计算机交流。程序员通过使用这种“通用语言”创建的软件来“教”计算机如何执行某些任务或解决某些问题。 程序员和这种“通用语言”为我们提供了诸如电子邮件,网站,视频游戏,文字处理器,智能手机(简而言之)之类的东西,以及我们日常使用的许多其他东西。 我并不是要把编程放在王位上,这只是我能想到的最好的隐喻。 我确定有人会发现与此有关的问题,这可能是人为的,但这又是我问这个问题的原因。


6
类型推断的权衡是什么?
似乎所有新的编程语言,或者至少是流行的编程语言都使用类型推断。即使是Javascript,也可以通过各种实现(Acscript,Typescript等)获得类型和类型推断。对我来说看起来很棒,但我想知道是否需要权衡取舍,或者为什么要说Java或旧的好语言没有类型推断 在Go中声明变量而不指定其类型时(使用不带类型的var或:=语法)时,将从右侧的值推断出变量的类型。 D允许编写大型代码片段,而无需像动态语言那样重复指定类型。另一方面,静态推断可推导类型和其他代码属性,从而充分利用静态和动态环境。 Rust中的类型推断引擎非常聪明。它所做的不只是在初始化过程中查看r值的类型。它还看起来如何在以后使用变量来推断其类型。 Swift使用类型推断来得出适当的类型。通过类型推断,编译器只需检查您提供的值,即可在编译代码时自动推断出特定表达式的类型。

9
为什么大多数“知名”命令式/ OO语言都允许未经检查的类型代表“无”值的访问?
我一直在阅读关于拥有null而不是(例如)的(不便)便利的信息Maybe。阅读本文之后,我相信使用Maybe(或类似方法)会更好。但是,令我惊讶的是,所有“众所周知”的命令式或面向对象的编程语言仍在使用null(这允许对可以表示“无”值的类型进行未经检查的访问),并且Maybe大多数在函数式编程语言中使用。 作为示例,请看下面的C#代码: void doSomething(string username) { // Check that username is not null // Do something } 这里有些难闻的气味...为什么我们要检查参数是否为null?我们不应该假设每个变量都包含对对象的引用吗?如您所见,问题在于,根据定义,几乎所有变量都可以包含空引用。如果我们可以决定哪些变量是“可为空的”而哪些则不是呢?这将节省我们调试和寻找“ NullReferenceException”时的工作量。想象一下,默认情况下,没有类型可以包含null引用。取而代之的是,您将明确声明变量只有在确实需要时才可以包含空引用。那就是Maybe背后的想法。如果您的函数在某些情况下会失败(例如,被零除),则可以返回Maybe<int>,明确指出结果可能是整数,但也没有任何结果!这是选择Maybe而不是null的原因之一。如果您对更多示例感兴趣,那么我建议阅读这篇文章。 事实是,尽管存在使大多数类型默认为可空的缺点,但大多数OO编程语言实际上都可以做到这一点。这就是为什么我想知道: 您必须用null编程语言来实现什么样的参数Maybe呢?完全有原因还是仅仅是“历史包bag”? 在回答此问题之前,请确保您了解null和Maybe之间的区别。


16
我正在写有关语言语法的文章。在方法名称中是否存在将参数置于其中的语言?
在JavaScript中: function getTopCustomersOfTheYear(howManyCustomers, whichYear) { // Some code here. } getTopCustomersOfTheYear(50, 2010); 在C#中: public List<Customer> GetTopCustomersOfTheYear(int howManyCustomers, int whichYear) { // Some code here } List<Customer> customers = GetTopCustomersOfTheYear(50, 2010); 在PHP中: public function getTopCustomersOfTheYear($howManyCustomers, $whichYear) { // Some code here } $customers = getTopCustomersOfTheYear(50, 2010); 是否有任何语言支持以下语法: function GetTop(x)CustomersOfTheYear(y) { // …

30
您在任何编程语言中都面临的最大设计缺陷是什么?[关闭]
所有编程语言都有其设计缺陷,这仅仅是因为没有一种语言像大多数(所有其他)事物一样是完美的。除此之外,在您作为程序员的历史上,哪种编程语言的设计错误最让您感到烦恼? 请注意,如果一种语言是“不好的”,仅仅是因为它不是针对特定事物而设计的,那不是设计缺陷,而是设计的功能,因此,请不要列出这种烦人的语言。如果一种语言不适合其设计目的,那当然是设计中的缺陷。实施特定的事物和内幕事物也不重要。


5
解释还是编译:有用的区别?
在这里,有关解释型和编译型语言工具的问题很多。我想知道区别实际上是否有意义。(实际上,问题通常是关于语言的,但是他们实际上是在考虑那些语言的最流行实现)。 今天,几乎没有任何实现被严格解释。即几乎没有人解析并一次运行一行代码。另外,编译成机器代码的实现也越来越不常见。编译器越来越多地将目标对准某种虚拟机。 实际上,大多数实施都集中在相同的基本策略上。编译器生成字节码,该字节码通过JIT解释或编译为本地代码。它实际上是传统的编译和解释思想的结合。 因此,我问:如今,解释的实现和编译的实现之间是否有有用的区别?

4
编程语言如何定义函数?
编程语言如何定义和保存函数/方法?我正在用Ruby创建一种解释型编程语言,并且试图弄清楚如何实现函数声明。 我的第一个想法是将声明的内容保存在地图中。例如,如果我做了类似的事情 def a() { callSomething(); x += 5; } 然后,我要在地图中添加一个条目: { 'a' => 'callSomething(); x += 5;' } 这样做的问题是它将变得递归,因为我必须parse在字符串上调用我的方法,该方法在parse遇到字符串时会再次调用doSomething,然后最终将耗尽堆栈空间。 那么,解释型语言如何处理呢?

15
在两种编程语言之间来回切换是否明智?[关闭]
近两年来我一直在写很多PHP。现在,我正在进行.NET(主要是C#)开发。但是,有时我回去做一些php。 我的主要问题是,继续执行此操作是否明智?还是应该继续使用C#开发?从长远来看,这会对我造成伤害吗(请注意,我的主要目标不是成为所有交易的杰克)还是这样做是一种好习惯?

13
为什么选择“错误的”语言学习时似乎会有很多恐惧?[关闭]
也许仅仅是我一个人,但是作为一名现役CS学生,我已经在该网站和其他地方遇到了很多问题,不仅仅是“我应该使用哪种语言表示x?”。而且还有“有人还在使用Y语言吗?” 我的第一个CS课是用Scheme讲授的,如果我没记错的话,它没有得到广泛使用(至少与Java,PHP,Python等语言相比)。我的许多同学对必须学习一门他们永远不必再使用的语言的想法感到沮丧,但我不太了解这种学习较少流行语言的恐惧源于何处。不,我可能不会在所从事的任何工作中使用Scheme,但是我当然不后悔学会使用它(尽管在一个学期中是一个非常初学者,但不是很深入的方式)。这个学期我要上搜索引擎课程,这是在Perl中完成的,而我又一次看到同学抱怨语言的选择。我可以理解拥有一种喜欢的语言而讨厌其他语言,但是为什么有些人在学习它时就变得烦躁不安了?您真的可以学习“错误”语言吗?如果没有别的东西,不是不是学习Scheme或Haskell的良好的心理锻炼方法,至少对接触解决问题的不同方式有用吗?

13
为什么编程语言不能自动管理同步/异步问题?
我没有找到很多有关此的资源:我想知道是否有可能/以同步方式编写异步代码的好主意。 例如,下面是一些JavaScript代码,该代码检索数据库中存储的用户数(异步操作): getNbOfUsers(function (nbOfUsers) { console.log(nbOfUsers) }); 能写这样的东西会很好: const nbOfUsers = getNbOfUsers(); console.log(getNbOfUsers); 因此,编译器将自动处理等待响应的内容,然后执行 console.log。在必须将结果用于其他任何地方之前,它将始终等待异步操作完成。我们将减少回调承诺,异步/等待或其他方法的使用,并且不必担心操作结果是否立即可用。 nbOfUsers使用try / catch或类似Swift中的可选参数仍然可以管理错误(得到整数还是错误?)语言。 可能吗?这可能是一个可怕的主意/乌托邦……我不知道。

4
正则表达式是一种编程语言吗?
从学术意义上讲,正则表达式是否可以用作编程语言? 我好奇的动机是我刚刚看了一个SO问题,问“正则表达式可以X吗?”。这让我想知道,对于使用它们的可能解决方案,可以从一般意义上说什么。 我基本上是在问,“图灵正则表达式是否完整”?

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.