原创 深入理解原子操作的本質
原文地址:https://blog.fanscore.cn/p/34/ 引言 本文以go1.14 darwin/amd64中的原子操作爲例,探究原子操作的彙編實現,引出LOCK指令前綴、可見性、MESI協議、Store Buffer、Inv
原创 golang unsafe.Pointer與uintptr
原文地址:https://blog.fanscore.cn/p/33/ 先說結論 uintptr 是一個地址數值,它不是指針,與地址上的對象沒有引用關係,垃圾回收器不會因爲有一個uintptr類型的值指向某對象而不回收該對象。 unsaf
原创 x64架構下Linux系統函數調用
原文鏈接:https://blog.fanscore.cn/p/27/ 一、 函數調用相關指令 關於棧可以看下我之前的這篇文章x86 CPU與IA-32架構 在開始函數調用約定之前我們需要先了解一下幾個相關的指令 1.1 push pu
原创 IEEE754標準浮點數表示與舍入
原文地址:https://blog.fanscore.cn/p/26/ 友情提示:本文排版不太好,但內容簡單,請耐心觀看,總會搞懂的。 1. 定點數 對於一個無符號二進制小數,例如101.111,如果我們要用2個字節即16位來存儲它,我
原创 理解內存對齊
原文地址: https://blog.fanscore.cn/p/24/ 相信大家都聽說過內存對齊的概念,不過這裏還是通過一個現象來引出本篇話題。 一、求一個結構體的size 猜下下面這個結構體會佔用多少字節 type S struct {
原创 PHP實現Bitmap的探索 - GMP擴展使用
原文地址:https://blog.fanscore.cn/p/22/ 一、背景 公司當前有一個用戶羣的系統,核心功能是根據不同的條件組去不同的業務線中get符合條件的uid列表,然後存到redis中的bitmap中。 舉個🌰,如果一個用
原创 基於EBNF語法的描述
基於JavaCC的語法描述 使用JavaCC從token序列中識別出"語句" “表達式” “函數調用” 等語法單位的方法。 只要爲JavaCC描述“語句” “表達式” “函數調用” 這樣的語法單位各自是由怎樣的token序列構成的,就能夠對
原创 Golang 筆記 5 go語句
Go語句和通道類型是Go語言的併發編程理念的最終體現。與defer語句相同,go語句也可以攜帶一個表達式語句。Go語句的執行會很快結束,並不會對當前流程的進行造成阻塞或明顯的延遲。一個簡單的示例: go fmt.Println("Go
原创 JavaCC從入門到出門
一、JavaCC JavaCC是java的compiler compiler。JavaCC是LL解析器生成器,可處理的語法範圍比較狹窄,但支持無限長的token超前掃描。 安裝過程: 我是從github上down下來的zip壓縮
原创 Golang 筆記 4 defer、error、panic
一、defer語句 defer語句僅能被放置在函數或方法中。它由關鍵字defer和一個調用表達式組成。這裏的表達式所表示的既不能是對Go語言內建函數的調用也不能是對Go語言標準庫代碼包unsafe中的那些函數的調用。實際上,滿足上述條件
原创 Webpack前端打包工具
一、安裝 安裝Webpack之前需要安裝nodejs,然後用npm安裝: $ npm install webpack -g &nsbp;運行以上命令就將Webpack安裝到了全局環境中。 但是通常我們會將Webpack只安裝到項目的
原创 語法的二義性和token的超前掃描
語法的二義性 JavaCC不能分析所有EBNF描述的語法,因爲EBNF描述的語法本質上具有二義性的情況。C語言中if語句用JavaCC的EBNF可以是如下描述: "if" "(" expr() ")" stmt() ["else" stmt
原创 Golang 微信機器人包
一、 最近用在學習golang,寫了個小工具練練手。通過golang模擬微信網頁端,接收微信服務器的消息並定製。可接入圖靈機器人的api實現一個微信機器人的小玩具,當然了,可以有更多更好玩的玩法。 二、 地址: https
原创 Golang 筆記 2 函數、結構體、接口、指針
一、函數 Go中函數是一等(first-class)類型。我們可以把函數當作值來傳遞和使用。Go中的函數可以返回多個結果。 函數類型字面量由關鍵字func、由圓括號包裹聲明列表、空格以及可以由圓括號包裹的結果聲明列表組成。其中參數聲明
原创 Golang 筆記 3 if、switch、for、select語句
一、if語句 Go的流程控制主要包括條件分支、循環和併發。 if語句一般由if關鍵字、條件表達式和由花括號包裹的代碼塊組成。在Go中,代碼塊必須由花括號包裹。這裏的條件表達式是結果類型爲bool的表達式。例: if number >