Kernel-Zhang的个人主页

傻瓜式设置Nim服务器

Nim是服务器开发的理想选择,但如果你想运行自己的服务器,又是服务器管理和Linux领域的新手,那么要做好这一点,你需要了解的信息量可能会令人生畏。在本文中,我将简要介绍如何架设一个小型服务器,以安全的方式运行 Nim服务器。这篇文章比我的许多其他文章都要低级得多,其中包括大量的命令行片段和配置文件细节,所以请随时将它加入书签,在需要时再来阅读。我也会努力保持更新,并添加来自Nim社区的任何...

在Nim中封装C语言库

正如我们在上一篇文章中发现的,Nim默认生成C代码,然后调用C编译器生成二进制文件。这似乎是个奇怪的选择,尤其是在LLVM时代。但实际上,编译或转译为另一种语言的情况并不少见。最初选择不使用LLVM,只是因为在创建Nim时,LLVM还不成熟。尽管通过C语言编译有一些相当大的好处。例如,你可以在任何可以运行C语言的地方运行Nim,这意味着你可以在几乎任何地方运行它。从最微小的微控制器,到移动应...

Nim中的动态链接库

这个问题多年来一直在不同的地方被问到,最近在论坛上也有多个不同的主题。鉴于我曾使用Nim动态库开发过商业软件,我想我应该谈谈我的看法。但由于有多个主题,而且这是一个很大的话题,所以我想最好还是在这里发帖。 问题 大家可能都知道,Nim是通过C语言编译的,这就意味着可以用它来编写动态链接库。无论是加载到现有程序中,还是编写一个可以加载动态库的Nim程序,问题都是一样的。我们如何才能做到这一...

Nim是转译器吗?

这个问题在 IRC 频道、与人交谈时,以及几乎每次Nim在Hackernews或更大的编程子论坛上发表文章时,都会在评论区反复出现。这个问题也被回答过很多次,既有简短有效的 “不”,也有更长的回答。本文将详细介绍为什么答案是 “否”,希望下次再有人问这个问题时能作为参考。 什么是编译器? 问“Nim 是转译器吗?”这个问题的人通常是指“相对于编译器而言”,因此要理解为什么答案是 “否”,...

Nim中的多任务处理

这是一系列关于Nim生态系统中的一个主题的文章,到目前为止,关于这个主题的文章还相当少。即线程、异步操作和通信。 首先,我们需要充分掌握我们将要讨论的概念。这个领域中的所有术语都很容易混淆,因此我们先从一些简单的定义开始。为了更好地理解这些术语,让我们先来看看现代计算机是如何工作的,现在是学习计算机科学101的时候了。 现代计算机的工作原理是将磁盘、网卡(现在通常内置在主板中)、图形卡等...

Nim中的异步编程

在上一篇文章中,我们对各种多任务进行了初步了解,在这篇文章中,我们将了解最简单的多任务形式,即异步执行。正如上一篇文章所讨论的,异步执行是我们的程序告诉硬件做某事,然后在等待硬件完成操作的同时做其他事的一种方式。例如,当我们要将文件读入内存或进行网络通信时,异步执行就非常有用。与在CPU上运行计算相比,这两项任务的速度都非常慢,而在等待它们完成的过程中,我们可以做很多事情。正如入门指南中提到...

Nim中的元编程以及可读性和可维护性

在本网站的文章和讲座中,我都提到过关于Nim中元编程,那就是Nim中的元编程可以提高可读性和可维护性。元编程的反对者可能会对此嗤之以鼻,认为这恰恰相反。当然,元编程是一种功能强大的工具,但使用任何功能强大的工具都必须小心谨慎。一不小心,电锯就会把你的腿锯断,同样,宏写得不好也会把你的程序搞得一团糟。但这并不意味着我们不应该使用电锯或宏!也许我在Nim中使用模板和宏最多的地方并不是为了做一些奇...

将Nim二进制大小从160KB降至150Bytes

最近,Nim编程语言二进制文件的大小似乎成了一个 热门话题。Nim 的口号是“ 表现力强、高效、优雅 ” ,因此让我们在这篇文章中探讨高效的部分,探索几种在Linux上缩小简单的NimHello World二进制文件大小的方法。在此过程中,我们将: 将常规程序编译成6KB二进制文件 不考虑C标准库,构建952字节的二进制文件 使用自定义链接器脚本和ELF头文件构建150字节的...