我想花一些时间来了解更多关于在DLR之上构建的动态语言的知识,我不确定哪种语言会更好学习.
时间有限,我真的只有时间去学习其中一个.
从长远来看,对两者中的哪一个(Iron Ruby或Iron Python)更有用的任何意见?
.net ironpython ironruby dynamic-language-runtime dynamic-languages
我最近有必要动态地在javascript中重写javascript函数.我做的很容易,而且有多么有趣,让我很震惊.
在这里我有一些HTML:
<div id="excelExport1234"
onclick="if(somestuff) location.href='http://server/excelExport.aspx?id=56789&something=else'; else alert('not important');"
>Click here to export to excel</div>
Run Code Online (Sandbox Code Playgroud)
我无法更改输出的HTML,但我需要为该链接添加一个额外的参数.我开始考虑它,并意识到我可以这样做:
excelExport = $('excelExport1234');
if (needParam)
eval('excelExport.onclick = ' + excelExport.onclick.toString().replace("excelReport.aspx?id", "excelReport.aspx?extraParam=true&id") + ';');
else
eval('excelExport.onclick = ' + excelExport.onclick.toString().replace("extraParam=true&", "") + ';');
Run Code Online (Sandbox Code Playgroud)
它就像一个冠军!excelExport.onclick返回一个函数对象,我将其转换为字符串,然后执行一些字符串操作.由于它现在采用"function(){...}"的形式,我只需返回并将其分配给dom对象的onclick事件.不得不使用eval有点难看,但是AFAIK没有一个javascript函数构造函数可以接受一串代码并很好地将它变成一个对象.
无论如何,我的观点并不是我非常聪明(我不是),我的观点是这很酷.我知道javascript不是唯一可以做到这一点的语言.我听说过lisp为了这个目的已经有多年的宏了.除了真正的grok宏你需要真正grok lisp,我不会理解它,我只是'得到它'.
所以我的问题是:在其他语言中你能(轻松地)动态地重写函数,你能告诉我一个简单的例子吗? 我想看看你能做到的其他地方,以及它是如何完成的!
(另外,我不知道该怎么标记,所以我随机猜测)
是否可以在C#中编写一个简单而快速的函数来执行字符串中的任意方法?例如,如果我设置MyString ="MessageBox.Show("Some Message")"然后调用ExecuteString(MyString),则会弹出一个消息框,其中包含"Some Message".
(我可能在上面的代码中犯了一些错误.我还不知道C#;我正在尝试评估它是否适合特定的项目.)
作为开发一个小ScriptEngine的一部分,我反思地调用java方法.脚本引擎的调用为我提供了方法名称和参数数组的对象.要调用该方法,我尝试通过调用Class.getMethod(名称,参数类型)来解决它.
但是,这仅适用于参数的类和Method所期望的类相同的情况.
Object o1 = new Object();
Object out = System.out;
//Works as System.out.println(Object) is defined
Method ms = out.getClass().getMethod("println",o1.getClass());
Object o2 = new Integer(4);
//Does not work as System.out.println(Integer) is not defined
Method mo = out.getClass().getMethod("println",o2.getClass());
Run Code Online (Sandbox Code Playgroud)
我想知道是否有一种"简单"的方法来获得正确的方法,如果可能的话,最适合参数类型,或者我必须自己实现.
最贴合的是:
Object o1 = new Integer(1);
Object o2 = new String("");
getMethod(name, o1.getClass())//println(Object)
getMethod(name, o2.getClass())//println(String)
Run Code Online (Sandbox Code Playgroud)
更新:
澄清我需要的东西:脚本引擎是我在空闲时间写的一个小项目,因此我没有必须遵循的严格规则.因此我认为选择从引擎调用的方法与java编译器在编译时仅使用动态类型而不是Object的静态类型选择方法的方式相同.(有或没有自动装箱)
这是我首先希望的Class.getMethod()会解决.但是Class.getMethod()需要与Method声明的参数类型完全相同的类,使用子类将导致没有这样的方法Exception.这可能是有充分理由发生的,但是这个方法对我来说没用,因为我事先并不知道哪种参数类型适合.
另一种方法是调用Class.getMethods()并遍历返回的数组并尝试查找拟合方法.然而,如果我不想采用我遇到的第一个"好"方法,那将会很复杂,所以我希望现有的解决方案至少可以处理:
支持自动装箱也很不错.
如果一个调用无法解析,它可能会抛出一个异常(ma(String,Object),ma(Object,String),args = String,String)
(如果你直到这里,请感谢花时间阅读它: - ))
所以,你在网站上使用了一堆javascript库.你的javascript代码调用了几个API,但是在升级之后,每隔一段时间就会发生一次API更改,而你的代码会在你不知情的情况下中断.
你如何防止这种情况发生?
我最感兴趣的是javascript,但关于动态类型语言的任何答案都很有价值.
任何人都可以解释有关动态类型或静态类型语言的C C++ Java.
我在某处读到C C++和Java都是静态语言.但我记得还有其他意见.非常困惑.
谢谢!
在动态语言中,动态类型化代码JIT如何编译成机器代码?更具体地说:编译器是否在某些时候推断出类型?或者在这些情况下是否严格解释?
例如,如果我有类似下面的pseuocode
def func(arg)
if (arg)
return 6
else
return "Hi"
Run Code Online (Sandbox Code Playgroud)
在运行代码之前,执行平台如何知道函数的返回类型是什么?
我正在学习操作系统,而我完全不了解的是堆栈和堆栈.我知道它们的好处以及它们的工作原理,但在动态语言的情况下,我无法弄清楚堆栈是如何分配的.
在静态类型语言中,所有原始数据类型都存储在堆栈中,因为它们很小并且将按照它们分配的相同顺序或多或少地解除分配,但是在像PHP这样的语言中,这在运行时才知道.那么堆栈大小和变量分配怎么可能呢?
如果我理解正确,则通过分析原始数据类型的数量和一些偏移量来确定堆栈大小.如何在PHP或其他动态语言中完成该过程?
如果这个问题在黑暗中发生,请给我一些指导如何了解这一点
我最近开始使用 Python3,并且对它比其他类似的动态语言(主要是 Perl)慢多少感到困惑。
在尝试学习 Python 时,我做了一些在线编码挑战,Python 通常比 Perl 慢至少 10 倍,并且使用至少 2 倍的内存。
在研究这种好奇心时,我遇到有人问为什么 Python 比 C/C++ 慢,这应该是非常明显的,但没有任何帖子将它与其他类似语言进行比较。还有一个信息丰富但过时的基准http://raid6.com.au/~onlyjob/posts/arena/,证实它相当慢。
我明确询问的是标准 Python 实现,而不是 pypy 之类的东西。
编辑:我感到惊讶的原因来自于 codeeval.com 上的结果页面。下面是两个脚本,用于将一行中每个单词的第一个字符大写。
Python3 (3.4.3) v1
import sys
import re
def uc(m):
c = m.group(1)
return c.upper()
f = open(sys.argv[1], "r")
for line in f:
print(re.sub(r"\b(\D)", uc, line))
Run Code Online (Sandbox Code Playgroud)
Perl (5.18.2)
use strict;
use warnings "all";
open(my $fh, "<", "$ARGV[0]") or die;
while (<$fh>)
{
s,\b(\D),uc $1,ge;
print;
}
close $fh;
Run Code Online (Sandbox Code Playgroud)
由于我对Python不是很熟悉,所以我也尝试了不同的版本,看看是否有什么不同。
Python3 v2:
import sys …Run Code Online (Sandbox Code Playgroud) 计算机只能理解机器语言.那么,如果没有将其翻译成机器语言,解释器如何直接执行程序呢?例如:
<?php
echo "Hello, World!" ;
Run Code Online (Sandbox Code Playgroud)
这是一个用PHP编写的简单Hello World程序.它是如何在机器中执行的,而机器却不知道echo是什么?它是如何输出预期的,在这种情况下,字符串Hello,World!?
compiler-construction interpreter programming-languages dynamic-languages
java ×2
.net ×1
c ×1
c# ×1
c++ ×1
heap-memory ×1
interpreter ×1
ironpython ×1
ironruby ×1
javascript ×1
jit ×1
lisp ×1
performance ×1
perl ×1
php ×1
python ×1
reflection ×1
stack-memory ×1