编程开发与计算机科学

小众编程语言

这里先给出小众的定义:以 TIOBE Index for October 2021 为标准,排名在 20 位以后的编程语言。其中排名前 20 的编程语言为:

  1. Python
  2. C
  3. Java
  4. C++
  5. C#
  6. Visual Basic
  7. JavaScript
  8. SQL
  9. PHP
  10. Assembly language
  11. Classic Visual Basic
  12. Go
  13. MATLAB
  14. R
  15. Groovy
  16. Ruby
  17. Swift
  18. Fortran
  19. Perl
  20. Delphi/Object Pascal

……

告别密码验证

最近,微软宣布所有用户现可从其帐户中完全删除密码。用户可以通过在手机上安装 Microsoft Authenticator 应用来接收验证码进行登录。详见《微软账户进入无密码时代,现可将你的密码彻底删除》:

微软副总裁 Vasu Jakkal 表示,“近年来,我们一直都在强调无密码机制的重要性。今天我在这里很高兴地向大家宣布,这项愿景终于有了实质性进展。从今天开始,您可以将你微软账户中的密码彻底删除。”

对于这么做的原因,微软表示单纯的密码机制已经成为了安全系统的软肋,每年仅仅因为这个原因发生的相关攻击就多达 180 亿次,约每秒 579 次。

不过各位小伙伴还请不要以为微软取消密码就没有安全保护机制了,因为在迈入无密码时代之前你还需要在自己的手机上安装一个 Microsoft Authenticator 应用(如果您愿意,您可以随时为帐户重新添加密码),之后根据实际使用位置的不同,通过 Windows Hello、安全密钥,或者是通过邮件、手机或其他应用以及服务(包括 Outlook、OneDrive、Microsoft 家庭安全等)接收到的验证码进行登录。

……

无锁队列并非真的无锁

近几年经常被提起的无锁队列,似乎被视为解决高并发的万能良药。无锁队列是一种通过CPU提供的原子操作指令 CASFAA,以及循环重试,来实现的乐观并发控制算法。虽然无锁队列算法并未显式调用锁,但事实上,在多核环境下,所谓的无锁队列算法本质上就是实现了锁的功能。

首先,原子指令本身就是一种带锁的操作,只是锁的颗粒度较小而已。单核 CPU 系统的情况比较简单,因为单条指令操作总是原子的;而 SMP 的情况就比较复杂了,需要使用缓存一致性(Cache Coherence)的机制来确保操作的原子地执行。

早期 CPU 不支持原生的 CMPXCHG 指令,要实现 CAS 原子操作,必须先用 LOCK 指令锁住总线或需要访问的内存块。

……

「并行」和「并发」

从中文字面上还是挺难区分「并行」和「并发」的,两者都带着一个「并」,似乎是个同义词。而在计算机科学中,「并行」和「并发」完全是两个不同的概念。两者并非互斥,也有相关联,但含义绝不可混淆。

英文辨析

「并行」的英文是 parallel,「并发」的英文是 concurrent。有意思的是,台湾将前者翻译成「平行」,后者翻译成「并行」。可见中文翻译基本是词不达意的。要区分两者还需从英文原文着手。

……

flexbox 实现自适应图片九宫格布局

「九宫格」的布局是指:在一个正方形的容器中,以 3x3 排列共九个正方形的元素。当容器大小发生变化时,容器内部的九个元素尺寸也能随着容器大小而缩放,并保持正方形的外形。当容器内元素不满九个时,每行元素能够等比放大并撑满一行

如何使用 llhttp

llhttpNode.js v12 以上版本使用的 HTTP 解析器,代替了旧版的 http_parser。根据官方宣传,相较于旧版解析器,新版本解析器性能提升了 156%。llhttp 的主要代码由 Typescript 实现,描述了一个有限状态机,最终通过 llparse 将代码转换成 C 语言源代码。然而官方文档里根本没写如何生成 C 语言代码,只能自己探索了。

首先 clone 下 llhttp 的代码:

shellgit clone https://github.com/nodejs/llhttp

在项目根目录下能找到 Makefile 配置文件。打开看了下,并不是很复杂。这个 Makefile 配置仅支持 clang 编译器 和 Linux 操作系统。不过我们只需要生成 C 语言代码的部分就行了。

……

    Windows 下编译 libuv

    在 Windows 下编译 libuv 需要先安装 Visual C++ Build ToolsCMake

    在 libuv 源代码目录下运行命令:

    powershellmkdir build
    cd build
    cmake .. -DBUILD_TESTING=ON
    cd ..
    cmake --build --config Release build

    ……

      Python 库资源收集

      收集了流行的 Python 库和资源。会不定期更新

      Nim 语言的动态分发机制

      Nim 是一款 Python 风格的静态类型语言。但事实上,除了缩进语法外,Nim 和 Python 并没有太多相似之处。相对于 Python,Nim 更多地吸收了 Ada 和 Lisp 等语言的特性。

      Nim 编译器通过生成 C 或 Obj-C 中间代码的方式来进行本地编译,所以需要依赖一套外部编译器。Nim 也可以生成 Javascript 代码。此外,还有以脚本方式运行的 NimScript

      OOP 的一个特性就是支持多态,而动态分发(Dynamic Dispatch)就是实现多态的基础。在讲解 Nim 的动态分发实现前,先讲一下其他语言是如何实现的。

      ……

      创建支持 Kotlin 协程的 Vert.x 服务代理

      本文提供一个方法,可用于创建支持 Kotlin 协程的 Vert.x 服务代理