我正在尝试衡量我们组织中产生的代码中有多少实际上是可重用的,我想制定一些指导方针。我想对外部世界有一些参考:
通常在单个应用程序中重用多少代码?更具体地说 - 如果我们考虑一个完整的最终用户产品的所有代码(并最终排除第 3 方库),从多个地方调用多少函数和方法?
哪些指标用于衡量代码可重用性?开源和/或闭源软件是否有可用的数字或研究?
我想知道是否有工具可以
最终,我希望根据线程在运行时(多线程代码覆盖工具)之间如何相互交互来进行代码覆盖,以便找到潜在的多线程错误.
如果我没有清楚地解释我的问题,我很抱歉,我很乐意提供任何细节.
我有一个"遗留"代码,我想重构.
代码基本上是对服务器的远程调用并获得回复.然后根据回复执行相应的.
代码骨架示例:
public Object processResponse(String responseType, Object response) {
if(responseType.equals(CLIENT_REGISTERED)) {
//code
//code ...
}
else if (responseType.equals(CLIENT_ABORTED)) {
//code
//code....
}
else if (responseType.equals(DATA_SPLIT)) {
//code
//code...
}
etc
Run Code Online (Sandbox Code Playgroud)
问题是有许多if/else分支,并且每个内部的代码都不是微不足道的.
因此很难维护.
我想知道这个最好的模式是什么?
我有一个想法是创建一个方法名称与responseType相同的单个对象,然后在processResponse内部使用反射调用与responseType同名的方法.
这将清理processResponse,但它会将代码移动到具有许多/多种方法的单个对象,我认为反射会导致性能问题.
是否有一个很好的设计方法/模式来清理它?
称我为史前,但我正在尝试使用在 UTF8 html 页面中编码的 XHTML 文档类型,其中包含带有一些 unicode 换行符 u2028 的文本的 PRE 标记。
Firefox 至少似乎不支持 u2028 作为 PRE 块中的换行符。将字符更改为 u000D 或 u000a 似乎会产生我期望的换行符。(从技术上讲,u2028 以 UTF8 编码为 3 字节序列,但我假设它在读取时已标准化)。我还没有用其他浏览器测试过这个。
我尝试深入研究 HTML 上的 W3C 文档,但无法从 PRE 部分中准确找出哪些字符被视为换行符。PRE 中关于换行符的具体解释在哪里?u2028 是否被如此对待,因为 Firefox 有缺陷,或者 HTML 标准脑死亡,在 Unicode 文件中找到 u2028 时不将 u2028 解释为换行符?
对我来说,包含 unicode 的文本(例如源代码)文件不会使用 u2028 作为换行符的标准(我实际上有一个代码生成器可以生成这样的源代码,并且我正在尝试显示该代码),这似乎很奇怪在 HTML 页面中)。因此,将这样的代码直接放入 PRE 块中,我认为会产生我期望的行为。
我有一个C++/CLI项目,它使用CWinFormsControl和CWinFormsView在我的MFC视图中创建.NET控件.要做到这一点,我需要#include"afxwinforms.h".
当我在项目上运行代码分析时,我总是得到关于我所包含的一些MFC类的警告.例子:
3>Running Code Analysis...
3>c:\program files\microsoft visual studio 9.0\vc\atlmfc\include\afxwinforms.h(87) : warning: CA1704 : Microsoft.Naming : In method 'CWin32Window::CWin32Window(HWND__*)', correct the spelling of 'Wnd' in parameter name 'hWnd' or remove it entirely if it represents any sort of Hungarian notation.
3>c:\program files\microsoft visual studio 9.0\vc\atlmfc\include\afxwinforms.h(87) : warning: CA1704 : Microsoft.Naming : In method 'CWin32Window::CWin32Window(HWND__*)', correct the spelling of 'h' in parameter name 'hWnd' or remove it entirely if it represents any sort of Hungarian notation.
3>warning: CA1051 : Microsoft.Design : …Run Code Online (Sandbox Code Playgroud) mfc code-analysis c++-cli suppress-warnings visual-studio-2008
这是一个检查内存分配的简单程序.使用任务管理器检查值之前和之后建议每个动态数组占用大小为1的20字节内存.元素大小为4,这意味着簿记数据的开销为16字节.
从查看system.pas,我可以找到一个-4字节的数组长度字段,以及-8字节的引用计数,但我似乎找不到任何对其他的引用8.任何人都知道他们做了什么?
示例程序:
program Project1;
{$APPTYPE CONSOLE}
type
TDynArray = array of integer;
TLotsOfArrays = array[1..1000000] of TDynArray;
PLotsOfArrays = ^TLotsOfArrays;
procedure allocateArrays;
var
arrays: PLotsOfArrays;
i: integer;
begin
new(arrays);
for I := 1 to 1000000 do
setLength(arrays^[i], 1);
end;
begin
readln;
allocateArrays;
readln;
end.
Run Code Online (Sandbox Code Playgroud) 我想了解解析器是如何工作的。我了解了 LL、LR(0)、LR(1) 部分、如何构建、NFA、DFA、解析表等。
现在的问题是,我知道词法分析器应该仅在某些情况下根据解析器的需求提取标记,当不可能在一次单独的传递中提取所有标记时。我不太明白这种情况,所以我愿意接受任何解释。
现在的问题是,词法分析器应该如何完成其工作?它是否应该将其识别基于当前的“上下文”,即当前应该解析的非终结符?这是完全不同的东西吗?GLR 解析怎么样:这是词法分析器可以尝试不同终端的另一种情况,还是只是一个语法业务?我还想了解它与什么相关,例如它与解析技术的类型(LL、LR 等)相关还是仅与语法相关?
多谢
我构建了分析源代码的工具.这些工具必须正确读取源代码文件,特别是在字符编码方面.例如,"字符串文字中的精确字节串是什么?" (PHP文字和HTML文本).
我可能错误的理解是PHP源文件只是8位字符(也就是说,PHP引擎以这种方式读取它们,因为它们只应该包含8位字符).但是,八位字符在哪个编码?(我认为打算匹配ISO-8859-1(-x?)[有人可以引用章节和经文吗?].也就是说,变音符号是一个变音符号,对吗?接下来,可以用HTML编写PHP脚本和大多数欧洲国家的字符串/字符集直接.
但很明显,Unicode存在问题.据我所知,大多数PHP应用程序主要通过包含UTF-8字节序列的字符串来处理Unicode,这些字符串可以插入8位PHP字符串中.在此之后,如果您告诉服务器您正在生成UTF-8文本,则可以生成其HTML包含Unicode UTF-8序列的脚本.
对于上述情况,可以将PHP文件读取为8位字符文本,这似乎与我的语言相匹配.
令我困惑的是编码为UTF-8的PHP源文件(Joomla软件包有大约1800个源文件,其中大约10个是UTF-8,其余的不是).在UTF-8渲染中正确显示的任何(非ASCII)欧洲字符实际上都被编码为多字节序列.我认为这些用作UTF-8的页面将正确呈现HTML.但是,在文本编辑器中显然正确呈现的欧洲字符或其他Unicode字符的任何字符串比较都是行不通的.字符串文字不包含它们似乎包含的内容.程序员是否使用UTF-8文件,因为这是编辑提供的?他们是故意这样做的吗?或者只是一场对大多数工作无关紧要的事故?
那么,如何读取PHP源文件呢?(特别是,在什么字符编码?)一个可能的答案是,始终作为ISO-8859-1 8位代码,无论实际内容或BOM(我看到很多UTF-8 BOM标记的PHP文件).另一个答案是UTF-8,如果这样标记的话.
[我们的工具读写任意编码."普通"工具是读取文件一个字符的编码,在另一个编码中写入相同的代码点.以这种方式读取UTF-8 PHP文件会让我们在编写ISO8859-1等效文件时遇到麻烦,因为许多UTF-8代码点(例如,欧元符号)无法在ISO8859-x中编码.
编辑8月30日:我们现在检查PHP文件以查看是否具有UTF-8 BOM,或者看起来是否具有合法的UTF-8序列.在这两种情况中,我们将文件读为UTF-8; 否则我们默认将其读作ISO8859-1.我们现在保留文件编码,如果我们修改它.(正确的做法是相当多的工作).这似乎是一种安全策略,但这可能与PHP程序员所期望的不同.
我要复制大量文件(10000个文件)
因为复制需要很长时间.我尝试使用两个线程而不是单个线程,一个用于复制列表中的奇数文件,另一个用于复制列表中的偶数
我用过这段代码:
ThreadPool.QueueUserWorkItem(new WaitCallback(this.RunFileCopy),object)
Run Code Online (Sandbox Code Playgroud)
但是在使用单线程和使用两个线程时,时间上没有显着差异.
这可能是什么原因?
我有一个在 Intel 和 AMD x86 机器上运行的应用程序的 MASM 同步代码。
我想使用 Intel TSX 前缀来增强它,特别是 XACQUIRE 和 XRELEASE。
如果我为 Intel 正确修改了我的代码,当我尝试在 AMD 机器上运行它时会发生什么?英特尔表示,它们被设计为向后兼容,这大概意味着它们在没有 TSX 的英特尔 CPU 上什么都不做。
我知道 AMD 还没有实施 TSX。但是这些前缀在 AMD CPU 上运行是否安全?这种行为是否记录在 AMD 手册中的某处,还是假设这是安全的并且永远是安全的?
x86 assembly backwards-compatibility amd-processor intel-tsx
assembly ×1
c# ×1
c++-cli ×1
call-graph ×1
code-reuse ×1
deadlock ×1
delphi ×1
file-copying ×1
grammar ×1
html ×1
intel-tsx ×1
io ×1
iso-8859-1 ×1
java ×1
lexer ×1
line-breaks ×1
lr-grammar ×1
methodology ×1
metrics ×1
mfc ×1
oop ×1
overhead ×1
parsing ×1
php ×1
pre ×1
refactoring ×1
syntax ×1
testing ×1
unicode ×1
utf-8 ×1
x86 ×1