动态还是静态,这是一个问题。

逆向攻防世界CTF系列40-ReverseMe-120 注意sub_401000main中只传了两个参数,但是跟进后发现四个(可能是隐式传递,放在寄存器里传递了),调试发现a4是输入长度,与最终的you_know_how_to_remove_junk_code比较的是v12(但是并没有被传入),开始怀疑是不是隐式传递了。_mm_xor_si128用于计算128位(16字节)的按位异或,然后通过v14控制循环结束的条件,可以看到v14增长的步长为16,而且通过上面得到的flag值解码得到的字符串为32个字节大小,正好是16的整数倍。 阅读详情

“

静态语言好还是动态语言好,这可能是个一直争论的话题。Ranmocy有着丰富的工作经历(创业公司,Twitter,Google),听听他是怎么说的。 

作者:Ranmocy 燃魔蜥

来源:https://ranmocy.me/remark/动态还是静态/

起。曾经的动态类型语言粉丝

我曾经是一个 Ruby Developer。 

我写了差不多4年的 Ruby,曾经是一个强烈的动态类型语言支持者, 我想这很大程度上源于我对 Ruby 的喜爱。 Ruby 的设计良好,书写起来很程序员友好。 

所以当时的我认为,Ruby 的各种设计都是良好的,包括动态类型这一点。 之前写过一些 Pascal 和 C,让我认为不停的声明变量的类型完全是多此一举的事情,你看,我不声明类型,Ruby 写的也很愉快和正确呀。 但是后来的经历告诉我,静态类型语言,尤其是在大型项目中,如此长盛不衰是有原因的。

承。我是动态类型语言粉丝了好多年

一开始我一直都是在写 Ruby on Rails。 因为我喜欢快速回馈,简单快速的就可以看到自己修改的成果。 过去在 GitCafe 创业,Startup,项目不大,没大到需要拆分代码库的程度。 

Ruby 和 Ruby on Rails 在这种快速迭代不停转型的场景下基本就是大杀器。 代码行数和字符数都很少,写起来读起来都很快。 代码表意丰富,语义简单,连测试都不用写,因为代码好读,而且业务变化快,写出来的代码都不知道会生存多久,不清楚的地方写个注释就是了。 那时候逢人便会推销 Ruby。 It just works。

之后去 Twitter 做了一暑假的实习。 同样是在写 Ruby on Rails,只不过项目很大,大到所有人都想拆分代码库就是拆不了的程度。 同时又写了很多 Javascript 的代码,同样都是动态类型的语言。

那时候我的世界里都是动态类型的语言,我觉得静态类型的语言都是老古董,已经上不了舞台了,还在台上的都是公司太大没法迁移到另外的语言平台而造成的,你看,Google 这么大的公司都不抱着 Java 不放开始启用 Python 了,是吧。

不过在 Twitter 的经历让我隐约感觉这些代码读起来都不太痛快,代码跳转也比较痛苦。 我想代码库大了可能都这样。

转。岔路另一边我从未见过的美丽景象

转折点是我 Master 的最后一个学期。 这个学期之后两门课,一门是 Operating System,最后一个项目用 Python 写分布式计算系统 Spark 的扩展版本; 另一门是 Principal of Software Development,最后一个项目用 Java 写 Web 邮件客户端的后端 API 服务器,前端我选择用 Javascript 写单页面应用。


Java 我用的 IDE 是 IntelliJ IDEA 14;Python 和 Javascript 用的是 Sublime Text 3。 这是我第一次用 Java 写这么大的项目,而我以前却有还不错的 Javascript 的经验。 但是即使在我 Java 代码行数比我 Python 项目和 Javascript 行数加起来还要多的情况下, 我仍然感觉书写 Java 要轻松许多。 虽然并非是客观的对比测试,但是却让我重新思考了静态类型和编程系统的价值。 这也同时让我重新思考了 IDE 的价值,要知道我原先是个狂热的 Editor 支持者和 IDE 的贬低者。

到现在,我到 Google 开始工作,才发现在一些简单的工具的帮助下,即使是超大代码库,Java 依旧可以保持良好的可读性和重构性。

Java 是一个非常结构化的语言,它要求写作者把每个对象的各种属性都写到字面上,比如某个类的所有属性,属性的类型,和特性(final,volatile,static 等)。 虽然多了很多字符,但是给读者带来了非常多确定的信息,而不需要隐式的让读者自行判断与推导,这隐式的判断在动态语言中是非常普遍,甚至是根基。

我在进行 Ruby 开发的时候就会经常遇到有歧义或是有过多暗示、假设与类型推导, 因为语言把这些都给隐藏了,所以写代码的时候不用写他们,所以减少了很多代码量。 但是这些都需要阅读的时候自行脑补,所以阅读的时候会加重读者的负担。 所以开发的时候往往为了提高可读性,会将相关信息写到变量名中去。 比如我在写 Javascript 的时候会习惯把类型写到变量名的后缀中去:data_hash,并把哈希结构写到注释中去,不然很快在几个 map,reduce等数据转换函数的调用之后,自己就会迷失在数据结构之中。

信息字面化的另一个好处是静态处理和分析,由于所有的东西都在纸面上,编译期就可以知道所有 symbol 所指的对象的各种信息,使得 IDE 里的语义化重构工具和跳转工具变得非常容易; 相对的,动态语言甚至难以确定 symbol 的类型,更不要提其对应的方法。 Ruby 的method_missing给了写作者至高无上的动态方法能力, 却是 Ruby 的 IDE 几乎无法实现那些辅助工具,而这些小工具对于实际开发流程有非常大的促进作用。

合。天下分久必合

所以我想,动态语言和静态语言是两个方向,各有优劣,各有取舍。

直到我看了《七周七语言》。

这本书是本非常值得一读的书。 它跳过语法的例举,而专注于每一门语言最独特的特性,使得这本书每一页都意味十足,值得一读。 在这本书里,最后描述的语言,也是令我印象最深的语言是 Haskell。

Haskell 这门语言很有趣,是开源界少有的直接由委员会制定和发展的语言,而且却设计的很完善。 很多委员会由于纷争,使得设计支离破碎。 据一位委员所说,这是因为委员会的成员从一开始就在很多基础问题和设计方向上达成了一致。

Haskell 给我印象最深的特性是类型推断和函数泛型。

Java 里面,一个变量的类型是要写下来的,一个函数的参数和返回值的类型也是要写下来的。 Ruby 里面,都不要写。 Haskell 里面,不是必须写的可不写。

这带来了一个巨大的好处:保持语言静态特性的同时减少了大量代码。

(码农翻身注:Java 10 引入了变量类型的推导,可以用var来声明变量)

想象一下,当我们将1+1赋值给变量a的时候,a的类型是如此明显,而再声明其是int实在是多此一举。 而在这种情况下,类型推断系统就可以帮助作者推理出这些变量的类型,所以写作者便可略过这些声明。 如果推断系统无法判断类型,便会提示作者增加类型声明。 而由于类型在编译期间就已经是可知的了,所以各种静态分析工具依然可以发挥作用。

函数泛型也有同样的好处。 如果你不声明类型,函数会默认推断出最上级、适用范围最广的类型。 缩小适用范围,意味着更多的检查,所以才书写更多的代码。

这意味着类型检查不是强制的,而是按需的。

所以我想说的其实就是一句话: 静态类型的语言会需要越来越少的代码; 动态类型的语言会增加越来越多的检查。

世界大同,万物归一。

(完)

你看到的只是冰山一角, 更多精彩文章,请移步《2016文章精华》或者《2017文章精华》


码农翻身

用故事讲述技术

640?wx_fmt=jpeg

SE模块理解+SE-Resnet模块pytorch实现 文章目录SE模块理解SE实现注意力机制原因SE-resnet网络pytorch实现定义residual定义SE模块 SE模块理解 SENet是Squeeze-and-Excitation Networks的简称,拿到了ImageNet2017分类比赛冠军,其效果得到了认可,其提出的SE模块思想简单,易于实现,并且很容易可以加载到现有的网络模型框架中。SENet主要是学习了channel之间的相关性,筛选出了针对通道的注意力,稍微增加了一点计算量,但是效果比较好。 SE模块广泛应用于去噪,去雨方向,利用SE模 阅读详情

相关推荐

汽车软件工程师必看:ASPICE开发流程全解析(附各阶段交付物清单)

本文全面解析了汽车行业广泛采用的ASPICE开发流程,详细介绍了从需求挖掘到系统架构设计、软件工程及测试验证各阶段的关键操作和交付物清单。针对汽车软件工程师,提供了实用的协作指南和工具推荐,帮助团队提升开发效率并降低项目风险,是掌握ASPICE标准的必备指南。

weixin_30733003的博客 649

问题分动态静态,解决方案也是

解决问题的方式,心得

SanShanYaoWuYue的专栏 260

TI理想二极管在冗余电源中应用实例

深入探讨理想二极管如何提升冗余电源系统的效率与可靠性,通过实际应用案例展示其在电流隔离和自动切换中的优势,帮助工程师优化电源架构设计。

weixin_30653091的博客 993

动态和静态

在编程里经常听到动态和静态这样的词汇,如何理解动态和静态呢? 我个人的理解:   所谓动态,就是程序要实现某功能时,无需先中止程序,再修改代码实现功能,就可以实现该功能   比如一个web页面,后台数据变了,前端的展示也随之改变,页面根本不需要修改,我们称之为动态展示数据;   还有python的动态类,程序运行时就可创建新的类,而无需先停止程序,然后再手工创建一个新类   所谓静态,就是程序要...

立业的博客 1846

4.图像sensor的特性和驱动解析

例子:sensor驱动自己提供操作曝光时间的函数和获取曝光时间的函数,然后将这个函数注册到ISP库和3A算法库,3A算法库根据外部光照强度计算出一个Sensor曝光时间的设置值,ISP库得到这个设置值,然后通过Sensor之前注册的回调函数,把这个值设置到Sensor的硬件寄存器中去,实现整个过程。是为 ISP 配置正确的输入时序。(1)修改驱动源码(sambashar\Hi3518E_SDK_V1.0.3.0\package\mpp\component\isp\sensor\ar0130)

weixin_53762042的博客 3569

【已解决】飞牛nas(fnOS)异常断电导致硬盘未挂载(无法挂载),系统内部错误修复、救回数据全流程!(含更新系统后外接 NTFS 格式硬盘丢失的修复方法)

fnOS 飞牛NAS遭遇非正常断电后,存储空间显示「未挂载」或更新系统后外接 NTFS 格式硬盘丢失,点击挂载提示「系统内部错误」!💥 博主已经完美恢复,本文记录了相关的解决方案,帮您恢复或最大程度保住重要数据🎉

XiaoqiangClub的博客 2289

静态库和动态库的创建,遇到的问题与问题解决方法

静态库和动态库的创建流程,命令与图片全流程教学,以及可能遇到的问题和问题的解决方法

m0_68210771的博客 790

8.DJI-PSDK:一站式项目功能开发总结(空中气象站项目/激光甲烷检测项目)

本文将以一篇文章的幅度快速完成: 项目一:空中气象站项目; 项目二:激光甲烷项目; 项目所使用的PSDK来源于第0章节末尾的百度网盘;解压:Payload-SDK-3.8.zip代码所在目录:双击打开: 修改打印串口和相关波特率,我们修改如下: 进行相关编译选项配置如下: :

哒宰的博客 294

静态优化问题与动态优化问题

静态优化问题:一次性决策,不考虑时间变化,目标函数和约束是固定的。动态优化问题:决策随时间演化,未来的决策影响当前决策,目标函数和约束可能随时间变化。

qq_51352578的博客 1145

北斗导航 | 卫星信号捕获跟踪原理解析

卫星信号的捕获与跟踪是导航接收机的"眼睛",其性能直接决定定位精度、动态适应性和抗干扰能力。随着北斗三号全球组网完成,新一代接收机正朝着。两大核心阶段,二者共同构成定位的基础。调制,频谱主瓣宽度达4.092MHz,较传统BPSK调制抗干扰能力提升3dB[38]。的目标持续演进,在自动驾驶、精密农业等领域展现出巨大应用潜力。二维空间中搜索峰值相关能量[4]。卫星导航接收机对信号的处理可分为。北斗三号B1C/B2a信号采用。北斗三号新增的B1C信号采用。

尘世冰封的专栏 783

5 分钟上手 Kimi Work:安装、配置、跑通第一个任务

这篇文章提供了Kimi Work的快速入门指南,帮助用户在5分钟内完成从安装到运行第一个任务的全过程。主要内容包括: 安装步骤: macOS用户下载.dmg文件并拖入Applications Windows用户下载.exe安装包,需注意中文路径问题 初始设置: 使用现有Kimi账号登录 检查任务配额和文件访问权限 首个任务推荐: 建议从简单的本地文件整理开始(如按类型分类桌面文件) 详细说明了任务执行流程和审批机制 常见问题: 计划生成卡顿的解决方法 文件无变化的排查步骤 进阶建议: 提供难度递增的后续任务

sg_knight的专栏 2801

静态错误与动态错误

  程序员编写的源程序中往往会有一些错误,这些错误大致被分为静态错误和动态错误两类。   所谓动态错误,是指源程序中的逻辑错误,它们发生在程序运行时,如算法逻辑上的错误。   动态错误也被称为动态语义错误,如变量取值为0是被用作除数,引用数组元素时下标出界等。   静态错误又可以分为语法错误和静态语义错误。词法和语法错误是指有关语言结构上的错误,如单词拼写错误就是一种词法错误,表达式中缺少操...

weixin_33809981的博客 1179

运放单电源供电和双电源供电的实际应用案例

文章摘要:本文对比分析了运放单电源与双电源供电的典型应用场景及电路设计要点。单电源供电适用于低成本、小体积设备,如便携音箱(5V供电+中点偏置)、工业4-20mA信号转换(12V供电+电压跟随)和物联网传感器(3.3V低功耗设计);双电源供电则适合高精度要求场景,如Hi-Fi音响(±15V对称输出)、医疗设备(±5V微弱信号放大)和精密仪器(±15V宽动态范围)。文末提供常见运放选型对照表,涵盖LM324、TL082等型号的供电参数与核心特性,为不同应用场景提供选型参考。(149字)

qq_37999850的博客 611

动态还是静态,这是一个问题

我们经常会讨论到网页内容的动态和静态的问题,这是一个没有唯一答案的话题。 1.静态,我们损失了灵活性,意味着,任何用户在任何时候看到的效果都是一样的。 2.动态,我们得到了灵活性,意味着,我们可以根据用户的不同,时间的不同,或者仅仅是我们高兴不高兴,来决定要怎么输出内容到浏览器。 但是,动态的功能增加了服务器的负担,是因为动态页面(或者其他动态资源),他们不可能被浏览器缓存,换句话说,浏览器因为认

陈希章@中国 842

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

linux下静态加载一个动态库出现的问题

最近在工作中碰到一个问题,虽然问题已经解决,但是还是不太明白具体原因,为什么会出现这个问题。程序结构:     有两个动态库A.so和B.so, 并且A.so静态加载了B.so。同时A和B同时有一个相同的类C, (为了下边的清晰暂且叫AC类和BC类,其实就是一个类),  BC类新添加函数fun1, AC和BC相同的函数fun。 B中有一个C的实例objectBC。fun和fun1内容为:     

龙宇网的专栏 708

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

一个参数问题 关于动态和静态

代码g.drawString("Hello World!", 0, 0, g.TOP | g.LEFT); 警告 The static field Graphics.TOP should be accessed in a static way ll.java 00/src line 25 Java Problem 请高人指点.

zhiting1322的博客 299

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

Linux动态库(.so)链接探究同一个动态库被间接链接多次时类内静态变量使用问题(附带c++源码解释)

  介绍一种场景,有一个抽象基类生成了一个动态库,记为libcompo.so,继承该基类的具体实现有两个组件,也各自生成了动态库libcompo1.so和libcompo2.so,由于使用到了基类,因此这两个库也是会分别链接基类库的,也就是libcompo.so,然后在可执行文件里,我们为了软件各个组件之间的解耦通过反射技术注册的方式动态加载具体组件,因此可执行文件只用到了该抽象基类的指针,只需要在编译时链接libcompo.so即可,在运行时通过dlopen()加载生成的动态库即可完成工作。   最终软件

weixin_45878768的博客 2156

一个蛋疼的动态库和静态库问题

平台:vs2005 vs2010 公开库:cripto ++   开始的编译的时候一直用的是vs05工程也都是05,但是当想转到10的时候,发现原来的那些库函数都找不到解释了   反复对比了一下代码生成模式也是一样的,蛋疼的,其实偶一直没发现vs的版本在升级,对应的cr

wildwild1的专栏 522

当同时使用Animation和matplotlib标准库同时展示动态图和静态图时,只能展现一个的问题解决

当同时使用Animation和matplotlib标准库同时展示动态图和静态图时,只能展现一个的问题解决 最近在项目中,需要对实验数据进行可视化,需要首先呈现静态的图片来刻画整体轨迹,第二步对每一步的轨迹逐帧刻画,用animation展示出动态图效果,但是只能展示出俩静态图,无法呈现动态figure,整理了思路,尝试了multiprocessing 的方法和thread的方法,发现都无法正常显示,最后找到原因如下: 当你的图片刻画没有完成的时候,一定不要写: plt.show() 这一句话一定套在最后写一次

DanielSmith 399

用objective-c开发的第一个mac程序(3)——动态库与静态库的问题

打包之后,在测试电脑安装后,程序需无法运行,错误是缺少链接库的错误: 错误代码:xxxxxxxxxxxx在windows下,只要是将动态库放到可执行文件相同目录下就可以了,但是mac则不能使用这样的方法,拷到目录下运行依然出错; –> 发现mac下的app是一个目录(这个根win的exe有很大区别),那拷到xxxx.app/Contents/MacOS/目录下也是不行; –> 问了老大,放在x

Pandora's Daddy的专栏 2080

分别使用静态数组与动态数组建立一个区域 - 回复 "老A123" 的问题

问题来源: http://www.cnblogs.com/del/archive/2008/05/26/1207811.html#1475006 本例效果图: 代码文件: unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls,...

weixin_34112900的博客 97

iOS 多个动态库依赖相同静态库问题

一.背景 最近遇到一个问题,如下。 objc[18116]: Class GPBBoolBoolDictionary is implemented in both xx/QLVPlatformFramework (0x1113481b0) and xx/QLVEngineFramework (0x10fde7108). One of the two will be used. Which one is undefined. 问题很简单,是一个类在两个动态库都有实现。搜一下这个类,是一个静态库的,l

qq_36999309的博客 2373

g++动态库静态库混合链接

今天编译一个程序时报错: g++ -static -o echo.fcgi echo_adaptor.o echo.o -L/usr/local/lib/ -lfastcgipp -L/usr/lib/ -lboost_thread -pthread -lboost_system -lboost_date_time -L/home/chu/lib/ -lwebframework -...

CX1859的博客 570

关于jsp的静态和动态引入文件问题

jsp文件在创建后并不会立即被编译成.class和.jsva文件,而是在访问后才被编译。 静态引入就是根据include指令来引入的,在这里当引入.jsp文件时,该.jsp文件会与主文件编译为一个servlet( JSP文件被转换成Servlet的时候引入文件,两个文件被同时编译执行),这里需要注意引入时路径的问题,.jsp里面不能有相同的path和basepath,比如主文件 被引

hzj545的博客 726

静态库通过动态库菱形链接共享

菱形 可执行程序 test 动态库 libcat.so libdog.so 静态库 libstatic.a libcat.so 依赖 libstatic.a libdog.so 依赖 libstatic.a test 依赖 libcat.so libdog.so 问题:静态库 libstatic.a 中的变量和函数会在 test 中存在两份吗? 答案:只会使用一份 工程 结构 ··· . ├...

Nuck_Cat的博客 417

静态NAT和动态NAT实验

R1-GigabitEthernet0/0/1]ip address 200.1.1.1 29 //掩码是29。[R1-GigabitEthernet0/0/1]ip address 200.1.1.1 29 //掩码是29。以后PC1在访问公网的时候,PC1发送的数据包到达R1的g0/0/1接口的时候,这个接口会将PC1发的。数据包回来的时候,转换目的IP: 将目的IP由公有IP地址,转换为私有IP,源IP不变。第一步:给PC1/PC2/Server1配置接口IP地址,掩码,网关。

weixin_55932038的博客 661
上一篇: 千呼万唤始出来
下一篇: 编程新手如何快速提高开发能力?
码农翻身
码农翻身 《码农翻身》作者 《码农翻身》作者
博客等级 码龄8年 3万+粉丝 1084原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值