Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/280.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_Ruby_Clojure_Lua_Livecoding - Fatal编程技术网

Python 哪些编程语言功能非常适合开发实时编码框架?

Python 哪些编程语言功能非常适合开发实时编码框架?,python,ruby,clojure,lua,livecoding,Python,Ruby,Clojure,Lua,Livecoding,我想建立一个“实时编码框架” 我应该解释什么是“实时编码框架”。我将通过比较实时编码和传统编码来做到这一点 一般来说,在传统编程中,您编写代码,有时编译代码,然后启动可执行文件或在某种解释器中打开脚本。如果要修改应用程序,必须重复此过程。实时编码框架允许在应用程序运行时更新代码,并根据需要重新加载。可能每次更改包含代码的文件或执行其他操作时都会发生这种重新加载。然后,代码中的更改会在应用程序运行时反映在应用程序中。不需要关闭程序,也不需要重新编译和重新启动它 在本例中,该应用程序是一个窗口应用程

我想建立一个“实时编码框架”

我应该解释什么是“实时编码框架”。我将通过比较实时编码和传统编码来做到这一点

一般来说,在传统编程中,您编写代码,有时编译代码,然后启动可执行文件或在某种解释器中打开脚本。如果要修改应用程序,必须重复此过程。实时编码框架允许在应用程序运行时更新代码,并根据需要重新加载。可能每次更改包含代码的文件或执行其他操作时都会发生这种重新加载。然后,代码中的更改会在应用程序运行时反映在应用程序中。不需要关闭程序,也不需要重新编译和重新启动它

在本例中,该应用程序是一个窗口应用程序,具有更新/绘制循环,最有可能使用OpenGL进行图形处理,使用音频库进行声音处理(SuperCollider?),理想情况下使用网络库

当然,我更喜欢语言,尽管我不确定它们是否适合这种体系结构。理想情况下,我会使用Python、Lua、Ruby或其他更高级的语言。然而,一位朋友最近建议使用Clojure,所以我也在考虑


我不仅想知道什么语言适合这种框架,而且想知道,一般来说,什么语言特性可以使这样的框架成为可能

Tcl已经有了这样的东西。例如,您可以编写一个gui程序,创建一个具有交互式提示的单独窗口。从那里你可以重新加载你的代码,输入新代码,等等

您可以使用任何gui工具包来实现这一点,尽管有些工具包要比其他工具包困难得多。使用python应该很容易,尽管缩进的东西——IMHO——使交互使用具有挑战性。我有理由相信大多数其他动态语言都可以做到这一点,而不会有太多麻烦


这样看:如果您的工具箱允许您打开多个窗口,那么这些窗口中的一个窗口没有理由不能成为交互式提示。您所需要的只是能够打开一个窗口,以及某种类型的“eval”命令,该命令以字符串形式运行代码。

实现这一功能所需的唯一一件事是一种动态绑定形式,例如,以Erlang或许多其他语言的
eval
传递消息

如果具有动态绑定,则可以在不影响消息的情况下更改消息的目标,也可以在不影响目标的情况下更改消息,前提是在尝试向其发送消息时定义了目标,并且在发送消息时为发送消息的目标定义了消息

更改目标时,您所要做的就是将消息发送到以前的版本,直到新版本就位,然后执行一个小的锁定更新以转换到新版本。同样,在更改消息时,只需提供旧版本,直到新版本可用为止


易于热插拔的代码仍必须如此设计,但应用程序必须足够模块化,以确保更换组件的实现不会导致中断,这只能通过仔细编程实现。

在开发设备上安装“实时编码”是很好的,但直接与部署的服务器交互的方法使其更接近“真实”。为此,您需要一个网络感知REPL


clojure以。这允许您远程连接到部署的tomcat服务器上正在运行的代码版本(例如)。然后,您可以附加您最喜欢的支持swank的开发工具并进行黑客攻击。

Clojure几乎拥有您想要的所有实时编码语言。主要亮点:

  • 交互式REPL-因此您可以直接与跑步程序交互。即使在我做“传统编程”的时候,我也倾向于以交互方式编写代码,然后将我喜欢的代码复制到源文件中。Clojure就是这样设计的——程序中几乎所有的东西在运行时都是可检查、可修改和可替换的
  • 强大的并发支持-您可以通过
    (future(some function))
    等代码轻松启动并发后台任务。更重要的是,Culjule的STM和强调高性能的不可变数据结构将负责更微妙的并发性方面(例如,如果我正在更新一个实况数据结构,而它正在被渲染的中间)会发生什么?
  • 库可用性-它是一种JVM语言,因此您可以从Java生态系统中获取所需的所有音频、视频、IO或计算工具。很容易用一两行Clojure将它们包装起来,这样就可以获得所需函数的简洁接口
  • -由于Clojure是一种语言,您可以利用Lisp功能编写扩展该语言的强大宏。您可以有效地构建希望在实时环境中使用的确切语法,并让编译器在幕后完成创建完整代码的所有艰苦工作
  • 动态键入-这种方法的好处可以从两个方面进行论证,但当试图快速简洁地编写代码时,它无疑是一个巨大的好处
  • 活跃社区,有很多很酷的项目-在Clojure社区,你可能会发现很多人对类似的实时编码技术感兴趣
您可能会发现几个有趣的链接:

  • (超级对撞机前端)

谷歌appengine上的python有repote\u api\u shell.py。这不是一个完整的实时编码套件-emacs上的clojure w/swank clojure在将“实时编码”集成到日常开发rhyt中方面有着更多的实际用途
$ PYTHONPATH=. remote_api_shell.py -s dustin-getz.appspot.com
App Engine remote_api shell
Python 2.7.1 (r271:86832, Jun 16 2011, 16:59:05) 
[GCC 4.2.1 (Based on Apple Inc. build 5658) (LLVM build 2335.15.00)]
The db, users, urlfetch, and memcache modules are imported.

dustin-getz> import models
dustin-getz> models.BlogPost(title='a modern take on automated testing', link='https://docs.google.com/document/pub?id=1DUxQogBg45rOTK4c5_SfEHiQcvL5c207Ivcy-gDNx2s', dont_publish_feed=False).put()

dustin-getz> items = models.BlogPost.all().filter('dont_publish_feed =', False).order('-published_date').fetch(100)

dustin-getz> len(items)
58

dustin-getz> for item in items[:5]: print item.title
a modern take on automated testing
Notes: Running a startup on haskell
the [un]necessity of superstar middle management in bigcos
"everything priced above its proper value"
stages of growth as a software engineer