Bar*_*ter 8 language-features programming-languages language-design
我正在研究一种新的语言,针对Web开发,嵌入到应用程序,分布式应用程序,高可靠性软件(但这是为了遥远的未来).
此外,它的目标是长期降低开发费用 - 更多时间编写更安全的代码并减少以后的支持.最后,它强制执行许多真正的团队必须执行的事情 - 比如一个跨平台IDE,一个代码风格,一个Web框架.
简而言之,关键的语法/语言功能是:
开源,非限制性许可.当然是跨平台.
口味像C++,但更简单,Pythonic语法与严格和静态类型检查.更容易学习,没有多重继承和其他无人知晓的事情:-)
LLVM字节码/编译后端提供近C速度.
是垃圾收集和显式对象破坏.
真实操作系统线程,多核计算机的本机支持.多线程是语言的一部分,而不是库.
类型在任何平台上都具有相同的宽度.int(32),long(64)等
内置后置和前置条件,断言,小单元测试.你写了一个方法 - 你可以在一个地方写下所有这些东西,所以你在一个地方有相关的东西.如果你担心你的类源代码会变得臃肿 - 它的IDE可以隐藏你现在不需要的东西.
类似Java的异常处理(即你必须处理所有异常)
我想我现在要留下网络和群集功能......
你认为呢?我错过了现有的类似语言吗?
小智 10
总结一下:你的语言没有真正的卖点.它只是做了十几种其他语言已经做过,语法和语义略有偏差,具体取决于程序员的来源.这可能是一件好事,因为它使语言更容易适应,但你也必须说服人们麻烦切换.所有这些东西都必须构建和调试并再次记录,工具必须编程,人们必须学习它并说服他们尖头发的老板使用它等等."所以它是语言X,具有Y和更好的一些功能语法?但它不会使我的应用程序的代码缩短15%,更清晰,它不会让我从样板X等中解放出来 - 而且它不能用于我的IDE." 最后一个很重要.工具很重要.如果一种语言没有好的工具,很少有人会回避,
最后,它强制执行许多真正的团队必须执行的事情 - 比如一个跨平台IDE,一个代码风格,一个Web框架.
听起来像是一个缺点!语言如何"强制执行一个X"?你如何说服程序员这种编码风格是一种真正的风格?为什么不应该有人去替换狗慢,难以维护,严重受限的IDE你用更好的东西"强制执行"?一个 Web框架怎么可能适合所有应用程序?程序员很少喜欢被迫进入X,他们有时是对的.
此外,您的语言将不得不与他人交谈.那么您是否有针对多线程和Web开发的现成标准解决方案?也许你应该从FFI开始.Python可以使用用C或C++编写的扩展,使用动态库ctypes,而使用Cython,用Python接口包装任何给定的C库都非常简单.你知道有多少重要的库是用C语言编写的吗?除非你的语言可以使用这些,否则人们很难用它来完成(现实世界)的东西.想想GUI.大多数市长GUI工具包是C或C++.Java有许多用于许多目的的数百个库(其他JVM语言从Java互操作中获利很多).
最后,关于性能:LLVM可以为您提供本机代码生成,这是一个巨大的优势(性能方面,但也因为结果是独立的),但LLVM优化器也是有限的.不要指望它击败C.尤其不是通过icc在Intel CPU上编译的手动调整的C;)
你给我们的是一系列特征,没有连贯的哲学,或解释它们如何协同工作.这些功能都不是唯一的.充其量,您将提供已经存在的增量改进.我希望已经有语言在你所说的内容中徘徊,只是因为他们没有成功,所以他们仍然相当模糊.
语言有惯性.人们必须学习新语言,有时还需要学习新工具.他们需要激励这样做,并且一些功能的20%改进并没有削减它.
您至少需要的是一个杀手级应用程序和一种电梯间距.(根据美国当前的商业说法,当你和他们一起乘坐电梯时,"电梯间距"告诉上级你的项目.)你需要让你的语言显然值得为某些目的学习,而你需要能够告诉人们为什么值得学习之前他们认为"只是想要写一种语言的人的另一种语言"并离开.
你需要组建一个语言社区.该社区最初需要一些本地化:在X大公司工作的人,想要做Y的人,等等.决定社区可能是什么,并提出一个重要的理由来转换以及一些理由相信您的语言可以实现它所承诺的目标.
单独回答你的一些观点(我省略了我认为不重要或不好的观点):
针对Web开发
大多数人使用PHP.不是因为它是最好的语言,这是肯定的.
嵌入应用程序
Lua.
分布式应用程序,高可靠性软件(但这是为了遥远的未来).
您是否仔细研究过Erlang的设计和参考实现?
它强制执行许多真正的团队必须执行的东西 - 比如一个跨平台IDE,一个代码风格,一个Web框架.
如果您的语言成功,人们将制作其他IDE,其他代码样式和其他Web框架.
多线程是语言的一部分,而不是库.
用于多线程的非常好的语言禁止在线程内部产生副作用.是的,在实践中,这仅仅意味着Erlang.
类型在任何平台上都具有相同的宽度.int(32),long(64)等
叹息......机器级语言之外的整数只有一个合理的宽度,比如C:infinite.
设计自己的语言无疑会教你一些东西.但设计一个好的语言就像设计一个好的密码系统:许多业余爱好者尝试,但需要专家才能做好.
我建议你从这个线程开始,阅读一些关于编程语言设计的Norman Ramsey的答案.
鉴于您对分布式应用程序的兴趣,知道Erlang是必须的.至于顺序编程,最小的是一种命令式语言和一种函数式语言(理想情况下是Lisp/Scheme和Haskell,但F#是一个好的开始).我还建议至少知道一种没有对象的高级语言,这样你就会明白没有对象通常会让程序员的生活更轻松(因为对象很复杂).
至于什么可以驱使其他人学习你的语言......好的工具/库/框架不会受到伤害(FORTRAN,php),设置这个例子的大公司也不会受到伤害(Java,C#).良好的设计似乎并不是一个很重要的因素(一个只有ha-ha严肃的笑话才能让语言成功的是使用{大括号}来划分块:C,C++,Java,C#,php)......