问题标签 [internals]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
7 回答
80141 浏览

git - git 索引到底包含什么?

Git 索引究竟包含什么,我可以使用什么命令来查看索引的内容?


感谢您的所有回答。我知道索引充当了一个暂存区,并且提交的是索引而不是工作树。我只是对索引对象的组成感到好奇。我猜它可能是文件名/目录名列表、SHA-1 对、一种虚拟树?

在 Git 术语中,是否有任何管道命令可用于列出索引的内容?

0 投票
2 回答
139 浏览

perl - Perl 的 C 翻译后端有什么用?

除了纯粹显而易见的:“它将 Perl 翻译成 C。”;Perl 编译器的优化 C 翻译后端 B::CC 是否有任何实际用途(又名 hack)?

0 投票
2 回答
1258 浏览

javascript - Selenium waitFor 机制的内部工作原理是什么?

我正在尝试通过拦截对 doClick(locator) 的调用来自定义 Selenium 的单击命令的行为(通过 user-extentions.js)。基本上,每当显示我们的应用程序的“忙碌指示器”时,我都需要延迟点击操作。

(现在这种事情的标准答案是在这些情况下在脚本中插入一个 waitFor 。事实上,我们目前在我们的脚本中有数以千计的它们。我正试图消除这些。)

检测页面元素是微不足道的部分。棘手的部分是让脚本真正等待。我看起来很有希望但失败的尝试如下所示:

doWaitForCondition 在每次点击之前被调用,但当条件评估为假时它不会等待。nativeClick 总是立即被调用,因此不会引入延迟。我怀疑 doWaitForCondition 函数本身实际上并没有做任何等待,而是在命令执行循环中为它建立了条件。在这种情况下,点击命令已经在发挥作用,我正在尝试在命令中运行命令。

有人可以阐明 Selenium 命令执行和 waitFor 的工作原理,或者提供有关如何完成的建议吗?

0 投票
1 回答
58 浏览

networking - 用于路由的数据包生成

作为课程的一部分,我正在更改内核的 ip 查找代码,我已经进行了更改,我想对其进行测试.. 我应该如何为这些 ip 查找生成数据.. 将更改 /proc/sys/net/ ip_forward to 1 帮我生成我想要的数据??

换句话说,我在内核中有不同的 ip 查找实现集,我想收集这些实现的统计信息,我应该怎么做..

0 投票
2 回答
5564 浏览

django - 我怎样才能最好地了解 django 在内部是如何工作的?

所以我一直在玩 django,我真的很喜欢这个框架。但是,我想更好地了解它实际上是如何“在幕后”工作的。

这是我目前对 client-server-django 世界的看法,它非常粗糙,可能会让你的脚趾甲卷曲(对不起)......

  1. 浏览器向服务器发送 Http 请求。
  2. 服务器发挥作用并通过 CGI 将请求转储到 django(?)
  3. django 的某些部分(哪个?)接收请求并将其转换为 django 请求对象。
  4. 请求对象通过中间件在一些模糊的路径上徘徊,中间件用它做奇怪的事情。
  5. 请求对象最终以某个函数(哪个?)结束,该函数查看 url,从 urls.py 中取出模式并调用视图函数。
  6. 视图函数发挥了它们的魔力(与模型和模板作为副伙伴),这可能是我最有理解错觉的地方(好吧,除了数据库抽象魔法之外,就是......;)
  7. 视图函数返回一个 HttpResponse 对象,我猜这是在 CGI 的一些模糊路径上返回的。
  8. Webserver 再次接管并将 Http 响应发送给客户端。

好的,那么你问我的问题到底是什么?那么,这一切是如何运作的,真的吗?我不指望你把所有东西都喂给我……我怀疑答案最终会是“阅读源代码,卢克”,但是,如果

  1. 你可以澄清我的严重误解
  2. 告诉我从哪里开始?我想做的是抓住一个调试器,然后通过几次过程,但我真的不知道从哪里开始
  3. 你可以向我指出任何可以很好地解释这一点的文件......是的,我听说过这个谷歌的东西,但还没有真正发现任何超级有用的东西。

非常感谢保罗

0 投票
2 回答
201 浏览

drupal - Drupal如何组装页面

是否有一些架构指南,详细显示了创建单个页面所涉及的各种子系统?

我试图找到一些东西,但即使是 DrupalCons 的演示文稿也没有详细说明。

0 投票
1 回答
9795 浏览

java - java接口是如何在内部实现的?(虚拟表?)

C++ 有多重继承。在程序集级别实现多重继承可能非常复杂,但网上有很好的描述,说明这是如何正常完成的(vtables、指针修复、thunk 等)。

Java没有多重实现继承,但它确实有多重接口继承,所以我不认为每个类只有一个vtable的直接实现可以实现它。java内部是如何实现接口的?

我意识到与 C++ 不同,Java 是 Jit 编译的,因此不同的代码段可能会以不同的方式进行优化,并且不同的 JVM 可能会做不同的事情。那么,是否有许多 JVM 遵循的一些通用策略,或者是否有人知道特定 JVM 中的实现?

此外 JVM 经常去虚拟化和内联方法调用,在这种情况下根本不涉及 vtable 或等效项,因此询问实现虚拟/接口方法调用的实际汇编序列可能没有意义,但我假设大多数 JVM 仍然保留一些如果它们无法对所有内容进行虚拟化,则可以使用类的一般表示。这个假设是错误的吗?这种表示形式看起来像 C++ vtable 吗?如果是这样,接口是否有单独的 vtables,它们如何与类 vtables 链接?如果是这样,对象实例是否可以像 C++ 中的对象实例一样具有多个 vtable 指针(指向类/接口 vtable)?对同一对象的类类型和接口类型的引用是否总是具有相同的二进制值,或者它们是否会像在需要指针修复的 C++ 中那样不同?

(供参考:这个问题询问了有关 CLR 的类似问题,并且在这篇 msdn 文章中似乎有一个很好的解释,尽管现在可能已经过时了。我找不到任何类似的 Java 内容。)

编辑:

  • 我的意思是“GCC 编译器如何实现整数加法/函数调用/等”的意义上的“实现”,而不是“Java 类 ArrayList 实现 List 接口”的意义上。
  • 我知道这在 JVM 字节码级别是如何工作的,我想知道的是 JVM 在完成加载类文件和编译字节码后会生成什么样的代码和数据结构。
0 投票
3 回答
3259 浏览

ruby-on-rails - Rails 使用什么 Ruby 技术使我的控制器方法呈现视图?

只是好奇是否有人知道在 Rails 框架中使用什么 Ruby 技术来完成以下任务。

如果我不在indexRails 控制器上编写方法,如果 URL 与该路由匹配,Rails 仍将呈现索引视图文件。这是有道理的,因为我的控制器继承自父类,它必须有自己的index方法。

但是,如果我确实定义了一个index方法,并且只告诉它设置一个实例变量,它仍然会呈现适当的视图。例如:

在纯 Ruby 中,我希望必须调用super才能获得这种行为。

我假设 Rails 使用某种元编程技术来保证我的控制器方法将调用super. 如果是这样,任何人都可以解释一下吗?您能指出执行此操作的源代码吗?

更新

正如 Mladen Jabnović 所指出的,我最初的心智模型是错误的。控制器方法通常不会渲染视图;相反,控制器方法和视图渲染都由一些框架代码调用。这很明显,因为我可以创建一个具有任何名称的控制器方法 - 例如,- 并且视图将被渲染。所以很明显,在这种情况下我并没有覆盖父方法,并且一些框架代码正在解析控制器方法名称并寻找匹配的视图。searchsearch

尽管如此,框架必须能够检测控制器方法是否已经调用render。所以这对我来说是另一个小谜团。

0 投票
2 回答
2127 浏览

php - PHP实际上是如何工作的?

是否有一些指南描述了 PHP 的内部结构?

  • 如何加载文件(必需,包括)?
  • 它们是如何被解析和执行的?
  • 内存是怎么分配的?
  • 如何创建/销毁对象?
  • 如何加载外部模块?
  • 堆栈/堆如何工作?
  • 操作码缓存实际上是如何工作的?
  • 常见的技巧和性能提示?
0 投票
1 回答
122 浏览

python - 在不可变对象中修改可变对象的pythonic方法

假设我有一个类对外部世界表现为 int,但实际上是一个可变对象,在多个结构中具有固定位置。如果 n 是我的对象,我现在可以通过n.update(34)write 来更新它,但我发现我总是想改写n = 34。我浏览了http://docs.python.org/reference/datamodel.html,并没有看到任何类似 __assign__ 或 __value__ 的属性,它可以让我捕获=操作员并允许我更新我的对象而不是分配变量 n 的 int,将我的对象扔掉。更好的是,当一个 mutable 在 tuplet = (m, n)中时,我想用 更新我的 mutable t[1] = 34,但 Python 认为这是在尝试修改 immutable。

所以我想答案是,根据我能够理解的那份文件的一小部分,我正在尝试的不是 Pythonic。所以如果我不能按照我想要的方式去做,那么下一个最好的事情是什么?这样,如果有一天有人必须维护我的代码,它就不会过于冒犯。