Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/318.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 满足这个标准的语言?_Python_Programming Languages_Ocaml_Interpreter_Static Typing - Fatal编程技术网

Python 满足这个标准的语言?

Python 满足这个标准的语言?,python,programming-languages,ocaml,interpreter,static-typing,Python,Programming Languages,Ocaml,Interpreter,Static Typing,我做过一些Java编程,也很少做C和PHP编程。最近我开始学习Python,因为它看起来很有趣 但是关于SO的几篇文章似乎指出Python不适合并发编程。与那些有编译器的语言相比,它的速度也较慢。我也喜欢静态类型语言的优点,但是Python是动态类型的。所以我的问题是,是否有一种语言满足以下标准 1) 有一个解释器(用于更快的开发) 2) 有一个编译器(因为编译后的代码会运行得更快) 3) 具有面向对象的能力 4) 静态类型 我遇到了满足上述标准的OCaml。但是关于SO的帖子让我相信OCaml

我做过一些Java编程,也很少做C和PHP编程。最近我开始学习Python,因为它看起来很有趣

但是关于SO的几篇文章似乎指出Python不适合并发编程。与那些有编译器的语言相比,它的速度也较慢。我也喜欢静态类型语言的优点,但是Python是动态类型的。所以我的问题是,是否有一种语言满足以下标准

1) 有一个解释器(用于更快的开发)

2) 有一个编译器(因为编译后的代码会运行得更快)

3) 具有面向对象的能力

4) 静态类型

我遇到了满足上述标准的OCaml。但是关于SO的帖子让我相信OCaml不适合并发编程。所以第五个标准是

5) 适合并发编程


PS:-我不是编程语言方面的专家,所以如果我以上的任何观察结果都是错误的,请容忍我。

Python除了静态类型之外,还满足了您的大多数需求,但是,由于其设计,它有一种称为GIL或全局解释器锁的东西。这意味着python线程不会真正单独执行。这也许可以解释您提到的关于python和并发编程的批评。但是,python有
多处理
模块,它提供了一个api来使用线程之类的进程。另外,在不同vm下运行的python实现也没有GIL,如果您已经熟悉Java,也许您应该研究Jython,它是一个在JVM上运行的python实现


另外,这并不明显,但值得注意的是Python确实编译成字节码。它在任何脚本的第一次导入时都会这样做,这意味着如果一个python源文件被编辑并导入,它将被编译一次,那么所有进一步尝试导入该模块的操作都将使用字节编译版本,并且不会重新执行脚本。这种行为更像是java而不是PHP,它在每次运行时都会重新解释源代码。

我想介绍三种语言,它们可能在很大程度上满足您所寻找的所有功能

  • 哈斯克尔

    • 有一个解释器(用于更快的开发):Ghci和Hugs解释器
    • 有一个编译器(因为编译后的代码会运行得更快):格拉斯哥哈斯克尔编译器
    • 具有OO功能:在某种程度上,请阅读本文
    • 静态类型:是,不需要类型声明
    • 适用于并发编程:
  • 二郎

    • 有一个解释器(用于更快的开发):按照Erlang的工作方式,您可能没有REPL,但解释器并不总是可以帮助更快的开发。但在某种程度上,您可以使用
      erl
      来实现此目的
    • 有编译器(因为编译后的代码会运行得更快):是
    • 有面向对象的功能:没有,但是有实验性的扩展可用。但是如果您是在Erlang中开发的,那么最好还是坚持函数式编程
    • 静态类型:否
    • 适合并发编程:是的,这就是Erlang的特点
  • 棒极了

    • 有解释器(用于更快的开发):有
    • 有编译器(因为编译后的代码会运行得更快):是
    • 有面向对象的能力:是的,毕竟它是基于Java的
    • 静态类型:否
    • 适合并发编程:是的,它继承自Java
  • 最后

    • Java有一种叫做Java的东西,它可以用作Java解释器,如果这是阻止您使用Java的原因的话

    • 您必须在Python中为语言添加并发性

    如果您想进一步研究,请使用以下wiki链接

  • 学习Scala
  • 如果您不满意并且愿意与MS Visual Studio合作,请学习F#
  • 如果不满意,你可以重新考虑你的观点(3),学习Haskell
  • 如果不满意,您可以重新考虑您的观点(5),学习OCaml

  • 请注意,OCaml程序可以相对轻松地跨单独的进程工作,因为它甚至可以封送闭包。

    是的,OCaml适合于并发编程。它确实有一个
    Thread
    模块,允许您以Java的方式编写网络应用程序


    请注意,它目前不支持真正的并行性(您不会有两个线程并行运行OCaml代码),但这并不重要,因为OCaml比许多其他语言快得多(例如,在四核上,语言决战显示OCaml在多核功能方面甚至优于Haskell).

    OCaml适用于并发编程。标准库支持两种模型:具有共享内存的线程(具有和用于同步)和基于

    OCaml不支持对称多处理器并行。运行时在单个处理器上执行。如果希望利用多核计算机,则需要每个处理器至少运行一个运行时,并在运行时之间使用消息传递。消息传递具有更高的延迟,但比共享内存更难正确执行。作为奖励,程序可以在网络上的多台机器上分发,除了启动时运行时找到彼此的方式外,没有任何改变


    是OCaml的扩展,具有更好的并发和分发模型(the)。它不像官方的OCaml发行版那样精巧,但具有提供透明通信的优势(在通道上发送消息而不必担心另一方是否在同一运行时,甚至在同一台机器上)以及一个主要类型化的框架,用于在多个程序之间进行通信。

    取决于您对concurre的理解
    Connection rate: 2.2 conn/s (463.4 ms/conn, <=1 concurrent connections)
    Connection time [ms]: min 390.6 avg 463.4 max 3245.7 median 453.5 stddev 101.6
    Connection time [ms]: connect 0.1
    Connection length [replies/conn]: 1000.000
    
    Request rate: 2157.9 req/s (0.5 ms/req)