编译点滴 http://www.lingcc.com 编译器、虚拟机、程序设计语言、体系结构、软件调试、操作系统等等 Sat, 04 Feb 2012 06:56:05 +0000 en hourly 1 http://wordpress.org/?v=3.3.1 PLDI 2012 List of Accepted Papers http://www.lingcc.com/2012/02/04/11985/ http://www.lingcc.com/2012/02/04/11985/#comments Sat, 04 Feb 2012 00:11:48 +0000 erlv http://www.lingcc.com/?p=11985 [...]

相关文章:

]]>
List of Accepted Papers 论文收录

* The acceptance of a few additional papers is still pending

 

Compiling a High-Level Language for GPUs (via Language Support for Architectures and Compilers)
Christophe Dubach12, Perry Cheng1, Rodric Rabbah1, David F. Bacon1, Stephen Fink1
1IBM, 2University of Edinburgh

 

Synchronising C/C++ and POWER
Susmit Sarkar1, Mark Batty1, Scott Owens1, Kayvan Memarian1, Peter Sewell1, Luc Maranget2, Jade Alglave3, Derek Williams4
1University of Cambridge, 2INRIA, 3University of Oxford, 4IBM

 

Static Analysis and Compiler Implementation of Idempotent Processing
Marc Kruijf, Karthikeyan Sankaralingam, Somesh Jha
University of Wisconsin – Madison

 

Adaptive Input-aware Compilation for Graphics Engines
Mehrzad Samadi1, Amir Hormati2, Mojtaba Mehrara1, Scott Mahlke1
1University of Michigan, 2Microsoft Corporation

 

Automated Error Diagnosis Using Abductive Inference
Isil Dillig1, Thomas Dillig1, Alex Aiken2
1College of William & Mary, 2Stanford University

 

Multicore Acceleration of Priority-Based Schedulers for Concurrency Bug Detection
Santosh Nagarakatte1, Sebastian Burckhardt2, Milo M K Martin1, Madanlal Musuvathi2
1University of Pennsylvania, 2Microsoft Research

 

RockSalt: Better, Faster, Stronger SFI for the x86
Greg Morrisett1, Gang Tan2, Joseph Tassarotti1, Jean-Baptiste Tristan1, Edward Gan1
1Harvard University, 2Lehigh University

 

Fast and Precise Hybrid Type Inference for JavaScript
Brian Hackett1, Shu-yu Guo2
1Mozilla Corporation, 2University of California, Los Angeles

 

Fully Automatic and Precise Detection of Thread Safety Violations
Michael Pradel, Thomas Gross
ETH Zurich

 

The Implicit Calculus: A New Foundation for Generic Programming
Bruno Oliveira1, Tom Schrijvers2, Wontae Choi1, Wonchan Lee1, Kwangkeun Yi1
1Seoul National University, 2Universiteit Gent

 

Sound and Precise Analysis of Multithreaded Programs through Schedule Specialization
Jingyue Wu, Yang Tang, Gang Hu, Heming Cui, Junfeng Yang
Columbia University

 

Effective Parallelization of Loops in the Presence of I/O Operations
Min Feng, Rajiv Gupta, Iulian Neamtiu
University of California, Riverside

 

Input-Sensitive Profiling
Emilio Coppa, Camil Demetrescu, Irene Finocchi
Sapienza University of Rome

 

Type-Directed Completion of Partial Expressions
Daniel Perelman1, Sumit Gulwani2, Tom Ball2, Dan Grossman1
1University of Washington, 2Microsoft Research Redmond

 

Synthesising graphics card programs from DSLs
Luke Cartey, Rune Lyngsø, Oege Moor
University of Oxford

 

Reasoning about Relaxed Programs
Michael Carbin, Deokhwan Kim, Sasa Misailovic, Martin C. Rinard
MIT Computer Science and Artificial Intelligence Laboratory

 

Parallelizing Top-Down Interprocedural Analyses
Aws Albarghouthi1, Rahul Kumar2, Aditya Nori3, Sriram Rajamani3
1University of Toronto, 2Microsoft Corporation, 3Microsoft Research India

 

Concurrent Data Representation Synthesis
Peter Hawkins1, Alex Aiken1, Kathleen Fisher2, Martin Rinard3, Mooly Sagiv4
1Stanford University, 2Tufts University, 3MIT Computer Science and Artificial Intelligence Laboratory, 4Tel-Aviv University

 

Diderot: A Parallel DSL for Image Analysis and Visualization
Charisee Chiw, Gordon Kindlmann, John Reppy, Lamont Samuels, Nick Seltzer
University of Chicago

 

A Dynamic Program Analysis to find Floating-Point Accuracy Problems
Florian Benz1, Sebastian Hack1, Andreas Hildebrandt2
1Saarland University, 2Johannes-Gutenberg UniversitÄt Mainz

 

Self-Stabilizing Java
Yong hun Eom, Brian Demsky
University of California, Irvine

 

Race Detection for Web Applications
Boris Petrov1, Martin Vechev2, Manu Sridharan3, Julian Dolby3
1Sofia University, 2ETH Zurich, 3IBM T.J. Watson Research Center

 

Engage: A Deployment Management System
Jeffrey Fischer1, Rupak Majumdar2, Shahram Esmaeilsabzali2
1Genforma Corp., 2MPI-SWS

 

Understanding and Detecting Real-World Performance Bugs
Guoliang Jin1, Linhai Song1, Xiaoming Shi1, Joel Scherpelz2, Shan Lu1
1University of Wisconsin, Madison, 2Nvidia

 

And Then There Were None: A Stall-Free Real-Time Garbage Collector for Reconfigurable Hardware
David F. Bacon, Perry Cheng, Sunil Shukla
IBM Research

 

Polyhedra Scanning Revisited
Chun Chen
University of Utah

 

Dynamic Trace-Based Analysis of Vectorization Potential of Applications
Justin Holewinski, Ragavendar Ramamurthi, Naznin Fauzia, Mahesh Ravishankar, Louis-Noel Pouchet, Atanas Rountev, P. Sadayappan
Ohio State University

 

Automated Synthesis of Symbolic Instruction Encodings from I/O Samples
Patrice Godefroid1, Ankur Taly2
1Microsoft Research, 2Stanford University

 

Parcae: A System for Flexible Parallel Execution
Arun Raman1, Ayal Zaks2, Jae W. Lee 3, David I. August1
1Princeton University, 2IBM Research, 3Sungkyunkwan University

 

Dynamic Synthesis for Relaxed Memory Models
Feng Liu1, Nayden Nedev1, Nedyalko Prisadnikov2, Martin Vechev3, Eran Yahav4
1Princeton University, 2Sofia University, 3ETH Zurich, 4Technion

 

Language-Based Control and Mitigation of Timing Channels
Danfeng Zhang, Aslan Askarov, Andrew Myers
Cornell University

 

A Compiler Framework for Extracting Superword Level Parallelism
Jun Liu, Yuanrui Zhang, Ohyoung Jang, Wei Ding, Mahmut Kandemir
The Pennsylvania State University

 

Algorithmic Profiling
Dmitrijs Zaparanuks, Matthias Hauswirth
University of Lugano

 

Reagents: Expressing and Composing Fine-grained Concurrency
Aaron Turon
Northeastern University

 

Janus: Exploiting Parallelism via Hindsight
Omer Tripp1, Roman Manevich2, John Field3, Mooly Sagiv1
1Tel Aviv University, 2The University of Texas at Austin, 3Google

 

Deterministic Parallelism via Liquid Effects
Ming Kawaguchi, Patrick Rondon, Alexander Bakst, Ranjit Jhala
UC San Diego

 

Chimera: Hybrid Program Analysis for Determinism
Dongyoon Lee, Peter Chen, Jason Flinn, Satish Narayanasamy
University of Michigan, Ann Arbor

 

Scalable and Precise Dynamic Datarace Detection for Structured Parallelism
Raghavan Raman1, Jisheng Zhao1, Vivek Sarkar1, Martin Vechev2, Eran Yahav3
1Rice University, 2ETH Zurich, 3Technion

 

Synthesizing Software Verifiers from Proof Rules
Sergey Grebenshchikov1, Nuno Lopes2, Corneliu Popeea1, Andrey Rybalchenko1
1Technical University Munich, 2INESC-ID / IST – TU Lisbon

 

Speculative Separation for Privatization and Reductions
Nick P. Johnson1, Hanjun Kim1, Prakash Prabhu1, Ayal Zaks 2, David I. August1
1Princeton University, 2IBM Haifa Research Lab

 

SuperC: Parsing All of C by Taming the Preprocessor
Paul Gazzillo, Robert Grimm
New York University

 

Type-Directed Automatic Incrementalization
Yan Chen, Joshua Dunfield, Umut A. Acar
Max Planck Institute for Software Systems

 

Efficient State Merging in Symbolic Execution
Volodymyr Kuznetsov, Johannes Kinder, Stefan Bucur, George Candea
EPFL

 

Design and Implementation of Sparse Global Analyses for C-like Languages
Hakjoo Oh, Kihong Heo, Wonchan Lee, Woosuk Lee, Kwangkeun Yi
Seoul National University

相关文章:

]]>
http://www.lingcc.com/2012/02/04/11985/feed/ 0
中科院计算所岗位招聘(编译方向) http://www.lingcc.com/2012/02/01/11973/ http://www.lingcc.com/2012/02/01/11973/#comments Wed, 01 Feb 2012 10:13:11 +0000 erlv http://www.lingcc.com/?p=11973 您可能也喜欢: IBM上海招聘编译器开发及测试人员 不仅仅是“屠龙之技”-编译器开发者的精神胜利! Pathscale招聘Fortran编译器背景工程师 Chicago的编译器职位 并行计算前景-摘要 无觅

相关文章:

]]>
工作地点:北京海淀区科学院南路6号,中国科学院计算技术研究所
单位网站:www.ict.ac.cn
部门:计算机系统结构重点实验室

岗位职责: 从事C/C++/Fortran优化编译器的开发与调试
具体包括:
1. 编译优化的设计和开发
2. 面向异构多核的编译系统的设计和开发

岗位要求:
1. 计算机相关专业本科以上学历,对计算机系统结构有深入理解者优先。
2. 熟悉C/C++编程,熟悉Linux操作系统者优先。
3. 熟悉GCC/Open64/LLVM编译器者优先, 有编译相关工作经验者优先。
4. 熟悉一种或多种脚本语言优先。
5. 同时接受校招与社招。

其他要求:
1. 做事认真负责,具有强烈的责任心。
2. 具有团队意识,较强的沟通能力。
3. 有敬业和钻研技术的精神。
4. 有较强的英文阅读和写作能力。

有意者请将简历以附件形式发送至 lianruiqi@ict.ac.cn,邮件主题:(姓名)应聘编译开发职位。
符合职位要求者单位会电话通知尽快安排面试。

附:计算所&&计算所机体系结构实验室简介

中国科学院计算技术研究所是中国第一个专门从事计算机科学技术综合性研究的学术机构。在这里工作或学习过的院士有二十余位,先后获得国家、院、市、部级重大科技奖励194项。曙光高性能计算机和龙芯通用处理器均在这里诞生。

计算机体系结构实验室是我国在计算机体系结构方面唯一的一个国家重点实验室。实验室主要研究方向:高端计算体系结构;微处理器与VLSI;编译和操作系统;测试与容错;非传统体系结构。

发展目标:建设一支高水平、跨学科、结构合理的研究队伍,将学术骨干培养成为所在研究领域中享有国际声誉的科学家,在国际上代表国内最高水平,建立计算机体系结构领域国际一流的科学研究、技术创新和人才培养的基地。

计算所体系结构实验室链接:http://carch.ict.ac.cn/introduction/brief/brief.html

相关文章:

]]>
http://www.lingcc.com/2012/02/01/11973/feed/ 7
大软件的烦恼与编译技术 http://www.lingcc.com/2012/01/30/11974/ http://www.lingcc.com/2012/01/30/11974/#comments Mon, 30 Jan 2012 07:26:15 +0000 erlv http://www.lingcc.com/?p=11974 [...]

相关文章:

]]>
现在虽说卖硬件的比不上卖软件的,卖软件的比不上卖服务的。但软件仍然是服务的基石。
而且不管是软件、硬件、还是服务,背后都是一行行的代码,以及基于这些代码所形成的软件功能、硬件系统、技术人员的经验等等。
这些代码有的用C/C++、Java、C#写,有的用PHP、JavaScript、Ruby写,有的用Verilog写。

这些软件往往是公司的看家本领。比如Oracle的 Oracle数据库,Synopsis的EDA工具、Adobe的Photoshop、微软的Windows、Visual Studio等。
软件做的强了,难免要用到许许多多的平台上;用的人多了,又难免会有不停的修修补补。
对于靠编程手艺挣钱养家的各位朋友,相信绝大多数都调过遗产代码中的bug。
也大概都生过“代码太烂、文档太少、逻辑太混乱”的怨念。

年前曾和几位朋友交流了一下基于持续开发好多年的大软件(代码量30多G)上的开发、移植和debug问题。
这篇文章试图基于这次交流,结合自己的经验和认识,给出一些利用编译技术解决相关问题的方式。
虽然自己也是在大软件上开发,但因为尚未走出校园,所接触的开发也偏重小作坊的方式,了解和应用的手段还非常少,敬请各位不吝指正。

1 为什么会有这些问题?

一个大的软件项目,往往需要许多年的持续开发。虽然开始时,结构、逻辑、模块化都设计的非常好,号称各种情况都考虑到了。
项目文档写了一摞又一摞,但随着开发和测试的进行。都会有不少的bug冒出来,慢慢的缝缝补补越来越多。
原本设计的清清楚楚的逻辑就慢慢在源代码中不那么清晰了,代码的逻辑越来越复杂。

虽然一开始留下详细的设计和说明文档是完全可行的,但接下来的bug修补多数只能留下一些bug report。
要想把软件项目文档和 bug report整合在一起,形成持续更新、体系完整的详细文档,可不是那么容易的事情。
再加上我们在刚刚接触这类代码的时候,面对的是一个一无所知的世界,而看到的一行行代码许多都是针对细致末节的,计算机该如何如何一步步完成任务的详细说明,难懂和怨念也就不奇怪了。

1.1 代码层次上的问题

对于草根软件工程师,咱只能从代码上说了。
大软件意味着巨大的代码量,一般都是上千万行级的代码。
在这茫茫代码中,寻找你此刻想了解的某一段代码的定义、引用和与之相关的所有注释谈何容易?

幸好,有Source Insight、Ctags之类的工具,能让我们稍微找到一点点脉络。
不过当面对Linux、GCC这种跨平台软件时,这些工具也难免会找错函数、变量和类型的定义和引用位置。

另外,软件太大,编译时间也会很长,这也会降低开发速度。
虽然Makefile可以用-jN的方式,多进程同时编译。
不过大软件中,也不都能像GCC、Linux Kernel这样顺利使用-jN编译下来。
至少《编译点滴》博主在使用Gentoo系统的5年多时间里,出现过不少次make -j3有问题,但重新emerge一下就过的情况。
这种情况除了用依赖处理不好来解释外,我还没想到别的。

层层包含的头文件,也让问题的定位越来越难hold。
尤其是某些头文件中的定义又被一堆ifdef的宏扩在一起的时候。
乱七八糟的逻辑关系让人头疼。
虽然编译器可以提供预处理功能,适当的帮我们做些宏展开和完全不相干代码的删除工作。
但巨大的预处理文件,我们也只能从文件最后慢慢的往前找。

要是再来点刺激的并发支持,什么多线程、锁、共享变量。
靠!就能砸了显示器,跑去指着老板的鼻子说:什么破代码,爷不干了。

2 编译技术能作什么

其实,铺垫了这么多,就是一句话,编译技术其实能帮上忙。

编译器想必大家最熟悉的功能就是能将源代码转换成可执行文件。
不过编译器能做的不仅仅是这些。
对于常见的编译型命令式语言(C/C++),编译器理论上可以知道程序的所有行为。
之所以加”编译型、命令式“的定语是因为有些语言却是编译器没办法在编译时刻完全知道所有的行为。
比如 JavaScript语言可以通过eval(string)函数,在程序运行的时刻,重新组织一个Javascript语句的字符串,然后通过调用eval函数执行它。
这个字符串,有可能和输入相关。所以编译器无法在很早的时候知道它的行为。
之所以加上“理论上”,是因为某些分析工作状态空间太大,搜索复杂度太高,没办法在短时间内完成。
比如过程间分析、指针分析之类的代码分析技术,面对上百万、上千万的代码时,可不是一时半会儿能出结果的。

咱们不能只是说说问题有多难就算了,幸好我们已经有了不少的解决方法。
《编译点滴》了解了一些将编译技术应用于协助解决这些问题的领域。
用上编译技术的程序员,会男的更帅、女的更漂亮,早日找到另一半,还能调节心情、预防老年痴呆、避免2012人类灭亡。

2.1 精准的代码定位

这个可能是在阅读源代码时,最最实用的了。
但目前能做到对于大规模软件实用的,除了商业的source insight用于C/C++,其他的《编译点滴》还没怎么听说,欢迎各位朋友建议。

即便是强大的Source Insight,也还要看具体的代码情况。
比如对Open64这种包含不少ifdef宏的代码,即使是source insight,也要再做些针对性的设置才能hold住。
eclipse的CDT基本搞不定(本博主对Eclipse的了解有限,尝试了几次,都不好使,只好放弃)。
ctags也找的很乱,许多时候结果也不靠谱。

但这类代码分析工具就真的无能为力了吗?既然编译器都能编译得到可执行文件。可执行文件能找到正确的函数和变量定义。
那么代码分析工具就完全没有理由做不到这些。stackoverflow有篇文章(参考链接4),对比了若干常用代码阅读工具对待600M以上代码量时的情况.

现在纯粹利用编译器,产生tags信息提供给代码阅读软件使用的工具也有一些。比如GCC MELT、LLVM的libclang。
另外还有些代码库自带了tags生成机制,比如GCC编译时,执行“make tags”命令,就能生成emacs下可以使用的tags信息。
LLVM则一直都通过Doxygen,解析源码中的注释,自动生成代码文档。
这些tags信息的生成背后,都是编译前端的相关理论。

2.2 减小编译时间

代码基太大,编译的时间自然就会很长。修改一个头文件或者Makefile,想看看效果如何,就得重新编译几个小时,这个速度谁都受不了。
于是如何减小编译时间,就是个比较大的问题。

2.2.1 并行编译

比较常用的方式,是并行编译。如“make -jN”。这种方式在多核或者分布式环境中,效果最好。
这种机制最简单方便,因为编译器的输入都是一个个源程序文件,而这些源代码文件间的编译是相互独立的。
所以Makefile提供了并行编译机制,它会自动根据makefile中指定的依赖关系,启动多个编译器进程,同时编译。
一般N个核,启动N+1个进程同时编译效果比较好些。因为这样可以在充分利用多个核的前提下,保证不会有频繁的线程切换开销(参考链接10)。

分布式系统下,使用”make -jN“时,需要配合 distcc来完成。
distcc的基本原理是:预处理和链接阶段,因为和本地的头文件、库关系很大,所以必须在本地完成。
而预处理后文件的编译过程则可以爱在哪儿编,就在哪儿编。
只要编译器的版本相同,给它传递的选项相同,又使用同样的预处理输出文件,那么生成的.o文件一定是相同的。
参考链接11和12是有关的信息。

2.2.2 头文件搜索

我们都学过C语言中”#include“语句的作用是将被include的文件所有内容,在”#include“语句处完整的展开。
不过在大软件的研发中,模块化是很重要的,因此各个头文件的功能分割的很细,而且头文件A可能又include了B,B又include了C。
这样一个连环include之后,导致最后预处理后的文件非常大,而且实际被编译文件可能仅仅是用到了文件C中的某个类型的”typedef“定义而已。
如果这些头文件里定义了许多函数,那这些函数都将会被一一编译,况且头文件还会反复被许多源代码文件包含,于是就存在许多的重复编译。

预编译头文件就是常见的一种优化编译时间的方式(参考链接13,14,15)。Linux系统中,这类文件通常是原头文件名加上”.gch”的后缀。
GCC编译时,进入include文件搜索路径时,会先搜索.gch文件,找不到,再找原头文件。

不过这样还是存在函数重复编译的问题,其实一种最直观的想法是被编译的文件中需要什么,就从头文件中递归的将相关内容include进来。
这样就减小预处理后文件的大小,也就减小了编译时间。这方面有个典型的项目“Include-What-You-Use”(参考链接16)。
这个项目的5个发起人都来自Google,目前该项目处于活跃开发中。它利用clang来实现这一功能。

另外项目开发期,使用-O0编译,不做任何优化,也能提升点编译速度。

2.3 相关学术研究

Zhou Yuanyuan老师率领的研究小组在大软件和软件工程相关方向介绍了很多他们的工作。
并发表了很多高质量,并被工业界、学术界都认可的文章。
和传统的文章不同,周老师的文章基本都是从一个非常明确的实际问题出发。
所以这里《编译点滴》结合自己的知识和了解,介绍一些,并将所有的文章题目列在了最后。
zhou老师基本都会把他的文章直接放在自己的主页(http://cseweb.ucsd.edu/~yyzhou/)里,
所以文章直接Google应该就能搜索到,如果搜索不到的话,可以直接发邮件给我( lingcc@lingcc.com )索取.

除了zhou老师,肯定还有许多其他学者就大软件领域做了很多深入研究,限于《编译点滴》了解有限,无法一一列举。
若其他朋友有相关了解,欢迎提出。

2.3.1 注释检错和纠正

大规模软件通常都非常注重文档和代码的规范性。比如要有文档,要有注释,都要写的很详细等等。
不过在打过成千上百个patch之后,代码能保证正确执行就不错了,谁还管的了注释对不对。
这样久而久之,注释的准确性就很难保证的。
但是新手们在研究一段代码时,都愿意先看看注释,再看代码,那后果就可想而知了。

comment是给人看的,写的偏重自然语言;程序是写给计算机看的,都是形式化的语言。
如何将这两者结合起来,现在还停留在研究阶段。幸好,Lin Tan和Zhou Yuanyuan分享了他们在代码注释上的持续性的工作,比较有意思(参考文献17-21).
《编译点滴》仅仅阅读过参考文献17,主要介绍了他们将自然语言处理和编程语言的前端分析技术结合在一起,找出注释和代码的不符指出。

2.3.2 丰富的程序警告输出

当软件的规模很大时,既要从整体上把握整个软件的整个设计架构,又能在面对bug时能轻轻松松搞定可不是件容易的事情。
因此,为了能尽早的发现bug,很多软件在开发之初,就非常注意断言错的加入。
断言,通常是为了方便调试的考虑,在程序的代码中,预先判断是否满足某些应该满足的条件,若条件不满足时,就该想办法给开发者报告相关问题。

例如对编译器这种复杂的大型系统软件,如果没有丰富的断言机制,那调试起来将是噩梦。
因为你没办法确定在编译的稍前位置增加的某个程序变换,到底会不会带来问题。
如果只能靠最后生成的二进制文件的运行结果来判断编译器是否错误,对于编译器开发人员来说,只有两种结果:有薪水非常高的工作、或者这个世界上只剩下一个编译器。
因为调试太难了.
《编译点滴》博主在Open64上做过一些东西。丰富的断言为开发节约了很多调试时间。

像一些重要的应用程序,比如数据库、操作系统内核这种,相比在开发阶段,报告给程序员的断言。
还有一个比较重要的程序输出就是各种log。这些log也是开发人员用于发现和调试程序很得力的助手。

加个程序输出很容易,但怎么加,加些什么,加在哪里,却不是那么容易搞定的事情。
必要的断言,给程序的调试很有帮助。
但乱加一起,会带来很多的误报。
当然统一的设计这些警告的输出是很重要的。
对于已经基本成型的大型软件,如果在原代码的基础上改进呢?

Zhou Yuanyuan老师的团队最近发表的一篇文章研究了如何在已有大型软件中,让log输出的信息更丰富,方便debug。
想法其实不难,但能想到这一点,并踏踏实实的做出来,很难!(参考文献22-24).

《编译点滴》仅仅听zhou老师讲过他们SherLog的文章。
具体的做法,对于原来不带任何参数的单纯输出一行语句的操作,借助一定的程序分析,和条件判断。
将程序运行到log输出处参与完成程序分支判断的那些变量的值,和log一起输出出来。
这样log、断言错的信息就更加丰富,方便程序员重现和调试问题。
这样的工作,需要运用编译器前端的不少技术,再接和具体的问题。
很有意思。

2.3.3 Patch中的问题

周老师的这篇论文虽然没有用上编译技术,但是《编译点滴》觉得他们的发现很有意思,所以在这里咱们也聊一聊。

软件发布-》发现bug-》打补丁,这个过程几乎是所有发布的软件修复bug的主要方式。
但因为以下三个原因,新打的补丁反而更加的不可靠:

  • 此时bug的修复工作时间要求紧。工程师们不得不顶着很大的时间压力,尽快的修好bug,没有心思去作深入的思考。
    测试工程师的测试因为时间要求紧,也都是草草了事。这带来了很大的bug隐患。
  • 仅仅关注大软件系统中发现bug的那个部分。会花费很大的经历在bug本身,没有机会去考虑整个系统的正确性。
  • 因为大软件有很多的遗产代码,补丁的开发者、审阅者也很难弯曲理解代码和bug。

参考文献25研究了包括Linux、OpenSolaris、FreeBSD等操作系统内核的补丁情况。
所得结论如下:

  • 14.8%-24.4%的补丁是不对的
  • 并发的bug修复最困难,错误率最高。39%的并发bug的补丁是错的。
  • 通常错误的bug补丁来自于开发工程师和代码审阅人对代码本身的了解不够。

3 参考

  1. http://gcc-melt.org/
  2. http://clang-analyzer.llvm.org/
  3. http://stackoverflow.com/questions/5309405/can-i-get-an-xml-ast-dump-of-c-c-code-with-clang-without-using-the-compiler
  4. http://stackoverflow.com/questions/5842650/c-c-source-code-browser-comparison-seeking-opinion.
  5. http://clang.llvm.org/doxygen/group__CINDEX.html
  6. http://stackoverflow.com/questions/7969109/any-c-c-refactoring-tool-based-on-libclang-even-simplest-toy-example
  7. http://www.vim.org/scripts/script.php?script_id=3302
  8. http://eli.thegreenplace.net/2011/07/03/parsing-c-in-python-with-clang/
  9. http://msdn.microsoft.com/en-us/magazine/cc163658.aspx
  10. http://stackoverflow.com/questions/2499070/gnu-make-should-j-equal-number-the-number-of-cpu-cores-in-a-system
  11. http://code.google.com/p/distcc/
  12. http://www.gentoo.org/doc/en/distcc.xml
  13. http://gcc.gnu.org/onlinedocs/gcc/Precompiled-Headers.html
  14. http://msdn.microsoft.com/en-us/library/szfdksca%28v=vs.71%29.aspx
  15. http://gamesfromwithin.com/the-care-and-feeding-of-pre-compiled-headers
  16. http://code.google.com/p/include-what-you-use/
  17. http://dl.acm.org/citation.cfm?doid=1985793.1985796
  18. *icomment: bugs or bad comments?* 2007
  19. HotComments: How to Make Program Comments More Useful? 2007
  20. Listening to programmers — Taxonomies and characteristics of comments in operating system code , 2009
  21. aComment: mining annotations from comments and code to detect interrupt related concurrency bugs, 2011
  22. Improving software diagnosability via log enhancement, ASPLOS 2011
  23. SherLog: error diagnosis by connecting clues from run-time logs. ASPLOS 2010
  24. Understanding Customer Problem Troubleshooting from Storage System Logs. FAST 2009
  25. How do fixes become bugs?. SIGSOFT FSE 2011

相关文章:

]]>
http://www.lingcc.com/2012/01/30/11974/feed/ 0
《编译点滴》恭祝各位龙年大吉 http://www.lingcc.com/2012/01/28/11967/ http://www.lingcc.com/2012/01/28/11967/#comments Sat, 28 Jan 2012 13:46:21 +0000 erlv http://www.lingcc.com/?p=11967 您可能也喜欢:
再见2010,你好2011

关于《编译点滴》的定位和未来

《编译点滴》半年记

永别2011, 你好2012

《编译点滴》的RSS订阅人数突破400
无觅

相关文章:

]]>
龙年的工作日即将开始,《编译点滴》祝所有朋友在新年一年里,事事顺心、万事如意、一帆风顺。

龙年大吉

龙年大吉

相关文章:

]]>
http://www.lingcc.com/2012/01/28/11967/feed/ 0
Open64、LLVM、GCC源代码行数对比 http://www.lingcc.com/2012/01/15/11963/ http://www.lingcc.com/2012/01/15/11963/#comments Sun, 15 Jan 2012 11:59:30 +0000 erlv http://www.lingcc.com/?p=11963 [...]

相关文章:

]]>
使用如下命令,统计了一下这三个编译器的代码行数情况。
find . -type f -not -regex '\./\.git.*' | xargs cat | wc -l

结果如下,供参考。这三个编译器使用的都是各个代码库中的最新版本,因为《编译点滴》使用git svn工具,所以命令行里有“git”,而标明的版本号却是SVN的。
Open64(SVN R3782):

open64$ find . -type f -not -regex '\./\.git.*' | xargs cat | wc -l
13164644

LLVM(LLVM R148206, 包含Clang  ):
llvm$ find . -type f -not -regex '\./\.git.*' | xargs cat | wc -l
2468255

GCC(R183190):
gcc$ find . -type f -not -regex '\./\.git.*' | xargs cat | wc -l
12823155

相关文章:

]]>
http://www.lingcc.com/2012/01/15/11963/feed/ 2
除夕夜看春晚?你OUT了!搞ACM,挣奖金吧。 http://www.lingcc.com/2012/01/15/11952/ http://www.lingcc.com/2012/01/15/11952/#comments Sun, 15 Jan 2012 07:47:28 +0000 erlv http://www.lingcc.com/?p=11952 您可能也喜欢:
百度Hi策略的猜想

擦亮眼睛 “百度Hi”用户协议有猫腻

How start_kernel get start?

永别2011, 你好2012

Pathscale 发布 EKOPath 4 编译器套件
无觅

相关文章:

]]>
疯狂除夕夜,编程抢红包——点击“百分点科技杯”ACM除夕挑战赛通知

比赛链接: http://acm.ustc.edu.cn/ustcoj/baoming/

2012年1月22日农历除夕,中国科大向CCTV春晚宣战?——中国科学技术大学“百分点科技”杯ACM-ICPC程序设计月赛(即中国科大“百 分点科技杯”ACM除夕挑战赛)将在龙年春晚开播前半小时拉开帷幕。这项ACM除夕挑战赛将鼓励全球ACM爱好者,以四小时疯狂coding的方式迎接龙 年春节的到来。

中国科大校友柏林森创办、校友参与的IDG资本与名力中国成长基金投资的百分点科技将为赛事提供1.5万元红包。欢迎全球ACM爱好者(不限是否来自科大),欢迎中国科大全球技术狂人报名参与,编程抢红包!

中国科学技术大学部分师生将度过最疯狂的除夕.该项赛事由中国科大计算机学院、校友总会、学生工作部(处)主办,中国科大校友新创基金会承办。网络 信息中心提供网络保障。据悉中国科大的教师、员工在除夕之夜将坚守工作岗位。新创基金会员工与志愿者在除夕之夜在北京、河南、江西与湖北密切监控服务器, 保障赛事进行。

“不要命的上科大”——中国科大与新创基金会同仁与技术狂人们将以彻夜工作的方式祝福母校中国科大;我们期待传承追求卓越,挑战极致的科大精神,以此感谢全球校友对中国科大的捐赠与支持!

疯狂除夕夜,编程抢红包——点击“百分点科技杯”ACM除夕挑战赛通知

相关文章:

]]>
http://www.lingcc.com/2012/01/15/11952/feed/ 2
华为3G 上网卡Mobile Partener 21.005 NDSI driver install fail问题 http://www.lingcc.com/2012/01/08/11934/ http://www.lingcc.com/2012/01/08/11934/#comments Sun, 08 Jan 2012 06:58:18 +0000 erlv http://www.lingcc.com/?p=11934 [...]

相关文章:

]]>
最近,入手华为3G上网卡EC122, 电信的. 安装华为的Mobile Partener 21.005 的时候,NDSI驱动安装出错。 NSDI是用来通过3G上网卡发短信用。
出错信息如下:

CC [M] /usr/local/Mobile_Partner/driver/ndis_driver/ndis_src/src/hw_cdc_driver.o
/usr/local/Mobile_Partner/driver/ndis_driver/ndis_src/src/hw_cdc_driver.c:155:27: fatal error: linux/usb/ncm.h: No such file or directory
compilation terminated.
make[3]: *** [/usr/local/Mobile_Partner/driver/ndis_driver/ndis_src/src/hw_cdc_driver.o] Error 1
make[2]: *** [_module_/usr/local/Mobile_Partner/driver/ndis_driver/ndis_src/src] Error 2
make[2]: Leaving directory `/usr/src/linux-headers-3.0.0-15-generic'
make[1]: *** [modules] Error 2
make[1]: Leaving directory `/usr/local/Mobile_Partner/driver/ndis_driver/ndis_src/src'
make: *** [modules] Error 2
make -C src/ install
make[1]: Entering directory `/usr/local/Mobile_Partner/driver/ndis_driver/ndis_src/src'
#install -m 744 -c hw_cdc_driver.o /lib/modules/3.0.0-15-generic/kernel/drivers/usb/net
#depmod -a
#modprobe hw_cdc_driver
/usr/local/Mobile_Partner/driver/ndis_driver/ndis_src/src/add_header.sh "install"
modprobe hw_cdc_driver
FATAL: Module hw_cdc_driver not found.
make[1]: *** [install] Error 1
make[1]: Leaving directory `/usr/local/Mobile_Partner/driver/ndis_driver/ndis_src/src'
make: *** [install] Error 2

Install NDIS driver failed.
The compiling environment is not all ready.
Please check gcc, make and kernel buid(/lib/modules/3.0.0-15-generic/build) to be all installed?
Now please enter any key to finish other installations.
NDIS is disabled, and only Modem can be used.

居然是个编译出错的问题。搞了那么久工具链,一看到这种bug,就hold不住了。hack之!

一番Google和尝试。发现NSDI的driver,华为是通过源码编译的,需要上面提到的那个头文件 linux/usb/ncm.h。这个头文件在2.6.35版本以下的内核中有,但到了2.6.37,就没有了。所以2.6.37之后的内核都应该有这个问题。对源码中内核判定的方式做了修改,之后又改了几个redefine的问题,现在可以正常使用NDSI发短信了。

点击下载修改后的data.bin, 替换原data.bin文件即刻。

相关文章:

]]>
http://www.lingcc.com/2012/01/08/11934/feed/ 2
永别2011, 你好2012 http://www.lingcc.com/2012/01/02/11935/ http://www.lingcc.com/2012/01/02/11935/#comments Mon, 02 Jan 2012 13:23:17 +0000 erlv http://www.lingcc.com/?p=11935 [...]

相关文章:

]]>
一晃一年又过去了,这一年总体是充实、有压力、有成长的一年。2011不再回来了,所以用了永别。

1 永别2011

先看看去年的计划:

完成的:

  • 硕士毕业,考上博士。
  • 和女友出去旅游。
    去北戴河转了一圈,三天。看看海,吃吃海鲜,捞捞小螃蟹,很惬意。
  • 多少能攒点钱。
    补助提升了一些。攒了几千块,准备回家孝敬父母,算是经济独立了。
  • 硕士的工作写篇文章,并且保证工作是有意义的!
    虽然只是个国内会议的poster,但好歹也算写了。
  • 继续看六七本好书,非计算机的。
    读了两三本和计算机完全没有关系的,还有四五本没有涉及技术的计算机类书,勉强完成目标。

没有完成的:

  • 北马冲刺全程、练练羽毛球和乒乓球。
    今年的北马异常火爆,不到一周就报满了,错过了报名机会。不过幸好有机会去做啦啦队,目睹了各类人群经过半程终点的盛况。
    乒乓球打的次数在个位数,羽毛球一两次。体重也冲上了巅峰的160斤。
  • 了解全球50名体系结构、编译器领域牛人的成果和目前研究方向。
    这个一直没有时间去做。

自己觉得不够的:

  • 选好自己的博士方向。
    只是有了朦胧的意向,还需要大量的文献调研和实践才能逐步细化。
  • 精读十篇以上的经典体系结构、程序分析、操作系统方面的论文。
    跟随着实验室的各种讨论班,学习了不少经典论文,也算是精读了。
    但是每一篇都没有形成自己的认识和理解。都没有自己的批判性思考。
    也没有针对论文涉及的方面做总结和扩展阅读。
  • 调整心态,不让自己太浮躁、太贪心。
    刚刚进入读博阶段时,压力非常大,也很浮躁。虽然现在淡定了一些,但自我感觉还是太急躁,只是浮于表面。
    还需要好好的努力,对自己的专业和方向要踏踏实实的扎进去,学精学透。

2011年读过的书:

  • 2011年,硕士毕业了。这一年里,因为压力很大,所以成长也很快。毕竟读博的路是自己选的,看着大家都该干嘛干嘛,压力就陡增了起来。幸好有女友的理解、鼓励和支持。
    这一年里,不仅技术有了不少进步,而且在实际项目中为人处世、组织协调,团队服务能力也得到了锻炼。
    虽然自己也怀疑过读博的选择,迷茫过,纠结过,但是现在反而更加坚定了。既然已经走到了今天,那就踏踏实实的走下去,其他就随他去吧。

2 你好 2012

2012年是关键一年,决定着能否按时毕业,以及人生是否能翻开新的一页。写下目标,继续奋斗:

  • 大规模的项目和文献调研,形成对编译领域学术和工业界前沿的准确认识。
  • 基于11年的工作,发表第一篇满足毕业要求的论文。
  • 博士论文开题,多听老师的意见,和工业界的需求,防止闭门造车。
  • 和女友再找个地方,出去转转。
  • 跑两个马拉松赛,一个北马,一个其他地方的。可以趁机多出去转转,再多一些群体类的运动。
  • 继续攒钱,孝敬父母,让他们不要为了我,过的太节俭。
  • 《算法导论》、《龙书》、《量化》读精,再读10本左右的非计算机技术类书籍。
  • 结合自己的方向,多一些编程实践,实际项目、感兴趣的小项目、编译器、算法。
  • 培养一项不需要电脑的业余爱好,做一些可以用一生积累的有意思的事情。
  • 整理11年,论文讨论班,以及讲座所记笔记,并写成博客文章,并及时消化12年的此类笔记。
  • 了解全球50个知名体系结构、编译领域的牛人或牛小组的研究成果和近期方向。
  • 继续走出去,多和各行各业的同学、朋友交流,还有许多有意思的事情可以做。

3 《编译点滴》的成长和目标

2011年《编译点滴》共发表了46篇博客,相比10年的110多篇,又下降了一半。幸好,这一年其他方面有不少成长,算是一点安慰。
下半年的文章写的要比上半年频繁一些,但数量上还是太少。新的一年,要多些喽。

今年的《编译点滴》,RSS订阅人数已经接近700多人,算是一个小收获。
不过没有想到,《不仅仅是“屠龙之技”-编译器开发者的精神胜利!》给师弟师妹们带来了一些负面影响。
因为是在自己迷茫抑郁的时候写的,这篇文章受主观影响太大。
还有几篇文章,得到了Xi Yang、teawater、莫枢@taobao、chenwj等大拿的指正。
这让《编译点滴》明白自己的立场会产生一些影响,所以需要重视文章的质量、正确性和客观性。
新的一年里,《编译点滴》将以积极、客观的态度去学习和评论技术和相关方向。

这一年里,有好几位朋友,通过邮件的方式,讨论和交流许多编译领域的问题,因为自己水平和时间有限,有不少没有及时回复。
希望新的一年里,能陆续一一回复,并深入讨论和交流。
期待《编译点滴》能逐渐成为大家深入交流和学习技术的平台,而不是一家之言。

感谢所有关注《编译点滴》的朋友,新一年《编译点滴》将有许多专业、准确、客观的文章。

4 体系结构和编译学术界的2012

 
会议名称 会议时间 开会地点 会议首页 下一年截稿时间(预计)
ISCA 2012 Jun 9 Portland OR,USA http://isca2012.ittc.ku.edu/ Nov,14
PLDI 2012 Jun 11 Beijing, China http://pldi12.cs.purdue.edu/ Nov. 6
CGO 2012 Mar 31 San Jose, CA,USA http://www.cgo.org/cgo2012/index.html Sep. 1
ASPLOS 2012 Mar 3 London, UK http://research.microsoft.com/en-us/um/cambridge/events/asplos_2012/ Jul 18
MICRO 2012 Dec 4 http://www.microarch.org/micro45 May 25
PPoPP 2012 Feb 25 New Orleans, USA http://dynopt.org/ppopp-2012/ Aug. 12
SPLASH 2012 Oct 19 Tucson, Arizona,USA http://splashcon.org/2012/
PACT 2012 Sep 21 Minneapolis, USA Mar 25
POPL 2012 Jan 25 Philadelphia, USA http://www.cse.psu.edu/popl/12/ Jul 8
SPAA 2012 Jun 25 Pittsburgh, USA http://www.cs.jhu.edu/~spaa/ Jan 25
OSDI 2012 Oct 8 Hollywood, CA,USA http://www.usenix.org/events/osdi12/index.html May 3
NSDI 2012 Apr 25 San Jose, USA http://www.usenix.org/events/nsdi12/ Sep 27
HPCA 2012 Feb 25 New Orleans, USA http://www.ece.lsu.edu/hpca-18/ Aug 24
ICS 2012 Jun 25 Venice,Italy http://ics-conference.org/ Jan 8
ECCOP 2012 Jun 11 Beijing, China http://ecoop12.cs.purdue.edu/ Dec 17

相关文章:

]]>
http://www.lingcc.com/2012/01/02/11935/feed/ 9