惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

S
Secure Thoughts
雷峰网
雷峰网
罗磊的独立博客
T
The Blog of Author Tim Ferriss
阮一峰的网络日志
阮一峰的网络日志
量子位
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
云风的 BLOG
云风的 BLOG
人人都是产品经理
人人都是产品经理
GbyAI
GbyAI
Cisco Talos Blog
Cisco Talos Blog
Engineering at Meta
Engineering at Meta
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
A
About on SuperTechFans
D
Darknet – Hacking Tools, Hacker News & Cyber Security
The Cloudflare Blog
Know Your Adversary
Know Your Adversary
T
Threat Research - Cisco Blogs
Spread Privacy
Spread Privacy
D
DataBreaches.Net
T
The Exploit Database - CXSecurity.com
K
Kaspersky official blog
Cyberwarzone
Cyberwarzone
爱范儿
爱范儿
U
Unit 42
Security Latest
Security Latest
M
MIT News - Artificial intelligence
月光博客
月光博客
Scott Helme
Scott Helme
G
Google Developers Blog
有赞技术团队
有赞技术团队
T
Tor Project blog
宝玉的分享
宝玉的分享
Y
Y Combinator Blog
博客园 - Franky
H
Hackread – Cybersecurity News, Data Breaches, AI and More
aimingoo的专栏
aimingoo的专栏
The GitHub Blog
The GitHub Blog
V
V2EX
B
Blog
Apple Machine Learning Research
Apple Machine Learning Research
S
Securelist
博客园 - 三生石上(FineUI控件)
Blog — PlanetScale
Blog — PlanetScale
TaoSecurity Blog
TaoSecurity Blog
Stack Overflow Blog
Stack Overflow Blog
P
Proofpoint News Feed
腾讯CDC
D
Docker
Google Online Security Blog
Google Online Security Blog

夜行人

回家路上 第一期的直播演示项目 震动检测器 正能量 在线参观CodeLab Neverland 发布 CodeLab Adapter 3.3.1 DynamicTable 之 纸糊方向盘 CodeLab DynamicTable: 一个可实施的技术方案 CodeLab Insight 发布 Alpha 版 情人节 Home Assistant 周报 && IoT 周报 (02) Joplin: 关注隐私的 Evernote 开源替代软件 浏览器的未来与 Web 传感器 Home Assistant 周报 && IoT 周报 (01) 百宝箱(01) 论自由 介绍 WebThings Home Assistant 周报 && iot 周报 (00) 百宝箱(00) 毛姆读书心得 传世之作 周末徒步 CodeLab Adapter ❤️ Jupyter/Python 航班 躲雨 夏令营途中 [译]思想--作为一种技术 The future of coding 美国之行 三门问题的程序模拟 从Python转向Pharo https://blog.just4fun.site/post/iot/iot-open-source-projects/ Python异步编程笔记 https://blog.just4fun.site/post/iot/iot-open-source-hardware-community/ 万物积木化开发者社区 CodeLab ❤️ Blender Scratch3技术分析之云变量 API(第7篇) [译]对管道(Pipes)的偏爱 [译]提出正确的问题比得到正确答案更重要 蓝牙设备与Scratch3.0 创建你的第一个Scratch3.0 Extension Scratch3技术分析之项目内部数据(第6篇) Scratch3技术分析之社区 API(第5篇) Scratch3技术分析之User API(第4篇) Scratch3技术分析之项目主页API(第3篇) Scratch3技术分析之静态资源API(第2篇) Scratch3.0、micro:bit与Windows7 https://blog.just4fun.site/post/iot/zerynth-vs-micropython/ 核聚变、方所与半宅空间 可视化编程为何是个糟糕的主意 codelab.club周末聚会 关于codelab.club '下一件大事'是一个房间 Hungry Robot - Eat everything 编程作为一种思考方式 今日简史 史蒂夫·乔布斯传 罗素自选文集 https://blog.just4fun.site/post/edx/tianjin-scratch-ai/ https://blog.just4fun.site/post/edx/richie-cms-openedx/ 徒步武功山 WebUSB与micro:bit 积木化编程与3D场景 夜宿武功山顶 scratch3-adapter接入优必选Alpha系列机器人 https://blog.just4fun.site/post/edx/video-migration-note/ scratch3-adapter重构笔记 https://blog.just4fun.site/post/edx/edx-community-members/ 两种硬件编程风格的比较 使用micro:bit自制PPT翻页笔 柏拉图对话集 scratch3.0 + micro:bit 七月电影放映计划 非营利组织的管理 Screenly--用树莓派让任何屏幕变为可编程的数字标牌 以最佳实践开始你的Django项目 micro:bit与事件驱动 为Scratch3.0设计的插件系统(上篇) OCR应用一例 近两年读过的一些好书 blockly开发之使用python驱动浏览器中的turtle(2) 牛顿新传 文学理论入门 逻辑的引擎 人生的意义 blockly开发之生成并运行js代码(1) blockly开发之hello world(0) micro:bit使用笔记 神器之Termux https://blog.just4fun.site/post/iot/micropython-notes/ Cozmo what is this Scratch的前世今生 下段旅程 我行在远方 爆裂 途中杂记 https://blog.just4fun.site/post/edx/open-edx-startup/ cozmo系列之入门 - 有性格且可编程的机器人 PaperWeekly开发笔记 创业二三事
[译] Alan Kay: 后期绑定(late binding)的意义是什么?
种瓜 · 2024-04-03 · via 夜行人

文章目录

原文

What is the significance of late binding?

译文

(由 ChatGPT 翻译, 种瓜校对和微调)

“后期绑定” 是一种关于在保持尽可能多的灵活性和安全性的同时获得所需功能的想法。

一个需要考虑的重要因素是, “软件” 本身是计算机行为的后期绑定。(看起来是一个相当不错的想法, 我想说…)

在下一个层次上, 硬件中的索引寄存器的想法以一种不破坏代码的方式后期绑定地址。内存管理单元(MMU)允许封装的本地寻址进行全局重定位。各种类型的间接寻址允许在运行时更容易地进行更改。

考虑一个变量…

考虑子例程与内联代码的对比…

解释器延迟绑定计算机的语义。

将微码(microcode)视为通过解释器后绑定硬件的一种方式

封装的对象延迟绑定"怎么做(hows)"(方法), 并允许仅通过 “什么(whats)"(意义)来使用, 这允许更容易实现各种替代方案和透明度。

“怎么做(hows)“本身也可以延迟绑定, 例如在 Lisp 或 Smalltalk 中, 这允许程序去分析系统的其他部分是如何设置的: 对"反射"进行分析, 以及事物是如何完成的。

“反射” 做得好, 允许更多务实的可能性, 即使在非常低的级别上也能安全高效地进行。一本好书是 Kiscales、Bobrow、Rivera 的《元对象协议的艺术》。

从战略的角度来看, 尽可能保留多的后期绑定是一个非常好的主意。如果确实需要的话, 动态地去除一些自由度是容易的, 但从早期绑定系统转向更灵活的方式则非常困难。

例如, 相当多的优化是违反模块边界并希望逃脱惩罚。以更有原则的方式做到这一点的一种方法是真正将后期绑定模块作为一个模型, 然后将违规行为实现为编程系统的"务实特性”。

例如, 在面向对象编程系统中, 一个方法可能有一个"左侧”, 仅仅是语义, 以及一个可选的带有优化情况的"右侧”。该方法应该在关闭右侧的情况下完美运行, 但在打开右侧的情况下会运行得更快等等。 (译者注: Smalltalk 的 primitive)

同样, 模块之间的交互也可以以这种双重方式处理。(例如, Smalltalk 是一个"消息传递系统", 但除非绝对需要, 否则不会表现出实际的消息。此外, Smalltalk 具有其所有语义的模拟, 并且如果某些机器的低级别不完整或存在错误, 则可以退回到它们。)

值得注意的是,优雅和有用的后期绑定的深层敌人是有害的(尤其是不必要的)依赖关系。这种情况可能发生在早期绑定系统中,但在后期绑定系统中有更多的可能性(因此需要更多的设计来真正利用这个想法, 这将在许多方面得到回报…)。

补充

补充我在其他地方看到的 Alan Kay 对后期绑定的看法:

如果你正在使用大多数人使用的前期绑定语言, 而不是后期绑定语言, 那么你一开始就被锁定在你已经完成的东西上。 – c2:Alan Kay Quotes

对我来说, OOP 只意味着消息传递、本地保留和保护以及隐藏状态-过程, 并且对所有事物进行极端的后期绑定。这可以在 Smalltalk 和 LISP 中完成。可能还有其他系统也可以实现这一点, 但我不知道 – Alan Kay(wikipedia)

参考