Questions tagged «dynamic-typing»

动态键入是编程语言的一种属性,其中,类型检查主要在运行时执行。


2
可选/也许类型在动态语言中有用吗?
Optional在静态类型的语言中以明显的方式很有用,但是我想知道它是否在动态语言中也有用。通常,没有编译器告诉您“嘿,您将其Optional<String>用作String”,因此您仍然必须在运行时发现错误。我有一个静态的打字背景,从我的角度看,我看不到Optional使用动态语言打字的好处。

10
为什么动态类型语言不让开发人员指定类型?
我所知道的动态类型语言从不让开发人员指定变量的类型,或者至少对这种类型的支持非常有限。 例如,JavaScript方便时不提供任何机制来强制变量类型。PHP使您可以指定一些类型的方法参数,但是无法使用本机类型(int,string,等)的参数,也没有办法强制类型的参数比任何其他。 同时,可以方便地选择以动态类型语言指定变量的类型,而不是手动进行类型检查。 为什么会有这样的限制?是出于技术/性能方面的原因(我认为是JavaScript)还是出于政治方面的原因(我认为是PHP)?我不熟悉的其他动态类型语言是否属于这种情况? 编辑:在回答和评论之后,这是一个澄清的示例:假设我们在纯PHP中具有以下方法: public function CreateProduct($name, $description, $price, $quantity) { // Check the arguments. if (!is_string($name)) throw new Exception('The name argument is expected to be a string.'); if (!is_string($description)) throw new Exception('The description argument is expected to be a string.'); if (!is_float($price) || is_double($price)) throw new Exception('The price …

3
您如何导航和重构以动态语言编写的代码?
我喜欢编写Python,Ruby或Javascript所需的模板很少。我喜欢简单的功能构造。我喜欢简洁的语法。 但是,在使用动态语言开发大型软件时,我确实很不擅长三件事: 浏览代码 识别我正在使用的对象的接口 有效重构 我一直在尝试使用简单的编辑器(例如Vim)以及IDE(Eclipse + PyDev),但在两种情况下,我都觉得我必须对内存进行更多的投入和/或不断地“ grep”并仔细阅读代码以识别接口。当使用具有多个依赖项的大型代码库时,尤其如此。 至于重构,例如更改方法名称,它在很大程度上取决于我的单元测试的质量。而且,如果我尝试通过“切断”应用程序的其余部分来隔离我的单元测试,则不能保证存根的接口与存根的对象保持最新。 我确定有解决这些问题的方法。您如何在Python,Ruby或Javascript中高效地工作?

9
网站的动态和静态类型语言[关闭]
已关闭。这个问题是基于观点的。它当前不接受答案。 想改善这个问题吗?更新问题,以便通过编辑此帖子以事实和引用的形式回答。 5年前关闭。 该语句表明,静态类型语言不适用于网站: 我将与建立网站进行对比。呈现网页时,通常您会在网页上交互许多组件。您在这里有按钮,在那儿有小部件,网页上有数十个小部件,网站上可能有数十个或数百个动态的网页。对于具有如此大的表面积的系统,使用静态类型的语言实际上是不灵活的。当我想交互地按动按钮而不是什么时,我可能会发现很难在Scala中编程并使用它渲染网页。如果整个系统必须是连贯的,就像整个系统必须进行类型检查一样,只是为了能够左右移动按钮,我认为这确实是不灵活的。 资料来源:http : //www.infoq.com/interviews/kallen-scala-twitter 它是否正确?为什么或者为什么不?

5
动态语言是否不利于敏捷开发?
从我读到的内容来看,敏捷开发通常涉及到将重构或反向工程代码重构为图表。当然还有很多,但是如果我们考虑依赖这两种方法的实践,动态类型的语言是否处于不利地位? 看来静态类型的语言会使重构和逆向工程容易得多。 如果在动态类型语言中并非不可能,那么重构或(自动化)逆向工程难吗?现实世界中的项目说明了如何将动态类型的语言用于敏捷方法?

4
开发动态语言
我已经为非常简单的语言创建了几个手写的编译器,但是现在我想尝试开发一种动态语言,类似于简化的Python或Ruby。但是,我很容易将头放在编译器的工作方式上。原始编译器只是翻译。但是如果语言是动态的,我将无法做到这一点。我必须编写一个解释器或VM,以便在运行时跟踪信息并为我做更多的工作。 简而言之,考虑到我知道编译器的工作原理,但又想迁移到创建解释器,是否应该检查任何资源?那里有一些用于动态语言的虚拟机,但是我自己开发自己的没有问题。这些全都是出于我的个人经验。 我正在寻找有关如何从编译器转到解释器的信息。如果我已经为X语言编写了编译器,但是现在要编写解释器,该做什么呢?在此过程中是否有资源? 我不希望涉及编译器或虚拟机如何工作的大量或抽象资源。我有很多关于这个主题的教科书。我在网上找到的所有资源都假设您有0位经验,因此从词法或句法分析入手,或者它们非常抽象。我有一个正在运行的编译器,但是现在我想将其转换为解释器,并为语言添加动态功能。 我找不到有关此过程的资源,它的范围可能太有限,或者解释器的“后端”中的资源没有太过理论,这就是我在此处发布的原因。

2
动态语言运行时和C#4.0之间有什么关系?
假设我想在当今存在的.NET平台上创建动态语言编译器/解释器,或者是Scheme解释器。使用动态语言运行时(DLR)还是使用C#4.0来实现我的语言的动态功能,我会更好吗?还是我都需要? 我知道在这方面还有其他工作要做,尤其是IronScheme和IronPython。这两种语言都使用DLR。我相信IronPython使用的是最新版本的DLR(大约有一年的历史了),而IronScheme使用的是早期版本的DLR的早期,经过大量修改的分支。但是创建这些编译器时C#4.0不可用。 我已经看过Rob Conery与Massive的合作,它使用C#4.0的动态功能。这是非常令人印象深刻的。但是C#是否能够承受动态语言编译器/解释器的全部工作?DLR中是否存在C#中缺少的功能,或者DLR本质上已集成到C#4.0中?如果仅使用C#4.0,我会缺少DLR的任何重要功能吗?

4
对设计模式和OOP实践的思考如何在动态和弱类型语言中发生变化?
这些方面已经有了一个相当有用的问题(“ 非OOP设计模式? ”),但是我对于刚开始使用动态和弱类型语言的人的过渡观点感到更加好奇。 那就是:假设我已经使用C ++,C#或Java进行编程多年,并从GoF设计模式,Fowler 企业应用程序体系结构模式,SOLID原理等方面吸取了很多智慧。 m涉猎Ruby,Python,JavaScript等,并想知道我的知识如何应用。大概在很多情况下我都可以进行直接翻译,但是几乎可以肯定的是,这并不能充分利用我的新设置。仅仅靠鸭子打字就可以改变我很多基于界面的思想。 什么保持不变?有什么变化?是否有新手应该知道的诸如SOLID之类的指导原则或动态语言新手应该知道的规范模式(也许是全新的)?

6
静态类型在更大的项目中真的有什么帮助?
在脚本编程语言网站的首页上进行好奇时,我遇到了这段话: 当系统太大而无法控制时,可以添加静态类型。 这让我记住,在许多静态的,已编译的语言(例如Java)和动态的,解释性语言(主要是Python,因为它使用较多,但它是大多数脚本语言之间共享的“问题”)之间的宗教战争中,静态地抱怨之一打字语言对动态打字语言的拥护者认为,它们不能很好地扩展到较大的项目,因为“有一天,您会忘记函数的返回类型,而必须查找它,而使用静态打字语言时,一切被明确声明”。 我从不理解这种说法。老实说,即使您声明了函数的返回类型,在编写了许多行代码之后,您也可能会忘记它,而您仍然必须返回到使用的搜索功能声明它的行。您的文本编辑器进行检查。 另外,当函数使用声明时type funcname()...,type您将不得不在调用该函数的每一行中进行搜索,因为您只知道funcname,而在Python之类的代码中,您只会搜索def funcname或function funcname只发生一次,在声明。 而且,使用REPL可以很容易地测试一个函数是否具有不同输入的返回类型,而对于静态类型的语言,您需要添加一些代码行并重新编译所有内容才能知道所声明的类型。 因此,除了知道函数的返回类型显然不是静态类型语言的强项之外,静态类型在更大的项目中真的有什么帮助?

5
可以将静态和动态类型的语言视为用于不同类型工作的不同工具吗?
是的,曾经提出过类似的问题,但总的目的是找出“哪个更好”。 我之所以这样问是因为我最初是作为一名开发人员来使用JavaScript的,并且实际上并没有在使用静态类型语言编写方面的丰富经验。 尽管如此,我肯定会发现学习C语言在较低级别的代码上处理苛刻的操作的价值(我认为这在编译器级别与静态与动态有很大关系),但是我想尽力而为是否存在特定的项目上下文(也许是某些类型的动态数据密集型操作?)涉及性能以外的其他方面,因此与Java或C#相比,与Python之类的东西更有意义。

3
我可以使用什么代替Ruby(或任何其他动态语言)中的Interfaces?
我的目标是定义类之间的合同。 我喜欢鸭子输入法,但我也想在应用程序的不同层之间定义一个接口,以清楚地定义哪些是从外部调用的方法,哪些是另一层不应使用的辅助方法。 。 例如,在Java中,我可以使用诸如get()和save()之类的方法定义Persistor接口,然后使用需要在数据库上持久保存的所有方法来定义JdbcPersistor类。也许还有另一个RestPersistor,具有其他方法可以保存在远程Restserver上。 我不是在Ruby中请求接口,只是想知道是否有一种巧妙的方法来保持这种区别。我喜欢Ruby,但是我只从事小型项目。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.