这篇文章主要围绕除了动态类型,是什么让Ruby“比Java更灵活”?展开,旨在为您提供一份详细的参考资料。我们将全面介绍除了动态类型,是什么让Ruby“比Java更灵活”?,同时也会为您带来javas
这篇文章主要围绕除了动态类型,是什么让Ruby“比Java更灵活”?展开,旨在为您提供一份详细的参考资料。我们将全面介绍除了动态类型,是什么让Ruby“比Java更灵活”?,同时也会为您带来javascript – 是什么让不安全的脚本“不安全”?、javascript – 究竟是什么让ReactJS像它声称的一样快?、JRuby 1.6.5 发布,Java 版的 Ruby 解释器、JRuby 1.7.14 发布, Java 版的 Ruby 解释器的实用方法。
本文目录一览:- 除了动态类型,是什么让Ruby“比Java更灵活”?
- javascript – 是什么让不安全的脚本“不安全”?
- javascript – 究竟是什么让ReactJS像它声称的一样快?
- JRuby 1.6.5 发布,Java 版的 Ruby 解释器
- JRuby 1.7.14 发布, Java 版的 Ruby 解释器
除了动态类型,是什么让Ruby“比Java更灵活”?
我几乎一直在使用Java,因为它刚出现,但在过去的五年中已经被烧毁了,即使做最简单的事情也变得多么复杂.我开始在我的精神科医生的推荐下学习Ruby,呃,我的意思是我的同事(年轻,冷静的同事 – 他们使用Macs!).无论如何,他们不断重复的一件事是,Ruby是一种“灵活”的语言,而不是像Java那样的老式,更加拙劣的语言,但我真的不知道这意味着什么.有人能解释是什么让一种语言比另一种语言“更灵活”?请.我对动态类型有所了解,可以看出这对简洁有什么好处. Ruby语法很漂亮.还有什么?动态打字是主要原因吗?
解决方法:
动态类型并没有接近它.举一个很好的例子,Ruby在许多情况下使元编程变得容易.在Java中,元编程要么是痛苦的要么是不可能的.
例如,采用Ruby通常的方式声明属性:
class SoftDrink
attr_accessor :name, :sugar_content
end
# Now we can do...
can = SoftDrink.new
can.name = 'Coke' # Not a direct ivar access — calls can.name=('Coke')
can.sugar_content = 9001 # Ditto
这不是一些特殊的语言语法 – 它是Module类的一个方法,并且易于实现.这是attr_accessor的示例实现:
class Module
def attr_accessor(*symbols)
symbols.each do |symbol|
define_method(symbol) {instance_variable_get "@#{symbol}"}
define_method("#{symbol}=") {|val| instance_varible_set("@#{symbol}", val)}
end
end
end
这种功能可以让您在表达程序方面获得很多灵活性.
很多看起来像语言特性(以及大多数语言中的语言特性)都只是Ruby中的常用方法.再举一个例子,这里我们动态加载其名称存储在数组中的依赖项:
dependencies = %w(yaml haml hpricot sinatra couchfoo)
block_list %w(couchfoo) # Wait, we don't really want CouchDB!
dependencies.each {|mod| require mod unless block_list.include? mod}
javascript – 是什么让不安全的脚本“不安全”?
我真正想知道的是,如果不是要求提供信息或直接访问他们的计算机,是什么让脚本不安全?
解决方法
内联JavaScript
这是一个常见的错误(我已经做到了).您不能放入内联JavaScript语句.例如,您无法以这种方式处理事件:
<img src="myImage.jpg" onclick="doSomething()">
执行此操作的正确方法是为DOM元素定义Id,在我的示例中定义图像,并在单独的JavaScript文件中设置事件处理程序:
page.html中:
<img src="myImage.jpg" id="myImage"> <script src="script.js"></script>
的script.js:
//In vanilla Javascript : document.getElementById("myImage").onClick(doSomething); //In JQuery $("#myImage").on("click",doSomething);
评估和相关功能
所有可以在飞行中将String评估为JavaScript的函数都是不安全的.
所以不允许使用eval函数,例如new Function(“return something.value”);
远程脚本
只有本地脚本才是安全的.如果您使用的是jQuery,则必须在扩展中包含该库.通过CDN链接加载外部库被认为是不安全的.
这是一个快速概述,您可以阅读更多相关信息,并对Google Chrome扩展程序Content Security Policy进行此限制的解释
javascript – 究竟是什么让ReactJS像它声称的一样快?
我知道以下内容:
>虚拟DOM以及React如何运行差异来采取最少的步骤以确定“更改”并相应地响应/重新呈现,而不是传统的“脏检查”操作在其他框架/库中.
>通过“可观察”模式进行更多的声明性编程,而不是命令性地实现.
所以,上面的陈述在概念上对我来说听起来都很好,但是,当我考虑现实生活用例和实践时,我没有想到好处:
>考虑使用jQuery:
$( “#箱”)removeClass( ‘红’)addClass( ‘蓝’).
它比React方式做同样的事情“慢”怎么样?我理解它的方式,jQuery将直接从DOM中获取1个匹配id值为“Box”的元素,并按照指示删除并添加类 – 所有特定于DOM中的元素. (它在这里实现“脏检查”以找到#Box吗?)
使用ReactJS,它将首先在其Virtual DOM中进行相同的更改(在执行diff以查找具有最少步骤数的#Box之后)并将元素重新呈现为实际DOM.因此,如果有的话,似乎是在增加一个与VDOM进行比较的额外步骤.
>可观察的模式一直存在.为什么它是第一次应用于事件处理操作?…做类似的事情:
“嘿,这里发生了一些变化(事件被触发)……所以让我们看看我们应该做些什么(运行与事件有关的所有事情)并且做到这一点”
任何见解,指针和例子将不胜感激!
解决方法
document.getElementById("MyID").className = document.getElementById("MyID").className.replace(/\bred\b/,''); document.getElementById("MyID").className = document.getElementById("MyID").className + ' blue';
实际上,我们并没有尝试在这里竞争原始速度,否则你只需要用纯粹的javascript编写,我知道这样做的公司纯粹是为了在移动设备上更快.
框架的好处是维护和开发速度.纯javascript编程比jQuery更难扩展和维护,类似的jQuery编程比React更难扩展和维护.虽然反过来也是如此,但使用jQuery获得具有最小功能的应用程序要快得多(但是在构建mvp之后,维护变得更加困难)
在小代码库中,jQuery可能比React更快,但是当你使用更大的代码库时,你会在jQuery中找到大量的重复和冗余代码,它本身就变得更慢了.然而,反应是不同的 – 首先是React,将所有内容分离到组件中以便更容易重用,第二个React有一个很酷的内部引擎,可以防止无用的渲染减慢你的应用程序.
所以是的,你是对的,jQuery可以比React更快,但这确实错过了React的观点.正如纯javascript可能比jQuery更快,但是缺少jQuery的观点.
JRuby 1.6.5 发布,Java 版的 Ruby 解释器

JRuby 1.6.5 发布了,该版本主要是修复与 Ruby 1.9 不兼容的问题,并建议所有低版本用户升级。
详细信息参阅:http://jruby.org/2011/10/25/jruby-1-6-5.html
JRuby 1.7.14 发布, Java 版的 Ruby 解释器
JRuby 1.7.14 发布,此版本现已提供下载:
http://www.jruby.org/download
JRuby 1.7 主要是为了兼容 Ruby 1.9.3 版本,改进记录如下:
解决了 30 个 issues
修复了 Jar 文件源潜在的内存泄漏问题
因为在 Rails 应用启动比较慢,所以默认禁用 invokedynamic
load/require 内部重构和简化
解决了一些兼容性问题
1.7.14 修复的 bug:
#1923 - String#start_with? returns false when using an empty string
#1905 - Tempfile and deleteOnExit
#1899 - Can''t call static method on Java 8 interface
#1898 - Fix the memory leak and actually close the resources.
#1889 - NPE from org.jruby.java.proxies.ArrayJavaProxy.to_a
#1888 - native memory leak when reading files from inside a .jar
#1859 - JMX tries to double-bind a port when using bundle exec
#1858 - JRuby with Java 8 4 to 10 times slower than Java 7
#1852 - JRubyClassloader seems to have a problem with file urls pointing to jar ...
#1850 - embedded jars do not get loaded
#1846 - Fix $LOAD_FEATURES paths for 1.8
#1818 - fix ArrayJavaProxy#to_a failure on arrays containing null
#1813 - can not load resources from jar anymore with jar uri
#1809 - apply minor enebo''s comments
#1808 - Fix BigDecimal#round behavior with NAN and INFINITY
#1805 - Zlib crc improvements
#1803 - Fix minor bug in `setNativeEnabled`, and expose it in ScriptingContainer
#1802 - Fix Encoding::Converter#inspect output
#1799 - mvn -Pall fails at the documentation step
#1790 - Make Time#to_r consistent with MRI
#1777 - ServerSocket#accept_nonblock returns the server''s port, not the client''s
#1772 - avoid sub-classing ThreadLocal since it will leak in envs such as .wars
#1765 - added a java_field method for use in the jrubyc command.
#1762 - enhanced the java_class compiler so it can handle multiple constructors
#1750 - Refactor LoadService to make use of resources
#1729 - no valid struct layout for Ethon::Curl::Slist
#1676 - Empty hash optimization
#1580 - IO.select raises CancelledKeyException on shutdown
#1520 - Date comparison as java objects
#1435 - bouncy-castle-java JARs missing when warbling with JRuby 1.7.10
JRuby是面向Ruby、基于Java虚拟机(JVM)的一种解释程序,它结合了Ruby语言的简易性和功能强大的JVM的执行机制,包括与 Java库 全面集成。Rails彻底加快及简化了Web应用的开发,不过它让人觉得不够成熟,特别是在高端企业级功能方面。另一方面,Java平台及其虚拟机、库和 应用服务器的速度、稳定性和功能方面却一直在提升,现在已被公认为是开发高端服务器应用的领先平台。不过如果Java平台不与Ruby等新兴语言联系在一 起,就有可能落后于流行趋势。
示例代码:
require "java" include_class "java.util.TreeSet" include_class "com.example.CallMe" include_class "com.example.ISpeaker" puts "Hello from ruby" set = TreeSet.new set.add "foo" set.add "Bar" set.add "baz" set.each { |v| puts "value: #{v}" } cm = CallMe.new cm.hello $globalCM.hello class CallJava include ISpeaker def initialize super @count = 0 end def say(msg) puts "Ruby saying #{msg}" end def addOne(from) # m.synchronize { @count += 1 puts "Now got #@count from #{from}" # } end end
关于除了动态类型,是什么让Ruby“比Java更灵活”?的介绍现已完结,谢谢您的耐心阅读,如果想了解更多关于javascript – 是什么让不安全的脚本“不安全”?、javascript – 究竟是什么让ReactJS像它声称的一样快?、JRuby 1.6.5 发布,Java 版的 Ruby 解释器、JRuby 1.7.14 发布, Java 版的 Ruby 解释器的相关知识,请在本站寻找。
本文标签: