2020年,5种将死的编程语言
来源 | 码农网
译者 | 小峰
曾几何时,几乎每个人都在使用Perl语言编程。但是那些经常使用的人慢慢地发现,关于这个Perl语言似乎总是有点不对劲。至少我知道有这么个叫做“piecemeal”的编程语言,它的创造者似乎就只是将这个功能堆在另一个功能上面而已,并没有好好考虑将它们结合在一起。
Perl
曾几何时,几乎每个人都在使用Perl语言编程。但是那些经常使用的人慢慢地发现,关于这个Perl语言似乎总是有点不对劲。至少我知道有这么个叫做“piecemeal”的编程语言,它的创造者似乎就只是将这个功能堆在另一个功能上面而已,并没有好好考虑将它们结合在一起。
事实上,甚至是它的创造者也不得不承认这种编程语言是有问题的。经过完整地改造之后,现在的开发工作开始倾向于使用Perl6,这个大概是在2000年的时候。至于Perl?俨然已经销声匿迹了!所以完全没有必要去学习它了。顺便说一句,下面这个“Goodbye World”就是用Perl写的:
#!/usr/bin/perlprint “Content-type: text/html\n\n”;print “Goodbye, world!\n”;
上面这个例子会出来一个网页。现在的Perl,由于可以作为CGI脚本语言,所以使用的最广泛的是在生成web页面上。但是为了适应时代的变化,我们最好还是将Perl语言“弃之如敝履”。
Ruby
关于Ruby,可以这么唱“十年之后,我不认识你你不属于我……”。因为就在10年前,Ruby语言可谓是风靡一时。它出生于1995年,5年左右达到它的鼎盛时期。如果你经常使用的话,绝对会义无反顾地爱上它。但是,像我们这些学着C语言风格长大的孩子在学习Ruby时往往会觉得有点囧。
下面是用Ruby写的“Goodbye World”:
puts ‘Bye bye, Miss American Ruby! Drove my Chevy to the Levie…’puts ’2011 was the day that Ruby died, yeah…’
下面是一个用于计算阶乘的例子:
def fact(n) if n == 0 1 else n * fact(n-1) endendputs fact(ARGV[0].to_i)
我测试了这个例子,来计算1000的阶乘。下面是结果(由于篇幅限制,中间略过了2569个数字):
ruby fact.rb 100040238726007709377354370243392300…0000000
从各方面来看,Ruby都很好,几乎是一片赞誉声……除了Twitter。在2011年4月,Twitter宣称他们已经将几乎大部分的代码都改写过了,以便不必使用Ruby和它的web框架——Ruby on Rails,据他们所说这个平台非常之低效。不过,我想说的是,也正是那一天起,Ruby开始走下坡路,使用的人数也是越来越少。
Visual Basic.NET
十年前,我应聘到一个需要重写大量代码的公司,名字我已经忘记了,主要工作就是将VB6转换为Visual basic.NET。大概就只干了一两个月吧,我就跳槽了:真心太痛苦了。
微软钟爱于BASIC编程语言的扩展可以一路追溯到1991年,那时他们刚刚采购了来自Alan Cooper的一个非常酷(对于那个时候而言)的可视化编程设计。Alan Cooper初期使用的是别的编程语言,但是比尔盖茨让他换成BASIC语言,因为盖茨认为那是当时最为简单的编程语言。于是乎,大名鼎鼎的Visual Basic,就从BASIC中衍生出来——对象这一概念以及新的编程技术问世了。
后面又发生了一些很有意思的事情。Borland Delphi的创造引领者,Anders Hejlsberg也到微软工作,并且引领创建了一个新的编程语言——C#。这种编程语言非常类似于Java语言。刚开始的学习或许有点难,但是一旦上手,你绝对会对它爱不释手。C#很快就成为了微软的旗舰编程语言。现在的话,在软件行业中,有很多很多需要C#的工作岗位,不少都是高薪聘用的。
虽然针对自己的CLR运行,微软创建了C#,但是它的工程师们另外还创建了一个盖茨深爱的BASIC语言版本,命名为Visual Basic.NET。该编程语言借用了BASIC语言的语法,但是它的编码方法却与C#相似。虽然Visual Basic.NET也在发展,但是优胜劣汰总是不可避免的——大家都选择了C#,于是Visual Basic.NET就成为了明日黄花。
下面是摘自微软网页上的一段Visual Basic.NET程序:
‘ Allow easy reference to the System namespace classes.Imports System‘ This module houses the application’s entry point.Public Module modmain ‘ Main is the application’s entry point. Sub Main() ‘ Write text to the console. Console.WriteLine (“Hello World using Visual Basic!”) End SubEnd Module
这里的“Hello World”也可以替换成“Goodbye World”,这个没关系。
Adobe Flash和AIR
从技术上讲,这些都是平台,而非编程语言。我之所以将它们包含进来是因为如果你想要使用它们,就必须安装Adobe自己的ECMAScript版本,即ActionScript。ActionScript是JavaScript(当前最流行的编程语言之一,因为它能用于所有的浏览器)的一个近亲。ActionScript在ECMAScript(这是JavaScript实现标准的官方名称)中增加了一些细节;但是除了Adobe Flash,其他地方几乎没有ActionScript的用武之地。
你使用Flash不?乔布斯非常讨厌它,并且也不允许iPhone使用它。然后随着iPhone(以及随后的iPad)的逐渐普及,Web开发人员不得不创建不必依赖于Flash的网站。那些以ActionScript为生的开发人员也不得不纷纷下岗。(我曾经看到过一个Flash开发人员指责另一个JavaScript开发人员毁了他的职业生涯。)
Adobe也曾试图通过AIR以求得其编程平台的一线生机,于是配建了一个用于构建AIR app的工具,称为Flex。至于AIR,许多人都说,这是一场灾难。不过我们目前也不知道为什么Adobe会推出AIR,可能是想用AIR取代Flash?也可能是想要AIR和Flash相亲相爱共同发展?
记得有一段时间,得益于Twitter平台——TweetDeck(要求用户在电脑上安装AIR运行时)的使用,AIR很是红火了一阵子。那时大概有数以百万计的pc AIR应用被开发出来,只是后来Twitter在2011年买了TweetDeck之后,又改写本地代码取代了AIR。于是乎,AIR的辉煌就到此为止。
随着Flash和AIR的逐渐逝去,Adobe的ActionScript也开始向世界吻别。下面是一些用ActionScript写的代码示例。
package {import flash.display.*;import flash.text.*;public class HelloWorld extends Sprite { private var greeting:TextField = new TextField();public function HelloWorld() { greeting.text = “Hello World!”; greeting.x = 100; greeting.y = 100; addChild(greeting); } }}
你可能会发现这与JavaScript非常相似,都使用var、function和new,并且也使用小数点来访问成员变量。
Delphi’s Object Pascal
首先我得向我曾经的好伙伴Delphi表示歉意,因为我不得不公布Object Pascal的“死讯”。well,Delphi(用于发Object Pascal的工具)历经变迁之后,依然苟延残喘着(它起源于Borland公司,现在抱着Embarcadero公司的大腿)。
早先Delphi和它的Object Pascal语言确实给我们提供了一个良好的工作环境:虽然有点啰嗦,但是编译器很快,而且相比Visual Basic(这里指的是pre-Visual Basic.NET,1995年左右),创建Windows程序更容易。
但是它的优势并没有持续下去。也很难说是什么原因,因为这个平台真心是不错的。就在这时,Borland公司开始在其Delphi的产品线上支持C#和C++。发展到后来,Borland公司甚至直接将Delphi卖给了Embarcadero公司,然后Embarcadero公司继续使用Delphi开发产品。话说,它做得相当不错,但是重点再也不是Pascal了。当然,你依然可以用Pascal编程,但是几乎没人走这条路了。事实上,我们可以使用Delphi建立许多不同的平台,包括iOS、Android,以及Linux操作系统。
但是,如果你去Embarcadero公司的网站看看,你会发现他们主要是在促进Delphi’s C++ 的支持。因此,换言之就是,Object Pascal已然逝去了。写到这里,我不禁悲从心来,因为我花了很多很多时间来学习Pascal语言,特别是Delphi’s Object Pascal。但是没办法,现实就是如此残酷,不转行就只能饿死。
下面请看Object Pascal的代码:
program HelloWorld;begin writeln(‘You say goodbye.’)
译者注:以上观点仅代表作者个人观点,请文明礼貌按秩序吐槽。
那么这将“亡”的五大语言中有你所擅长的吗?
原文链接:
http://http//insights.dice.com/2014/10/09/5-programming-languages
-marked-for-death/uages-marked-for-death/
【end】◆有奖征文◆推荐阅读了解这4个重点,带你探索未来将如何设计智能系统和机器人!IJCAI 2020灭霸式拒稿,AI审稿是否更公平?64% 的企业未实现智能化,5 成公司算法工程师团队规模小于 10人,AI 工程师的机遇在哪里?Docker 开发环境的滑坡比特币Logo背后有哪些历史及象征意义?Logo 上的“B”为什么会向右倾斜?抗住百万人直播、被联合国推荐,起底飞书技术演进之路!你点的每个“在看”,我都认真当成了AI
相关文章:

关于 ulimit -SHn 65535
使用ulimit -a 可以查看当前系统的所有限制值,使用ulimit -n 可以查看当前的最大打开文件数。 新装的linux默认只有1024,当作负载较大的服务器时,很容易遇到error: too many open files。因此,需要将其改大。 使用 ulimit -n 65…

Could not load file or assembly App_Licenses.dll的问题
今天在AspDotNetStorefront做定制化开发,编译的时候莫名其妙地报告Could not load file or assembly App_Licenses, Version0.0.0.0, Cultureneutral, ... (Exception from HRESULT: 0x80070057 (E_INVALIDARG))的错误,检查文件系统,发现文件…
Docker 用法总结之:管理工具 shipyard 的具体使用指南
Docker 的命令行就已经非常好用了,假设非要加上基于 Web 的管理界面的话也有一些选择,如 DockerUI (Angular.js), Dockland (Ruby), Shipyard (Python/Django) 等。只是眼下来看 Shipyard 项目要活跃一点,Shipyard 支持多 host,能…

轻量级简单队列服务HTTPSQS安装与使用
原文地址:http://blog.s135.com/httpsqs 1.安装 wget http://httpsqs.googlecode.com/files/libevent-2.0.12-stable.tar.gz tar zxvf libevent-2.0.12-stable.tar.gz cd libevent-2.0.12-stable/ ./configure --prefix/usr/local/libevent-2.0.12-stable/ make…
GitHub移动端正式发布
整理 | 郭芮图源 | 视觉中国出品 | CSDN(ID:CSDNnews)在去年的 Universe 大会上,GitHub 推出了尚处于 Beta 阶段的移动版客户端(GitHub for mobile),支持 iOS 和 Android 两大主流移动平台。时隔…

手机的定制化需求
根据自身的市场需求,文化环境,业务定位等诸多因素,运营商会对手机提出定制化要求,并指定相应的手机规范。随着差异化竞争和精益经营的不断提高,由运营商提出的手机规范也越来越复杂。据不完全统计(图10-1&a…

oracle 9i 安装及连接远程数据库
用oracle 11g很久了,真的感觉是一个很重量级的客户端,安装都要一个多小时,最近刚开始接触这种精简版的数据库客户端,捣鼓了半天,总算成功。 1.下载客户端 2.安装 傻瓜式安装即可,记得自己的路径。 3.配置环…

FAST-CGI安装与使用
FastCGI 像是一个常驻 (long-live) 型的 CGI,它可以一直执行着,只要激活后,不会每次都要花费时间去 fork 一次 (这是 CGI 最为人诟病的 fork-and-execute 模式)。 1.下载安装fcgi # wget http://www.fastcgi.com/dist/fcgi.tar.gz # ta…

利用 JQuery的load函数动态加载页面
利用JQuery的load函数动态加载页面 JQuery有好多Ajax函数,其中load是用来动态加载一个页面的内容到指定的dom元素上。我们来做个例子:做一个上下(左右)结构的页面,其中下左部分放2个以前我们做过的div按钮,…
教你用Android做二次开发,识别率达到科大讯飞语音输入水平 | 原力计划
作者 | Pek_KuaiJia责编 | 夕颜头图 | CSDN 下载自视觉中国出品 | CSDN(ID:CSDNnews)随着目前用户需求的精细化和智能化,很多时候我们需要在App内集成语音输入模块,为用户提供语音输入的功能。而科大讯飞语音作为行业内翘楚&#…
基于r-Kernel的LiteOS操作系统
LiteOS是应用于资源受限的传感网络的一种基于线程的类UNIX操作系统。也就是说它跑在存储空间和RAM有限的超低电压微控制器上,这也是吸引我关注它的原因(在超低电压下系统更易出错)。它採用r-kernel内核,r-kernel有三个特征&#x…

Linux网络编程中的几组类似功能的区别
1.bzero与memset char buff[1024]; memset(buff,0,sizeof(buff));bzero(buff, sizeof(buff)); struct sockaddr_in addr memset(&addr, 0, sizeof(addr)); bzero(buff, sizeof(buff)); 参考《UNIX网络编程 卷1:套接字联网API 第3版》1.2的解释:…
5个案例让Python输出漂亮的表格!
来源 | Python数据之道前言最近在用python写一个小工具,这个工具主要就是用来管理各种资源的信息,比如阿里云的ECS等信息,因为我工作的电脑使用的是LINUX,所以就想着用 Python写一个命令行的管理工具,基本的功能就是同…

VS2010正式版MSDN下载
之前写了一篇关于微软VS2010发布会的介绍,现在VS2010的正式版也叫RTM版本终于在MSDN开始提高下载了,暂时性的还只有英文版本,不过等等马上应该会有中文的了。 VS2010 RTM下载地址 Microsoft Visual Studio 2010 Premium - ISOMicrosoft Visua…

windows 2012 nps配置
Windows2012 Nps配置windows 2012 nps配置1.安装windows nps角色,安装网络策略服务器及主机凭据授权协议。2.域中注册服务器3.配置网络策略4.按所需添加条件5.运行-mmc-添加 -证书管理单元添加个人证书—申请新证书6.选择ad注册策略即可7.选择radius身份验证—注册8…

使用man在线手册页
#man -k 函数 #man 返回的数字 函数 # man -k file | grep umask要查看linux下的函数umask 可以使用man,例如 # man 2 umask 如果不知道man后的节号,可以使用-k先查找 # man -k umask 如果使用-k返回太多内容,可以使用g…
Python爬取近十万条程序员招聘数据,告诉你哪类人才和技能最受热捧! | 原力计划...
作者 | Huang supreme编辑 | 郭芮出品 | CSDN博客图源 | 视觉中国随着科技的飞速发展,数据呈现爆发式的增长,任何人都摆脱不了与数据打交道,社会对于“数据”方面的人才需求也在不断增大。因此了解当下企业究竟需要招聘什么样的人才ÿ…

论爱的精进与痴迷
文:洪启嵩 汝爱我心,我怜汝色。以是因缘,经百千劫,常在缠缚。──《楞严经》 爱情为什么是轮回的根由,《楞严经》里有一段话说得很清楚:「汝爱我心,我怜汝色。 以是因缘,经百千劫&am…

[原] Jenkins Android 自动打包配置
一、Jenkins自动打包配置 目标:1. 自动打包;2. 自动上传;3. 友好下载 1. Jenkins简介 Jenkins是基于Java开发的一种持续集成工具,用于监控持续重复的工作。 减少重复劳动,减少人工成本。 持续、自动地构建/测试软件项目…

盛大文学难逃“垄断”嫌疑,完美文学虎口夺食
观点:盛大文学已难逃“垄断”嫌疑;完美文学强攻文学阵地,与盛大文学发生正面冲突已成定局。盛大文学频频出手,在3个多月的时间里,先后收购榕树下、小说阅读网、言情小说吧和潇湘书院4家网站,加上此前拥有的…
GitHub接连封杀开源项目惹众怒,CEO亲自道歉
作者 | 唐小引图源 | 东方 IC来源 | CSDN(ID:CSDNnews)王坚博士曾经做过这样一个非常形象的比喻,他将做 App 比作是在别人的花园里弄盆栽,「种点花草是没有问题的」,不过「别人叫你的产品下架你就得下架&am…

Phabricator是什么,代码审查工具
Phabricator是什么? Phabricator支持两种代码审查工作流:“review”(提交前审查)和 “audit”(提交后审查)。 Phabricator是Facebook保驾护航的11大IT技术之一。在Phabricator的网站中,开发者给…

结构体中定义函数指针
结构体指针变量的定义,定义结构体变量的一般形式如下: 形式1:先定义结构体类型,再定义变量 struct结构体标识符 { 成员变量列表;… }; struct 结构体标识符 *指针变量名; 变量初始化一:struct结构体标识符…

对卫星网络及内容的安全防护措施
对卫星网络及内容的安全防护措施 网络安全是多领域的综合业务,近10年来在规模和范围方面都获得了极大的发展。对网络及内容潜在的威胁来自各类不同的领域,因此增加了解决这一问题的难度。 在因特网产生之前,对卫星网络及内容实时***的安全防护…
对标Pytorch,清华团队推出自研AI框架“计图”
「AI技术生态论」 人物访谈栏目是CSDN发起的百万人学AI倡议下的重要组成部分。通过对AI生态专家、创业者、行业KOL的访谈,反映其对于行业的思考、未来趋势的判断、技术的实践,以及成长的经历。2020年,CSDN将对1000人物进行系列访谈࿰…

echo使用说明,参数详解
简介 echo [OPTION]... [STRING]... 描述 -n 末尾不加换行 -e 开启输出字串中对反斜杠的转译 -E 禁用反斜杠转译 只有开启-e参数的时候,下面的命令才能起作用: \0NNN 输出NNN(一个八进制数)在ASCII码表中对应的字符, …
ATSS : 目标检测的自适应正负anchor选择,很扎实的trick | CVPR 2020
作者 | VincentLee来源 | 晓飞的算法工程笔记论文地址:https://arxiv.org/abs/1912.02424代码地址:https://github.com/sfzhang15/ATSS在仔细比对了anchor-based和anchor-free目标检测方法后,结合实验结果,论文认为两者的性能差异…

GCC编译选项--创建与使用库
系统函数库使用 linux系统函数库位于/usr/lib和/lib目录下 #include <math.h> #cc test.c -lm -o test 动态库创建 1).编译时指定-fPIC 通知gcc产生可以重定位的与位置无关的目标代码 2).链接时指定-shared 使gcc编译器生成动态链接库 动态库使用 通过设置环境…

不错的×××实验
(virtual private network 虚拟专网),利用公用网络,按照相同的策略和规则,建立内部私有连接。 广泛的讲,***体系结构分为:站点到站点的***和远程访问*** 站点到站点的***:在这种情况下,同一个机…
达观数据于敬:个性化推荐系统实践
达观数据于敬:个性化推荐系统实践 在DT(data technology)时代,网上购物、观看视频、聆听音乐、阅读新闻等各个领域无不充斥着各种推荐,个性化推荐已经完全融入人们的日常生活当中。个性化推荐根据用户的历史行为数据进行深层兴趣点挖掘&#…