Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/292.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python vs Groovy vs Ruby?(基于所列标准)_Python_Ruby_Scripting_Groovy - Fatal编程技术网

Python vs Groovy vs Ruby?(基于所列标准)

Python vs Groovy vs Ruby?(基于所列标准),python,ruby,scripting,groovy,Python,Ruby,Scripting,Groovy,考虑到下面列出的标准,您会使用Python、Groovy还是Ruby 标准(10项中的重要性,10项最重要) 丰富的API/可用库(如数学、绘图、网络)(9) 能够嵌入桌面(java/c++)应用程序(8) 易于部署(8) 与DLL/共享库接口的能力(7) 生成GUI的能力(7) 社区/用户支持(6) 便携性(6) 数据库操作(3) 语言/语义学(2) 我知道它不在您的列表中,但至少看看perl 丰富的Api/库使船沉没 在比大多数人意识到的更多的系统上运行 适用于二进制库 有一个庞大的社区

考虑到下面列出的标准,您会使用Python、Groovy还是Ruby

  • 标准(10项中的重要性,10项最重要)
  • 丰富的API/可用库(如数学、绘图、网络)(9)
  • 能够嵌入桌面(java/c++)应用程序(8)
  • 易于部署(8)
  • 与DLL/共享库接口的能力(7)
  • 生成GUI的能力(7)
  • 社区/用户支持(6)
  • 便携性(6)
  • 数据库操作(3)
  • 语言/语义学(2)

    • 我知道它不在您的列表中,但至少看看perl

      • 丰富的Api/库使船沉没
      • 在比大多数人意识到的更多的系统上运行
      • 适用于二进制库
      • 有一个庞大的社区
      • 可移植性,见上文
      • 数据库操作:更多的方法。(选择您最喜欢的模块)
      • 是世界上最具表现力/简洁的语言之一
          我认为很难进行客观的比较。我个人更喜欢Python。为了满足您的一个标准,Python从一开始就被设计为一种可嵌入语言。它有一个非常丰富的C API,解释器是模块化的,便于从C调用。如果Java是您的主机环境,您应该看看Jython,它是Java环境(VM和libs)中Python的一个实现。

          这种按特性加分数的方法不是选择编程语言的好方法。你最好选择你最了解的。如果你一个都不认识,试一下。如果你心中有一个真正具体的项目,那么也许一些编程语言会更好,但如果你只是有一般的偏好,你永远不会达成共识


          也就是说,Python非常灵活,它是您列表中最受欢迎的,因此最容易通过搜索解决任何类型的问题,因此我推荐Python。

          只是为了混水摸鱼

          Groovy使您能够访问Java。Java拥有极其丰富的API/库、应用程序等

          Groovy是可嵌入的,尽管在Java中最简单

          DLL/库(如果您谈论的是非Groovy/Java)可能有些问题,尽管有一些方法和一些API可以提供帮助


          我曾经做过一些Python编程,但由于更熟悉Java,Groovy对我来说要容易得多。它得了56分

          我相信Ruby拥有Python所拥有的一切。它似乎有更少的图书馆。所以它得了51分

          我不知道Groovy是否具备所有功能

          由于Python是56,Ruby是51,Python只是勉强超过Ruby

          然而,我认为这种决定仍然可以归结为这九个标准之外的一些主观问题。

          Perl?哎呀

          正如有人观察到的那样,Perl就像标点符号工厂中的一次大爆炸。如果生成的代码不是自文档化的,那么简洁性不是一个优势

          已经将Groovy用于一些实用程序任务,很容易开始。对Java库的完全访问,以及一些很酷的添加,如使用闭包列出目录中的文件:

          // process all files printing out full name (. and .. auto excluded)
          
          new File(basedir).eachFile{ f->
          
              if (f.isFile()) println f.canonicalPath
          }
          

          试试Groovy。。它具有您需要的所有功能。您可以使用现有的java库,而无需对其类进行任何修改。 基本上。。groovy是java++,它更具动态性,学习起来也更有趣(就像ruby一样)


          我不喜欢ruby或python语法,所以我将把它们放在后面。Groovy就像C/C++语法,所以我喜欢他lol:)

          Groovy?我只是捡起来;尝试以下方法(在groovyconsole中):

          第一个代码是AOP。将拦截对文件对象的任何方法的所有调用。不需要额外的工具。这是针对现有Java类动态执行的

          在第二个块中,删除“f”闭包参数。作为一个参数,它默认为闭包上下文可用的内置“it”变量

          以下是您得到的:

          “已拦截对isFile的调用…C:\temp\img.jpg”


          等等。

          根据你的标准,我会选择JRuby:

          • 丰富的API/可用库(如数学、绘图、网络)(9)
          JVM可以访问的所有内容都非常多

          • 能够嵌入桌面(java/c++)应用程序(8)
          优秀的框架,它允许您在GUI设计器中设计swing GUI,然后使用干净的ruby代码将其连接起来

          • 易于部署(8)
          可以将应用程序打包为可执行的jar

          • 与DLL/共享库接口的能力(7)
          Java轻松共享库,C通过

          • 生成GUI的能力(7)
          Swing很管用。不确定使用QtJambi有多容易,但这绝对是可能的

          • 社区/用户支持(6)
          很多。Ruby拥有一个优秀的社区

          • 便携性(6)
          JVM无处不在

          • 数据库操作(3)
          所有ruby数据库库和所有java数据库库

          • 语言/语义学(2)

          在这里,ruby绝对领先于groovy和python。该语言在早期做出了一些非常漂亮的设计决策,这体现在标准库的一致性和强大性上,特别是,让它成为一种使用的乐趣。

          在与所有三种工具一起工作后,我可以说:

          • Python

            • 拥有非常成熟的图书馆
            • 图书馆被记录在案
            • 可以在运行时通过docstrings从调试器/shell访问文档
            • 您可以在没有IDE的情况下开发代码
          • 红宝石

            • 有一些很棒的库(尽管有些库的文档很糟糕)
            • Ruby的透视机制是
              File.metaClass.invokeMethod = { String name, args ->
                  System.out.print ("Call to $name intercepted...");
                  File.metaClass.getMetaMethod(name, args).invoke(delegate, args);
              }
              
              new File("c:/temp").eachFile{
                  if (it.isFile()) println it.canonicalPath
              }