编程语言之父谈语言设计,龟叔大赞TypeScript

争论哪门编程语言孰优孰劣,长期以来都是程序员乐此不疲的“娱乐活动”。之所以说是娱乐活动,因为这些争论到最后往往只是各自在发泄情绪,再则就是,脱离使用场景去讨论所谓哪门语言更好并没意义。

但如果让编程语言作者坐在一起讨论编程语言会产生怎样的反应,水平是否会比我们高到不知哪里去?

本月初由西雅图 Python 开发者举办的首届年度慈善活动(Puget Sound Programming Python, PuPPy)邀请到了 Java, Python, TypeScript 和 Perl 创始人共同讨论编程语言设计的过去和未来。

PuPPy 活动旨在为 Computer Science for All (CSforALL) 筹集资金,该组织致力于使计算机课程成为教育中不可或缺的一部分。

参与本次讨论的嘉宾为四位编程语言创始人,分别是:

  • Guido van Rossum,Python 作者

  • James Gosling,Java 作者和首席设计师

  • Anders Hejlsberg,Turbo Pascal 编译器的主要作者,Delphi、C# 和 TypeScript 开发者

  • Larry Wall,Perl 作者

640?wx_fmt=png

活动中这四位编程语言之父的谈论主题包括设计编程语言的主要原则、编程语言的类型系统、编程语言的可维护性和编程语言设计的未来

下面不妨看看这些开山鼻祖级别的大牛,对编程语言设计有怎样的看法。

设计编程语言的主要原则

在讨论这个话题时,Python 之父 Guido van Rossum 认为,设计编程语言与 JK罗琳写《哈利波特》有许多共通之处,罗琳为整部小说打造的架构是天才的操作,她在第一本书中描写的某些细节在第六和第七本中成了重要的情节。这和设计编程语言一样 —— 需要关注某些细节,比如关键字和编码风格但无论决定什么都必须保证在未来找到使用这些细节的新方法,就像JK罗琳一样。

Java 作者 James Gosling 被问到 Java 遵守的设计原则时表示,Java 并不是由个人热情驱动的项目,最初只是计划构建一个原型(当时 Gosling 和他的团队正在进行一个涉及嵌入式系统领域的项目,Gosling 负责从编程语言的角度来简化工作),一开始只是希望要做得比 C 语言更好,然而后来失控了,项目的其它部分变成了某种背景,最终只留下 Java。它基本上是为了帮助开发者解决关于数据的问题,这些问题往往是因较差的网络、安全性和可靠性而导致。

Perl 作者 Larry Wall 称自己是“语言学家”而不是计算机科学家,他希望创造出类似自然语言的语言。对此,Larry Wall 举了一个例子进行解释,与其让人们进入大学校园去决定他们走向何处,倒不如通过观察他们想走的路,然后在这些地方铺设捷径Perl 的基本设计原则是为所有事物都提供 API,目标是成为出色的文本处理语言,同时也是胶水语言。

Anders Hejlsberg 表示他参与开发编程语言的过程中都会遵守一个原则:「一个方法只做一件事」。Hejlsberg 认为过多的方法很可能会导致误入歧途,并在开发后期才会意识到问题。与 Guido 的观点类似,Hejlsberg 也认为在设计编程语言时,所做的任何决定都必须进行全局考虑,与之共存的理念理应贯穿整个开发过程。

编程语言的类型系统

Java 之父 Gosling 表示在打造 Java 的雏形时就已重点关注性能问题,而提高性能的一个关键因素就是类型系统,这对构建优化编译器和提前进行正确性检查等问题非常有用。

Hejlsberg 将类型系统视为“工具性”的功能,开发者喜欢 IDE 提供的代码补全、重构和代码导航这些功能,而这背后都离不开具有类型系统的编译器。Hejlsberg 也不认为编程语言添加了类型系统就能提升开发者的生产力,他觉得开发者使用动态语言,然后以非侵入性方式来添加类型特性反而能提高开发效率。

编程语言的可维护性

Guido 认为,如果希望编程语言具有可维护性,在灵活和规范的方法之间保持平衡非常重要。动态语言对于开发小型项目非常有用,但大型项目需要采用严格的类型检查,因此如果编程语言本身能够实现这种平衡就最好不过了。这就是为什么 Guido 计划在 Python 中添加类似 TypeScript 的技术。

除了类型系统,重构引擎对编程语言的可维护性也至关重要,通过它可以更容易地同时执行数百万行代码的大规模重构。Hejlsberg 表示 TypeScript 的起源正是日益庞大的 JavaScript 代码库,代码库越大,维护它们就变得越加困难,这些代码逐渐成了 “write-only code”。为了易于重构,需要对代码进行语义理解,而这些语义理解的工作恰好需要一个类型系统。

编程语言设计的未来

当被问及编程设计的未来时,James Gosling 分享了一个尚未充分探索的领域 —— 为 GPU 编写代码他特别指出目前尚没有任何编程语言可以像 GPU 那样工作,而在该领域有很大的发展空间。

TypeScript 核心开发者 Anders Hejlsberg 表示,编程语言的发展速度不会像硬件或其他技术一样快,在演进方面,编程语言更像是数学和大脑。因为直到今天,我们还在用 50 年前发明的语言在编程,而函数式编程的原则几乎也都是在 50 年前提出的。另外,Hejlsberg 也认为不能将简单地把语言分为面向对象或函数式编程这样的单独类别,因为现代编程语言正逐渐成为多范式编程语言。

640?wx_fmt=jpeg

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

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

相关文章

你必须知道的 SmartSql

介绍SmartSql MyBatis Cache(Memory | Redis) R/W Splitting Dynamic Repository Diagnostics ......简洁、高效、高性能、扩展性、监控、渐进式开发!她是如何工作的?SmartSql 借鉴了 MyBatis 的思想,使用 XML 来管理 SQL ,并…

OsharpNS轻量级.net core快速开发框架简明入门教程

OsharpNS官方资源项目地址:https://github.com/i66soft/osharp-ns20演示地址:https://www.osharp.org 直接使用QQ登录可以查看效果文档地址:https://docs.osharp.org 正在完善中....发布博客:https://www.cnblogs.com/guomingfeng…

.net core 注入机制与Autofac

本来是要先出注入机制再出 管道 的,哈哈哈……就是不按计划来……这里扯扯题外话:为什么要注入(DI,dependency-injection),而不用 new 对象?可能我们都很清楚,new 对象所造成的影响就…

浅析 .Net Core中Json配置的自动更新

Pre很早在看 Jesse 的Asp.net Core快速入门的课程的时候就了解到了在Asp .net core中,如果添加的Json配置被更改了,是支持自动重载配置的,作为一名有着严重"造轮子"情节的程序员,最近在折腾一个博客系统,也想造出一个这样能自动更新以Mysql为数据源的ConfigureSource…

E. Don‘t Really Like How The Story Ends(代码未补)

Don’t Really Like How The Story Ends 题意: 有n个点,m个边,现在要从1号边开始求dfs序,问最少加多少边可以是的dfs序是从1到n? 题解: dfs序的过程中,不走到叶子节点我们是无法回溯的&…

.NET Core 迁移躺坑记续集--Win下莫名其妙的超时

继上一集.NET Core 迁移躺坑记里说到遇到的各种问题并且弄了n个解决方案之后,特别是对于问题4的解决方案对于切换了HttpClientFactory我用了你家netcore 2.1下专门解决之前HttpClient口病已久的灵丹妙药了,信心满满的上线…..然后挂了,该超时…

使用Entity Framework Core访问数据库(Oracle篇)

前言哇。。看看时间 真的很久很久没写博客了 将近一年了。最近一直在忙各种家中事务和公司的新框架 终于抽出时间来更新一波了。本篇主要讲一下关于Entity Framework Core访问oracle数据库的采坑。。强调一下,本篇文章发布之前 关于Entity Framework Core访问oracl…

Asp.Net Core Docker镜像更新系统从wheezy改为stretch

之前写过一个在Asp.Net Core里调用System.Drawing.Common绘图的DEMO,部署到Docker里运行,需要更新Asp.Net Core镜像的操作系统。https://www.cnblogs.com/sunnytrudeau/p/9384620.html当时用的阿里云的源RUN echo "deb http://mirrors.aliyun.com/d…

Monster Hunter(2020南京M)

Monster Hunter(2020南京M) 题意: 给你一颗树,树上每个节点都是一个hpi 血量的怪物。打败每个怪物所需要的能量值为hpi 所 有 存 活 的 直 接 子 节 点 的 hpj 。每次必须要消灭父节点后才能消灭子节点。此外你还有m个魔咒,每个魔咒可以不…

网络数据采集(AngleSharp)-使用AngleSharp做html解析

有这么一本Python的书: <<Python 网络数据采集>>我准备用.NET Core及第三方库实现里面所有的例子. 这是第一部分, 主要使用的是AngleSharp: https://anglesharp.github.io/(文章的章节书与该书是对应的)发送Http请求在python里面这样发送http请求, 它使用的是pytho…

ASP.NET Core在Azure Kubernetes Service中的部署和管理

目标部署&#xff1a;掌握将aspnetcore程序成功发布到Azure Kubernetes Service&#xff08;AKS&#xff09;上管理&#xff1a;掌握将AKS上的aspnetcore程序扩容、更新版本准备工作注册 Azure 账户官网免费帐户Azure 免费帐户仅适用于新用户&#xff0c;并且仅限每个客户一个免…

深入研究 Mini ASP.NET Core,看看 ASP.NET Core 内部到底是如何运行的

几年前&#xff0c;Artech 老师写过一个 Mini MVC&#xff0c;用简单的代码告诉读者 ASP.NET MVC 内部到底是如何运行的。当时我研究完以后&#xff0c;受益匪浅&#xff0c;内心充满了对 Artech 老师的感激&#xff0c;然后用我自己理解的 MVC 知识&#xff0c;写了一篇 深入研…

一文读懂Asp.net core 依赖注入(Dependency injection)

一、什么是依赖注入首先在Asp.net core中是支持依赖注入软件设计模式&#xff0c;或者说依赖注入是asp.net core的核心&#xff1b;依赖注入&#xff08;DI&#xff09;和控制反转&#xff08;IOC&#xff09;基本是一个意思&#xff0c;因为说起来谁都离不开谁&#xff1b;或者…

P4619 [SDOI2018]旧试题

P4619 [SDOI2018]旧试题 题意&#xff1a; 求个式子&#xff1a; (∑i1A∑j1B∑k1Cd(i∗j∗k))mod(1097)(\sum_{i1}^{A}\sum_{j1}^{B}\sum_{k1}^{C}d(i*j*k))mod(10^97)(i1∑A​j1∑B​k1∑C​d(i∗j∗k))mod(1097) 题解&#xff1a; 原创博文1k纪念 很明显&#xff0c;莫比…

C#中使用Bogus创建模拟数据

原文&#xff1a;CREATING SAMPLE DATA FOR C#[1] 作者&#xff1a;Bruno Sonnino 译文&#xff1a;C#中使用Bogus创建模拟数据 译者&#xff1a; Lamond Lu背景在我每次写技术类博文的时候&#xff0c;经常做的一件事就是创建模拟数据。在每篇博文中&#xff0c;为了解释某些概…

CF1253E Antenna Coverage

CF1253E Antenna Coverage 题意&#xff1a; 现在有n个点&#xff0c;每个点的坐标为xi&#xff0c;以及一个范围值si&#xff0c;可以覆盖左右范围[xi-si,xisi] 每次操作&#xff0c;可以花费代价1让第i个天线的si增加1&#xff0c;每个天线都可以进行多次操作。现在请问你最…

使用BeetleX的TcpBenchmark工具进行百万设备模拟测试

其实TCP测试的工具有很多&#xff0c;那BeetleX工具所提供的特点又是什么呢&#xff1f;如果你需数十万的请求或模拟上百万的设备连接&#xff0c;那这个工具相信可以满足你的需要&#xff01;工具是基于BeetleX的基础功能扩展&#xff0c;支持多IP绑定可以轻松实现上百万的cli…

.net core Entity Framework 与 EF Core

重点讲 Entity Framework Core &#xff01;&#xff08;一&#xff09;Entity Framework它是适用于.NET 的对象关系映射程序 (ORM)&#xff0c;现在的EF6已经是久经沙场&#xff0c;并经历重重磨难&#xff0c;获得一致认可的数据访问技术&#xff08;原来加 Title 也挺有意思…

CF1253F Cheap Robot

CF1253F Cheap Robot 题意&#xff1a; 给你一张 N 个点的带权无向连通图&#xff0c;其中结点 1,2,…,k 为充电中心。 一个机器人在图中行走&#xff0c;假设机器人的电池容量为 c&#xff0c;则任何时刻&#xff0c;机器人的电量 x 都必须满足 c0≤x≤c。如果机器人沿着一…

asp.net core 3.0 gRPC框架小试

什么是gRPCgRPC是google开源的一个高性能、跨语言的RPC框架&#xff0c;基于HTTP2协议&#xff0c;采用ProtoBuf 定义的IDL。gRPC 的主要优点是&#xff1a;现代高性能轻量级 RPC 框架。协定优先 API 开发&#xff0c;默认使用协议缓冲区&#xff0c;允许与语言无关的实现。可用…