为什么选择Python(Perl、Tcl、Python比较)
xsobi 2024-11-26 10:17 1 浏览
有个后端朋友问我,在芯片设计领域为什么选择Python,而不是Perl或Tcl?我才突然意识到,写了这么多天的《Python在ASIC中的应用》系列文章,居然忘了对比介绍Python、Perl、Tcl的优缺点。因此我周末抽空写了这篇文章。
本文包括以下内容。共计1900多字,阅读时间大概10分钟。
- 了解Python发展的大背景
- Perl语言的优缺点
- Tcl/Tk语言的优缺点
- Python在ASIC领域的应用
- 总结
了解Python发展的大背景
我们都知道现在python很火。小到python在学校受到前所未有的重视(如,被编入小学教材,纳入浙江省高考范畴,成为全国计算机二级考试科目)。大到Python是人工智能AI的主要编程语言之一(如,google的TensorFlow,facebook的PyTorch)。
为什么火?就是因为Python简单易学、完善的面向对象(封装、继承、多态)编程。
简单易学体现在Python的语法格式上,强制利用缩进来规范代码风格,不能随意换行等。简单易学还体现在Python的设计思想“只用最好的方法做一件事”。正因为简单易学,所以小白容易入门,小学生有了python的入门课程,社会上有了python兴趣班,出现了《python for kids》、《learn to program with minecraft》这样的儿童书籍。
面向对象的特征使得python具有了像C++那样的建模能力。在软件开发初期时,常常被用来快速建模,只需要把其中对性能有要求的功能模块改用C++实现即可。
由于上面的优势,各行各业都开始使用Python。Web开发、游戏脚本、网络攻防、大数据分析、计算机视觉、机器人开发、人工智能AI等。连微软的office编程也在计划支持python语言。
Python也有缺点。我们知道Python有两个版本,Python2和Python3。Python3设计时没有做向下兼容,这使得2和3的语法有较大的不同,给初学者带来很大的困惑(关于版本的选择,我的建议是直接学习Python3)。但换个角度看,正是这种破釜沉舟的精神使得Python保持了简洁。
Perl语言的优缺点
Perl语言是由C、Sed/Awk、Shell、Basic、Pascal等语言发展而来,因此语法类似C语言,相对容易学。Perl作为一种粘合语言,功能强大、实用,而不是优美、简洁,就像它的标志骆驼(据说是O'Reilly出版社首先使用),“有点难看,气味不好,但干起活来好使唤”。
正因为Perl结合了多种语言的优势,功能变得非常强大和灵活。perl语言最初被设计用来就处理log等文本文件,因此内嵌了功能强大的正则表达式,这也是perl语言的灵魂所在。
perl语言的强大离不开CPAN库。CPAN也是广大开发者学习交流的平台。据官网介绍,从1995年至今,有13,343位作者提交了194,785个perl模块(这一数字每天都在增长,我验证过这一点,连续看了三天),并镜像在全球256个服务器上。
Perl语言正是因为它的灵活多变,每个人写出来的代码风格可能完全不一样,甚至同一个人每次写出来代码也不尽相同。有时候把自己一两个月之前写的代码拿来看看,都不一定能一下看明白。不少初学者就被$ @ % $ @ $1
Tcl/Tk语言的优缺点
Tcl语言语法规则简单,任何语句都看起来像一条Linux命令。因此Tcl语言简单易学,入门零门槛。
Tcl语言,正如它的名字Tool Command Language,常常EDA软件结合比较紧密,像前端的vcs、modelsim、dc,后端的icc都支持tcl语言。因此,我们常常在用EDA时,不经意之间就学会了一些基本的Tcl语法。
Tcl语言把一切都看作字符串,有丰富的字符串处理函数(比Python还要多出不少)。Tcl语言有正则表达式,适合做复杂的文本处理,如自动分析log文件。另外Tcl语言常常用来做综合、PR、LEC、STA的flow。
由于Tcl原生支持tk库,因此被很多后端工程师用来做带图形界面的小工具,以辅助后端设计。事实上,现在tk库也被其他动态语言,如Perl、Python支持。
Tcl类似Linux命令的语法也有缺点。每个命令的参数很多,不容易记住。Tcl程序语言上不如Perl和Python灵活,写大程序时相对臃肿很多。
Tcl语言本身不支持面向对象,需要利用C++或Java来扩展。这也是一个很大的缺陷。
Python在ASIC领域的应用
最后再回到Python语言上来。在ASIC领域,Python的应用已经无处不在。我简单罗列了一下我所知道的应用:
- 算法开发(代替Matlab或C语言)
- Git database创建和维护、自动生成Makefile等
- 寄存器数据库管理、读写Excel、XML、Json等格式的配置文件
- RTL模板、部分RTL自动生成、顶层RTL自动连线等
- 测试激励生成、验证脚本(前仿、后仿、回归测试)
- 自动产生及配置UVM环境
- 直接或间接维护前后端Flow(包括利用模板实现后端通用Flow)
- 利用脚本修改数字网表、模拟Spice网表等
- 前后端的报告分析、及可视化(图表分析)
- 前后端GUI图形界面(支持Tk,QT,wxPython等库)
- 辅助FPGA验证、测试
- CP测试、良率分析,及可视化
- 辅助芯片应用、测试
- 项目管理、日报周报及绩效管理系统、BUG跟踪管理等等。
因此,我们几乎可以说Python能做一切你想做的事情。
总结
Python从语言本身到应用大环境都有绝对的优势,所以ICer们不要再犹豫,赶紧学起来用起来。
但是不是说我们只学Python就够了呢?不是的。我们实际做项目时,需要从方便、简洁、快速等角度,根据各语言的优缺点,择优而用,甚至多种语言混用。
相关推荐
- 斗鱼针针成旻云个人资料 针针年龄身高演艺经历介绍
-
[闽南网]针针成旻云曾是七煌旗下签约艺人,经常在斗鱼进行直播身高超过170cm的她更因为有一双大长腿而被称为“斗鱼第一美腿”、“电竞第一腿”。本文这就来对针针的个人资料进行详细介绍,想知道她的年龄身高...
- 轻量级RTSP服务模块和RTSP推流模块适用场景区别
-
好多开发者一直搞不清轻量级RTSP服务SDK和RTSP推流SDK的区别,以下是相关区别:1.轻量级RTSP服务模块:轻量级RTSP服务解决的核心痛点是避免用户或者开发者单独部署RTSP或者RTMP服...
- 《新·奥特曼》11月18日国内视频平台上线
-
《新·奥特曼》海报。新京报讯11月14日,由上海新创华文化发展有限公司授权引进电影《新·奥特曼》宣布正式定档11月18日(周五)00:00上线视频平台,上线版本为日语配音中文字幕版。影片由庵野秀明(...
- 剑指Apple Watch!Android Wear也将支持视频功能
-
想必智能手表发展到现在,大家最期待的还是视频功能,近日AndroidWear就实现了这一功能,以后就能在手表上看视频了,想想就挺激动的,快来看看吧!其实早在WWDC大会上,老对手AppleWatc...
- QT应用编程:基于VLC开发音视频播放器(句柄方式)
-
一、环境介绍操作系统:win1064位QT版本:QT5.12.6编译器:MinGW32VLC版本:...
- OBS 源码分析 obs开发
-
本文将按照数据源的获取、渲染、推送的直播流程来让大家深入了解一下。1、直播源数据获取obs在启动时会优先加载libobs核心库,这个库初始化obs很多内容,包括crash模块、com、性能监...
- Android和iOS端Moments更新:支持视频分享功能
-
Moments是社交网络巨头Facebook推出的一款私人照片分享应用,今天公司宣布对Android端和iOS端应用同时升级,新增对视频分享功能的支持。事实上早在数周之前,Facebook就曾表示Mo...
- 您很快就可以在Android Galaxy设备之间传输视频通话
-
在阅读此文之前,辛苦点击右上角的“关注”,既方便您进行讨论与分享,又能给您带来不一样的参与感,感谢您的支持!导语:在科技领域,每时每刻都有新的发展,令人兴奋的创新不断涌现。早在八月份,Android系...
- 一篇文章带你FFmpeg到流媒体服务器开发
-
安装ffmpeg:下载FFmpeg和libx264的包ffmpeg-2.4.1.tar.bz2last_x264.tar.bz2libx264需要yasm,所以先安装yasmapt-getinst...
- YouTube 为 Android 平台提供 1440P 视频
-
安锋网8月10日消息,Android从起初的480P的屏幕分辨率发展到2014年的1440P花了将近六年的时间,一般认为1080P的屏幕分辨率已经是人眼可以识别的极限,但是...
- FFmpeg 调用 Android MediaCodec 进行硬解码(附源码)
-
FFmpeg在3.1版本之后支持调用平台硬件进行解码,也就是说可以通过FFmpeg的C代码去调用Android上的MediaCodec了。在官网上有对应说明,地址如下:trac....
- Android FFmpeg + OpenGL ES YUV Player
-
1、FFmpeg解出YUV帧数据1.1方法介绍打开封装格式上下文...
- 基于WebRTC的Android移动端无线视频传输
-
摘要:视频传输技术在现代社会广泛应用,人们对其的要求也越来越高,其发展的趋势是方便、快捷、随时随地。传统的视频传输过于依赖线路,线路的走向限制了传输的很多可能,所以无线传输才是发展的方向。本文提出...
- 使用python爬取抖音app视频 python爬取抖音视频数据
-
记录一下如何用python爬取app数据,本文以爬取抖音视频app为例。编程工具:pycharm...
- Android IOS WebRTC 音视频开发总结(七七)-- WebRTC的架构和协议栈
-
本文主要介绍WebRTC的架构和协议栈(我们翻译和整理的,译者:litie),最早发表在【编风网】为了便于理解,我们来看一个最基本的三角形WebRTC架构(见下图)。在这个架构中,移动电话用“浏览器M...
- 一周热门
- 最近发表
- 标签列表
-
- grid 设置 (58)
- 移位运算 (48)
- not specified (45)
- patch补丁 (31)
- strcat (25)
- 导航栏 (58)
- context xml (46)
- scroll (43)
- element style (30)
- dedecms模版 (53)
- vs打不开 (29)
- nmap (30)
- c 视频教程下载 (33)
- paddleocr (28)
- listview排序 (33)
- firebug 使用 (31)
- transactionmanager (30)
- characterencodingfilter (33)
- getmonth (34)
- commandtimeout (30)
- hibernate教程 (31)
- label换行 (33)
- curlpost (31)
- android studio 3 0 (34)
- android开发视频 (30)