软件工程

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

3
使用堆栈表示函数调用语义的替代方法有哪些?
我们都知道并喜欢函数调用通常是使用堆栈来实现的。有框架,返回地址,参数等等。 但是,堆栈是实现细节:调用约定可能会做不同的事情(例如,x86快速调用使用(某些)寄存器,MIPS和跟随器使用寄存器窗口,等等),优化甚至可以做其他事情(内联,帧指针省略,尾调用优化..)。 当然,许多机器(如JVM和CLR这样的VM,以及带有PUSH / POP等的x86等实际机器)上都存在方便的堆栈指令,可以很方便地将其用于函数调用,但是在某些情况下,这是可能的以不需要调用堆栈的方式进行编程(我在这里考虑的是Continuation Passing Style,或者消息传递系统中的Actor) 因此,我开始感到奇怪:是否可以在没有堆栈的情况下实现函数调用语义,或者更好地使用不同的数据结构(可能是队列,或者是关联映射?) ,当然,我知道堆栈非常有用。方便(它无处不在的一个原因),但是最近我碰到了一个使我感到奇怪的实现。 你们是否知道是否曾经用任何语言/机器/虚拟机完成过这项工作?如果有的话,有哪些显着的区别和缺点? 编辑:我的直觉是不同的子计算方法可以使用不同的数据结构。例如,lambda演算不是基于堆栈的(函数应用程序的想法通过简化来体现),但是我正在查看一种真实的语言/机器/示例。这就是为什么我要问...

4
用代码记录数学逻辑
有时,尽管不是经常,但我必须在代码中包含数学逻辑。所使用的概念大多非常简单,但是生成的代码却不是-许多目的不明确的变量,以及某些意图不那么明显的操作。我的意思并不是说代码不可读或不可维护的,只是它的waaaay难度比实际的数学题理解。我尝试评论最难理解的部分,但存在与仅对其进行编码相同的问题- 文本不具有数学的表达能力。 我正在寻找一种更有效且易于理解的方式来解释某些复杂代码(最好是代码本身)背后的逻辑。我考虑过TeX-编写文档并将其与代码分开生成。但是然后我必须学习TeX,并且文档本身也不会包含在代码中。我想到的另一件事是对写在纸/白板上的数学符号,方程式和图表进行拍照,并将其包含在javadoc中。 有没有更简单明了的方法? PS给变量赋予描述性名称(timeOfFirstEvent而不是t1)实际上会使代码更冗长,甚至更难阅读。

3
QT-C ++与通用C ++和STL [关闭]
关闭。这个问题是题外话。它当前不接受答案。 想改善这个问题吗? 更新问题,使它成为软件工程堆栈交换的主题。 5年前关闭。 最近在Ubuntu QQ上刷了我的C ++。我喜欢所有事物的Qt框架,尤其是构建GUI的框架。在过去几年中使用PyQt时,我对它非常熟悉。 当使用PyQt时,我遇到了一些问题,现在将C ++与Qt一起使用时,问题更加明显:Qt对Qt特定的C ++有很多扩展 -QString只是一个常见的例子,更不用说自动垃圾收集了。完全不了解C ++和STL的情况下,可以使用C ++编写Qt应用程序。 我可能很快就要再次进入就业市场,我希望能够考虑C ++的职位-但我担心自己过多地与Qt绑定会限制我使用通用C ++的能力,这曾经非常强大,但是现在长期处于休眠状态且生锈。 我应该避免Qt吗?使用WxWidgets或GTK ++构建GUI会更好吗? 什么是可以使用的最佳GUI框架,该框架允许/要求最多使用通用C ++和STL?在GUI框架等方面,我如何使自己作为C ++程序员最有市场价值?
19 c++  qt  stl  gtk  pyqt4 

3
有哪些算法可以为图形上的绘图线选择颜色?
我对可以以编程方式实现的用于生成绘图线的RGB或HSV颜色,以使其在视觉上与相邻像素不同的算法或规则感兴趣。 我知道在专业地图制作中,有一些算法或规则可确保地图上没有两个相邻的国家/地区使用相同的颜色。我也可以认为Microsoft Office Excel可以为绘图线(红色,蓝色,紫色/橙色)选择良好的色调/阴影。 这是我正在谈论的示例-我需要为黑色背景上的12条线生成颜色。我使用网络安全的RGB颜色代码手动对此处的颜色进行了硬编码。当这些线重叠时会出现问题-很难分辨是看着紫色,还是略深的紫色或紫色。我正在寻找一种更好的算法来为此类绘图线生成颜色。 这是一个使用Flot绘图库进行jQuery的示例,它具有一系列漂亮的图形颜色:
19 algorithms  color 

2
Scala中的Nothing是其他所有类型的子类型
我正在上马丁·奥德斯基(Martin Odersky)的scala函数编程课程,到目前为止,我已经学到了两件事,但它们没有任何意义: Scala不支持多重继承 Nothing 是其他所有类型的子类型 这两个语句不能同时存在,那么这是如何完成的呢?“其他类型的子类型”到底是什么意思 编辑1 在Scala API中,Nothing其定义为abstract final class Nothing extends Any...那么如何扩展其他类?

4
属性的XML文档中是否需要“获取或设置..”?
我正在寻找有关C#中XML注释的最佳实践的建议。创建属性时,预期的XML文档似乎具有以下形式: /// <summary> /// Gets or sets the ID the uniquely identifies this <see cref="User" /> instance. /// </summary> public int ID { get; set; } 但是,因为该属性的签名已经告诉您该类的外部客户端可以进行哪些操作(在这种情况下,这两个操作都是get和set),所以我觉得注释太闲谈了,也许以下内容就足够了: /// <summary> /// ID that uniquely identifies this <see cref="User" /> instance. /// </summary> public int ID { get; set; } Microsoft使用第一种形式,因此这似乎是一个隐含约定。但是我认为由于我所说的原因,第二种更好。 我知道此问题很容易被标记为非建设性的,但是必须评论的属性数量巨大,因此我相信这个问题有权解决。 …

6
一种编程语言,允许您为简单类型定义新的限制
许多语言一样C++,C#和Java允许你创建表示简单类型,如对象integer或float。使用类接口,您可以覆盖运算符并执行逻辑,例如检查值是否超过业务规则100。 我想知道在某些语言中是否可以将这些规则定义为变量/属性的注释或属性。 例如,C#您可能会写: [Range(0,100)] public int Price { get; set; } 或者也许C++您可以这样写: int(0,100) x = 0; 我从未见过这样的事情,但是鉴于我们在存储之前对数据验证的依赖程度。奇怪的是,该功能尚未添加到语言中。 您能否举例说明可能的语言?

3
Java中异常的后缀Exception
在异常类上指定Exception的后缀感觉对我来说像是代码的味道(冗余信息-名称的其余部分表示错误状态,并且它继承自Exception)。但是,似乎每个人都这样做,这似乎是一种好习惯。 我想了解为什么这是个好习惯。 我已经阅读并阅读了以下问题:为什么异常通常在类名中带有后缀异常 问题是针对PHP,而响应可能对Java有效。还有其他论点吗?或者真的和区分它们一样简单吗? 如果我们从上一个问题中选取示例,那么java中是否确实存在名称FileNoFound并非例外的类?如果可能的话,是否应该加上后缀Exception? 纵观eclipse的快速层次结构Exception,可以肯定的是,它们中的绝大多数确实有例外后缀,但也有一些例外。javassist是一个库的示例,该库似乎有一些没有后缀的异常-例如BadByteCode,BadHttpRequest等。 BouncyCastle 是另一个lib,但有例外 CompileError 我在Google上搜索的信息也很少。

5
乔达时间vs Java时间
尽管Joda具有丰富的功能,并且比标准Java时间更为复杂,但它不一定总是最好的使用方式。如何确定在任何Java代码中应使用Joda Time还是Java Time? 是否有某种准则可以告诉我们如何根据我们的要求选择合适的准则?
19 java  api  joda-time 

1
如何包括第三方Maven依赖项的许可证?
我正在为我的Java项目生成一个可分发的二进制文件。我以两种方式发布它: Maven中央 可在Google代码上分发的压缩文件 我的项目已获得Apache 2.0许可。我使用少数第三方,其中之一是MIT许可的。我认为有义务根据许可证中的以下文本,使我的项目用户了解许可证的内容: 以上版权声明和本许可声明应包含在本软件的所有副本或大部分内容中。 我如何最好地在我的来源和可分发内容中引用此内容?我目前在想: 我的源文件不需要引用任何内容。它们只是包括我的Apache 2.0样板公告。 我在项目的根目录中添加了LICENSE.txt文件,其中包括Apache 2.0许可证文本。 对于我的压缩可分发文件,我还需要添加一些内容,以表明组件已获得MIT许可。也许是NOTICE文件? 对于我的Maven Central发行版,我不需要做任何事情,因为我的工件只是声明了它的依赖项,而实际上并没有包括它们。 这看起来像是有效的计划吗?如果是这样,任何人都可以建议如何完成第3点。

6
何时支付C ++编译器费用[关闭]
已关闭。这个问题是基于观点的。它当前不接受答案。 想改善这个问题吗?更新问题,以便通过编辑此帖子以事实和引用的形式回答。 5年前关闭。 最近,我开始怀疑开发人员何时应该为编译器付费。大多数平台都免费提供编译器,或者容易获得免费版本。 例: OS X-开发人员工具随附GCC和Clang / LLVM。对于如何使用它们以及在其中得到什么,这里没有任何限制。 Linux-GCC,我敢肯定。我不知道linux编译器的当前状态。对于如何使用它们以及在其中得到什么,这里没有任何限制。 Windows-MinGW和Microsoft确实提供了Visual Studio的免费版本。MinGW没有任何限制,但我认为免费的Visual Studio存在严重的限制。 但是,例如,英特尔生产C / C ++编译器。他们的价格很高。在教育方面,我认为可以以49美元的价格获得OS X版本,以129美元的价格获得Windows / Linux。然后,他们也提供完整的“ Studio”产品。显然,使用教育定价会受到限制。 但是我想知道的是,何时应该真正考虑为编译器付费。我能想到的一个例子是电子游戏。如果您使用的是可在主要平台上运行的编译器,则该平台将不再有切换工具。如果工具相同,在平台之间切换似乎会很容易。 任何人都可以在支付诸如英特尔编译器之类的编译器费用方面获得一些启示,以及使用它们可能获得的真正的跨平台收益吗?即使非常努力地不使用平台特定的技术,代码的可移植性也会降低吗?
19 c++  compiler 

6
当数百名开发人员正在开发一个解决方案时的开发方法?
我们是一个由大约200名开发人员组成的组织,他们正在不断开发单个产品(使用版本控制Git),并计划在某个日期发布该产品。 由于开发人员数量众多,我们正在尝试创建“跨职能”团队,每个团队中约有10个开发人员,因此组织中大约有20个开发团队。 由于我们希望在主存储库中保持产品的连续“高标准”(意味着当开发人员进行拉动时,产品至少应是可编译的,等等),因此我们想使用某种质量保证。 我不太确定如何表达这个问题,但是我想知道是否可以为如此大量开发单个产品的开发人员提供一些开发方法的建议。 我们认为,范围的一端是允许每个开发人员直接提交到主存储库,但是我们担心由于开发人员/提交的数量过多,“主存储库”可能一直处于崩溃状态,这是由于我们不能为每次提交都提供苛刻的“质量门”。 频谱的另一端可能像是树或金字塔结构(我们认为是Linus Torvalds / Linux做到了),其中“主存储库”仅具有三个拉取源,这三个仅具有少数受信任的拉取源,依此类推但是,我们认为,采用这样的结构,为了进入“主存储库”,更改需要爬很长的链。另外,如果发生合并冲突,问题将落在“原始开发人员”之外的其他开发人员上。 陈述了所有这些背景信息和意见后,我们如何才能学习和阅读针对众多开发人员的推荐开发方法?大型组织(Microsoft,Facebook,Ubuntu等)如何组织其发展?



3
解耦胜过REST中的DRY吗?
我正在构建REST API,以公开现有Java API的大部分功能。这两个API都供我的组织内部使用;我不必为外部使用而设计。我对这两种API都有影响,但是正在实现REST。Java API将继续用于本地应用程序(不会“淘汰”),但是REST API将用于重大的新开发。 一些Java API类只是数据(带有属性,getter,setter的bean)。并且至少其中一些有意义的是通过REST API以某种形式(作为数据(将被编组为XML或JSON))进行传输。例如,一个存储有关服务器计算机信息的类。对于这些数据类,我面临以下选择:我是否... 直接在REST API中公开原始Java类(或子类),或者 专门为REST API创建新的数据传输类(DTO模式)? 无论哪种方式,我都会有REST数据传输类。问题是是要注释原始文件还是创建新的文件(可能是原始文件的副本)。可能还有其他选择,但我将主要关注这两个。 #1的参数: 干(不要重复自己) 实施更快 升级REST API更容易 #2的参数: 如果REST API需要与Java API分开版本,该怎么办?(这很有可能。) 如果Java数据类发生重大更改(例如,删除属性,添加行为或更改类层次结构)怎么办?(这也有可能。) 底线是,似乎在DRY(#1)和去耦(#2)之间进行了权衡。 我倾向于从#1开始,然后如果出现问题,然后再转到#2,请遵循不构建无法证明自己需要的敏捷指导。这是一个坏主意吗; 如果我认为我最终还是会从那里开始,我应该从#2开始吗? 我的清单中是否缺少主要的论据/后果?
19 java  api  rest  coupling  dry 

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.