2011-09-11 43 views
7

在这张图片的背景上image你可以找到一些代码,看起来像用扩展的python方言写的,它必须用“python -m dg“来获得”正常“的Python代码。 谷歌没有结果的“蟒蛇-m DG”查询,yandex.ru只有一个缓存页面,其中简要地提及一个例子帮助识别python模块(预处理器?)“python -m dg”

python -m dg <<< 'sum $ map int $ str 2 ** 1000' 

这似乎是等同的

sum(map(int, str(2**1000))) 

你知道这是什么吗?我想看看这个工具,但找不到任何链接...

+1

这是解决[问题16](http://projecteuler.net/index.php?section=problems&id=16)项目欧拉的...: D – JBernardo

+1

注意:在前台翻译消息:'GNU/Linux被阻止。您的PC上检测到专有软件,因此它已被Richard Stallman阻止。要解除对GNU/Linux的阻止,请将文本“proprietarysoftwaresucks”的短信发送至号码5555,并在下面的字段中输入确认码。解除封锁。警告!尝试重新安装GNU/Linux将导致数据丢失。“这是对”Trojan.Winlock“型勒索软件的模仿。 –

回答

3

-m标志到python是指模块dg.py。 (尝试python -m this这就像在python shell中说import this)。

看起来像dg.py是一些自定义语言的解释器。图像的上半部分看起来像这个“dg”语言中的代码片段。它运行在KDE上,似乎使用Qt库。虽然在网上找不到它。

+0

是的,我知道什么-m标志。我的问题是关于dg模块。我认为它一定是一个广为人知的项目,因为它看起来非常有前途。但它也可能是一些未发表的正在进行的工作。 –

-1

我觉得这个名字('dg')就是rundom。所以,不要浪费你的时间在这些事情上。

+1

嗯,这是可能的。但是,当我们从不同的来源获得两个不同的参考资料,不同的例子,但具有相同的语言功能...我不认为这个项目是完全未知的。 –

+1

如果它没有从搜索引擎的参考,那么它关闭,关于它只知道几个人。那些人不会告诉你。所以这是浪费时间。 –

4

令人着迷 - 但是,正如其他答案所指出的那样,这是一种完全不释放和未知的语言。你是如何在屏幕截图的背景中找到它的?我不得不照亮GIMP中的图像,看看你在说什么。

方言略Python的 - 它使用__init__()为对象开始,而且似乎有类似Python的for循环 - 但是它借鉴了其他语言至少有许多结构(虽然只有整数这里使用?):

  1. The do ... end Ruby的分隔符。
  2. 从Smalltalk和Ruby中,方法参数只是在方法名后面用空白分隔列出,而不是用标点符号分隔。
  3. 由于某种原因,语言似乎无法处理a.b.c,尽管这些表达式的操作顺序至少从1970年左右C的版本开始就是从左到右的顺序。相反,这种奇怪的语言让您键入{a.b}.c,除非我误解了这里是一个特例。
  4. Lambda函数使用parens和一个箭头。
  5. 正则表达式在语法上有直接支持,使用r/.../

对于那些谁也看不出清晰的图像,下面是它的一个片段,显示所有的上述五个特征(这种情况发生时一个级深,大括号,其起始里面,我们不能看到:

def __init__(self parent: nil) do 
    {super}.__init__ parent; 
    self.setLayout {QGridLayout}; 

    transform = (t) -> {r/([^>])\n/.sub '\]<br />' t}; 

    for c in (0 4) {self.layout}.setRowStretch c 1; 
    for c in (0 3) {self.layout}.setColumnStretch c 1; 

    {self.layout}.addWidget {QLabel {transform self.text}} 1 1; 
    {self.layout}.addLayout { 
     sublayout = {QHBoxLayout}; 
     sublayout.addWidget {QLineEdit}; 
     sublayout.addWidget {QPushButton '<…Russian text…>'}; 
     return sublayout; 
    } 2 1; 
    {self.layout}.addWidget {QLabel {transform self.footer}} 3 1; 
end; 

我野生的猜测是,这种语言直接编译到C++,因为漂亮的语法,下面我什么也看不到这里,需要一个动态的语言。

+1

在原始图像上您可以看到,处理后的输出直接传送到“普通”python解释器,因此它不会编译为C++。看来,处理这个工具后,产生标准的Python代码。第二个例子向我们展示了直接解释这种语言的方法。 –

+0

不幸的是,你的回答对我没有用,但至少比简单的“这是浪费时间”更好......(; –

+0

我认为Python一步转换并编译了后端语言,但我的猜猜可能很容易出错,你的猜测肯定是最好的。谢谢! –

4

DG是一个自定义的语言,,编译CPython的3.4(或最新)字节码。

链接到项目在GitHub上:https://github.com/pyos/dg

+0

@AlexLaskin:这是正确的答案,你应该接受它,实际上它现在编译为CPython 3.3/3.4字节码。也是正确的,但不幸的是,该项目已被删除。我已经分叉它,你可以在这里找到它:https://github.com/rubik/dg – rubik

+0

@rubik该项目现在不被删除 –

+0

它很快恢复。现在正在积极开发。 – rubik