百科问答小站 logo
百科问答小站 font logo



近十年来编译器有哪些关键的技术进步? 第1页

  

user avatar   zhao-ce-33 网友的相关建议: 
      

看了下日志,这是2014年的问题,现在是2021年,正好我们回头看,这7年以来,编译器都发生了什么变化

我看了一下其他回答,感觉很多人的预言显然都说错了

比如动态类型语言,脚本,从最近几年的发展趋势上看,脚本正在逐步淡出主流视野,也就是,脚本真的很难继续优化下去了

一个典型案例就是flutter team,eric的访谈,里面就有说到,为什么会有flutter呢?flutter team最早是做web的,他们那一群人,就是想办法去优化web上那一坨东西,比如html,js那些东东,最后实在是优化不动了,想了想,算了吧,别搞了,从头设计,把web上那一堆东西全部丢掉,从编程语言开始做编译器,然后让编程语言针对需求目标做改动,然后把东西做出来,测试了一下,哇哦,发现比web上那一堆东西啊,快了21倍,于是就有了flutter

那这说明什么呢?恰好说明了动态类型语言发展的困难,在编译这一层面上,理论上说,动态类型语言,能不能编译成机器码?

理论上可以

但实际上呢?

谷歌搞这个都搞砸了,所以我不太相信有什么企业还能继续搞下去,我对此看法极为悲观,我认为10-20年内,不可能有这种东西出现,甚至可能永远都不会有动态类型语言编译成机器码的编译器出现

尤其是javascript和python等老一辈脚本语言

而且你看,谷歌后来为了flutter,能够编译成机器码,对编程语言dart做了哪些改动?

dart最早是设计出来做成一个更好的js用的,dart最开始可以编译成js,但是flutter之后,dart从1.0升级到2.0的时候,dart就从原来的动态类型(也就是类似js)改成了静态类型(类似java),我相信谷歌曾经尝试过,把动态类型语言,也就是js那些,给编译成机器码,也就是对js等语言做aot处理,但是他们失败了,就是eric在访谈中暗示的那样,他们搞砸了,所以他们干脆就放弃了动态类型语言,转而改为静态类型语言,并将其编译成机器码,于是就有了flutter

所以从谷歌的经历上看,对于动态类型语言,尤其是javascript,python等脚本语言而言,能做到jit和足够好的gc,就是它们的极限了,如果想进一步编译成机器码,也就是aot的话,需要改成静态类型,否则,你多半要搞砸,因为eric他们都搞砸了,我不认为你比他们技术实力更强

然后我们再来看其它的编译器,因为谷歌搞砸了,没准其它的能搞成呢?

多语言的编译器呢?比如graal

嗯,很不幸,一样没戏,graal的aot功能,目前也只针对能够编译成字节码的语言,比如java,而且对动态功能,比如反射,有很多限制,你要手动配置哪些类用到了反射,所以主要还是针对静态类型语言,比如java,kotlin,scala等等,那graal的多语言功能,虽然包括了脚本,比如js,py,rb那些,但是这个编译,并不是将这些脚本编译成机器码,而是说,把java等可以做aot也就是编译成机器码的语言,在编译成机器码之后,还可以继续调用脚本语言,仅此而已,所以脚本通过graal依旧无法编译成机器码,dead end

唯一的好消息就是llvm证明了,动态类型语言和静态类型语言,都可以使用同一个编译器后端,也就是理论上,可以将脚本(js,py)编译成机器码,但实际上,至少在目前看,没有任何一个,能够将主流脚本,不管是js,py还是rb那些,编译成机器码的编译器出现

这些脚本的主要运行时,多数都还是把原先解释执行,给做成类似java传统上那种jit,也就是即时编译执行的模式,当然性能上比起解释执行,那是要快不少,你可以想一下node.js vs ruby的ror,但这也已经是目前应用的极限了,想要进一步编译成机器码,目前看,还没有可能

说完了脚本,我们说一下最近十年,真正出现的趋势

那就是aot,也就是把静态类型语言编译成机器码

目前正在做这个的语言有:dart/flutter,java,kotlin,scala,swift

这些语言都是先有jit,然后现在开始做aot,除了swift是从aot开始,然后现在做jit(sidecar)

但是不管是先做aot再做jit,还是先做jit再做aot,总之这些语言,都在朝着同时支持jit和aot两种运行模式的方向上前进,其实还有第三种,也就是解释执行,那这些语言又双叒叕都提供了repl,也就是命令行交互界面,用户直接直接通过repl解释执行源码,jshell之类的,所以其实脚本的运行模式,这些语言也都有,但是反过来,脚本就基本上做不到aot,jit都很少,也就是pypy和node等少数脚本做到了jit,aot一个没做出来

然后正面回答问题:最近十年,关键的技术进步,应该是aot

这么多语言,这么多公司都在做aot,足见其魅力,应用面上,除了客户端普遍要求aot以外,服务器端,比如jvm上一大堆框架,都在朝着兼容aot的graal编译器狂奔而去,比如vert.x,micronaut,helidon,以及更上层的quarkus,spring等

而这些语言在编写上的难度,都普遍低于c++等语言,所以假以时日,这些语言逐渐成熟之后,用这些语言来替代现有的c++应用场景,应该是很正常的事,java就在干这事,graal就是java写的,然后用graal来替代openjdk里面的c1/c2编译器,这就是自举嘛,然后swift的自举估计还需要时间,因为swift自身语法什么,还没太稳定,还在一点一点新增当中,比如5.5要推出的async/await和actor类型,当这些都稳定了之后,可能就会跟java一样,去自举了

总结:aot,yyds


user avatar    网友的相关建议: 
      

首先这是Fed一月 memo

先说结论:

FOMC 维持利率在 0-0.25% 不变。且确定 3 月完全停止 QE,同时 3 月加息也是箭在弦上,基本会后声明皆符合市场预期,没有太多的意外。

Powell 记者会确实是偏一点点的小鹰派,但我也认为,Powell 的说法不至于拉升市场加息预期至 5次 、并拉升缩表预期至上半年,反而比较像是在强化加息 4 次之预期。

另外我个人觉得,一些中文媒体似乎误读了Powell 记者会的部分片段,下面 Allen 再进一步说明。


1. 3 月加息停止 QE 早已定价

本次会议 Fed 再次确认 3 月将准备第一次加息,并同时停止 QE。

Fed 也再次重申,货币政策是要支持美国经济达到充分就业、与通膨长期均值维持 2.0% 的两大目标。

这部分我想市场早已定价,这裡完全不会是问题,所以我们不讨论太多。


2.未来加息在每次会议都可能发生 (?)

Powell 的原文说法是:Won't Rule Out Hike Every Meeting.

但我有看到部分中文媒体写:不排除每次会议都加息的可能性。

上述我想或许是误读了 (还是其实是我自己误会中文的意思 ?)

我的理解是:Powell 是说加息在未来每场会议都可能发生,指的是“不会在特定月份才加息”,不是说每场都要加息。

Powell 说得很合理,经济本来就是动态的,加息本就不会侷限在什麽月份才启动,端看当时的经济状况而定。

我认为Powell 上述说法,并未延展今年加息预期至五次或更多,若有这种想法,那绝对是误读了。


3.更大规模的缩表?

Powell 在记者会上提到,Fed 需要更大规模的缩表,但请大家不要恐慌,因为我又觉得部份中文媒体过度解读了。

我认为Powell 说到的“更大规模缩表”,在思维上指的是:

因为当前 Fed 资产负债表高达 8.9 万美元,这是新冠疫情爆发之前的两倍大,显然在绝对规模上是非常巨大的。

而上一轮 2017-2019 年 Fed 缩减资产负债表,是自 4.4 万亿美元缩到 3.7 万亿美元停止,缩表的幅度大概是 15.9%,共缩减了约 7000 亿美元。

确实每次缩表的经济背景绝对是不一样的,所以幅度也绝对不会相同,但我们随便抓,假设本轮缩表将缩减 10% 资产负债表规模,那麽这也要降低 8900 亿美元,规模当然很大。

但我认为,不需要过度恐慌在“更大规模缩表”这几个字上。更重要的,我认为是“Fed 缩表的速率是多少?”

我相信缩表没问题,缩表太快才是问题,因为缩表速度若太快,将直接影响的会是美债殖利率升速、以及殖利率曲线的斜率。

这点Powell 也非常清楚,Powell 在记者会上也不断强调,联准会内部尚未具体讨论到一切缩表的进度,要等到 3 月再说。


4.缩表比较可能落在下半年

Powell 在记者会上说明,希望在加息至少一次之后,再来开会讨论缩表的事情,且委员会至少将讨论一次,才会做最终拍板。

更重要的,Powell 希望缩表的进程是有秩序的、是可被预见的过程。

从上述Powell 丢出的时间表看,我个人认为缩表将落在 2022 下半年,最快可能是 6 月份,因为在 3 月加息后,Fed 才会来讨论缩表。

我个人相信 Fed 现在内部早已在讨论缩表,但委员会显然尚未准备好来与市场沟通缩表的前瞻指引。

而缩表这麽大的事情,我个人认为 Fed 需要起次跟市场沟通 2 次,并把缩表规划说得非常清楚之后,才会开始进行,所以比较合理的缩表时间,估计将会落在下半年。


5.最大风险:高通膨

Powell 在记者会上,大概提到了 800 万次的“高通膨压力”,并认为目前美国通膨风险仍在上升阶段,但预计 2022 通膨还是会回落。

Powell 说明,目前美国通膨居高不下,主要仍是供应链所致,白话来说就是供需仍然失衡,且供给侧 (Supply Side) 改善的速度是低于预期。

Powell 强调,目前美国高通膨持续存在,而美国经济要的是长期扩张,所以若要长期扩张,物价势必需要保持稳定。

这边开始进入正题了,我认为这是本次会议的最重要核心,是让我体感上,觉得 Fed 鹰派的地方。我认为 Fed 承认自己落后给菲利浦曲线 (Behind the curve),简单而言,Fed 这次的加息速度大幅落后给通膨。

由于 Fed 在 2021 年对于通膨的误判,先前 Fed 在 2021 年认为通膨在年底就可望自然回落,但也就是因为这件事没有发生,反而通膨还更为严重,所以目前才有使用加息来追赶通膨的压力。但当前宏观环境看,通膨的压力是来自于缺工、供应链紧俏等问题,再加上拜登政府的大力推行财政刺激在那边推波助澜~

所以这一次的通膨是来自于实体经济上的供需失衡问题,并不是金融市场过度投机、企业超额投资等问题,我认为 Fed 在这次的通膨问题上,能做得空间非常有限。

这裡将产生一个不确定性的较大风险,就是 Fed 只能靠货币紧缩去压通膨预期,但实体经济的根本性通膨问题,还是没有获得解决。变成最终 Fed 只能再用更剧烈的紧缩政策,去引导通膨预期走低后,尝试来压低实际通膨率,所以这裡将让 Fed 的紧缩路径,存在著较大不确定性。

比较好的处理方式,应该是直接去解决实体经济上的缺工和供应链/例如我之前提到的塞港问题,让实际通膨率自己走低、而不是靠 Fed 挤压通膨预期之后去引导。

谁可以去把坐在白宫裡疑似患有阿兹海默的白髮老头一巴掌打醒...还我特~


结论:我个人认为 Fed 今年将加息四次,不至于加息五次,而加息四次之预期,相信市场应该已经定价;至于缩表,相信市场尚未定价,估计将落在 2022 下半年,最快可能是 6 月。

如果 Fed 今年加息五次,我会感到非常意外,因为这意味著 Fed 很可能在 2023 年底、2024 年初,就因为美国经济放缓太快而需要降息,Fed 这波操作就会变得非常韭。

最后说说股市的想法目前 Nasdaq 已经插水一段时日,抑制通胀是当务之急,而股市所谓修正才多久已出现V转。对通胀而言意义不大,修正数月才可能有帮助~所以我之前一直描述为“恐慌”。因此对白髮老头而言,怎麽做才有利于中期选举就很清晰了。

最好还是坚持认为市场或已定价加息四次之预期,但缩表预期则是尚未定价的观点。

配置上美股我倾向持有科技权值股,一些 Megacap 的估值我认为合理、前景确定性较高,而这样也可以让你的收益贴著 QQQ 走。

考虑到一堆成长股腰斩,我也愿意加仓接刀成长股,但建议佔据投资组合的比例,或许不要超过 15%,如果选股功力不错,这裡就会开始让你的收益拉开与 QQQ 之类的差距。

最后,我相信人人都会想在市场下跌的环境裡接刀,接刀不是不行,但若接刀失败,斩缆我建议速度要快,我个人不考虑价投的话一次斩缆的比例都是 50% 以上。




  

相关话题

  使用 Visual Studio 开发的情况下 C# 的编程效率能否和 Python、Ruby 媲美? 
  如何优雅地将程序设计语言的名字翻译成汉语? 
  句柄是什么? 
  Node.js、Scala、Clojure 等声称适合高并发的语言,分别具体适用于什么情景,何种任务? 
  为什么 Java 会有 JVM,其它语言怎么没有对应的 VM? 
  常说「Java 在虚拟机中运行」,请问这个虚拟机可以视为 Java 语言的解释器吗? 
  typescript中有哪些骚操作? 
  为什么 C# 发明 13 年之后微软才推出编译为本地代码的功能? 
  如何由 C# 的「拖控件」阶段继续深入学习? 
  为什么 GCC 不改善它的错误提示? 

前一个讨论
空间站的核心舱是否不可替代?
下一个讨论
为什么nlp没有像cv四小龙一样的创业公司?





© 2024-12-22 - tinynew.org. All Rights Reserved.
© 2024-12-22 - tinynew.org. 保留所有权利