写点什么

JRuby Roundup:改善的 Java 集成与调试(JSR-45)

  • 2008-08-22
  • 本文字数:956 字

    阅读完需:约 3 分钟

按照计划这个月底将要发布 JRuby 的下一个维护性版本。在众多变化中最令人关注的就是与 Java 的集成——定义了 Ruby 代码与 Java 库交互的方式。Java 集成不仅涉及到一些基本语义,如强制类型或者重载、还精简了 Ruby 与 Java 的交互,这使我们可以将一个 Ruby Block 传到一个 Java 方法中。 Charles Nutter向我们展示了最近在 JRuby 与 Java 集成方面的一些进展

  1. 显然,我们已经完成了很多卓有成效的工作。
  2. 闭包可以传递到任何方法中,前提是该方法的最后一个参数是一个接口类型;该闭包可以转化为目标接口类型。thread = java.lang.Thread.new { puts ‘here’ } 2. 现在可以针对接口中的所有方法使用 Ruby 式(使用下划线)的名称来实现接口。

class Foo<br id="wt.w24"></br> include java.awt.event.ActionListener<br id="wt.w25"></br> def action_performed(event) <br id="wt.w26"></br> ... <br id="wt.w27"></br> end<br id="wt.w28"></br>end3. 可以使用 attr*. […] 实现具有 bean 式方法的接口 4. 如果接口中有 boolean 方法,那么我们可以使用该方法名的问句(question-marked)版本来实现该接口。

另一个改进就是使用了 JSR-45 特性来改善调试(注意:在本文发布之际该链接可能无效)。 JSR-45 可以将源文件及其行号映射到 class 文件中。它还定义了类属性(SourceDebugExtension),该属性包含有 SMAP 格式的元数据,而 SMAP 格式是由 JSR 定义的,用来说明 class 文件来自于哪个源文件。当我们查看编译器代码时我们会看到,行号信息已经被加到了产生的 class 文件中了。用来产生 class 文件的 ASM 允许通过 visitLineNumber方法设置行号。

通过加入 SMAP 文件,常用的 Java 调试器如 jdb 可以单步跟踪已编译成字节码的 Ruby 代码(该示例显示了如何使用jdb 单步跟踪Ruby 文件)。

该新功能是向JRuby 快速调试器迈进的另一步——然而要注意到这种方式只适用于已编译成字节码的代码。_ 解释_ 的代码仍旧需要由现有的基于跟踪或者回调的调试器处理。一个应用中有多少代码能转化成字节码依赖于几个因素。例如,运行超出了PermGen 空间以外会有风险,因为它经常导致JVM 崩溃/ 终止。为了解决该问题, JRuby JIT 限制了编译方法的数量(限制的数量可以配置)。

查看英文原文: JRuby Roundup: Java Integration and Debugging (JSR-45) Improvements

2008-08-22 22:22712
用户头像

发布了 88 篇内容, 共 273.1 次阅读, 收获喜欢 9 次。

关注

评论

发布
暂无评论
发现更多内容

基于STM32+ESP8266+华为云IoT设计的健康管理系统

DS小龙哥

2月月更

极速生成缩略图,Serverless 支撑赛事转播锁定冬奥亮点

阿里巴巴云原生

阿里云 Serverless 云原生 冬奥会 函数计算FC

XSS练习小游戏和答案参考

喀拉峻

网络安全

架构训练营模块八作业

zhongwy

工作想法小计(3):2/21 - 2/25

非晓为骁

个人成长 工作

EventBridge消息路由|高效构建消息路由能力

阿里巴巴云原生

阿里云 云原生 消息队列 EventBridge

一文入门rollup!13组demo带你轻松驾驭

摸鱼的春哥

前端 vite Rollup webpack 构建

架构实战营第 4 期 -- 模块八作业

烈火干柴烛灭田边残月

架构实战营

Go 语言入门很简单:Go 如何面向对象

宇宙之一粟

面向对象 Go 语言 2月月更

[架构实战营]模块八 消息队列Mysql表格设计

Vincent

「架构实战营」

模块八

Geek_59dec2

迭代器总结

编程三昧

JavaScript 前端 迭代器 2月月更

01-《生活中的心理学》读书笔记

清凌渡

读书笔记 心理学

【Python】面试官:元组列表都分不清,回去等通知pa

謓泽

Python 元组 2月月更

Lyft微服务研发效能提升实践 | 3. 利用覆盖机制在预发环境中扩展服务网格

俞凡

研发效能 大厂实践 2月月更 lyft

Java线程池进阶

木小风

Java 线程池

Thinkphp最新版本漏洞分析

网络安全学海

网络安全 信息安全 渗透测试 WEB安全 安全漏洞

架构实战营 4 期第八模块作业

jialuooooo

架构实战营

2022年第8周-面试二三事

GeekYin

面试 周报

架构实战营 模块八

架构实战营 「架构实战营」 模块八

「架构实战营」模块八《如何设计贴合业务的高性能高可用中间件系统》作业

DaiChen

作业 「架构实战营」 模块八

Meta启示:AI是通往元宇宙的关键变量

脑极体

架构实战营4期-模块八作业

木几丶

「架构实战营」

hive性能调优实战-读书笔记

聚变

hive Hive SQL

2022 ARTS|Week 08

MiracleWong

算法 写作 ARTS 打卡计划

设计消息队列存储消息数据的 MySQL 表格

AUV

「架构实战营」

卫星商业价值的尽头,谁来善后?

脑极体

模块八-设计消息队列存储消息数据 作业

novoer

「架构实战营」

【安全漏洞】深入剖析CVE-2021-40444-Cabless利用链

H

Vue3 过10种组件通讯方式

德育处主任

Vue 3 vuex 组件通信 Pinia mitt.js

什么是开源的「第一性原理」?

腾源会

开源 腾源会

JRuby Roundup:改善的Java集成与调试(JSR-45)_Java_Werner Schuster_InfoQ精选文章