Hacker News 中文摘要

RSS订阅

我对Gleam的第一印象 -- My First Impressions of Gleam

文章摘要

作者在寻找新编程语言时选择了Gleam,这是一种类似Elixir且支持静态类型的语言。他通过阅读语言教程初步了解Gleam,并决定通过实际项目来深入评估。作者的项目是解析旧版AIM日志,这些日志格式多样,包括XML、HTML和纯文本,他希望通过编写通用解析器来整理这些日志。

文章总结

文章主要内容:

作者分享了他初次使用Gleam编程语言的体验,特别是他尝试用Gleam解析旧的AIM聊天记录的过程。Gleam是一种类似Elixir的静态类型语言,作者对其进行了初步探索,并记录了他的学习心得和遇到的挑战。

项目背景: 作者在1999年至2007年间使用AOL即时通讯工具(AIM),并保存了大量的聊天记录。这些记录格式多样,包括XML、HTML和纯文本。作者曾多次尝试编写一个通用的解析器,但都未能完成。这次他决定用Gleam来实现这个项目,因为Gleam的函数式编程特性特别适合解析任务。

初步体验: 作者首先尝试解析命令行参数,发现Gleam的标准库没有直接支持命令行参数解析的模块,最终使用了一个第三方库argv来实现。接着,他探索了gleam build命令,发现它生成了BEAM字节码,而不是直接的可执行文件,这让他感到有些困惑。

解析聊天记录: 作者从最简单的纯文本日志解析开始,逐步实现了一个解析函数。他使用了Gleam的管道操作符(|>)和模式匹配功能,最终成功提取了聊天记录中的消息内容。他还尝试了使用Result类型来处理可能的错误,而不是简单地返回空字符串。

对Gleam的总体评价: 作者对Gleam的管道语法和示例丰富的文档表示赞赏,同时也喜欢其内置的未使用符号警告和todo关键字。然而,他对Gleam的错误处理机制和标准库的局限性感到不满,认为这些方面还有改进的空间。

总结: 尽管Gleam是一个相对年轻的语言,生态还不够完善,但作者认为它提供了一种新的编程思维方式,值得进一步探索。他计划继续使用Gleam来解析其他格式的聊天记录,并期待看到这个语言的未来发展。

项目代码: 作者将项目的源代码公开在Codeberg上,供其他学习Gleam的人参考。

评论总结

评论内容总结:

  1. Gleam与Elixir和Rust的相似性

    • 有评论认为Gleam更像Rust,而非Elixir,尽管它运行在BEAM上。
    • 引用:"It’s an Elixir-like language that supports static typing."
    • 引用:"Maybe just me, but when I tried Gleam it really came off much more like Rust."
  2. 错误处理的改进

    • 评论提到Gleam的错误处理通过result.tryuse关键字显得更加优雅。
    • 引用:"One thing that def makes Gleams error handling look nicer, is utilizing result.try with the use keyword."
  3. 对AI抗性语言的兴趣

    • 有评论表达了对未来AI无法理解的编程语言的兴趣,认为这种语言更具未来性。
    • 引用:"The only languages Im interested in are future proof AI resistant languages."
    • 引用:"I want a language AI doesnt know and cannot ever know."
  4. 对LLM取代编程的担忧

    • 有评论认为未来LLM将取代手动编程,因此学习新语言的必要性降低。
    • 引用:"I’d totally learn it if I didn’t believe firmly that we won’t be coding by hand within the next 9 months."
  5. 函数式语言在解析任务中的优势

    • 评论指出函数式语言在解析任务中表现优异,特别是通过“解析器组合子”技术。
    • 引用:"This is mainly due to a technique called 'parser combinators', which can be expressed very cleanly in functional languages."
  6. 对BEAM虚拟机的看法

    • 有评论对Gleam依赖BEAM虚拟机或编译为JavaScript表示不满,希望它能直接编译为本地代码。
    • 引用:"I don’t love that it needs either a VM (BEAM) to run, or for it to be compiled to an interpreted language (javascript)."
  7. 对Gleam语言设计的批评

    • 评论指出Gleam缺乏临时多态性,且对BEAM的依赖显得奇怪。
    • 引用:"My biggest problem with gleam is the lack of any kind of ad-hoc polymorphism."
    • 引用:"It also seems weird to make a language for BEAM that depends on a separate library for actors and concurrency."
  8. 对Gleam简洁性的评价

    • 评论认为Gleam语言设计简洁,适合快速上手,但也有人觉得它过于简单,缺乏“电池内置”的特性。
    • 引用:"The core language is pretty small too. Any moderately experienced programmer can probably burn through the language tour."
    • 引用:"I think the language might be too small. It’s one of the things I dislike about Rust too."
  9. 对Gleam的积极评价

    • 有评论高度评价Gleam,认为它结合了Haskell的优雅和Erlang的特性,特别适合前端开发。
    • 引用:"It really is a neat language. Sort of like the smaller more elegant language that has been waiting to break out of Haskell, but combined with Erlang."
    • 引用:"The most impactful are the coding paradigms that it enables, especially the actor model and especially on the front end."