寻找用于Web开发的新编程语言?[关闭]


14

我想知道是否有任何偏倚的资源可以很好地,全面地概述编程语言及其预期目标。我想学习一种新的语言,但是无法访问每种语言的站点。每个人都在谈论它有多伟大,却没有太多提及它的弱点或特定目标

Ruby是一种动态的开源编程语言,其重点是简单性和生产率。

Python是一种编程语言,可让您更快地工作并更有效地集成系统。

作为PHP开发人员已经多年了,Vic Cherubini总结了我的困境:

我非常了解PHP,拥有自己的框架,并且可以快速工作以启动并运行某些东西。

在整个MVC革命中,我都是这样编程的。作为一个PHP开发人员,我得到了越来越多的工作(阅读:薪水更高,职称更高),但是一直以来,我意识到自己写的代码很棒,而且在工作中使用的代码也很糟糕。喜欢,比可怕的还糟。残暴。OS Commerce级别不良。有辅助项目使我保持理智,因为在工作中使用的代码使我感到痛苦。

这就是为什么我要退出PHP从事我的辅助项目和新的编程事业。我花了PHP。精疲力尽,如果你愿意的话。我已经达到了我认为它在某种语言中处于领先地位的水平,如果我不很快转向一种新语言,那么我将完全完成编程工作,而我不希望那样做。

我看过的语言包括JavaScript(用于node.js),Ruby,Python和Erlang。我什至考虑过Scala或C ++。

问题在于弄清楚哪些产品可以最好地满足我的需求。

因此,我可以在哪里跳过炒作,而获得有关平台成熟度,社区规模以及该语言的优缺点的真实信息。如果我知道这些,那么选择一种语言继续我的Web开发应该很容易。

更新资料

我只是不想花4个月的时间使用某种语言而觉得很烂,因为每个线程有4MB的开销,或者最大并发连接数是999,没有可以做“ X”功能的软件包,或者没有支持正在逐步淘汰为新的语言分支。


14
如果您不指定这些需求,那么很难说哪个将最能满足您的需求。
vartec

3
这就是为什么我没有定义自己的需求的原因- 我的个人需求不重要。我想知道在哪里可以将我的需求与某种编程语言相匹配。因为我的需求可能会发生变化,所以我需要再次返回。
Xeoncross 2011年

值得指出的是,程序的执行速度远不止于此。发展速度和方式,你必须建立你的应用程序(由于语言)发挥了重要作用。
Xeoncross

4
与其说语言,不如说是关于语言的成熟度和功能丰富性。

1
我建议你先看看这个优秀的帖子由Alex马尔泰利。
phant0m 2011年

Answers:


3

我不想将其发布为答案,但是Xeoncross要求我这样做,所以我们开始:

(旁注:如果有人可以在小代码示例中解决降价问题,我将不胜感激。)

Alex Martellicomp.lang.python上发布:Ruby比Python有什么更好的选择?20038月18日,下午5:50

埃里克·马克斯·弗朗西斯(Erik Max Francis)写道:

“布兰登·范·凡·布朗”写道:

Ruby比Python有什么更好的选择?我确定有事 它是什么?向Ruby人员(而不是Python人员)问这个不是更有意义吗?

可能(也可能不会)取决于一个人的目的-例如,如果一个人的目的包括对Python社区的“社会学研究”,那么向该社区提出问题很可能证明它具有比其他地方更多的信息揭示能力:-)。我个人很高兴借此机会在上一次OSCON上关注Dave Thomas的为期一天的Ruby教程。在语法差异的明显变化之下,我发现Ruby和Python惊人地相似-如果我正在计算几乎所有语言集中的最小生成树,我很确定Python和Ruby将成为合并的前两叶中间节点:-)。

当然,在Ruby中,我确实会在每个块的末尾键入愚蠢的“ end”(而不是不缩进)而感到疲倦-但是,我确实避免避免在: Python的 开头键入同样傻的每个街区,所以差不多要洗了:-)。其他语法差异(例如@foovs self.foo)或Ruby vs Python中case的重要性更高,实际上与我无关。

毫无疑问,其他人正是基于这样的问题来选择编程语言,并且引发了最激烈的辩论-但对我而言,这只是帕金森定律中一个行动的例子(关于某个问题的辩论数量与该问题的辩论成反比)实际重要性)。我确实发现语法上的差异很重要,并且对Python有利-但其他人无疑会认为相反-是“如何调用不带参数的函数”。在Python(如C语言)中,要调用函数,您始终要应用“调用运算符”-括号紧跟在您要调用的对象之后(在这些括号内是您在调用中传递的args,如果您没有传递参数,则括号为空)。这仅涉及任何对象,不涉及运算符,仅表示对对象的引用-在任何情况下都没有特殊情况,异常,特别规则等。在Ruby中(就像在Pascal中一样),要调用带有WITH参数的函数,您需要传递args(通常在括号中,尽管并非总是如此)-但是,如果该函数没有args,则只需提及该函数即可。这也许可以满足许多人的期望(至少,毫无疑问,至少那些以前的编程经验是使用Pascal或其他具有类似“隐式调用”的语言(例如Visual Basic)的人)-但对我来说,这意味着仅提及对象可能意味着对该对象的引用或对该对象的调用,取决于对象的类型-在某些情况下,我只能通过提及对象而无法获得对对象的引用,我将需要使用明确的“给我提供对此的引用,不要调用它!” 否则不需要的运算符。我觉得这会影响函数(或方法或其他可调用对象)的“一流”,并影响对象平滑交换的可能性。因此,对我来说,这种特定的语法差异对Ruby来说是一个严重的黑标-但我确实理解了其他人为什么会这样的想法,即使我几乎无法强烈反对它们:-)。在语法下方,我们发现了基本语义上的一些重要差异-例如,Ruby中的字符串是可变对象(例如C ++中),而在Python中它们是不可变的(例如在Java中,或者我相信C#)。同样,主要根据已经熟悉的知识进行判断的人可能会认为这对Ruby有利(除非他们熟悉Java或C#,当然:-)。我,我认为不可变的字符串是个好主意(我不觉得Java独立地重新发明了Python中已经存在的那个想法),尽管我也不介意具有“可变字符串缓冲区”类型(最好是比Java自己的“字符串缓冲区”更易于使用的代码);而且由于熟悉程度,我不作此判断-在学习Java之前,除了函数式编程语言外,主要根据已经熟悉的知识进行判断的人们可能会认为这对Ruby有利(除非他们熟悉Java或C#,当然:-)。我,我认为不可变的字符串是个好主意(我不觉得Java独立地重新发明了Python中已经存在的那个想法),尽管我也不介意具有“可变字符串缓冲区”类型(最好是比Java自己的“字符串缓冲区”更易于使用的代码);而且由于熟悉程度,我不作此判断-在学习Java之前,除了函数式编程语言外,主要根据已经熟悉的知识进行判断的人们可能会认为这对Ruby有利(除非他们熟悉Java或C#,当然:-)。我,我认为不可变的字符串是个好主意(我不觉得Java独立地重新发明了Python中已经存在的那个想法),尽管我也不介意具有“可变字符串缓冲区”类型(最好是比Java自己的“字符串缓冲区”更易于使用的代码);而且由于熟悉程度,我不作此判断-在学习Java之前,除了函数式编程语言外,我认为不可变字符串是个好主意(我不认为Java独立地重新发明了Python中已经存在的那个想法),尽管我也不介意具有“可变字符串缓冲区”类型(和理想情况下,它比Java自己的“字符串缓冲区”具有更好的易用性);而且由于熟悉程度,我不作此判断-在学习Java之前,除了函数式编程语言外,我认为不可变字符串是一个好主意(我不认为Java独立地重新发明了Python中已经存在的那个想法),尽管我也不介意具有“可变字符串缓冲区”类型(和理想情况下,它比Java自己的“字符串缓冲区”具有更好的易用性);而且由于熟悉程度,我不作此判断-在学习Java之前,除了函数式编程语言外,所有数据都是不可变的,我所知道的所有语言都具有可变的字符串-但是,当我第一次看到Java中的不可变字符串的想法(我在学习Python之前就学得很好)时,它立即使我印象深刻,非常适合顶级编程语言的引用语义(与最适合于距离机器更近,距离应用程序(例如C)更远的语言的值语义相反)的字符串是一流的,内置的(而且很漂亮)关键)数据类型。

Ruby在基本语义上确实具有一些优势-例如,删除Python的“列表与元组”极其微妙的区别。但是大多数情况下,分数(就我而言,保持简单,是一个很大的加和微妙的,聪明的区别,是一个显着的减号)与Ruby相对(例如,同时具有封闭和半开放时间间隔,用符号a..b和a.。 .b [任何人都想声称哪个是显而易见的?-)],这很愚蠢-当然,恕我直言!同样,考虑到在语言的核心上有很多相似但又细微不同的事物的人,加号(而不是减号)当然会根据我的计算方式来反加这些:-)。

这些比较不要误导他们认为这两种语言 非常不一样,请注意。他们不是。但是,如果要求我将“意大利面条”与“意大利面条”进行比较,并指出这两种意大利面几乎对任何人都没有区别,并且在您可能要准备的任何菜肴中都可以互换,那么我将不可避免地拥有进行显微镜检查,以了解长度和直径的显着差异,在一种情况下而不是在另一种情况下股线的末端如何逐渐变细等等,以尝试解释为什么我个人更愿意使用Capelli d '安杰洛(Angelo)作为任何一种肉汤的面食,但更喜欢将意大利面条(spaghettini)用作面食(pastasciutta),并搭配适用于此类长而细的面食形式的调味料(橄榄油,蒜末,剁碎的红辣椒和细碎的凤尾鱼,例如-但是,如果您将大蒜和辣椒切成薄片而不是切成薄片,那么您应该选择意大利面更健康的面条,而不是意大利面条稀薄的消逝,并建议您不要使用achoview,而应添加一些新鲜的春季罗勒[甚至-我是一个异端...!-薄荷...]树叶-在上菜之前的最后一刻)。糟糕,抱歉,这表明我正在国外旅行,并且有一段时间没有意大利面了。但比喻还是相当不错的!-)建议不要使用achoview,而是加入一些新鲜的春季罗勒[甚至-我是一个异端...!-薄荷...]树叶-在上菜之前的最后一刻)。糟糕,抱歉,这表明我正在国外旅行,并且有一段时间没有意大利面了。但比喻还是相当不错的!-)建议不要使用achoview,而是加入一些新鲜的春季罗勒[甚至-我是一个异端...!-薄荷...]树叶-在上菜之前的最后一刻)。糟糕,抱歉,这表明我正在国外旅行,并且有一段时间没有意大利面了。但比喻还是相当不错的!-)

因此,回到Python和Ruby,我们谈到了两个大问题(就适当的语言而言-离开了库以及其他重要辅助工具(例如工具和环境),如何嵌入/扩展每种语言等),现在-它们将不会应用于每种语言的所有实现,例如,Jython与Classic Python是Python语言的两种实现!):

  1. Ruby的迭代器和代码块与Python的迭代器和生成器;

  2. Ruby的TOTAL无限的“动态性”,包括“重新打开”任何现有类(包括所有内置类)并在运行时更改其行为的能力-与Python巨大但     有限的 动态性(永远不会改变现有行为)内置类及其实例。

就我个人而言,我认为1是一次洗礼(差异是如此之深,以至于我很容易看到人们讨厌这两种方法,而又讨厌另一种方法,但就我个人而言,正负几乎相等);[2]一个至关重要的问题-使Ruby更适合“修补”,而Python同样更适合用于大型生产应用程序。从某种意义上说,这很有趣,因为两种语言都比大多数其他语言更具动态性,最终它们与我的POV之间的关键区别应该在于这一点-Ruby在这方面“达到11种”(参考文献当然是“ Spinal Tap”。在Ruby中我能做到!即,我可以动态更改内置字符串类,以便

a =“ Hello World” 
b =“你好世界” 
如果a == b 
    打印“等于!\ n” 
其他 
    打印“不同!\ n” 
结束
 

将打印“等于”。在python中,我无法做到这一点。出于元编程,实现实验框架等目的,Ruby的这种惊人的动态能力非常强大。 吸引人。但是-如果我们谈论的是大型应用程序,它是由许多人开发并由更多人维护的,包括来自不同来源的各种库,并且需要在客户站点上投入生产...那么,我不想一种非常动态的语言,非常感谢。我讨厌这样的想法:某些库不知不觉地打破了那些依赖于那些不同字符串的其他不相关的库-这是一种深层和深层的“通道”,在LOOK分离和应该分离的代码段之间,这意味着死亡。大规模编程。通过让任何模块“隐蔽地”影响其他模块的行为,

如果必须将Ruby用于如此大型的应用程序,则我将尝试依赖于编码样式的限制,大量的测试(只要有任何更改,都将重新运行-甚至应该完全不相关...),等等。禁止使用此语言功能。但是,我认为不首先具有该功能会更好,就像Python本身可以成为应用程序编程的一种更好的语言一样,如果可以“固定”一定数量的内置程序,那么我知道例如, len("ciao")为4(而不是担心潜意识有关某人的是否改名的结合len__builtins__ 模块...)。我确实希望Python最终“钉牢”其内置组件。

但是这个问题很小,因为重新绑定内置插件在Python中是不推荐使用的,也是一种罕见的做法。在Ruby中,它使我感到很专业-就像 其他语言(例如Dylan)的功能过于强大一样,在我看来也存在类似的风险(我希望Python永远不会获得如此强大的宏系统, “让人们定义自己的语言中嵌入的他们自己的特定领域的小语言”的诱惑力很重要-恕我直言,这会通过向可能的修补匠提供“有吸引力的麻烦”来削弱Python对应用程序编程的出色用处。潜伏在每个程序员的心中...)。

亚历克斯


我将此作为答案,因为它是对Ruby和Python整体的一个很好的,相对公正的概述。解释语言如何工作和不工作
Xeoncross 2011年

27

祝好运

给出的示例描述都不是客观的或可测试的。他们都是炒作和见解。

...简单性和生产力...更快,更有效。

尝试一下

采取一个您可能会做的小样本项目,然后尝试使用所有您感兴趣的语言。然后发布您的客观评论,我们都会知道。


2
这不是一个坏主意,但是在现实世界中却行不通。如果不花时间完全理解每种语言,我将永远无法预见整个设计模式的问题和每个系统可以提供的好处。我相信使用每种语言都要花费几个月的时间才能对语言本身有一个高层次的理解。我宁愿听取轮胎专家的意见,也不愿花数月的时间对每个车轮进行重新设计,以弄清楚他们为何如此制造。不过,在找到一些好的候选人之后,我一定会这样做。
Xeoncross 2011年

1
@Xeoncross:您尝试使用每种语言,都将增加您的体验,并能够在其他语言中利用它。4个月的语言学习时间永远不会丢失;如果您的语言真的很烂,那么您只需不到两个星期的时间就可以找到答案。
tdammers 2011年

没错,只需要几个星期就可以构建出一些东西,我将从中受益,因为语言通常会遵循其他语言。
Xeoncross 2011年

3
是的,您可能应该尝试所有这些语言以找到合适的语言。但是问题是,当您使用一种新语言时,您使用的语言却不像您最初使用的那样。您最终会用已经知道如何仅使用不同语法的语言来完成相同的事情。花相当多的时间弄清楚每种语言的优点以及真正的好处。
radix07 2011年

3
如果通用语言之间的现代语言之间存在显着差异,我会感到惊讶。在那里,我大声说出来。并用斜体字表示。让火焰开始燃烧吧!
Steven A. Lowe

8

我认为部分问题是,任何人如果对某一种或多种语言有足够的了解来发表有意义的评论,就会产生偏见。在将近四十年的编程中,我使用的语言数量超出了我的想象。我可以给您关于其中一些语言的意见(其中有些是过时的),但是这些意见都不会带有偏见。

我采用在工作中使用正确语言的方法。您专门询问有关Web开发的问题,但这仍然是一个相当广泛的类别-有点像说您对摄影感兴趣。微?天文?等。虽然我同意PHP不是一种令人满足的语言,但对于许多客户而言,它是基于多种因素的正确语言,其中不仅仅包括您离开后能够长期找到程序员修复该网站的长期能力。和/或被公共汽车撞到。

因此,也许您应该查看对项目感兴趣的客户类型,这些项目可以使自己适应不同的需求,然后致力于使自己对他们感兴趣。


好吧,由于我非常擅长PHP-因为我仍然可以过上幸福的生活,所以我将继续努力。我主要是在为自己的项目考虑一种新语言。可以帮助增加风味的东西。在几乎所有我的工作是网络的发展,你能想到的,自然语言处理,文本分析,CMS,API的,存储等的同时,有人在许多语言中经历了很多,只有一个设计过程比人们偏置少。
Xeoncross

啊。然后,我将为“最佳语言”类型的问题提供标准答案:Python。忽略“很大的空白”(这是可能的),对我来说这接近于一种完美的语言。此外,还有许多使用Python API的非常高质量的库。例如NLTK,自然语言工具包(nltk.org)。
Peter Rowell

啊,但是Python有什么好处呢?大多数语言都有着相同的工具包-它的语言设计,介绍之类的东西线程,并发VM要求,编译/口译,持久性,等等
Xeoncross

使用Python只是很有趣。这就是让它对我“更好”的原因。它非常简单,您无需使用大型的IDE即可在其中进行编码。但是,它也具有许多有趣的功能,例如对象,函数编程功能,许多现有的库/框架/工具以及一个繁荣而热情的社区,其中包含许多开放/免费的文档,助您一臂之力。
约翰·盖恩斯(

2
真正。最简单的解释是,Python的工作方式就像我的大脑一样,这使我的工作效率更高。我几乎从来没有问过自己:“现在我将如何在Python中做到这一点?” 虽然GIL(全局解释器锁)是有点问题的,它往往不影响我,因为我处理更多的时候多进程的情况下(尤其是多级NL处理管线)高于多任务。我也很喜欢各种接口选项获得新的外部库:ctypes的,升压,等等
彼得·罗威尔

7

蟒蛇

它们都是大多数通用和通用的,而且在Web编程的情况下也提供了更多的产品选择。具有标准化的WSGI接口可确保框架与服务器之间的巨大互操作性。一些著名的Python Web产品:

  • Django-具有高级ORM,模板系统,表单处理等功能的成熟,成熟的高级框架。
  • Twisted —事件驱动(异步)网络编程的框架,可以用于聊天,套接字服务器,Web服务(您命名)。
  • Tornado —也是事件驱动的框架,但是该框架是为异步Web服务设计的。

红宝石

Ruby也是相当通用的语言。但是到目前为止,最著名的产品是Ruby on Rails。它的设计为许多人(包括上面提到的Django)提供了灵感。

的JavaScript

当前,JS的唯一服务器端选择是node.js。它与“龙卷风”和“扭曲”(灵感源于此)非常相似。但是,它仍然缺少类似于在其之上构建的Django或RoR的成熟框架。

斯卡拉

作为函数式语言,它对于大规模并行计算非常有用,就通用Web编程而言,还有Lift —受RoR启发的Web框架,例如FourSquare使用。


值得指出的是,对于将为Web应用程序提供支持的新语言,市场上无阻塞响应,内存使用,并发性和其他因素之类的东西很大。
Xeoncross 2011年

Django的+1。当我学到它时,这让我大吃一惊……或者是因为我同时学习它和Python而处于昏昏欲睡的昏昏欲睡中。无论哪种方式,我都想通过一种难以捉摸的“空闲时间”来回顾一项伟大的技术。
zourtney 2011年

1
“ ...它仍然缺乏完善的框架”退房Express for Node-expressjs.com
T. Stone

@T:是的,我看过Express。Django和RoR的强项之一是ORM。Express似乎没有它。
vartec

3

在我最新的Web项目中,我从PHP开始,因为我以前曾将它用于Web项目(快速启动),但是我在语言方面有很多问题,例如对UTF-8的支持不佳和动态类型化。我也有一些Java背景,我真的很喜欢静态类型输入和良好的重构工具。与PHP相比,Java也具有良好的性能。但是我也喜欢函数式编程的表现力。

Scala和Play框架

有了以上经验,我真的很喜欢Scala编程语言,它是静态类型的,同时支持面向对象的编程和函数式编程,并且与用于Web开发的其他语言相比,它具有良好的性能。但是我不喜欢Java和servlet的Web框架,我发现Play Framework同时支持Scala和Java,并且开发周期非常快-保存文件并更新您的网页。上个月,我对Scala&Play Framework非常满意。但是Play框架对Scala的支持还不是很成熟,工具支持也没有。

简而言之,我建议将Scala作为编程语言并将Play框架作为Web框架。


游戏看起来很酷,还没有机会真正(真的)测试驱动它虽然。来自类似的php背景,我发现Lift非常容易掌握。它似乎还比Play更成熟,但是对于结论性来说,我对Scala还是陌生的。
yannis 2011年

3

实际上,您可能正在研究三种类型的资源:

  • 解释语言基础知识的人以及为什么要使用它,
  • 比较几种语言的一种。
  • 批评某种语言的人。

这些资源都会有偏见。

  • 当您解释某种语言时,您通常会尝试说服读者使用它。因此,您很少会说这种语言很烂。
  • 当您比较几种语言时,您总是会对其中一种有自己的偏好。
  • 当您批评某些事情时,很难保持中立。

您可能有机会找到一些中立的比较,但是很难编写一个比较。就个人而言,如果不一直批评PHP,我将无法在真实语言和PHP之间进行比较。而且我很确定自己不是一个不能保持中立的人。


如果要概述不同的语言,则您必须自己学习它们阅读很多东西。通过学习,我的意思是知道该语言的基础知识,但能够有自己的见解。这并不是因为您已经阅读了Ruby手册,而是因为您能够解释该语言的优点和缺点。

这意味着您必须花时间(数月甚至数年)练习。或者,您可以阅读很多东西。但是,尝试阅读矛盾的东西。如果有人说自己讨厌PHP,而PHP是有史以来最糟糕的语言之一,尤其是与Ruby,C#或Java之类的真实语言相比,还可以尝试找到一个人,说PHP很棒,而且使用糊糊比使用PHP更容易C#,比Java快得多,而且比Ruby要好得多(我真的不知道是什么)。

记住一件事:如果您已经精通一门语言,那么在学习另一门语言时,一开始就会非常批评您,认为您已经知道的语言会更好并且更容易使用。就像讨厌Windows的Linux用户和讨厌Linux的Windows用户一样:实际上,没有哪个操作系统更好。只是Linux用户不知道如何使用Windows,反之亦然。只有在您拥有足够的经验后,您才能正确地决定哪一个更适合您。


最后一件事,通常被遗忘:评估语言的“周围环境”也很重要:

  • 框架(或最常用的框架)的性能如何?
  • 找到托管服务容易吗?您喜欢IDE吗?
  • 有大量编写良好的第三方库吗?
  • 社区是由高度专业的开发人员组成,还是主要由对程序设计或语言本身一无所知的初学者组成?
  • 该文档是否足够详细,易于搜索和理解?
  • 语言和框架是否经常更新?
  • 等等

我完全同意。我正在寻找这些问题的答案。您提到阅读很多 -这就是我要做的-我需要大量资源来阅读有关我想研究的语言的信息。虽然不可能进行公正的审查,但有些审查甚至更加均衡,这就是我想要的。
Xeoncross 2011年

2

好吧,由于您的标准之一似乎“很有趣”,因此,我认为您希望找到有偏见的信息。如果某个东西的作者对他们选择的语言充满热情,那么他们很有可能会给出有偏见的评估。

也许您应该从另一个方向着手。既然您听起来像是在谈论使职业脱离职业而不是业余爱好,那么也许您应该调查一些招聘广告,找到一些有趣的技术/语言并进行研究。

对于具有特定目标的语言,许多语言都没有。您列出的大多数语言都是通用的。例如,Ruby语言是一种非常通用的语言,适用于许多任务。一旦向其添加了一个框架(如Rails),它的目标就会非常明确。


1

这并不完全是您要的,但是如果我正在寻找使我摆脱网络开发专业人员的束缚,同时仍然利用这种经验和联系方式,我会开始编写Android和iPhone应用程序。能够销售与客户的网站互补的应用程序,确实可以使您脱颖而出,为通过移动设备越来越多访问的Internet开发。


那真的不是一个坏主意。我也正在考虑花更多的时间在插画家和Photoshop上进行设计。不过,我仍然想了解有关Web应用程序选项的更多信息。
Xeoncross

0

您是否真的达到了PHP的极限,或者仅仅达到了PHP的极限

你看过Drupal吗?这是一个基于PHP的CMS和编程框架,强烈鼓励良好的编码标准和实践。(在以前的工作中必须与OSCommerce一起工作,我在那里感到很痛苦。)尽管基于PHP,但与众不同之处在于,通常在纯PHP中做某事的“正确”方法在Drupal中不是正确的方法,而且您将拥有良好的学习曲线,可以真正掌握它。但是,它可能会改变您对PHP作为一种语言以及整个Web开发功能的看法。


我上次查看Drupal(第4和第5个)时,情况相当糟糕。也许他们的较新版本现在使用适当的标准。不过,尽管速度如此之慢,但我还是会坚持使用那些很棒的框架。
Xeoncross 2011年
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.