几乎每个人都使用它们,但是包括我在内的许多人只是简单地认为它们只是在起作用。
我正在寻找高质量的材料。我使用的语言是:Java,C,C#,Python,C ++,所以这些是我最感兴趣的。
现在,C ++可能是一个不错的起点,因为您可以使用该语言编写任何东西。
而且,C接近组装。如何使用纯C构造而不使用汇编来模拟异常?
最后,我听说有传言称,出于速度考虑,Google员工在某些项目中不使用例外。这只是谣言吗?没有它们,如何才能取得实质性成就?
谢谢。
例外只是高级非本地流控制构造的更一般情况的一个特定示例。其他示例是:
GOTO
,在高级,高阶语言中流行),GOTO
。(我肯定还有很多其他的我想念的。)
这些构造的一个有趣的特性是它们的表达能力大致相同:如果您拥有 一个 ,则可以很容易地构建所有其他构造。
因此,如何最好地实现异常取决于可用的其他构造:
GOTO
,因此,如果必须的话,您总是可以退一步。setjmp
/longjmp
基本上是MacGyver的延续(由胶带和牙签制成,不是很真实,但是如果没有更好的选择,至少可以使您摆脱直接的麻烦)。一个非常有趣的使用情况,无论是的 使用 异常 ,并 在 实施
例外的是微软Live实验室的沃尔特项目。(现在不存在了。)Volta的目标是只需按一下按钮即可为Web应用程序提供体系结构重构。因此,只需将一些[Browser]
或[DB]
属性放在.NET代码中,就可以将一层Web应用程序转换为两层或三层应用程序,然后这些代码将自动在客户端或数据库中运行。为此,显然必须将.NET代码转换为JavaScript源代码。
现在,您 可以 使用JavaScript编写整个VM,然后运行未修改的字节码。(基本上,将CLR从C
++移植到JavaScript。)实际上,有一些项目可以做到这一点(例如HotRuby VM),但这既效率低下又不能与其他JavaScript代码互操作。
因此,他们写了一个编译器,将CIL字节码编译为JavaScript源代码。但是,JavaScript缺少.NET所具有的某些功能(生成器,线程,还有两个异常模型不是100%兼容的),更重要的是,它缺少编译器编写者
喜欢的 某些功能(可以是GOTO
或延续的),并且可以用来实现上述缺少的功能。
但是,JavaScript 确实 有例外。因此,他们使用 JavaScript异常 来实现 Volta Continuations ,然后使用
Volta Continuations 来实现 .NET Exceptions , .NET Generators 甚至是 .NET
Managed Threads (!!!)
因此,回答您的原始问题:
幕后如何实施例外?
具有例外的是,具有讽刺意味的是!至少在这种非常特殊的情况下。
另一个很好的例子是Go邮件列表中的一些异常建议,它们使用Goroutines(类似于并发协程和CSP进程的混合物)实现异常。还有一个例子是Haskell,它使用Monads,惰性求值,尾部调用优化和高阶函数来实现异常。一些现代CPU还支持异常的基本构建块(例如,专门为Azul
Systems Java Compute Accelerator设计的Vega-3 CPU)。
在Perl中,使用Moo,可以围绕sub实现sub,它将围绕类中的其他方法。 如何在Raku中实现这种行为,最好使用角色?
我正在尝试实现身份验证 可以请求任何微服务的API网关。 用户微服务-我存储所有用户的地方。实现在此微服务中对用户进行身份验证。按应有的方式工作,登录路由返回我用于在此微服务中对用户进行身份验证的令牌。 其他5个微服务,未经任何身份验证或授权。 问题是:使用身份验证的正确方法是什么
问题内容: 在简要回顾了Go语言规范,有效的Go和Go内存模型之后,我仍然不清楚Go通道是如何工作的。 它们是什么样的结构?它们的行为有点像线程安全队列/数组。 它们的实现取决于体系结构吗? 问题答案: 通道的源文件位于/src/pkg/runtime/chan.go中(从您的源代码根目录开始)。 是通道的中央数据结构,带有发送和接收链接列表(持有指向其goroutine和data元素的指针)和一
问题内容: 什么是实现注释的有效用例? 在设计主要基于注释的配置系统时,我有时需要创建实现代码生成或程序配置的注释的类。 另一种选择是将批注中包含的数据镜像到DTO中,这似乎是一项开销。 这是一个例子: 与实施 我为此收到编译器警告,但是对于许多用例来说,它似乎是一个有效的工具。 上面示例的警告是 注释类型Id不应用作IdImpl的超级接口 编辑: 我刚刚从Guice找到了这个例子: 从Names
我正在尝试理解HK2工厂在泽西应用程序中的实现。 null 每个请求都会创建MyFactory的两个对象 单例工厂,我的理解是,工厂(MyFactory)的一个单一对象,它在注入时提供某种对象。 所以(1)应该工作还是我遗漏了什么? 当位置在下方时,位置在上方的NPE 在以下位置时,在上面位置无NPE
在新gem的初始起草中,我需要保留一些方法实现为空(将在下一步中实现) 因此,我想发出“尚未实现”异常的信号 我想知道是否有特定于Ruby语言的最佳实践或标准约定来编码这种占位符/异常。 例如:类似于: Java中的操作异常 在. net框架(C#)中没有实现异常