问题标签 [static-language]
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.
scripting - 静态编译语言可以替代脚本语言吗?
假设您可以获得动态解释器;静态编译语言可以替代脚本语言吗?我一直不太明白为什么有人会使用脚本语言?我说的是在 PC 上,而不是需要简单解释器的受限系统。我看到了一些 python 安装脚本,并看到了类似的 python 和 C# 解决问题的方法。那么为什么要使用脚本语言呢?
注意:有些事情让我对 C# 感到困扰,我不是在问为什么不使用 C#。我在问为什么要使用脚本语言?我发现静态编译语言更容易调试,而且通常更容易编码。
compiler-construction - 动态语言与静态语言(这两者可以放在同一个地方吗)
编程语言分为两大类“动态”和“静态”。- 编程语言是否总是存在于其中一个而不是两者中,我的意思是一种语言可以同时是动态的和静态的吗?
design-patterns - OOP 和动态类型(不是静态与动态)
与静态类型环境(例如 Ruby 与 C#)相比,哪些 OOP 原则(如果有)在动态类型环境中不适用或应用方式不同?这不是要求进行静态与动态辩论,而是我想看看在该分歧的任何一方是否有公认的原则适用于一方而不适用于另一方,或者适用不同的原则。在静态类型的 OOP 文献中,诸如“更喜欢组合而不是继承”之类的短语是众所周知的。它们是否同样适用于动态方面?
例如,在动态类型环境中,耦合的粒度似乎不超过方法的级别。换句话说,任何给定的函数调用只会将调用者耦合到任何类都可能满足的特定接口 - 或者换句话说,任何像特定鸭子一样嘎嘎叫的东西。
另一方面,在 Java 中,耦合的粒度可以与包一样高。一个特定的方法调用不仅与另一个类/接口建立契约,而且还将它耦合到该类/接口的包/jar/程序集中。
这样的差异会导致不同的原则和模式吗?如果是这样,这些差异是否已经阐明?Ruby Pickaxe书中有一个部分朝这个方向发展(Duck Typing/Classes Aren't Types),但我想知道是否还有其他内容。我知道Ruby 中的设计模式,但还没有读过。
编辑——有人认为Liskov在动态环境中的应用与在静态环境中的应用不同,但我不禁认为它确实如此。一方面,整个班级没有高级别的合同。但是,不是所有对任何给定类的调用都构成了一个隐式契约,需要按照 Liskov 规定的方式由子类来满足吗?考虑以下。“做一些酒吧的事情”中的调用创建了一个需要由子类参与的合同。这不是“将专用对象视为基类”的情况吗?
java - 任何人都可以解释有关动态或静态语言的 C C++ Java
任何人都可以解释有关动态类型或静态类型语言的 C C++ Java。
我在某处读到 C C++ 和 Java 都是静态语言。但我记得对这些还有其他意见。很迷茫。
谢谢!
c# - Re-Sharper 在什么假设下向我显示“使用隐式类型的局部变量”消息?
在我的理解中,C# 最初是一种静态语言,并在 .NET 框架中进行了一些增强,并开始支持该语言的动态特性。
我认为 C# 中的“var”关键字在运行时加载 DLL 时非常强大,而且我们不知道会出现哪些类型,这非常有帮助。
但是我认为如果变量在设计时被声明为 var,它会带来确定变量类型的开销。现在,re-sharper 负责通过提出一些好的建议使我们的代码更漂亮、更简洁,它向我提出了如下建议:
我的代码如下所示:
Resharper 建议必须将其转换为
这是为什么?当我认为这不是一个好主意时,我为什么要购买 resharper 的建议?还是我错了?
dynamic - Clojure 是单类型的吗?
Robert Harper写了一篇引人入胜的文章,名为“动态语言是静态语言”。他在其中写道:
这正是动态类型语言的错误所在:它们没有提供忽略类型的自由,而是强加了将注意力限制在单一类型上的束缚!每个值都必须是该类型的值,您别无选择!
这意味着单类型语言。(单一类型的语言)。
现在 Clojure声称是一种动态语言:
Clojure 是一种针对 Java 虚拟机(以及 CLR 和 JavaScript)的动态编程语言。它被设计为一种通用语言,将脚本语言的可接近性和交互式开发与用于多线程编程的高效且健壮的基础架构相结合。Clojure 是一种编译语言——它直接编译为 JVM 字节码,但仍然是完全动态的。Clojure 支持的每个功能都在运行时得到支持。
通过“动态”,它们的意思是“可以在运行时进行交互”,而不是“没有类型”。
现在静态和动态之间的关键区别似乎是“我可以在编译时获得类型失败吗?”
如果我编写以下 Clojure 代码:
然后在 Leiningen 中编译它:
然后我得到以下信息:
在动态语言中,这似乎是编译时的类型失败。
我的问题是:Clojure 是单类型的吗?
编辑 - 我知道core.typed - 这是一项出色的工作。我问这个问题是分开的。
c++ - 用静态语言分离与合并由数据库表创建的对象
考虑在数据库中有一个名为的表users
和一个名为 的表wallets
。除其他外,用户拥有 0 个、1 个或多个钱包。这种关系是一对多的,这意味着钱包有一个指向用户的外键。
现在问题如下:在为一个人构建结构或类时,我看到了两种可能性:
1)用户没有钱包的迹象。有一个函数将用户作为参数并获取钱包数组。
2)用户拥有一个包含钱包的数组作为成员,并且在创建对象/结构时获取钱包。
我认为第一种方法可能更好,因为它更加模块化——在第二种方法中,即使用户没有钱包,用户也依赖于钱包。不过,我不确定哪种方法更好,所以我正在寻找两种方法的比较。
java - 使用静态语言编码时的样式指南
我目前是一名初级工程师,热衷于学习最佳实践并扩展我的经验。我的问题涉及任何静态编程语言,例如 Java、C#、C++ 等。
当我编写代码时,我喜欢让它易于阅读。在我看来,阅读代码应该像阅读一本书。它应该流畅而优雅。然后,即使我不需要使用它们,我也喜欢尽可能添加this
, super
–<code>base 关键字。当我想使用常量或静态变量/方法时,当前类名也是如此。
因此,另一位开发人员可以很快获得远景。他知道这个方法或 var 在当前类或母类中,无需移动到声明。您可能会对我说,使用最近的 IDE 很容易做到这一点。但是,我知道有很多人仍在使用 Vim、Emacs 或其他没有这些花哨功能的编辑器。
在解释它时,我喜欢将我的实践与戏剧书进行比较。我们都至少读过其中之一,例如莎士比亚的麦克白。谁不曾在书的开头回过头来知道那个角色是谁以及他在情节中扮演了什么角色而感到沮丧?你这样做了很多次,对吧?
我的问题可能与识字编程实践有关。但是,我认为 Donald Knuth 的建议更多是关于在代码中注释和添加宏。
所以我想知道您对这些做法的意见和反馈。我做的太多了吗?我应该保持简单吗?我是否违反了 OOP 规则?
这是一个代码示例:
methods - 静态类型语言中的多界方法?
对不起,标题有点错误。因为我正在考虑方法绑定,所以当这个问题出现时。带有一些伪代码的示例..
他们是否有任何支持此功能的静态语言?
-> 解决对两种类型 z 的引用。
还是我有一些逻辑问题,这是不可能的?
profiling - 在 Hack/PHP 中分析静态与动态类型
我在 Hack 中工作,并试图弄清楚“如果输入代码会运行得更快”,因为该语言将支持动态和静态类型,具体取决于文件上的标题。
您会进行哪些测试来查看两者之间的效率差异?