【问题标题】:why don't more programming languages have builtin interfaces to the window manager?为什么更多的编程语言没有内置的窗口管理器接口?
【发布时间】:2010-11-04 10:41:05
【问题描述】:

编程是在计算机上自动执行任务的核心。
据推测,这些任务通常由人工手动完成。
人类通过键盘、鼠标以及与控制台或窗口管理器的交互来使用计算机。
但很少有语言内置了为这些基本计算对象提供接口的函数。

一个值得注意的例外是 autohotkey,它是 Windows 上的一种开源语言,它提供了允许执行以下简单任务的内置函数:
* 获取像素信息
* 获取鼠标位置
* 键盘宏
* 模拟击键
* 模拟鼠标点击
* 窗口管理
请参阅rosettacode 上的示例。

在linux上有过各种尝试,很多都没有解释就停止了。 一个是不活跃的 tcl 库:android.搜索 google code for android, lang:tcl

【问题讨论】:

  • 您认为语言的“标准库”是语言本身的一部分还是内置于语言本身?例如,FILE 是否内置在 C 编程语言中,因为它位于 C 运行时库中?
  • 请将此设为社区 Wiki。没有编程,也没有真正的答案。
  • > 没有编程...
    我发布了几个编程任务,以及实现它们的代码的链接。
  • @Naveen:编程一词与发布代码示例不同。没有代码。这使得这是一个边缘问题。此外,没有正确的答案——这是一个讨论话题。请将此设为社区 Wiki。
  • S.Lott: > 编程与发布代码示例不同。没有代码。 ...社区维基

标签: automation x11 autohotkey window-managers


【解决方案1】:

我编写网络服务器代码。没有人与代码交互。它只是 Apache 的许多复杂插件。

“人类通过键盘、鼠标以及与控制台或窗口管理器的交互来使用计算机。”

在我的情况下这是完全错误的。 “用户”通过 HTTP 发送请求。没有键盘,没有鼠标,没有控制台,没有窗口管理器。

用户可能正在使用某种花哨的 GUI,但这对我或我的软件来说并不重要。我看到的只是 HTTP GET 和 POST 请求。纯文本。

“但是很少有语言内置了为这些基本计算对象提供接口的函数。”

正确。我不使用键盘、鼠标、控制台或窗口管理器。

【讨论】:

  • 我相信编程将是未来人们的一项基本技能。用户将成为程序员!您可能会限制自己编写服务器代码,但想要自动与您的服务器交互的用户将使用键盘、鼠标或窗口管理器。而且他们的数量会比你多得多。
  • Naveen:虽然是这样,但重点是这一点。 GUI 不是语言的一部分。 GUI 是一个附加组件。
  • 这就是我的观点。用户界面应该是语言的一部分(如果是插件,那就是紧密结合的)...顺便说一下,键盘不是图形的,窗口也不必是图形的(文本窗口(可见或不可见)也适用)。
  • @Naveen:你错过了我的观点。使它成为该语言的一流部分还不够。它很方便的情况——虽然很重要——并不是该语言的唯一用例。对于 Web 应用程序之类的东西,GUI 必须是可选的。
  • 我会很高兴有可选的。对于大多数主流语言,它甚至不是一个选项,忘记内置。 autohotkey.com/forum 的注册用户有 13,000 名,而 ruby-forum.com 的注册用户约为 30,000 名,groups.google.com/group/comp.lang.python 的注册用户约为 15,000 名。“对用户界面的一流访问”的需求是主观的。我正在开发自动热键:autohotkey.net/~tinku99/ahkdll
【解决方案2】:

所有个人计算平台都有可以执行此操作的库。

问题在于,这需要标准化所有系统上的用户交互。 Java 尝试了这一点,但没有取得很大的成功。其他库或多或少都取得了成功,Qt 可能是迄今为止最有前途的库。

当然可以为包含所有 UI 基础的单一平台编写语言。也可以使用 GUI 和库来伪造它。但是,我们有充分的理由需要一种可在任何主要平台上使用的语言,无论是否有 GUI。

【讨论】:

    【解决方案3】:

    我怀疑这个前提是否正确。 Java 可以做所有这些,除了“窗口管理”,因为我不知道这是什么意思。

    如果你不能用 c# 做到这一点,我会感到惊讶。

    如果有很多语言不能做到这一点,我猜是因为如果不将语言与操作系统绑定,就很难做到。

    【讨论】:

    【解决方案4】:

    首先,我想你是在问为什么编程语言的标准库没有内置的窗口管理器接口。语言本身及其库是截然不同的。

    一个重要的原因是便携性。如果一种编程语言的库中有太多特定的功能,那么将其移植到其他系统将更加困难。例如,I/O、数学函数、字符串、各种数据结构和相关算法都是通用的,几乎可以在任何计算机上运行。

    但是诸如窗口管理器、GUI 等之类的东西,它们更多特定于某些平台,这就是为什么它们不包含在标准库中的原因。这就是 C/C++ 如此可移植的原因。

    【讨论】:

      【解决方案5】:

      在没有任何人机界面设备交互的情况下由计算机执行的任务数量远远超过由人类直接执行的任务。

      【讨论】:

      • 这有点循环推理不是吗?所有这些任务过去都需要人来完成。我只是建议更多此类不需要人工的任务。
      【解决方案6】:

      编程语言尝试(或至少目前正在尝试)独立于平台。 .net 中的示例,您必须引用一些 Win32 api 来执行您在上面指定的一些内容。将其内置于核心编程语言模型中,.net 将与操作系统过度耦合,因此,创建 Mono 对应物将太乏味。

      关于击键、宏和一些东西,我现在最简单的方法是真正的 vbscript 或 powershell :)

      【讨论】:

      • 目标是让编程语言的用户界面独立于平台。后端始终与平台相关联,一直到 c 和程序集。涉及鼠标、键盘和窗口自动化的任务与网络没有任何不同。所有后端都需要依赖平台的代码,都可以有标准化的编程接口。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-11-17
      • 1970-01-01
      • 2020-10-20
      相关资源
      最近更新 更多