标签: dynamic-languages

哪种动态.NET语言更有意义,Iron Ruby或Iron Python?

我想花一些时间来了解更多关于在DLR之上构建的动态语言的知识,我不确定哪种语言会更好学习.

时间有限,我真的只有时间去学习其中一个.

从长远来看,对两者中的哪一个(Iron Ruby或Iron Python)更有用的任何意见?

.net ironpython ironruby dynamic-language-runtime dynamic-languages

5
推荐指数
2
解决办法
1194
查看次数

您可以使用哪种语言动态地重写功能?

我最近有必要动态地在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,我不会理解它,我只是'得到它'.

所以我的问题是:在其他语言中你能(轻松地)动态地重写函数,你能告诉我一个简单的例子吗? 我想看看你能做到的其他地方,以及它是如何完成的!

(另外,我不知道该怎么标记,所以我随机猜测)

lisp programming-languages dynamic-languages

5
推荐指数
2
解决办法
869
查看次数

C#:执行存储在字符串变量中的函数

是否可以在C#中编写一个简单而快速的函数来执行字符串中的任意方法?例如,如果我设置MyString ="MessageBox.Show("Some Message")"然后调用ExecuteString(MyString),则会弹出一个消息框,其中包含"Some Message".

(我可能在上面的代码中犯了一些错误.我还不知道C#;我正在尝试评估它是否适合特定的项目.)

c# dynamic-languages

5
推荐指数
1
解决办法
3596
查看次数

调用最接近的拟合方法

作为开发一个小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()并遍历返回的数组并尝试查找拟合方法.然而,如果我不想采用我遇到的第一个"好"方法,那将会很复杂,所以我希望现有的解决方案至少可以处理:

  • 最接近:如果arg.getClass()==子类和方法m(超类),则m(子类)然后调用m(子类)
  • 变量参数:System.out.printf(String,String ...)

支持自动装箱也很不错.
如果一个调用无法解析,它可能会抛出一个异常(ma(String,Object),ma(Object,String),args = String,String)
(如果你直到这里,请感谢花时间阅读它: - ))

java reflection dynamic-languages

5
推荐指数
1
解决办法
1023
查看次数

您如何知道您使用的JavaScript库是否会在升级后破坏您的代码?

所以,你在网站上使用了一堆javascript库.你的javascript代码调用了几个API,但是在升级之后,每隔一段时间就会发生一次API更改,而你的代码会在你不知情的情况下中断.

你如何防止这种情况发生?

我最感兴趣的是javascript,但关于动态类型语言的任何答案都很有价值.

javascript static-analysis dynamic-languages

5
推荐指数
1
解决办法
114
查看次数

任何人都可以解释有关动态或静态语言的C C++ Java

任何人都可以解释有关动态类型或静态类型语言的C C++ Java.

我在某处读到C C++和Java都是静态语言.但我记得还有其他意见.非常困惑.

谢谢!

c c++ java dynamic-languages static-language

5
推荐指数
1
解决办法
2473
查看次数

如何动态语言JITted?

在动态语言中,动态类型化代码JIT如何编译成机器代码?更具体地说:编译器是否在某些时候推断出类型?或者在这些情况下是否严格解释?

例如,如果我有类似下面的pseuocode

def func(arg)
    if (arg)
        return 6
    else
        return "Hi"
Run Code Online (Sandbox Code Playgroud)

在运行代码之前,执行平台如何知道函数的返回类型是什么?

jit dynamic-languages

5
推荐指数
1
解决办法
398
查看次数

用PHP堆栈和堆?

我正在学习操作系统,而我完全不了解的是堆栈和堆栈.我知道它们的好处以及它们的工作原理,但在动态语言的情况下,我无法弄清楚堆栈是如何分配的.

在静态类型语言中,所有原始数据类型都存储在堆栈中,因为它们很小并且将按照它们分配的相同顺序或多或少地解除分配,但是在像PHP这样的语言中,这在运行时才知道.那么堆栈大小和变量分配怎么可能呢?

如果我理解正确,则通过分析原始数据类型的数量和一些偏移量来确定堆栈大小.如何在PHP或其他动态语言中完成该过程?

如果这个问题在黑暗中发生,请给我一些指导如何了解这一点

php dynamic-languages heap-memory stack-memory

5
推荐指数
1
解决办法
6807
查看次数

为什么我的 Perl 脚本比等效的 Python 代码快一个数量级

我最近开始使用 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)

python perl performance dynamic-languages

5
推荐指数
0
解决办法
1428
查看次数

如果程序从未被翻译成机器语言,那么如何执行以解释语言编写的程序?

计算机只能理解机器语言.那么,如果没有将其翻译成机器语言,解释器如何直接执行程序呢?例如:

<?php
    echo "Hello, World!" ;
Run Code Online (Sandbox Code Playgroud)

这是一个用PHP编写的简单Hello World程序.它是如何在机器中执行的,而机器却不知道echo是什么?它是如何输出预期的,在这种情况下,字符串Hello,World!?

compiler-construction interpreter programming-languages dynamic-languages

5
推荐指数
1
解决办法
221
查看次数