什么会让你尝试(或不尝试)一种新的编程语言?

时间:2010-10-25 21:07:21

标签: web-services oop web-applications programming-languages functional-programming

我已经设计了一种实用的编程语言已有5年左右的时间了,它可能不会再发布几年(可能直到我现在和下一次创业公司成功或失败之后)。

与此同时,我有两个可能有趣的问题:

1)新编程语言的哪些属性可以吸引你在下一个项目中尝试?

2)新编程语言的哪些属性可能会阻止您在项目上尝试? (即没有图书馆,......)

为了确保这个问题不是一个哲学辩论(因此被管理员关闭),请描述您自己的工具选择谓词,而不是理解更广泛的人口偏好:)

谢谢!

15 个答案:

答案 0 :(得分:16)

对于一种新的通用语言来说,我认为一个功能胜过所有其他功能:与现有的已建立平台集成。您没有时间编写语言所需的所有库,为什么要这样做?像Clojure和Scala这样的新语言本身很酷,但真正使它们“变得病毒式”的是它们以JVM为目标并与Java互操作。除了你的语言获得的免费图书馆,这意味着使用它的人不必在一夜之间放弃旧的代码库;他们可以随着时间的推移逐步迁移。

下一件重要的事情是工具;你需要坚如磐石的,最好是快速的编译器。您需要一个带调试器的IDE。包经理不能伤害。大多数程序员不会容忍二流工具;他们宁愿继续编写Java样板文件,因为至少在那里他们有一个很好的IDE来帮助他们重构它。

最后还有语言本身的实际技术;它的新思想,或旧思想的新颖组合,其语法的可爱性或简洁性。这些可能是你作为语言设计者在语言中最关心的事情 - 而 非常重要。即使使用平台集成和出色的工具,也没有人会切换到一种不会带来任何新内容的语言。

答案 1 :(得分:12)

我最大的绝对不是任何一种语言都不会将其用户视为同意的成年人,并且过于努力地强调其“正确”编程的愿景。对我来说,一种语言应该可以很容易地编写好的代码,而不是很难编写错误的代码。

示例:

  1. 纯功能语言。
  2. 要求在类中声明所有内容以强制执行OO风格的编程。
  3. 一般避免高度表达的功能(lambdas,运算符重载,动态类型,类型推断,默认函数参数等),因为它们在错误使用时会导致混淆代码。
  4. 非常严格的类型安全性,即使我明确地要求绕过类型系统。
  5. 谨慎的“功能”,例如检查异常,并要求每个文件只包含一个顶级公共类。
  6. 当没有充分的技术原因来解决这些限制时,你无法得到的抽象。

答案 2 :(得分:4)

  1. 垃圾收集。就像空气一样。我很少遇到这种情况 不想要它。如果我不想要它的机会,我愿意做一些 制作真空室的舞蹈。

  2. 体面字符串支持。几乎所有这些日子都涉及到 字符串操作。

  3. 异常。除非你有更好的东西。去了 例外情况让我想起猫在地板上呕吐。

  4. 库。尽管Lisp程序员说的是什么。我不想花钱 我编写数据库互连的任何时间。

  5. 对象。有些人真的想成为对象。数据库连接 例如。

  6. lambda表达式。有些事情想要的是功能而不是对象。

  7. CPAN。不是特别的CPAN,而是填充它的鞋子。那里 可能是许可证兼容性检查中的值。

  8. 可选的懒惰评估。这是纯粹的愿望清单。有时你 想懒洋洋地获取数据并让它看起来像其他一切。那里 可能需要某种机制来确保非内存 资源得到及时发布。

答案 3 :(得分:3)

我给你2美分。

1 - 绝对需要:

  • 垃圾收集器,
  • 非常高级别的感觉(奖励,如果它也可以感觉到希望的低水平),
  • 可读
  • 感觉;这里有一些可能的例子:
    • 有一个类似线性方程解析器的元数据(如果是凸方程解析器,则为奖励)
    • visual debugger
    • 比Ruby更好的元编程功能
    • ...

加成:

  • 令人印象深刻的图形库(可见程序)

2 - 绝对否:

  • 太详细,
  • 不好玩
  • 不便携

答案 4 :(得分:3)

1)新编程语言的哪些属性可以吸引你在下一个项目中尝试?

选择语言时,我有两个基本的事情:

  • 使用它需要不同的认知模型。与Lisp,Prolog,Haskell,C ++或Perl不同的东西。
  • 优秀的图书馆。

2)新编程语言的哪些属性可能会阻止您在项目上尝试? (即没有图书馆,......)

  • 缺乏图书馆
  • 现有编程语言的解决方案已经解决了。
  • Buggy编译器
  • 仅适用于1个操作系统的编译器。

-

一般来说,它必须要么更好地实现我的目标,要么更好地扩展我的思想。不仅要好一点,而且很多更好 - 足以证明从深层意义上学习它并承担数月的工作。目前,我正在努力在自己的时间理解Lisp - 学习其他语言只会在我工作空间的要求下发生。

答案 5 :(得分:3)

唯一绝对诱使我尝试新语言的东西将是一种至少与我现在一样高水平的语言,并且至少是灵活的(例如,wrt元编程) )。好消息是,我愿意尝试一次,特别是如果它有疯狂的新想法,所以这不是一成不变的规则。 : - )

那些会让我远离尝试新语言的东西,再次不是绝对的:

  • 如果它没有代表,我可能不太喜欢尝试它

  • 如果它的语法很复杂,我可能会完全避免它,因为生命太短暂而无法成为另一种神秘语法的语言律师

    例如,Ruby语法,如果你拿出一些古老的角落案例,就是正确的层次 - 增加复杂性,比如Perl或C ++,只是意味着我会花更多时间思考关于语法而不是程序,我的文本编辑器永远不会正常使用它 - 你不需要复杂的语法来获得良好的语言功能。

    (如果你理解Perl和C ++,很酷,更有力量给你。我的意思是不要不尊重你或你的语言。我个人无法弄明白,所以任何具有这种语法复杂程度的语言都不适合< EM>我)。

  • 完全没有工具

    你不需要马上就能得到所有东西,但如果你所拥有的只是一个翻译,特别是用C语言编写的翻译,它肯定会像一种不是为元编程而构建的语言,所以我不会有太多对此感兴趣。 (自我托管的额外奖励积分!)

  • 被称为“务实”!

    哎呀...抱歉。但这听起来像是一种旨在解决一种问题的语言,我想要通用工具。 (我不认为他们的创建者曾经称C或Lisp或Smalltalk为“务实”,我想学习下一个C或Lisp,而不是下一个PHP或Java。)

  • 如果它依赖于一些非常不同的关键功能平台(比如C或JVM,如果语言不像C或Java那样),我就不那么感兴趣了

    这与其他人已经写过的内容形成鲜明对比。例如,我不太喜欢尝试Clojure 因为它在JVM上。他们似乎没有动力去构建好的新本机库,如果我只是想将现有的Java语言库粘合在一起,Java本身就非常擅长。在Clojure-using-Java-libraries中,我今天所做的各种元编程是不可能的,因为它们是黑盒子。

    此外,多年来我使用本地库,并且“只为C语言库包装”HLL库,“包装C库”解决方案总是要复杂得多,这意味着设置起来比较困难,如果(不是)我遇到麻烦,更难调试。所以如果你说你有一个可以使用我所有现有库的新系统,我只会听到“跨语言函数调用调试噩梦”。

    强大而灵活的语言需要的库比弱语言少得多。如果我必须编写一个需要链表的C程序,我可能会寻找一个库(也许是Glib)。如果我必须在Python中完成它,我可能会在比查找库所花费的时间更短的时间内编写一个。这甚至不是编写链表的最简单的语言!

    如果我在抽象频谱中向上移动,这意味着我需要的库少于我现在使用的库,这已经“不是很多”了。所以,做一个伟大的语言,如果我们需要它们,我们将使用这种语言的新隐喻来找出库。包裹<string.h>java.lang的任何时间对我来说都是浪费时间。

我想我的一些言论与其他人所说的相反。可能的解释是:

  1. 他们是对的,我错了
  2. 我是对的,他们错了
  3. 我们都不知道我们在谈论什么,你应该为自己做些好事,比如丹尼斯和肯做的: - )
  4. 祝你好运,我期待看到你的成就。我认为5年的设计时间远远超过很多成功的编程语言!

答案 6 :(得分:2)

对我而言,使用它必须简单易懂。它还必须解决业务需求。它绝对必须有一流的调试器。

除此之外,它必须解决我目前在C#中遇到的问题;坦率地说,这很少。

我的历史从pascal到Delphi再到VB(我多么讨厌那些2个月)到ColdFusion,PHP,Classic ASP,Java到我目前最喜欢的:c#。每次变更都有可行的个人和商业原因。

在最终跨越它们之前,我挖出并使代码工作。然而,对于每一个动作,最后有一个时刻显然新语言超过了前一个。这并不是说Java(例如)今天比以前更好;就在我搬家的时候还不够好。

现在,如果你能够制作一种具有c风格语法的语言,以提供更好的扩展潜力(想想数以百计的用户竞技场的数百台服务器),那么我可能会认真考虑它。也许与传统的RDBMS和NoSQL数据库以及一个非常棒的多线程调试器有很强的联系。

答案 7 :(得分:2)

以下是我自己的几个答案:

  1. (好)

    • 编码经验教训&amp;最佳实践:我不想再次发现更有经验的开发人员已经知道的事情。
    • 编译为javascript:我刚刚学习了Java + GWT。我个人认为这是开发复杂的浏览器内程序的最佳方式。
  2. (坏)

    • 没有静态类型:尽管Java很冗长,但我很喜欢通过静态类型实现的工具支持(Eclipse)。 (我将其与我的Python背景进行对比)。
    • 没有图书馆:如果我必须从头开始,我就无法建立有竞争力的产品。

答案 8 :(得分:2)

什么会很酷:

  1. 一种只将概念理解为“数字”和“文本”的语言,并且不会让我选择int16,long,double或latin1,utf8,utf16。

  2. 编程模式/概念/ ide使线程/多核变得轻而易举。

  3. 什么是不冷却的:

    1. 编译器/解释器崩溃。语言应该指望白痴程序员; - )

    2. 意外/不可靠的结果或行为。

答案 9 :(得分:2)

请耐心等待,因为我是用手机写的。

我个人会选择新语言的原因&amp;试试看以下内容:

  1. 创建它的目的: Pascal是第一种在世界范围内受欢迎的教育语言。 Java可以编写移动应用程序,因此得到了普及。对于C ++来说,事实上它是为了编写内核而设计的,你明白了。

  2. 可读性: Java&amp; Pascal比具有许多指针的C ++对应代码更容易阅读源代码(接近英语)。如果语言可以轻松编程并且源代码可以轻松阅读,那将构成简单的文档和源代码教程。

  3. 可以在多个平台上运行:我没有玩过Objective C&amp; X代码很简单,我没有Mac。我可以使用Mono在Linux平台上开发.NET平台。 Adobe发布了Flex,其编译器是用java和Java编写的。在任何平台上运行。你不能留下开发人员的一个人口统计数据。

  4. IDE集成:不理想,但IDE有优势。

  5. 从本质上讲,我想说的是基于以下新语言的存在:

    • 现有语言的问题有&amp;新语言的创建者认为他/她有一个更好的解决方案可以用他/她的新语言工作。
    • 执行Apple的工作,您必须拥有Mac和X-Code(或Mono Touch)才能对iPhone进行编程等。

    专注于第1点(我认为是优先事项)并从那里开始工作。那就是Microsoft came up with C#

    希望我的1分值得帮助! : - )

答案 10 :(得分:1)

具有简单语法的第一类函数和闭包。自从学习ruby和javascript以来,我无法查看任何没有第一类函数和运行时代码操作工具的语言。

答案 11 :(得分:1)

如果它有字母'J','A'和'V'。

编辑:顺便说一下,我回答这个问题是为了“不要尝试”。

答案 12 :(得分:1)

文档每当我想要采用几乎任何新东西 - 无论是API,框架还是语言 - 我都希望确保有可靠的文档以便我能够获得它快速工作和/或解决问题。我意识到这本身并不是语言功能,但我真正喜欢python的一件事是,向函数和类添加文档非常容易,并且很容易直接从控制台访问该文档。

您打算制作这个开源软件吗?如果是这样,请继续并立即释放。每个人都会明白它处于alpha阶段,但等到它“准备好”有时意味着它永远不会准备好。拥有大量早期采用者和用户意味着您将拥有编程语言的第二个重要功能:

答案 13 :(得分:0)

“跨越鸿沟”的方法是选择一个利基并主宰它 - 在竞争对手之前实现跨越式发展。这将至少为您提供进一步的可见性。你必须选择一个利基市场,因为在时间和资源有限的情况下,你根本不会做得更好 - 你必须选择一些你可以擅长的东西。

即便如此,我认为这种可能性并不好,所以为自己的教育和乐趣做这件事是最好的。另外:提前发布并经常发布!

答案 14 :(得分:-1)

新语言 - 从事C ++工作的人总是寻找能够在不影响速度的情况下更好地支持内存管理的语言[Java具有更好的管理能力,但与c / c ++相比速度较慢]。

Qt是非常好的,它会占用孩子的权利并在父母超出范围时销毁,但当你指向指针类型的东西时,它也会失败。

- 干杯