软件工程

针对在系统开发生命周期中工作的专业人士,学者和学生的问答

8
为什么x = x ++未定义?
它是未定义的,因为它x在序列点之间修改了两次。标准说它是未定义的,因此它是未定义的。 我知道的那么多。 但为什么? 我的理解是,禁止这样做可以使编译器更好地进行优化。当发明C时,这本来是有道理的,但现在看来似乎是一个很弱的论点。 如果我们今天要重新发明C,那么我们会这样做吗,还是可以做得更好? 或者,也许还有一个更深层次的问题,那就是很难为此类表达式定义一致的规则,因此最好禁止它们? 因此,假设我们今天要重新发明C。我想为诸如的表达式建议简单的规则x=x++,在我看来,这些规则比现有规则更有效。 与现有规则或其他建议相比,我希望您对建议的规则有意见。 建议规则: 在序列点之间,未指定评估顺序。 副作用立即发生。 没有涉及未定义的行为。表达式的计算结果等于或等于该值,但肯定不会格式化硬盘(奇怪的是,我从未见过x=x++格式化硬盘的实现)。 示例表达式 x=x++-定义明确,不会改变x。 首先,x将其递增(立即x++求值时),然后将其旧值存储在中x。 x++ + ++x-递增x两次,计算为2*x+2。 尽管可以首先评估任一侧,但结果要么是x + (x+2)(首先是左侧),要么是(首先是(x+1) + (x+1)右侧)。 x = x + (x=3)-未指定,x设置为x+3或6。 如果首先评估右边,则为x+3。也有可能x=3首先被评估,所以是3+3。在任何一种情况下,x=3赋值都会在x=3评估时立即发生,因此存储的值将被另一个赋值覆盖。 x+=(x=3)-定义明确,设置x为6。 您可以说这只是上述表达式的简写。 但是我要说的是,+=必须在之后执行x=3,而不是分为两个部分(读取x,评估x=3,添加和存储新值)。 有什么优势? 一些评论提出了这一点。 我当然不认为x=x++在任何普通代码中都应使用诸如此类的表达式。 实际上,我要比这严格得多-我认为单独使用x++in 的唯一好用法x++;。 但是,我认为语言规则必须尽可能简单。否则,程序员只是不了解它们。禁止在序列点之间两次更改变量的规则当然是大多数程序员都不了解的规则。 一个非常基本的规则是: 如果A有效,B有效,并且它们以有效方式组合,则结果有效。 x是有效的L值,x++是有效的表达式,并且=是将L值和表达式组合在一起的有效方法,那么为什么x=x++不合法呢? C标准在这里是一个例外,该例外使规则复杂化。您可以搜索stackoverflow.com并查看此异常使人们感到困惑的程度。 所以我说-摆脱这种混乱。 ===答案摘要=== 为什么这样 我试图在上一节中解释-我希望C规则要简单。 优化的潜力: 这确实使编译器有了一些自由,但是我没有看到任何使我相信它可能很重要的东西。 大多数优化仍然可以完成。例如,a=3;b=5;即使标准指定了顺序,也可以重新排序。诸如之类的表达式a=b[i++]仍然可以进行类似的优化。 您不能更改现有标准。 …

7
如何打破“ PHP是一种不良语言”的范式?[关闭]
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案会得到事实,参考或专业知识的支持,但是这个问题可能会引起辩论,争论,民意测验或进一步的讨论。如果您认为此问题可以解决并且可以重新提出,请访问帮助中心以获取指导。 7年前关闭。 PHP并不是一门糟糕的语言(或者至少没有像某些人建议的那样糟糕)。在我告诉他们之前,我的老师甚至都不知道PHP是面向对象的。当我们说我们是PHP开发人员并质疑我们没有使用别致的语言和框架(例如Django或RoR)或“企业和实体”语言(例如Java和ASP.NET)时,我的客户立即不信任我们。 Facebook是基于PHP构建的。有很多可靠的项目为Web和Web提供动力,例如在企业和政府中使用的Joomla和Drupal。有些框架和库具有我在所有语言中都曾见过的最佳架构(Symfony 2,Doctrine)。PHP具有我所见过的最好的文档,以及许多专业人士。 PHP具有高级OO功能,例如反射,接口,更不用说PHP现在通过traits原生地和干净地支持水平重用。 有一些不好的程序员和脚本小子给PHP带来了不好的声誉,但同时又给PHP社区带来了强大的力量,而且因为很容易完成PHP,所以您常常会以错误的方式做事,理所当然,但是为什么要怪罪语言?。 现在,将其归结为一个实际可回答的问题:什么才是一个好的,扎实的,简短而又可爱的论点,以免被皱眉,避免一pre而就,当您说自己是PHP开发人员时捍卫自己的偏见?。 (向有经验证据当场说服某人(客户或其他人)的人免费提供含奶油的曲奇) PS:我们使用Symfony,代码的结尾是美观且可维护的 PPS:实被写在PHP,经由街舞编译成C ++和部署在Hadoop。此处:http://arstechnica.com/business/2012/04/exclusive-a-behind-the-scenes-look-at-facebook-release-engineering/1/

4
是否可以将JQuery和类似工具内置到浏览器中?
在阅读了有关JQuery和CDN的另一个问题之后,诸如JQuery之类的工具随浏览器“问世”是否可行,从而减少/消除了从CDN或您自己的主机服务器进行首次下载的需要。 JQuery文件特别小,因此作为浏览器安装的一部分,您可以轻松拥有多个(全部?)不同的版本。现在足够公平了,这将增加安装空间,并缩短浏览器本身的下载时间。 然后,站点可以先检查“本地”,然后再检查CDN(然后缓存),然后最终默认从网站服务器本身下载。 如果可行,是否已经完成,如果没有,为什么还没有完成?


4
如何从句子中提取单词并确定每个词是什么?[关闭]
很难说出这里的要求。这个问题是模棱两可,含糊,不完整,过于宽泛或夸张的,不能以当前的形式合理地回答。如需帮助澄清此问题以便可以重新打开, 请访问帮助中心。 6年前关闭。 我想写一些东西,用一个句子,识别其中包含的每个单词,并定义每个单词的词性。 例如 世界您好,我是一个句子 会返回这个 verb noun, pronoun verb adjective noun 理想情况下,我希望最终将其进一步发展并采用一个句子,并以编程方式让它理解它试图解释的内容并可能对此进行处理。 所以我的问题是,有人听说过这样的事情吗?

6
用Java编写UI 100%并通过API提供数据是个好主意吗?
我的主要工作是制作HTML应用程序。我的意思是,内部使用CRUD类型的应用程序,其中包含许多可编辑的Gridview,文本框,下拉菜单等。我们目前正在使用ASP.NET Web窗体,虽然确实可以完成工作,但是性能通常很差,而且通常您必须跳篮球才能获得所需的东西。吊在天花板上的铁环会燃烧。 所以我想知道将所有UI移到JavaScript端是否是一个好主意。开发一组强大的可重用控件,这些控件专门针对我们的需求量身定制,并且仅与服务器交换数据。是的,我喜欢“控件”(又名“小部件”)范例,它非常适合此类应用程序。因此,在服务器端,我们仍将具有与当前ASPX标记类似的基本布局,但是之后将仅发送给客户端一次,而Javascript部分将负责所有后续的UI更新。 问题是我以前从未做过此事,也从未见过任何人这样做过,所以我不知道会有什么问题。我特别担心: 性能依然。基准测试表明,当AJAX更新后浏览器尝试重新呈现大部分页面时,当前主要延迟在客户端。ASP.NET webforms生成的标记为“ web”一词赋予了新的含义,丰富的Devexpress控件在此之上添加了自己的Javascript复杂性层。但是,重新计算Javascript方面的所有必要更改然后仅更新需要更新的内容会更快吗?请注意,我所谈论的表单具有多个可编辑的gridview,许多文本框,许多下拉列表,每个下拉列表中都包含了半百万个可过滤项,等等。 易于发展。现在将有更多的Javascript,并且可能与页面的HTML标记混合。那或某种新的视图引擎将必须被生产。Javascript的Intellisense也比C#代码差很多,并且由于Javascript的动态特性,不能期望它会变得更好。编码实践可以使它有所改善,但幅度不大。另外,我们的大多数开发人员主要是C#开发人员,因此会有一些学习过程和最初的错误。 安全性。许多安全检查将必须进行两次(服务器端和UI端),并且数据处理服务器端将必须包含更多安全检查。当前,如果您在服务器端将文本框设置为只读,则可以依赖于其值在客户端往返过程中是否保持不变。该框架已经具有足够的代码来确保(通过视图状态加密)。使用纯数据方法会变得更加困难,因为您必须手动检查所有内容。另一方面,可能会更容易发现安全漏洞,因为您只需要担心数据。 总而言之,这将解决我们的问题,还是使它们变得更糟?有没有人尝试过,结果如何?是否有任何框架可以帮助这种工作(不包括jQuery和道德上的对等)?

8
什么是伪代码?
最近,在该站点和其他站点上,我都看到了很多有关伪代码的提及。但我不明白: 什么是伪代码?例如,下面的Wikipedia文章说:“它使用编程语言的结构约定,但旨在供人类阅读而不是机器阅读。” 这是否意味着它实际上并未用于制作程序? 为什么使用它? 如何使用? 它被认为是一种编程语言吗?(请参阅上面的维基百科报价) 它是众所周知/使用过的吗? 老实说,我不知道从哪里开始。我已经用Google搜索了它,并且看到了有关该主题的Wikipedia文章,但是我仍然不完全了解它是什么。


1
我已经对课程进行了单元测试,现在如何开始集成测试?
我编写了一个类,用于管理MailChimp列表上的收件人,称为MailChimpRecipient。它使用MCAPI类,它是第三方API包装器。 http://apidocs.mailchimp.com/api/1.3/ http://apidocs.mailchimp.com/api/downloads/ 我将MCAPI对象传递给MailChimpRecipient对象的构造函数,因此我已经使用PHPUnit编写了单元测试,该单元测试可以测试我自己的类中的所有逻辑(我不测试MCAPI类)。我有100%的代码覆盖率,所有测试均通过。这是通过模拟和存根MCAPI对象来完成的。 我的下一步是使用PHPUnit编写集成测试,在该测试中,我将使用真实的MCAPI对象构造MailChimpRecipient固定装置,并设置为使用真实的MailChimp列表。 我写了我认为是集成测试的内容,它基本上是在对象的公共接口上再次运行测试,例如: public function testAddedRecipientCanBeFound() { $emailAddress = 'fred@fredsdomain.com'; $forename = 'Fred'; $surname = 'Smith'; // First, delete the email address if it is already on the list $oldRecipient = $this->createRecipient(); if($oldRecipient->find($emailAddress)) { $oldRecipient->delete(); } unset($oldRecipient); // Add the recipient using the test data $newRecipient = …
19 php  unit-testing 

2
如何在保持效率的同时将用户界面与业务逻辑分开?
假设我想显示一个表示组合框上10个不同对象的表单。例如,我希望用户从10个不同的包含番茄的汉堡包中选择一个。 因为我想分离UI和逻辑,所以我必须通过表单来表示汉堡包的字符串,以便在组合框中显示它们。否则,UI必须深入到对象字段。然后,用户将从组合框中选择一个汉堡包,并将其提交回控制器。现在,控制器将不得不根据表单使用的字符串表示形式(也许是ID?)再次查找所述汉堡包。 这不是效率低下吗?您已经有了想要从中选择一个的对象。如果您将整个对象提交给表单,然后返回一个特定的对象,则以后不必重新引用它,因为表单已经返回了对该对象的引用。 而且,如果我错了,而您实际上应该将整个对象发送到表单,那么如何将UI与逻辑隔离?

6
在C ++代码中使用C表达式是一种好习惯吗?
尽管我确实比班级领先,但我们还是从今年开始在学校学习C。在班级是C的基础上,我学习了Java,C ++和C。无论如何,我一直在记录自己,读书,文章,我问我的老师为什么我应该学习C,她说这是C ++的基础。刚开始编程时,我发现C ++容易得多,后来又学习了C。但是在书中,您可以看到C代码可以在C ++中运行,但反之则不行。 我的问题很简单〜在C ++中使用C表达式是一种好习惯吗?让我给你举个例子: 该代码应 #include <stdio.h> #include <iostream> int main() { int x; scanf("%d", &x); cout << "The number you entered is " << x << "And it's double is " << x*x; return 0; } 在任何方面都比这更有效率或更好: #include <iostream> int main() { int x; cin >> …
19 c++  c 

1
在日常情况下应如何应用HTML数据格式?
考虑到Google逐渐将重点放在页面标记数据上,Schema.org中使用的数据格式如何与微格式一起使用?这些(和其他规范)如何相互补充,在不同情况下应优先使用? 编辑: 从关于该主题的既定内容看来,意见似乎在认为Schema.org是厄运,地狱和硫磺的人之间以及在无论采用哪种方式最终都将是好事的人之间存在分歧。 这两篇文章至少都同意,不同的格式可以愉快地共存,而不会引起搜索引擎的不满。但是,在特定情况下如何使用不同选项的问题仍然存在。
19 html  data  search  schema 

2
为什么共享状态会降低性能?
我一直在并发编程的“不分担”原则下工作。本质上,我的所有工作线程都具有相同状态的不可变只读副本,它们之间从未共享(即使通过引用)。总体而言,这确实很好。 现在,有人引入了一个无锁单例缓存(例如静态字典),所有线程正在同时访问。由于字典在启动后永远不会更改,因此没有锁。没有任何线程安全问题,但是现在性能下降了。 问题是...由于没有锁,为什么引入此单例会导致性能下降?幕后到底发生了什么,可以解释这一点? 确认一下,唯一的改变就是访问这个新的单例,我只需注释掉对缓存的调用就可以可靠地重新创建它。

2
使用新的System.Tuple类设计不好吗?
我喜欢System.Tuple的概念,因为它允许我在不实例化新类的情况下在单个函数调用中返回多个参数,但这是否违反了Microsoft的Patterns&Practices,SOLID Principles等任何良好的编程习惯。 我只是试图确定我应该使用该功能的自由度,还是仅在必要时在极端情况下使用它。

4
动态语言中的继承vs mixins?
什么时候应该使用继承模式而不是动态语言中的mixins? 所谓混入,是指实际正确混入,例如在运行时将函数和数据成员插入对象中。 例如,什么时候使用原型继承而不是mixins?为了更清楚地说明我的意思,mixin,一些伪代码: asCircle(obj) { obj.radius = 0 obj.area = function() { return this.radius * this.radius * 3.14 } myObject = {} asCircle(myObject) myObject.area() // -> 0

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.