编程语言的发展趋势及未来方向(1):历史回顾及趋势概述

 

大家好,我是Anders Hejlsberg,现在是微软的Technical Fellow,担任C#编程语言的首席架构师,也参与并领导.NET Framework以及各种语言的开发。我现在打算谈一下……实际上是我脑海中一些影响未来5到10年编程语言设计的内容。比如C#或VB该怎么走,F#该怎么办,这次演讲主要就是讨论这些影响我们的东西。

 

虽然主要内容是谈论未来的,但是我还是想先回顾一下历史。你们有些人可能对这个产品有印象,这是我大约27年前的工作内容,Turbo Pascal,这也是我进入这个领域的起点。我先在拿出这个东西是想展示当年写程序的情况,然后可以讨论目前究竟的发展到哪儿了。

 

事实上,我现在的机器里正好有TURBO.COM文件,大约39K,嘿,现在还可以运行。我们现在来试着写一点程序。先来创建的程序叫做Hello.pas……(开始写代码)……一个Pascal小程序写好了,我们来运行一下……(出现编译错误)啊噢,有地方我写错了……这个特性在当年是个创新,它会自动打开编辑器,直接把我们带去出错的地方。嗯,我们现在来纠正语法错误,把双引号改成单引号。

 

再运行一下,现在成功了,(观众掌声)呵呵,谢谢,谢谢。事实上,在27年后这个程序还能在这台机器上运行还真是挺神奇的。

 

现在,我们来看一下,从那时算起硬件已经发展了……嗯,我那时写Pascal的机器是Z-80,拥有48K内存。从那时算起,我现在这台机器已经有大约10万倍的外部存储容量,1万倍的内存大小,CPU速度也有大约1000倍的提高。

 

但是如果你关注一下目前的软件……过去27年里编程语言到底进步了多少?呵呵,有趣的是如果你仔细观察这些代码,会发现C#还比Turbo Pascal的版本多一行。这也给我们带来了一些值得关注的东西。

 

首先,编程语言的发展非常缓慢。期间当然出现了一些东西,例如面向对象等等,但是远没有好上1000倍。另一方面,你可能会想,那么这些努力都到哪里去了呢?事实上这些努力没有体现在编程语言上,而是出现在框架及工具等方面了。如果你关注如今我们使用的框架,它们的体积的确有1000倍的增长。例如当年Turbo Pascal所带的框架大约有,比如说100个功能,而现在的.NET Framework里则有一万个类,十万个方法,的确有1000倍的增长。与此类似,如果你观察现在的IDE,我们现在已经有了无数强大的功能,例如语法提示,重构,调试器,探测器等等,这方面的新东西有很多。与此相比,编程语言的改进的确很不明显。

另一方面,如.NET,Java等框架的重要性提高了许多。而编程语言往往都倾向于构建于现有的工具上,而不会从头写起。现在出现的编程语言,例如F#,如果你关注Java领域那么还有Scala,Clojure等等,它们都是基于现有框架构建的。现在已经有太多东西可以直接利用了,每次从头开始的代价实在太高。

 

还有件事,便是在过去5、60年的编程历史中,我们都不断地提高抽象级别,我们都在不断地让编程语言更有表现力,让我们可以用更少的代码完成更多的工作。我们一开始先使用汇编,然后使用面向过程的语言,例如Pascal和C,然后便是面向对象语言,如C++,随后就进入了托管时代──受托管的执行环境,例如.NET,Java,它们的主要特性有自动的垃圾收集,类型安全等等。我目前还没有看出这样的趋势有停止的迹象,因此我们还会看到抽象级别越来越高的语言,而语言的设计者则必须理解并预测下一个抽象级别是什么样子的。

 

我认为,现在影响力较大的趋势主要有3种。首先,我们会越来越多地使用声明式的编程风格。这里我主要会提到例如DSL(Domain Specific Language,领域特定语言)以及函数式编程。然后在过去的五年里,我发现对于动态语言的研究变得非常火热,其中对我们产生重大影响的无疑是动态语言所拥有的良好的元编程能力,还有一些非常有趣的东西,例如JavaScript引擎的发展。然后便是并发编程,无论我们愿不愿意,多核的产生都在迫使我们不得不重视并发编程。

有一点值得一提,那便是随着语言的发展,原本的编程语言分类方式也要有所改变了。以前我们经常说面向对象语言,动态语言或是函数式语言。但是我们现在发现,这些边界变得越来越模糊,经常会互相学习各自的范式。静态语言中出现了动态类型,动态语言里也出现了静态能力,而如今所有主要的编程语言都受到函数式语言的影响。因此,一个越来越明显的趋势是“多范式程序设计语言”。

在接下来的部分中,我将深入讨论以上提到的这些内容。

原文链接:http://blog.zhaojie.me/2010/04/trends-and-future-directions-in-programming-languages-by-anders-1-history-and-trends.html


.NET社区新闻,深度好文,微信中搜索dotNET跨平台或扫描二维码关注

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/328235.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

调用反射类的指定方法

package org.entity;import java.lang.reflect.Method;/*** 本案例演示如何通过反射将字符串转换为类* */ public class Test2_2 {public static void main(String[] args) {String user "org.entity.User";//字符串是该类的全限定名try {Class clzz Class.forName…

springboot创建项目 编写dao serviece 和controller 持久层用mybatis

11 刷新一下pom 万一没有引入进去 jpa和mybatis选择哪个? 1.看领导要求 2.都会最好 多学点是没错的

android查看wifi是否双频,Android判断wifi是5G还是2.4G

我一开始看这帖子,找不到答案,为了后来的人,我来回复吧。WifiManager wifiManager (WifiManager) getSystemService(Context.WIFI_SERVICE);WifiInfo wifiInfo wifiManager.getConnectionInfo();根据wifiInfo.getFrequency()可以判断是不是…

java过滤html标签获取纯文本信息

转载自 java过滤html标签获取纯文本信息 package com.lyt.base.util;import java.util.regex.Pattern;public class FilterHtmlUtil {public static String Html2Text(String inputString){String htmlStr inputString; //含html标签的字符串String textStr "";java…

综述:编程语言的发展趋势及未来方向

程序设计离不开编程语言,但是编程语言在国内的大环境中似乎一直是个二等公民。国内的计算机教育和工程培训,似乎一直在宣传“语言不重要,重要的是思想”,“语言一通百通”等观点,甚至在许多人眼中“语言的讨论”完全是…

IntelliJ IDEA: 无法创建Java Class文件

IntelliJ IDEA: 无法创建Java Class文件 2018年06月21日 22:49:44 dandelion9508 阅读数 11864 今天打开项目时,发现右击新建不了java.class文件,于是尝试了以下方法: (1)选择 File——>Project Structure——>…

iphone android互传文件夹,安卓和苹果手机怎么互传文件_安卓与苹果手机之间互传文件的方法教程_3DM手游...

一直以来,很多的app都是分为安卓和IOS两个版本,在使用上,两个平台之间很多功能都不能跨平台使用。比如大家在玩游戏时充值的东西,在苹果充值之后,同一个账号转到安卓手机上玩,那些东西都是不能迁移进来的。…

jsoup怎么获取两个标签之间的text?

转载自 jsoup怎么获取两个标签之间的text? 这是开发者工具解析到的一个论坛页面结构。。可以看到每一个a标签和br标签之间总会夹着一个text,,也就是密码文本。而我根据网上的API教程:siblingA ~ siblingX: 查找A元素之前的同级X元素,比如&#xff1a…

编程语言的发展趋势及未来方向(7):总结

OK,我想现在已经讲的差不多了,我来做个总结吧。 在我看来,对于编程语言来说,现在出现了许多有趣的东西,也是令人激动的时刻。在过去,大约1995-2005年,的确可以说是一个有些特别的编程语言的黄金…

通过反射获取方法返回的类型

package org.entity;import java.lang.reflect.Method; import java.lang.reflect.Type;/*** 本案例演示如何通过反射将字符串转换为类* */ public class Test3 {public static void main(String[] args) {String user "org.entity.User";//字符串是该类的全限定名t…

android 按键消息,在android中模拟键盘消息(shell命令的方法)

已找到解决方案[code]use: sendeventcommand format: sendeventdevice type code value[command] [device] [type] [code] [value]sendevent/dev/input/event0 1 229 1/dev/input/event0 is the device to send it to[type] 1 is unknow for me ( maybe code for physical butt…

强行覆盖远程的gitlab 出错

需要删除原来的.git 文件 重新生成一次 强行覆盖远程的gitlab 出错 我这里出错的原因是 因为我本地一个readme.md和远程的README.MD文本内容不同 我将本地的readme.md 删除后重新操作就对了 1.删除原来的.git文件 AdministratorUSER-20170819XG MINGW64 /e/unicomWork…

使用 jsoup 对 HTML 文档进行解析和操作

转载自 使用 jsoup 对 HTML 文档进行解析和操作jsoup 简介 Java 程序在解析 HTML 文档时,相信大家都接触过 htmlparser 这个开源项目,我曾经在 IBM DW 上发表过两篇关于 htmlparser 的文章,分别是:从 HTML 中攫取你所需的信息和…

编程语言的发展趋势及未来方向(6):并发

好,最后我想谈的内容是“并发”。 听说过摩尔定律的请举手……几乎是所有人。那么多少人听说了摩尔定律已经结束了呢?嗯,还是有很多人。我有好消息,也有坏消息。我认为摩尔定律并没有停止。摩尔定律说的是:可以在集成电…

GitLab创建项目 命令上传代码

注册哪里要验证点击图片 这里需要外网 有可能 右键gitbash 首次将本地创建项目推送远程代码仓库 touch readme.md 创建readme文件 git init 初始化git git status 查看修改状态 git add . 添加至本地仓库管理 git status 检查是否添加成功 git commit -am fir…

Linux ss 热点,在Linux系统下的ss命令(socket statistics)各种使用示例

本文演示在Linux操作系统下的ss命令(socket statistics)的各种使用示例。ss(套接字统计信息)是一个命令行工具,用于监视套接字连接并显示Linux系统的套接字统计信息。它可以显示PACKET套接字、TCP套接字、UDP套接字、DCCP套接字、RAW套接字、Unix域套接字等的统计信…

Jsoup代码解读之七-实现一个CSS Selector

转载自 Jsoup代码解读之七-实现一个CSS Selector当当当!终于来到了Jsoup的特色:CSS Selector部分。selector也是我写的爬虫框架webmagic开发的一个重点。附上一张street fighter的图,希望以后webmagic也能挑战Jsoup! select机制 Jsoup的se…

http1.1协议

HTTP/1.1协议 2018年01月04日 17:27:35 上杉绘梨衣- 阅读数 245 HTTP是hypertext transfer protocol(超文本传输协议)的简写,它是TCP/IP协议的一个应用层协议,用于定义WEB浏览器与WEB服务器之间数据交换的过程。 1.Http1.0和1.1 Http1.0:请求一次&…

ios刷android8.0,颤抖吧 iOS, Android 8.0正式发布!

原标题:颤抖吧 iOS, Android 8.0正式发布!如果现在选一个最好用的手机操作系统,多数人还是认为 iOS。不过最近几年,苹果和安卓的竞争越来越激烈,苹果的优势也越来越小。眼看 Android 8.0 就要来了&#xff…

编程语言的发展趋势及未来方向(5):元编程

动态语言的另一个关键和有趣之处在于“元编程”。“元编程”实际上是“代码生成”的一种别称,其实在日常应用中我们也经常依赖这种做法。观察动态语言适合元编程的原因也是件十分有趣的事情。 在这个蓝框中是一段Ruby on Rails代码(见上图)。…