早在1979年,Bjarne Stroustrup设计了C++编程语言,并且C++很快成为了无处不在的通用系统编程语言。现在尽管有Java、Javascript、Python、Go,甚至是苹果的Swift和它竞争,但C++依然处于主导编程世界的地位。 今天在Morgan Stanley的科技访谈会上,InfoWorld的编辑和Stroustrup畅聊了很多关于C++的问题,还谈及了其他的编程语言,包括Google的Go语言和苹果的Swift语言。以下是我们的访谈记录。 InfoWorld: 您是怎么看C++的未来的?现在有很多流行的脚本语言,像Python和Javascript,当然还有很受欢迎的Java,甚至是Google的Go语言,C++如何从这么多编程语言中存活下来,并且发展壮大? Stroustrup: 这是个很棒的问题。在这 20年时间里,人们一直在预测C++将会灭亡,但是很高兴的是它一直在成长和壮大。如果你进入到嵌入式领域,如果你想做一些复杂的图像处理,如果你需要实 现一些微电子应用,如果你要开发一些金融管理系统,那么C++是你的首选。也许你很少能看到C++的身影,但是在那些应用的底层,C++依然是撑起整个应 用的顶梁柱。比如Google、Amazon、搜索引擎等那些需要高性能的地方,C++就成了不可或缺的重要角色了。 InfoWorld: Google的Go语言越来越被受到关注,您对Go语言的前景怎么看? Stroustrup: 当然这些编程语言可以非常优雅地实现一些功能,但是这些编程语言关注的是如何让写代码变得便捷和优雅,却损失不少性能。当然,这些编程语言所做的贡献我们也是有目共睹的。 InfoWorld: 一些脚本语言的宗旨是解放程序员的双手,那么C++是否也会逐渐倾向于这个目标? Stroustrup: Oh,当然了。C++主 要是为一些相当底层核心的应用设计的,它也经常会和其他的脚本语言结合使用。一开始的时候,我是用C++来实现任何的应用,然后我就在Unix上使用 shell作为脚本语言设计一些底层应用。C++涵盖了以下优秀的特性:高性能、易伸缩、占用空间小、占用资源少等等。 InfoWorld: 苹果在今年6月份发布了Swift语言,您是否认为由于苹果公司的支持,Swift将越来越受到开发者的关注? Stroustrup: 我认为是的,之前他们关注Objective-C,这回Swift真正进入了这些开发者的领域了。 InfoWorld: C++面临两大挑战:一方面要满足开发者实现高性能、可扩展、搞可靠性的应用程序,另一方面又需要能够帮助开发者实现可维护的代码。关于这两个问题您怎么看? Stroustrup: 我正要解释这两个问题,第一个问题是要尽可能的抽象和更高效地利用硬件资源,而后者则需要能尽可能简化代码的编写过程,从C++ 11到C++ 14,已经具备这样的兼顾能力了。 今年我们会发布一个新的C++版本,它参考了C++ 14的标准。当你在研发大型的产品时,也许C++ 11在某些方面已经无法满足你的需求,但当出现C++ 14时,情况就会完全改变了,C++总是在不停地进步着。 InfoWorld: 关于程序的安全性问题,您怎么看?程序员是否需要关注所有的安全问题?C++是否比其他编程语言安全呢? Stroustrup: 我非常热衷于解决硬件的安全问题。在编程语言方面,如果你想编写优秀的程序,那么你的代码一定要确保类型安全。你可以在C++中实现这一要求。不要总是围绕着一些低效的功能转,总的来说,安全问题是系统问题。 InfoWorld: 您是否还要探讨关于C++或者软件开发的其他任何问题? Stroustrup: 我们的目标是让软件开发更加专业化。我们的社会中很多事情都是不能被打破的,其中大部分都需要依赖软件。作为开发者,我们需要整体考虑到我们的系统,编程语言和开发工具只是其中的一部分,我们需要探究如何培养开发者,以及如何将重点放在程序的可靠性上。 原文出处: infoworld 译文出处:codeceo from:http://www.oschina.net/news/54556/stroustrup-why-the-35-year-old-c-still-dominates-real-dev
View Details几周前我在不同的地方读到了有关C#6的一些新特性。我就决定把它们都收集到一起,如果你还没有读过,就可以一次性把它们都过一遍。它们中的一些可能不会如预期那样神奇,但那也只是目前的更新。 你可以通过下载VS2014或者安装这里针对visual studio2013的Roslyn包来获取它们。 那么让我们看看吧: 1. $标识符 $的作用是简化字符串索引。它与C#中那些内部使用正则表达式匹配实现索引的动态特性不同。示例如下: ? 1 2 3 4 5 6 7 8 9 10 11 var col = new Dictionary<string, string>() { $first = "Hassan" }; //Assign value to member //the old way: col.$first = "Hassan"; //the new way: col["first"] = "Hassan"; 2. 异常过滤器 VB编译器中早已支持异常过滤器,现在C#也支持了。异常过滤器可以让开发人员针对某一条件创建一个catch块。只有当条件满足时catch块中的代码才会执行,这是我最喜欢的特性之一,示例如下: ? 1 2 3 4 5 try { throw new Exception("Me"); } catch (Exception ex) if (ex.Message == "You") 3. catch和finally块中await关键字 据我所知,没有人知道C# 5中catch和finally代码块内await关键字不可用的原因,无论何种写法它都是不可用的。这点很好因为开发人员经常想查看I/O操作日志,为了将捕捉到的异常信息记录到日志中,此时需要异步进行。 ? 1 2 3 4 5 6 7 8 try { DoSomething(); } catch (Exception) { await LogService.LogAsync(ex); } 4. 声明表达式 这个特性允许开发人员在表达式中定义一个变量。这点很简单但很实用。过去我用asp.net做了许多的网站,下面是我常用的代码: ? 1 2 3 long id; if (!long.TryParse(Request.QureyString["Id"], out id)) { } 优化后的代码: ? 1 2 if (!long.TryParse(Request.QureyString["Id"], out long id)) { } 这种声明方式中变量的作用域和C#使用一般方式声明变量的作用域是一样的。 5. Static的使用 这一特性允许你在一个using语句中指定一个特定的类型,此后这个类型的所有静态成员都能在后面的子句中使用了. ? 1 2 […]
View Details