不,那不行。至少不是你想的那样。在

Jython和JRuby之间的互操作性与CPython和YARV之间的工作方式相同:它们都运行在同一个平台上,因此可以使用该平台彼此通信。在

在CPython和YARV的情况下,该平台是C/POSIX,因此它们可以使用C结构、ints、char*s和C函数调用彼此通信。在Jython和JRuby的例子中,这个平台就是JVM,因此它们可以使用JVM对象、JVM类、JVM接口、JVM类型和JVM方法彼此通信。在

在这两种情况下,这些平台原语看起来都不像Python或Ruby对象。在

对JRuby来说,Jython只是另一个Java程序。对Jython来说,JRuby只是另一个Java程序。在

例如:在Ruby中,可以随时动态地添加、删除和重新定义方法。在JVM上,可以动态添加和删除的最小代码单元是类。因此,Ruby方法实际上并不是Java方法。它被表示为Java类。从逻辑上讲,一个包含两个方法的Ruby对象被表示为一个没有方法的Java对象,只有一个Dictionary字段。low:它在Java中是完全不可用的,而且,从JRuby的角度来看Jython只是Java,它在Jython中也是不可用的。在

现在,有一些方法可以让这一切变得更好。您可以使用实际的Java类型在两者之间进行通信–这两个实现都与Java具有很好的互操作性。因此,您将使用Ruby和Python中的JavaMap,而不是将Ruby散列或Python字典传递给Ruby。但请注意,这需要您的Ruby和Python代码都是专门为在JVM上工作而编写的。low:你不能只使用你在网上找到的任何Python或Ruby库,这正是你所要问的。在

另一种可能是@duncan在回答中提到的一种可能性:将Jython或JRuby作为脚本引擎嵌入到Ruby或Python应用程序中。但是,这并不能真正回答您关于使用Ruby中的任意Python库的问题,反之亦然。在

那么,这里有什么问题?在

问题是为了让两个运行时进行通信,它们需要使用相同的“语言”。在这个特定的例子中,这两个运行时唯一的共同语言是Java,或者更确切地说是Java的一个严重残缺的子集。在

所以,我们需要找到一种共同的语言。定义这种语言的一种方法是让两个运行时都能理解彼此的元对象协议(Meta Object Protocol,MOP)。在

MOP基本上是语言对象模型的对象模型。嗯,这很令人困惑,因为我们用“对象模型”这个词来表示两个不同的东西。让我重新表述一下:

MOP基本上是语言对象系统的领域模型。就像银行系统的域模型包含表示真实世界客户、账户、余额、分类账等的对象,以及表示现实世界操作(如转账、取款等)的方法一样,MOP包含表示语言类、方法、变量、对象和表示语言的方法的对象像查找变量、调用方法、从类继承、构造类实例等操作。在

通常,每个运行时都将其MOP私有化,并且每个运行时都有自己的MOP。在

如果JRuby和Jython将它们的MOP公开给对方并理解对方的MOP(或者,更好的是:他们将MOP暴露给JVM,并且都使用相同的MOP),那么您可以将这些疯狂的JRuby方法包之一传递给Jython,Jython就会知道如何找到属于该对象的方法以及如何调用它们,因为它可以问JRuby的MOP怎么做。在

实际上有一个项目可以为JVM创建这样一个MOP:dynalang MOP是为在JVM上运行的动态语言的共享、标准化MOP。它是由Mozilla Rhino ECMAScript引擎的维护者Atila Szegedi创建的。目前,没有一个大型语言实现使用它,但是至少Rhino、JRuby、Jython和Groovy之间正在进行协作,以确保dynalang足够通用,能够支持所有不同语言的对象模型。在

如果你想要一窥拥有这样一个共享MOP的世界将会是什么样子,你可以看看微软的动态语言运行时(DLR)。DLR只包含这样一个MOP和所有支持DLR的运行时(除了常见的疑点,如IronRuby、IronPython、IronJS和{a5}之外,现在还包括C#4和Visual基本.NET10) 几乎可以无缝地互操作。在

另一个类似的平台是Parrot Virtual Machine,它是专门为允许多个动态语言在同一个运行时平台上进行互操作而设计的。Python(Pynie)和Ruby(Cardinal)的实现是可用的,但尤其是Cardinal还远远没有成为一个远程完整的Ruby实现。在

python对象模型 ruby_使用JRuby/Jython实现Ruby/Python的互操作性?相关推荐

  1. python对象模型映射_看例子,学 Python(三)

    看例子,学 Python(三) 包 创建一个目录 myutil,把 mymath.py 挪到里面,再添加一个空文件 __init__.py: myutil/ __init__.py mymath.py ...

  2. Python之路【第一篇】:Python简介和入门

    Python之路[第一篇]:Python简介和入门 Python简介 Python前世今生 python的创始人为吉多·范罗苏姆(Guido van Rossum).1989年的圣诞节期间,吉多·范罗 ...

  3. Python开发【第二篇】:初识Python

    Python开发[第二篇]:初识Python Python简介 Python前世今生 python的创始人为吉多·范罗苏姆(Guido van Rossum).1989年的圣诞节期间,吉多·范罗苏姆为 ...

  4. python骗局-1.python真的是万恶之源么?(初识python)

    python真的是万恶之源么? 计算机基础及puthon了解 1.计算机基础知识 cpu : 相当于人类大脑,运算和处理问题 内存 : 临时存储数据,单点就消失,4G,8G,16G,32G 硬盘 : ...

  5. 1.python真的是万恶之源么?(初识python)

    python真的是万恶之源么? 计算机基础及puthon了解 1.计算机基础知识 cpu : 相当于人类大脑,运算和处理问题 内存 : 临时存储数据,单点就消失,4G,8G,16G,32G 硬盘 : ...

  6. python对象模型_[译] 用 Python 实现一个最简单的对象模型

    一个简单的对象模型 Carl Friedrich Bolz 是一位在伦敦国王大学任职的研究员,他沉迷于动态语言的实现及优化等领域而不可自拔.他是 PyPy/RPython 的核心开发者之一,于此同时, ...

  7. python对象模型映射_【500 Lines or Less】-【翻译练习】-【chapter 14】-【简单对象模型】-【第一部分】...

    date: 2017-10-08 15:31:46 Carl Friedrich Bolz是伦敦国王大学的研究员,对动态语言的实现及优化兴趣浓厚.他是 PyPy/RPython 的核心贡献者之一,并为 ...

  8. python对象模型_python 实现对象模型

    # -*- coding:utf-8 -*- """ python 实现对象模型 创建 bmicalcpage 类 """ class bm ...

  9. python list转换成array_一文掌握Python【不定期更新】

    目录 一.Numpy 1 基本操作 2 随机数 3 打乱训练数据 4 得到元素的最值 5 拼接数组 6 得到函数的信息 7 得到累乘即各项相乘的结果 8 判断一个数是否在数组中 9 数组的变换 10 ...

最新文章

  1. 内存接口芯片,服务器平台,PCIe 芯片
  2. C语言经典例61-杨辉三角
  3. javascript字符串截取
  4. DL之DNN:利用DNN【784→50→100→10】算法对MNIST手写数字图片识别数据集进行预测、模型优化
  5. 关于win7禁止标准用户安装软件 AppLocker使用
  6. 北斗导航 | 从北斗二号到北斗三号
  7. phpAdmin修改密码后拒绝访问
  8. redis(12)--事件,客户端,服务器
  9. ssacanf\Sprintf格式化字符串
  10. 脸部细微表情识别_您可以仅使用面部表情来控制字体吗?
  11. SQL SERVER2000存储过程调试
  12. IT从业的迷思与破解之道(更新)
  13. qt弹簧教程_弹簧启动执行器教程
  14. 杭电 1248 寒冰王座(全然背包)
  15. C++自学20:指针/指针的指针/const
  16. word的使用(二)
  17. 安装adt-bundle-windows-x86-20130917时遇到的问题及解决方法
  18. python实现强化学习
  19. IDEA上的文字转拼音名
  20. 什么是TOC? 论文不通过?TOC请了解一下 | SCI-HUA科画技法

热门文章

  1. 在WebStorm里面搜索文件中出现的中文字符
  2. Windows平台下程序打包流程
  3. BZOJ2275[Coci2010]HRPA——斐波那契博弈
  4. 配置用户通过Telnet登录设备的身份认证(AAA本地认证)
  5. Ubuntu 8.04嵌入式交叉编译环境arm-linux-gcc搭建过程图解
  6. 【技巧——windows】直接登陆到桌面,免去输入密码
  7. ORACLE解决登陆em状态暂挂方法
  8. UVA10110 Light, more light
  9. SQL Server基础知识之:设计和实现视图
  10. 【SVO2.0 安装编译】Ubuntu 20.04 + Noetic