为学习体验创建新的脚本语言?[关闭]


13

为自己的个人学习经验创建脚本语言值得吗?

我问的原因是已经有那么多编程语言可用,我知道我的语言除了提供良好的学习体验外,不会有任何实际用途。但是,我确实发现仅尝试将脚本语言作为一种学习经验是有弊端的:要花费更多的时间和精力,我可能会做一些更具“生产力”的事情。

创建一种编程语言(包括编写其预期目的,语法,哲学,解释器等的草稿)是否值得花费时间,精力和学习经验?还是还有其他我可以从中受益的项目?


3
另一种选择是实现现有语言。一年多的时间里,我慢慢地开发了一种称为Machete的ECMAScript方言,并学到了很多东西。
2011年

有趣的是,我没有想到这一点。
伊凡

2
1)了解这个... www1.idc.ac.il/tecs 2)和这个... mitpress.mit.edu/sicp
Joe Internet,

您还可以考虑为现有项目v8,SpiderMonkey或Python做出贡献
treecoder 2011年

3
恕我直言,学习新的编程语言的最好方法是为它们实现编译器(或至少对原始语言的重要子集)。因此,是的,这确实是一种有用的学习体验。
SK-logic

Answers:


15

建立技能和投资组合

我认为这将是一个很好的学习经历,因为它将:

  • 强迫你去看内幕
  • 指导您了解内部的工作方式
  • 鼓励您查看并比较其他实现
  • 使您的算法技能保持最新,
  • 使您编写很多代码(并希望记录文档),这也不是一件坏事,
  • 为您提供了重要的项目和代码库,您可以在线共享以供所有人查看:
    • 个人的享受和满足
    • 潜在的雇主展示您的技能
    • 与对同一领域感兴趣的同行进行交流和交流
    • 可能让它成长为更多...

因此,我确实将其视为生产,有用且总体上“值得”。

开始使用

现在,您可以使用不同的方法,具体取决于您计划在此上花费多少时间...:

  • 如果您的时间有限,我会说潜入并编写代码。
  • 如果您有更长的时间范围,那么您确实可以走长远路,编写规格,教程,手册等。

从小开始

我宁愿建议您从小着手。据我所知,从来没有人像这样直接写过一种很棒的语言。你跌倒跌倒,失败,失败,失败。然后,您成功了,因为它有效,但仍然很糟糕,因此您需要重新开始。您添加了新功能后,它终于变得很酷,但是突然您意识到,有一个基本概念在开始时就搞砸了。因此,您再一次开始 ...

对我来说似乎很有教育意义。

继续(并与我们分享链接)。

小,如“短”

但是,再次建议您从小处着手。如果有人说这将花费很多代码和时间,请不要担心。不一定,如果您不打算使用复杂的语言。据称,艾伦·凯Alan Kay)和其他 施乐PARC工程师开发了适合放在一张纸上的Smalltalk的早期版本 ,以达到简洁的目的(有关PARC历史的详细信息,请阅读《施乐PARC:闪电经销商》)。似乎是一种好的,有教育性的且受限制的方法(只要它不牺牲可读性)。

小,如“受约束”

您无需立即支持高级类型系统,高阶函数和42种不同范例的组合。它可能只是一种数学表达语言。

重用(和窥视)他人的知识

您可能还想看看用于从头开始编写语言的工具。您可以重新实现自己的所有功能,但是也许值得一试的是例如现有的词法分析器和解析器生成器。

显然,您可能想全面了解编译器的构造


现在,如果我们将您的问题修改为“这将是您最有效地利用您的时间吗?” 这变成了一个完全不同的问题:)

您可以解决很多其他的学习项目,即使没有更好的训练,也可以同样很好地训练和展示您的技能。这取决于您想要的目标。


2
+1代表“那么您成功了,因为它有效但仍然很糟糕”
Ivan

1
@Ivan:谢谢:)这可能是学习经历的另一个好部分:内省,谦卑和毅力!
haylem 2011年

1
我同意海林。您将学到的有关通用编程的知识,语言如何工作,实现事物的不同方法将是非常值得的。是的,您可能是唯一一个看到它的人,但这将成为您为改善自己而努力的小宠物项目。
RJay75

3

我说继续吧。

实施编程语言涵盖了广泛的主题,并且您将学到很多有关幕后工作方式的知识。您可能会经历六次左右的失败尝试,但是学习经验非常宝贵。


2

实际上,设计和实现(玩具,但完整的)编程语言是我上一个高级CS类中的(必需?)练习之一(无论是编译器类还是编程语言调查,我都忘记了...)

因此,至少有一位CS教授这么认为。

您将对其他语言所具有的所有“怪癖”有更好的理解。


1

这需要一段时间。您打算维护它吗?

创建一种编程语言(包括编写其预期目的,语法,哲学,解释器等的草稿)是否值得花费时间,精力和学习经验?还是还有其他我可以从中受益的项目?

我假设您的财务状况不是无限的,所以我认为这是不值得的。您可以将时间花在其他可以赚钱的有用项目上。请记住,这可能不是您要找的答案,但是从逻辑的角度来看,我想说您的编程语言目前可能不是正确的项目。如果您是退休的计算机科学家,并且认为有必要为该行业做出贡献,我会考虑的。似乎您对编程有强烈的热情,这很棒。但是,构建一种全新的脚本语言吗?那将是一个非常漫长的项目。到那时,您可能已经构建了许多可以放入投资组合中的应用程序。我认为问题是:


2
我不知道...一项艰巨的爱情工作胜过二十个扔掉的应用程序,每个应用程序可能会让您赚一百美元。
2011年

实施领域特定的语言实际上可能会大大加快实际项目的开发速度。因此,从经济上和美观上来说,这都可能是一种回报。
SK-logic

1
有些人创造事物是因为他们喜欢创造事物……不是因为上述创造行为会为他们带来一些现金。
杰蒂2011年

@杰蒂 是的我知道。这就是为什么我说这个答案可能不是您想要的答案,并且我可以告诉您对编程充满热情。不过,感谢您的输入,因为我正在等待某人说出您对这个答案的看法。
瑞安

@Ryan-对不起,我错过了那部分。
2011年

-2

我对你的建议是

不要重新发明轮子

这种惯用隐喻的灵感在于,车轮是人类创造力的原型,不仅由于其为用户提供的强大功能和灵活性,而且源于古老的起源,即使它不是全部, ,现代技术。由于它已经被发明,并且没有任何操作缺陷,因此对其进行重新尝试将是毫无意义的,也不会为该对象增加任何价值,并且将浪费时间,使研究人员的资源偏离了可能更有价值的目标他或她的技能可以大大提高。

您应该问自己:

  • 为什么需要创建脚本?现有的脚本是否还不够好?
  • 您是否会维护和发布该脚本,并且确信您的脚本将被其他程序员使用?如果您的回答为“否”,请不要这样做。

我了解您希望拥有更多的学习经验,因此我个人认为,创建框架将为您提供更多的学习经验,并且您/您的团队/社区可以比创建脚本更晚地重用它。

这个xkcd漫画有点相关,只需将“标准”更改为“语言”即可:

在此处输入图片说明


-1,他明确表示这将是个人学习的经验。
GrandmasterB

坦率地说,创建脚本不会给自己和社区带来真正的个人学习经验和收益。我还补充说,创建框架实际上将使他和整个社区受益。如果您认为事实并非如此,我不介意获得更多的否决权。
鲁迪

2
是的,您是对的-大一程序员都不应该写他的第一个“ Hello,World!”。-毕竟,最好只下载一个现有的。在这种情况下,“ 框架 ” 是什么?
SK-logic

5
@Rudy,实现编译器或解释器是一项如此琐碎的基本技能,与“ Hello,World!”非常接近。这就是为什么在任何体面的CS课程中都必须使用它。而且,尽管这项工作很琐碎,但它却教授了许多非常有用的技能,几乎可以应用于任何领域。毋庸置疑,实现DSL非常重要(请注意,您提到的Hibernate 就是 DSL,并且其中包含许多嵌入式解释器和编译器,其中一些实现不佳)。
SK-logic

3
@ SK-
logic-
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.