草庐IT

javascript - 是否应该避免编写 Javascript 以支持 GWT/WebSharper 或其他一些抽象?

coder 2024-05-12 原文

我很好奇对“编译成 javascript 的东西”的看法是什么,例如GWT、Script# 和 WebSharper 等。这些似乎是相当小众的组件,旨在让人们无需编写 javascript 即可编写 javascript。

就我个人而言,我很乐意编写 javascript(使用 JQuery/Prototype/ExtJS 或其他类似的库)并将 GWT 之类的东西视为不必要的抽象,它们最终可能会限制开发人员需要完成的工作或最好的情况下提供一个非常冗长的解决方法。在某些情况下,您最终还是会编写 javascript,例如JSNI。

更糟糕的是,如果您不知道幕后发生的事情,您将面临意外后果的风险。例如。您如何知道 GWT 正在正确创建闭包和管理命名空间?

我很想听听别人的意见。这是 Web 编程的发展方向吗?

最佳答案

是否应该避免使用 JavaScript 以支持 X?无论如何!

我将从免责声明开始:我的回答非常有偏见,因为我在 WebSharper 开发团队中。我加入这个团队的最初原因是我发现自己在编写纯 JavaScript 方面完全失败了,然后向我的公司建议我们尝试编写一个从我们最喜欢的语言 F# 到 JavaScript 的编译器。

对我来说,JavaScript 是网络的可移植组件,在世界其他地方扮演着与 C 相同的 Angular 色。它是可移植的,广泛使用的,它会留下来。但是我不想写 JavaScript,就像我不想写汇编一样。我不想使用 JavaScript 作为语言的原因包括:

  1. 没有静态分析,它甚至不检查是否使用正确数量的参数调用函数。拼写错误!

  2. 库、命名空间、模块、类的概念没有或非常有限,因此每个框架都发明了自己的概念(类似于 R5RS Scheme 的情况)。

  3. 工具(代码编辑器、调试器、分析器)相当差,其中大部分是因为 (1) 和 (2):JavaScript 不适合静态分析。

  4. 没有标准库或标准库非常有限。

  5. 有许多粗糙的边缘和使用变异的偏见。即使在非类型化家族中,JavaScript 也是一种设计糟糕的语言(我更喜欢 Scheme)。

我们正在努力解决 WebSharper 中的所有这些问题。例如,Visual Studio 中的 WebSharper 具有代码完成功能,即使它公开第三方 JavaScript API(如 Ext Js)也是如此。但我们是否已经或将会成功或失败并不是真正的重点。关键是解决这些问题是可能的,而且我希望非常可取。

Worse still if you don't know what's going on under the covers you run the risk of unintended consequences. E.g. how do you know GWT is creating closures and managing namespaces correctly?

这只是关于以正确的方式编写编译器。例如,WebSharper 以 1-1 的方式将 F# lambda 映射到 JavaScript lambda(事实上,它从不引入 lambda)。如果您提到 WebSharper 尚未成熟和经过足够测试,因此您对是否信任它犹豫不决,我可能会接受您的论点。但是 GWT 已经存在了一段时间,应该会生成正确的代码。

归根结底,强类型语言绝对优于非类型语言——如果需要,您可以轻松地在其中编写非类型代码,但您可以选择使用类型检查器,这是程序员的拼写检查器.你为什么不呢?拒绝这样做对我来说听起来有点粗鲁。

关于javascript - 是否应该避免编写 Javascript 以支持 GWT/WebSharper 或其他一些抽象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3220329/

有关javascript - 是否应该避免编写 Javascript 以支持 GWT/WebSharper 或其他一些抽象?的更多相关文章

  1. ruby - 其他文件中的 Rake 任务 - 2

    我试图在一个项目中使用rake,如果我把所有东西都放到Rakefile中,它会很大并且很难读取/找到东西,所以我试着将每个命名空间放在lib/rake中它自己的文件中,我添加了这个到我的rake文件的顶部:Dir['#{File.dirname(__FILE__)}/lib/rake/*.rake'].map{|f|requiref}它加载文件没问题,但没有任务。我现在只有一个.rake文件作为测试,名为“servers.rake”,它看起来像这样:namespace:serverdotask:testdoputs"test"endend所以当我运行rakeserver:testid时

  2. ruby-on-rails - 如何验证 update_all 是否实际在 Rails 中更新 - 2

    给定这段代码defcreate@upgrades=User.update_all(["role=?","upgraded"],:id=>params[:upgrade])redirect_toadmin_upgrades_path,:notice=>"Successfullyupgradeduser."end我如何在该操作中实际验证它们是否已保存或未重定向到适当的页面和消息? 最佳答案 在Rails3中,update_all不返回任何有意义的信息,除了已更新的记录数(这可能取决于您的DBMS是否返回该信息)。http://ar.ru

  3. ruby - 如何将脚本文件的末尾读取为数据文件(Perl 或任何其他语言) - 2

    我正在寻找执行以下操作的正确语法(在Perl、Shell或Ruby中):#variabletoaccessthedatalinesappendedasafileEND_OF_SCRIPT_MARKERrawdatastartshereanditcontinues. 最佳答案 Perl用__DATA__做这个:#!/usr/bin/perlusestrict;usewarnings;while(){print;}__DATA__Texttoprintgoeshere 关于ruby-如何将脚

  4. ruby - 在 Ruby 中编写命令行实用程序 - 2

    我想用ruby​​编写一个小的命令行实用程序并将其作为gem分发。我知道安装后,Guard、Sass和Thor等某些gem可以从命令行自行运行。为了让gem像二进制文件一样可用,我需要在我的gemspec中指定什么。 最佳答案 Gem::Specification.newdo|s|...s.executable='name_of_executable'...endhttp://docs.rubygems.org/read/chapter/20 关于ruby-在Ruby中编写命令行实用程序

  5. ruby - 检查 "command"的输出应该包含 NilClass 的意外崩溃 - 2

    为了将Cucumber用于命令行脚本,我按照提供的说明安装了arubagem。它在我的Gemfile中,我可以验证是否安装了正确的版本并且我已经包含了require'aruba/cucumber'在'features/env.rb'中为了确保它能正常工作,我写了以下场景:@announceScenario:Testingcucumber/arubaGivenablankslateThentheoutputfrom"ls-la"shouldcontain"drw"假设事情应该失败。它确实失败了,但失败的原因是错误的:@announceScenario:Testingcucumber/ar

  6. ruby - 检查数组是否在增加 - 2

    这个问题在这里已经有了答案:Checktoseeifanarrayisalreadysorted?(8个答案)关闭9年前。我只是想知道是否有办法检查数组是否在增加?这是我的解决方案,但我正在寻找更漂亮的方法:n=-1@arr.flatten.each{|e|returnfalseife

  7. ruby - 检查字符串是否包含散列中的任何键并返回它包含的键的值 - 2

    我有一个包含多个键的散列和一个字符串,该字符串不包含散列中的任何键或包含一个键。h={"k1"=>"v1","k2"=>"v2","k3"=>"v3"}s="thisisanexamplestringthatmightoccurwithakeysomewhereinthestringk1(withspecialcharacterslike(^&*$#@!^&&*))"检查s是否包含h中的任何键的最佳方法是什么,如果包含,则返回它包含的键的值?例如,对于上面的h和s的例子,输出应该是v1。编辑:只有字符串是用户定义的。哈希将始终相同。 最佳答案

  8. ruby-on-rails - Ruby 检查日期时间是否为 iso8601 并保存 - 2

    我需要检查DateTime是否采用有效的ISO8601格式。喜欢:#iso8601?我检查了ruby​​是否有特定方法,但没有找到。目前我正在使用date.iso8601==date来检查这个。有什么好的方法吗?编辑解释我的环境,并改变问题的范围。因此,我的项目将使用jsapiFullCalendar,这就是我需要iso8601字符串格式的原因。我想知道更好或正确的方法是什么,以正确的格式将日期保存在数据库中,或者让ActiveRecord完成它们的工作并在我需要时间信息时对其进行操作。 最佳答案 我不太明白你的问题。我假设您想检查

  9. ruby - 检查日期是否在过去 7 天内 - 2

    我的日期格式如下:"%d-%m-%Y"(例如,今天的日期为07-09-2015),我想看看是不是在过去的七天内。谁能推荐一种方法? 最佳答案 你可以这样做:require"date"Date.today-7 关于ruby-检查日期是否在过去7天内,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/32438063/

  10. ruby - 如何验证 IO.copy_stream 是否成功 - 2

    这里有一个很好的答案解释了如何在Ruby中下载文件而不将其加载到内存中:https://stackoverflow.com/a/29743394/4852737require'open-uri'download=open('http://example.com/image.png')IO.copy_stream(download,'~/image.png')我如何验证下载文件的IO.copy_stream调用是否真的成功——这意味着下载的文件与我打算下载的文件完全相同,而不是下载一半的损坏文件?documentation说IO.copy_stream返回它复制的字节数,但是当我还没有下

随机推荐