如何使用动态语言进行不同的编程?

2024-03-02

真正知道如何利用动态编程语言的人与使用静态语言的人相比,如何以不同的方式进行编程?

我熟悉关于静态类型与动态类型的整个争论,但这不是我要表达的内容。我想讨论在动态语言中实用但在静态语言中不实用的问题解决技术。

我见过的大多数用动态编程语言编写的代码与用静态编程语言编写的代码没有太大区别。俗话说,你可以用任何语言编写 FORTRAN,而且很多人都这样做。但有些人使用动态编程语言来解决问题,而这种方式不容易转化为 C++ 等语言。他们的技术有哪些?

有哪些讨论如何使用动态编程语言的好资源?不是有关语言语法或 API 参考的书籍,而是有关利用动态语言功能解决问题的方法的资源。

编辑(2009 年 1 月 5 日):我很欣赏下面的答案,但它们似乎没有解释动态语言倡导者所说的生产力的巨大提高。


我喜欢苗条的回答。我确实花费了大量时间在 Java 和 C++ 上制作自定义数据结构,而这些数据结构在 Python/Ruby 中是免费的。并设计专门的函数来处理这些自定义数据结构。是的,在C++中,STL确实很好。是的,Java 中的泛型很好。它们有助于更快地创建自定义数据结构,但是它们仍然需要大量的思考和考虑。

然而,动态语言更容易使用还有一个更根本的原因。这是一个深刻的想法,称为鸭子类型。上面的一些评论涉及鸭子类型,但请花点时间思考一下什么是鸭子类型。这是一种根本不同的看待世界的方式。与 Java 和 C++ 等语言不兼容的视图。

鸭子类型意味着您不必浪费时间来定义鸭子是什么。由于不必正式定义对象,因此可以节省大量时间和精力。获得正确的定义是很困难的。看看我的这篇博文,我在其中给出了示例:正式定义没有你想象的那么有用 http://www.daniel-lemire.com/blog/archives/2007/12/05/formal-definitions-are-less-useful-than-you-think/

事实证明,鸭子打字非常有用。这XML 中的“必须忽略”原则 http://www.tbray.org/ongoing/When/200x/2006/01/09/On-XML-Language-Design正是 XML 在 Web 上如此重要和有用的原因。但这只是鸭子打字的一个例子。

表达鸭子类型的另一种方式是通过网络口头禅“严格发送,慷慨接受”。这也是一个非常基本的想法。

最后,您可能想回到我的一篇长篇博客文章,其中我解释了鸭子类型以及它与人工智能和建模等事物的关系:鸭子打字、人工智能和哲学 http://www.daniel-lemire.com/blog/archives/2007/01/27/duck-typing-artificial-intelligence-and-philosophy/

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用动态语言进行不同的编程? 的相关文章

  • 如何在更改密码时触发 Firebase 中的云功能?

    当用户更改密码时 我试图触发 Firebase 云功能 无论是 更改密码 firebase auth currentUser 更新密码 新密码 或通过重置它 firebase auth 发送密码重置电子邮件 电子邮件 由于我没有在任何地方存
  • 现代 C++ 中比较 double/float 是否相等的现代实践 [重复]

    这个问题在这里已经有答案了 if std abs double1 double2 lt std numeric limits
  • Powershell 编码默认输出

    我在 TFS 构建中运行的 powershell 脚本遇到以下问题 这两个问题都与 TFS 无关 可以使用简单的 powershell 命令行窗口重现 1 与TFS完全无关 看来 Powershell 在管道方面不喜欢德语元音变音 1a 这
  • 来自 XElement 的内部文本? [复制]

    这个问题在这里已经有答案了 我很难从 XElement 的内部文本中获取正确的值 首先 这是我正在使用的 XML 这是我们工作流程中某个流程产生的生产数据的副本 换句话说 我无法更改 XML 只能解析它 我想要获取其内部文本的元素内部包含看
  • 使用 JavaScript 从 Amazon Cognito API 中详尽选择所有用户的安全且可扩展的方法是什么?

    我是一个小团队的一员 在一个相当小的网站上工作 该网站拥有用户帐户 此时大约有100名用户 我们正在使用 Amazon Cognito 进行用户管理 我们的网站上有一个摘要页面 其中显示所有用户和各种属性的列表 表格 然而 有一个硬性限制
  • 使用 Go 和 Cloudformation 部署 AWS Lambda

    我正在自动部署基于 Go 的 AWS Lambda 但遇到了问题 我的 AWS 无服务器模板是 AWSTemplateFormatVersion 2010 09 09 Transform AWS Serverless 2016 10 31
  • 鼠标滚轮在容器内滚动 - 捕获事件

    我有一个带有内部可滚动 DIV 的页面 当我将鼠标悬停在它上面并尝试用鼠标滚轮滚动它时 该 DIV 的内容会根据需要滚动 而主页保持不变 但是当我到达 DIV 滚动区域的底部时 整个页面开始滚动 我尝试在该 div 上设置事件处理程序 但是
  • 如何在松散耦合的应用程序中将状态信息传递到 GUI

    我第一次尝试使用依赖注入来松散地耦合一个新应用程序 我的问题是如何将状态信息传递回用户 在过去 所有代码都塞进 GUI 中 虽然非常混乱且难以维护 但非常容易 课程的安排是这样的 请不要检查我的 UML 技能 它们不存在 如果我们走右手边
  • Google AMP 脚本与 jquery window.scroll 冲突

    我正在尝试遵循 Google 建议的 AMP 指南 ampproject org https www ampproject org 但是一旦我添加了他们的 js 脚本 jQuery 滚动就停止工作 有谁知道为什么以及如何解决它 AMP HT

随机推荐

  • 如何在 VS 单元测试中包含示例数据文件?

    我想要针对示例 XML 文件运行单元测试 我应该如何将这些文件暴露给单元测试 我尝试过使用内容构建操作 但我无权访问应用程序上下文 因此 GetContentStream 已退出 我知道我可以将 DataContext 用于 SQL 数据库
  • Setter 目标名称无法识别

    我是 WPF 的初学者 我尝试使用 DataTrigger 编写 WPF 部分 这里需要逻辑 If the variable iBottleCount gt 10 then make the background of a label gr
  • 我何时以及为什么应该清理 XCode 中的构建

    每隔一段时间 解决 XCode 中严重问题的方法就是点击 Product Clean 这似乎会清除一些缓存 问题就会消失 但它实际上在做什么 更重要的是 我应该什么时候这样做 在处理核心数据时似乎更频繁地需要它 但我并没有真正跟踪它 作为一
  • 基于比较的排序技术的局限性

    大多数需要对数据进行排序的场景都会选择比较排序 合并排序 快速排序 插入排序和其他比较排序等技术可以处理不同的数据类型 并且效率的下限为 O nLog n 我的问题是 基于比较的排序技术有任何限制吗 有哪些场景会使用非比较排序技术 chee
  • 将两个现有地块合并为一个地块

    我还没有真正尝试过任何方法来做到这一点 但我想知道是否有一种方法可以将已经存在的两个图合并到一个图中 任何投入将不胜感激 这是一个完整的最小工作示例 它介绍了从多个图中提取和组合数据所需的所有步骤 import numpy as np im
  • Javax Websocket 由于非法 UTF-8 序列而关闭

    我正在使用 javax websocket API 用 Ja va 编写一个 Websocket 客户端 并且org glassfish tyrus作为实施 通常一切正常 但有时 当我收到非常大的字符串时 连接会以神秘的 非法 UTF 8
  • 如何向 Code::Blocks 编译器添加 C++11 支持?

    我正在编写一些代码 需要 C 11 支持我的 Code Blocks 12 11 我使用的是 MingW 附带的默认 GNU GCC 编译器 我有什么办法可以做到这一点吗 Go to Toolbar gt Settings gt Compi
  • 在代码隐藏中为 xaml 元素设置多重绑定

    我有以下有效的 XAML 代码 它基本上绑定了几个属性来计算用户控件的最终位置
  • 添加自定义 Video.js 控制栏按钮

    我已经在 video js 上工作了大约一天 所以对于这个东西我是一个真正的新手 今天我只想添加一个在两个视频之间切换的按钮 我用 jQuery 快速简单地完成了它 但我宁愿用 javascript 来更好地理解 video js 的整体
  • Linux vi 箭头键在插入模式下损坏

    我的箭头键在家里的插入模式下的 vi 中不起作用 它们只是插入一个换行符和一个大写字母 例如 A 有办法解决这个问题吗 我猜你正在使用 vim 因为它被标记为 Linux 尝试 set nocompatible 您可能想通过添加此命令来配置
  • 错误:原因:com.android.sdklib.repository.FullRevision

    我想尝试从 AS 2 0 即时运行 为此 我必须将构建插件更新为 2 0 0 alpha6 但执行此操作时 我无法再对项目进行 gradle 同步 因为我得到 Gradle myProject 项目刷新失败 错误 原因 com androi
  • Python:未检测到已安装的 selenium 包

    我正在使用Anaconda http continuum io downloadspython 发行版并想使用selenium http selenium googlecode com svn trunk docs api py index
  • 如何在Python中获取线程id?

    我有一个多线程Python程序和一个实用函数 writeLog message 写出时间戳 后跟消息 不幸的是 生成的日志文件没有给出哪个线程正在生成哪个消息的指示 我想writeLog 能够在消息中添加一些内容来识别哪个线程正在调用它 显
  • 如何在 RSAParameters 上设置用于 RSACryptoServiceProvider 的公钥和私钥?

    我在网上阅读了一些教程 并生成了公钥和私钥 但是如何将它们设置为在 C 中使用 这是我所拥有的 string publicKey string privateKey UnicodeEncoding ByteConverter new Uni
  • 从 BitmapSource 中删除 Alpha

    我使用 BitBlt 和 CreateBitmapSourceFromHBitmap 将窗口捕获为 BitmapSource 可以将其显示在 WPF 应用程序中的 Image 元素上 但由于某种原因 它捕获的大部分应用程序都是透明的 这是正
  • htaccess RewriteRule *.php 到 /*/

    我只是找不到满足我需要的正确解决方案 所以我希望有人能够在这里帮助我 我现在有包含此文件的网站 admin images js about php index php news php questions php 所以我现在的网址是 www
  • Route 53 资源记录集的多个 IP 地址

    我正在研究aws route53 当我创建资源记录集时 我可以将多个IP地址添加到记录集的值中 这里多个IP地址的目的是什么 例如 我的域将路由到服务器 1 和服务器 2 我尝试停止服务器 1 并访问我的域 但它没有路由到服务器 2 这里有
  • MySQL:对空值进行平均

    有没有一种简单的方法可以排除空值对平均值的影响 它们似乎算作 0 这不是我想要的 我只是不想考虑它们的平均值 但问题是 我不能将它们从结果集中删除 因为该记录包含我确实需要的数据 Update example select avg col1
  • 默认参数位于参数列表中间?

    我在我们的代码中看到一个函数声明 如下所示 void error char const msg bool showKind true bool exit 我首先认为这是一个错误 因为函数中间不能有默认参数 但编译器接受了这个声明 有没有人见
  • 如何使用动态语言进行不同的编程?

    真正知道如何利用动态编程语言的人与使用静态语言的人相比 如何以不同的方式进行编程 我熟悉关于静态类型与动态类型的整个争论 但这不是我要表达的内容 我想讨论在动态语言中实用但在静态语言中不实用的问题解决技术 我见过的大多数用动态编程语言编写的