文章摘要
作者在寻找新编程语言时选择了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的人参考。
评论总结
评论内容总结:
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."
错误处理的改进
- 评论提到Gleam的错误处理通过
result.try和use关键字显得更加优雅。 - 引用:"One thing that def makes Gleams error handling look nicer, is utilizing
result.trywith theusekeyword."
- 评论提到Gleam的错误处理通过
对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."
对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."
函数式语言在解析任务中的优势
- 评论指出函数式语言在解析任务中表现优异,特别是通过“解析器组合子”技术。
- 引用:"This is mainly due to a technique called 'parser combinators', which can be expressed very cleanly in functional languages."
对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)."
对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."
对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."
对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."