首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Ruby有一个正式的规范(比如Java语言规范(JLS))吗?

Ruby没有一个正式的规范,类似于Java语言规范(JLS)。Ruby是一种动态、解释型的编程语言,它的设计哲学是以简洁、灵活和可读性为重点。由于Ruby的设计初衷是提供一种简单而强大的编程语言,因此它没有像Java那样的正式规范。

然而,Ruby社区有一些非正式的规范和指南,例如Ruby语言规范(Ruby Language Specification)和Ruby风格指南(Ruby Style Guide)。这些指南提供了关于如何编写符合Ruby习惯的代码的建议和指导,但它们并不是官方的规范。

在实际开发中,Ruby的语法和特性通常由其实现的解释器(如MRI、JRuby、Rubinius等)来定义和支持。因此,开发人员可以根据特定的Ruby解释器版本来了解其语法和行为。

对于Ruby开发者来说,熟悉Ruby的语法、核心库和常用的开发模式是非常重要的。此外,了解Ruby社区中流行的Gem(Ruby的包管理器)和相关工具也是提高开发效率的关键。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

jvm相关知识

java、c、c++、python等都属于高级语言,而高级语言是通过调用汇编语言,而汇编语言内部封装了很多操作指令,比如 add sub等,去操作机器指令,像cpu不同型号或类型都有不同指令,比如...JVM是Java Virtual Machine(Java虚拟机)缩写,JVM是一种用于计算设备规范,它是一个虚构出来计算机,是通过在实际计算机上仿真模拟各种计算机功能来实现。...通过上图可知我们程序是基于各大框架,而各大框架底层又是去调用Java最原始API,而java api又遵循 jvm规范,所以jvm可以说是最深层次。...fr=aladdin jvm是如何实现跨语言? ? 随着java7正式发布,jvm现在已经非常强大,不是只有java语言才能使用,只要遵循jvm规范字节码文件,就可以在jvm上面运行。...参考:https://docs.oracle.com/javase/8/docs/ 最后 jvm是一个极其复杂虚拟机,里面可以说集成当今世界上各大高新技术,比如:各种算法、各种优化方案、各种各样友好兼容以及与硬件交互底层机器指令等等

38620

Java 中整型缓存机制

本文将介绍Java中Integer缓存相关知识。这是在Java 5中引入一个有助于节省内存、提高性能功能。首先看一个使用Integer示例代码,从中学习其缓存行为。...接着我们将为什么这么实现以及他到底是如何实现。你能猜出下面的Java程序输出结果。如果你结果和真正结果不一样,那么你就要好好看看本文了。...在Java中,==比较是对象应用,而equals比较是值。所以,在这个例子中,不同对象不同引用,所以在进行比较时候都将返回false。...= integer4 Java中Integer缓存实现 在Java 5中,在Integer操作上引入了一个新功能来节省内存和提高性能。整型对象通过使用相同对象引用实现了缓存和重用。...Java语言规范缓存行为 在Boxing Conversion部分Java语言规范(JLS)规定如下: 如果一个变量p值是: -128至127之间整数(§3.10.1) true 和 false

91330
  • why哥被一道基础面试题给干懵了,一气之下写出万字长文。

    The Java® Language Specification,《Java 语言规范》,你就告诉我权不权威? 打开我上面给链接,在这个页面那么轻轻一搜: ? 这就是我们要找东西。...没有为什么,Java 语言规范里面就是这样规定,按照规定执行就完事了。 除了上面这三种流程,官网上还接着写了三句话: ?...这个答案在《Java 语言规范》里面也写着: ? 你看,8 种基本类型已经支持了char、byte、short、int 这4 种,而这 4 种都是可以转化为 int 类型。...当然,除了一些奇奇怪怪面试官。 这个问题我在《Java 语言规范》里面找到了答案: ? the designers of the Java programming language。...《Java 语言规范》里面说:根据 Java 编程语言设计者判断,抛出空指针这样做比静默地跳过整个 switch 语句或选择在 default 标签(如果有)里面继续执行语句要好。

    62310

    Perl、PHP、Python、Java

    但在实际应用中,它们没有Java平台和.NET平台那种整合凝聚力和核心作用,通常作为轻量级解决方案。” 问号想探个究竟:“这是由于它们都是动态语言缘故?”...比如JRuby允许RubyJava之间互相调用,类似的还有Jython、IronRuby、IronPython等等。此外值得一提是,动态语言最活跃舞台当数LAMP,L-A-M-P。”...问号建议:“作为动态语言,它们共性上节课已经谈了不少,能说说它们个性?” “它们个性极为鲜明:Perl凝练晦涩,Python优雅明晰,Ruby精巧灵动,PHP简明单纯。...比如:Perl认为做一件事可以多种方法,而Python认为一件事应该最好只有一种方法;Perl追求语言表现力,Python追求简单优雅;Perl喜欢隐性暗示,Python强调显性明示;Perl强调紧凑...Ruby主要弱点两个:一个与Python类似,在性能上还有待提高;另一个是它线程由用户空间(user space)而不是内核空间(kernel space)来管理[3],不能充分利用多核或多CPU

    99810

    Effective Java 2.0_中英文对照_第一章

    JDK两个虚拟机,Java热交换客户端和服务器虚拟机。性能指标是在服务器虚拟机上测量。...当讨论Java编程语言特性和它库时,有时指明特定版本是必要。为了简洁,本书使用工程版本号而不是正式发行名称。下表显示了发行名称与工程版本号映射关系。...本书中大部分技术术语与Java语言规范(第三版)中术语是一样。一些术语需要特别指出。Java语言支持四种类型:接口(包括注解),类(包括枚举),数组和基本类型。前三个是引用类型。...本书使用了一些与Java语言规范不同术语。不像Java语言规范,本书使用继承作为子类同义词。不再使用接口继承术语,本书简单表述一个类实现了一个接口或一个接口扩展了另一个接口。...本书使用一些Java语言规范没有定义术语。术语exported API或simply API,指的是类、接口、构造函数、成员、序列化形式,程序员通过它们访问类、接口或包。

    26820

    全网最硬核 Java 新内存模型解析与实验 - 1. 什么是 Java 内存模型

    我本人也是不断地尝试理解 Java 内存模型,重读 JLS 以及各路大神分析。...这个系列,会梳理我个人在阅读这些规范以及分析还有通过 jcstress 做一些实验而得出一些理解,希望对于大家对 Java 9 之后 Java 内存模型以及 API 抽象理解有所帮助。...前面提到 JLSJava Language Specification)其实就是一种规范,它规范Java 语言,并且所有能编译运行 Java 语言 JDK 实现都要实现它里面规定功能。...但是对于实际实现,例如 Hotspot JVM JDK,就是具体实现了,从规范到实际实现,其实是一定差异。...还有一个例子是,Hotspot 会有锁膨胀机制(这个我们后面还会测试),即: 如果按照 JLS 描述,那么 x = 1 与 y = 1 这两个操作是不能重排序

    32350

    Effective Java_中文版_第一章_2.0版本

    JDK两个虚拟机,Java热交换客户端和服务器虚拟机。性能指标是在服务器虚拟机上测量。 当讨论Java编程语言特性和它库时,有时指明特定版本是必要。...本书中大部分技术术语与Java语言规范(第三版)中术语是一样。一些术语需要特别指出。Java语言支持四种类型:接口(包括注解),类(包括枚举),数组和基本类型。前三个是引用类型。...类成员由它域、方法、成员类和成员接口组成。方法签名由它名字、正式参数类型组成;签名不包括方法返回值类型。 本书使用了一些与Java语言规范不同术语。...不像Java语言规范,本书使用继承作为子类同义词。不再使用接口继承术语,本书简单表述一个类实现了一个接口或一个接口扩展了另一个接口。...为了描述没有指定访问级别的情况,本书使用描述术语包私有代替技术上正确术语缺省访问[JLS, 6.6.1]. 本书使用一些Java语言规范没有定义术语。

    29230

    004. 线程安全之可见性问题

    脚本语言和编译语言区别 解释执行:即咱们说脚本,在执行时,语言和解释器将其一条条翻译成机器可识别的指令。 编译执行:将我们编写程序,直接编译成机器可以识别的指令码。 2....Java 是脚本语言还是编译语言Java 介于脚本语言与编译语言之间。 3. 针对上面程序问题解决办法 isRunning添加volatile关键字即可。...冲突:如果至少有一个访问是写操作,那么对同一个变量两次访问是冲突。 这些能被多个线程访问共享变量是内存模型规范对象。...13. double 和 long 特殊处理 由于《Java语言规范原因,对非 volatile double、long 单次写操作是分两次来进行,每次操作其中 32 位,这可能导致第一次写入后...《Java语言规范》中说道:建议程序员将共享64位值(long、double)用volatile修饰或正确同步其程序以避免可能复杂情况。

    33010

    我去,这么简单条件表达式竟然也有这么多坑

    可以看到字节码中加入一个拆箱操作,而这个拆箱只有可能发生在 nullInteger。 那么为什么 Java 编译器在编译时会对表达式进行拆箱?难道所有数字类型包装类型都会进行拆箱?...条件表达式表达式发生自动拆箱,其实官方在 「The Java Language Specification(简称:JLS)」15.25 节中做出一些规定,部分内容如下: JDK7 规范 If the...这是 Java 语言层面一种规范,但是这个规范如果强制让程序员执行,想必平常使用三目运算符将会比较麻烦。所以面对这种情况, Java 在编译器在编译过程加入自动拆箱进制。...最好大家在开发过程中,都遵守一定规范,即保持表达式 2 与表达式 3 类型一致,不让 Java 编译器自动拆箱机会。...建议大家没事经常看下阿里出品Java 开发手册』,在最新「泰山版」就增加条件表达式这一节规范。 ? 最后一定要做好单元测试,不要惯性思维,觉得这么简单一个东西,看起来根本不可能出错

    43720

    你真的会用volatile

    java语言标准规范对volatile描述是这样: The Java programming language allows threads to access shared variables (...https://docs.oracle.com/javase/specs/jls/se8/html/jls-8.html#jls-8.3.1.4 大概意思是,java语言允许多个线程访问共享变量。...这样就会带来一些问题,比如一个线程写完一个共享变量,还没有刷新到主内存。然后另一个线程读这个变量还是旧值,在很多场景下,这个结果和程序员期望并不一致。...规范对于volatile变量规则是:对一个volatile域写,happens-before于任意后续对这个volatile域读。...很多人会在第三步和第四步那里有疑问,线程2更新inc值以后,不是会导致线程1工作内存中值失效? 答案是不会,因为在一个操作中,值只会读取一次。这个是原子性和可见性区分核心。

    35020

    Java内存模型深入分析

    也为此提出了Java语言内存模型,这样,当我们用Java写多线程项目时,只要按照Java内存模型规范来编写代码,Java虚拟机就能保证我们代码在所有平台上都是正确执行。...在JLS规范第17章 Threads and Locks 里完整定义了Java内存模型各种规则,上面引用各种官方定义也都是从这里来。...Java内存模型中还有一部分是讲final关键字,因为这个是独立,且在JLS中讲比较清楚,这里就不再展开讲了,还是像上面说问题可以私聊我,我们一起讨论。 0x06 实战看看 ?...再来看一个例子: ? 这次还是假设方法f1,f2分别被两个线程执行,且f1先执行,f2后执行,那f2返回值一定是1?...这对后续编程语言产生了深远影响,现在看看那些新兴编程语言,每种都内置对多线程跨平台支持,每种都有自己内存模型规范。 壮哉 Java

    25810

    微软在动态语言支持上超越了Java

    与此同时,Java社区还在争论语言琐碎问题,比如语言支持属性(Properties),以及到底四种匿名方法(闭包)哪一种应该被语言内建支持。...这些问题毫无疑问也存在于Java领域中,比如说JRuby 1.0在JavaRuby代码间处理字符串传递方式: 传入Ruby代码Java字符串将被编码为UTF-8,这暗示了你应该在接收参数代码中用...JSR 292规范负责人Danny Coward则对在性能上带来改善更有信心: 动态语言引擎创造者们正在忙于将Ruby代码转换成Java字节码。...JSR 292消除了对这种合成接口需要。在今天,动态语言解释器必须输出方法调用字节码,即使是在解释执行比如说一段Ruby代码时候。...基于JVM方法将在很长一段时间内保持不变,因为JVM常常会有一个很长使用周期(作为参考:Java 1.3现在还在被许多公司所采用)。JVM真的会采用这种字节码,并且改进动态方法调用速度

    838100

    ​byte加byte居然是int了?

    问题现象最近在看 Java 基础知识时看到一个有意思现象,在 Java 中两个 byte 相加之后结果类型变成 int 类型了:byte a = 1;byte b = 2;b = a + b;从...Idea给提示可以看到,两个 byte 类型相加结果变成了 int 类型,不能赋值给一个 byte 类型变量。...:https://docs.oracle.com/javase/specs/jls/se8/html/jls-15.html#jls-15.26.2byte a = 1;byte b = 2;b +=...a;问题原理首先根据 Java 语言规范描述,在执行加法或者减法运算时,会对操作数进行类型提升:在进行类型提升时候,byte、short、char 类型都会提升为int类型,由于两个数都提升为了 int...在 JVM 操作数栈一个单位长度是 32 位,因此为了把参与运算数放到操作数栈中就必须对其进行扩展,同时我理解这里也是为了和局部变量表单位相匹配,局部变量表基本单位是槽位,一个槽位宽度也是

    4510

    三元表达式引发空指针问题

    原理分析 关于为什么编辑器会在代码编译阶段对于三目运算符中表达式进行自动拆箱,其实在《The Java Language Specification》(后文简称 JLS,是Java 语言规范,是一切...Java 编程基础参照文档)第 15.25 章节中是相关介绍。...我们直接看 Java SE 1.7 JLS 中关于这部分描述(因为 1.7 表述更加简洁一些),原文地址 -> https://docs.oracle.com/javase/specs/jls/se7...理解下这句话,JLS 规范是如果第二和第三位操作数分别是基本类型和包装类型,那么要求返回值是基本类型。...那如果你自己写代码返回值是包装类型,那么编译器为了满足 JLS 规范,其实是会自动做一个拆箱 简单总结:只要表达式 1 和表达式 2 类型一个是基本类型一个是包装类型,就会做触发类型对齐拆箱操作

    22530

    int和Integer什么区别?

    Java虽然号称是面向对象语言,但是原始数据类型仍然是重要组成元素,所以在面试中,经常考察原始数据类型和包装类等Java语言特性。今天我要问你问题是,int和Integer什么区别?...Java语言虽然号称一切都是对象,但原始数据类型是例外。Integer是int对应包装类,它有一个int类型字段存储数据,并且提供了基本操作,比如数学运算、int和字符串之间转换等。...自动装箱/自动拆箱似乎很酷,在编程实践中,什么需要注意?...如果你使用过其他语言比如C、C++,类似整数位数,其实是不确定,可能在不同平台,比如32位或者64位平台,存在非常大不同。那么,在32位JDK或者64位JDK里,数据位数会有不同?...其实,这种移植对于Java来说相对要简单些,因为原始数据类型是不存在差异,这些明确定义在Java语言规范里面,不管是32位还是64位环境,开发者无需担心数据位数差异。

    4K20

    Java测试框架九大法宝

    正式语言:这个特定框架使用半正式语言,这对软件开发人员很大帮助。领域词汇特征存在有助于管理 QA 团队结构中一致性。...优秀规范:产品具有更好规范,因为这种形式 Java 测试框架描述性地具有直观性和推理性。 BDD 开发理念:JBehave 是一个理想 Java BDD 自动化框架。...语言和框架支持:支持主要编程语言,如 C#、Java、Python、Ruby、JavaScript、PHP 等。 testNG ? TestNG TestNG是一个基于 Java 开源测试框架。...HTTPUnit 是理想 Java 测试框架? HTTPUnit 是一个非常适合执行自动化验收测试或功能测试框架。...与 Selenium 一样,这个 Java 框架可以与流行语言一起使用,例如 C#、JavaScript、JavaRuby 和 Python。

    2.5K21
    领券