C++20 正式定案!

C++ 在繼 C++17 之後,下一個新的標準 C++20 終於定案了!Heresy 看到的主要是《2020-02 Prague ISO C++ Committee Trip Report — C++20 is Done! 》這篇文章。

在文章中,他列了一些值得注意的 C++ 20 新功能如下:

閱讀更多»

NVIDIA Variable Rate Shading

「Variable Rate Shading」(VRS)這項技術(官網),是 NVIDIA 在推出 Turing GPU 架構時(2018 的事了),針對 VR 的需求推出的一項新功能。

這項技術的基本概念,主要就是透過局部性地降低 rasterization 階段的解析度,來減少 Pixel Shader(Fragment Shader)的計算量,藉此達到加速的目的。

下面就是他的基本流程:

閱讀更多»

C++20 concepts:定義的方式(part 2)

在前一篇《template 型別的需求描述:C++20 concepts(part 1)》,基本上算是簡單介紹了一下 Heresy 知道的 C++20 concepts 的使用概念。

而怎麼制定自己需求的 concept 呢?這邊來稍微整理一下。

首先,C++20 有提供 <concepts> 這個函式庫(參考),提供一些常見的概念,可以來直接使用。而實際上,裡面有很多是使用 C++11 的 <type_traits>(參考)的功能來做的;如果要自行定義 concept 的話,<concepts> 和 <type_traits> 應該都是有幫助的。

Concept 的語法基本上如下:

template<template_parameter_list>
concept concept_name = constraint_expression;

閱讀更多»

template 型別的需求描述:C++20 concepts(part 1)

Template 是 C++ 一個泛型的重要功能。透過 template 可以讓開發者只要寫一次,就可以針對不同的型別的資料,來做處理。

他雖然用起來很方便,但是大部分情況下都缺少對於需求型別的描述,所以如果沒用好寫錯了,就很有可能因為使用了不符合需求的型別,而導致無法正確編譯;而這個時候,編譯器給個錯誤訊息往往也會過於雜亂、讓開發者難以理解、也難以找到真正的問題點。

比如說下面這個簡單的範例程式:

閱讀更多»

Qt 安裝腳本更新

之前有寫了一篇《在 Windows 命令提示字元安裝 Qt SDK》,大概紀錄了一下,在沒有圖形介面的環境下,使用腳本來安裝 Qt SDK 的方法。

腳本在當時是沒問題的,但是沒想到前幾天要用的時候,卻發現又無法使用了…

網路上找了一下資料,發現似乎是在過沒幾天、Qt 把安裝程式更新到 3.1.x 後,又改了一些東西造成的。(拜託顧一下相容性啊…)

找到的資料是 StackOverflow 上的《Bypassing “User Data Collection" screen》這個回應。根據他的說法,這次改版主要是加入了「User Data Collection」的畫面,另外在選擇元件的部分也多了分類的選擇。

也因此,腳本要針對這兩個變化,做出修改:

閱讀更多»

GitLab 的 feature flag 設定

最近 Heresy 還是繼續在玩 GitLab CI/CD 的應用。

之前 GitLab 推出了 DAG 的功能,透過 needs 這個標籤,可以多線同時進行工作,在某些場合算是相當方便的~

不過後來因為 Heresy 試著把工作拆分到很細,所以就採到他的一個問題,那就是 needs 的數量上限了。

在官方文件(連結)中也有提到,目前有針對 needs 中指定的工作數量做限制。下面是原文:

We are temporarily limiting the maximum number of jobs that a single job can need in the needs: array:

  • For GitLab.com, the limit is five. For more information, see our infrastructure issue.
  • For self-managed instances, the limit is:
  • Five by default (ci_dag_limit_needs feature flag is enabled).
  • 50 if the ci_dag_limit_needs feature flag is disabled.

 

閱讀更多»

在 Windows 命令提示字元安裝 Qt SDK

這篇算是《GitLab CI + Windows Docker 的一些紀錄》的延伸。由於 Heresy 這邊的開發專案有用到 Qt SDK(官網),所以在建置用的 Docker 容器裡面,也需要安裝 Qt 的 SDK。

但是由於 Qt 現在的線上安裝程式也都是以圖形介面為主,並在圖形介面中選擇要安裝那些套件;所以要怎麼在沒有圖形介面的 Docker 內安裝,就需要稍微研究一下了。

在找了一些資料後,可以知道 Qt 的安裝程式框架(Qt Installer Framework、QTIFW、官方文件)是有支援使用腳本(script)來做控制的!(官方文件

而在網路上,也可以找到使用這樣的機制,來自動安裝  Qt 的腳本範例。Heresy 這邊是參考《How can I install Qt 5.2.1 from the command line in Cygwin?》的例子。

閱讀更多»

Visual C++ 2017 的 Docker 建置環境

前一篇《GitLab CI + Windows Docker 的一些紀錄》的時候,Heresy 已經大概有說明最近在玩 GitLab CI/CD,並試著拿 Docker 來做 Runner 時、在 Windows 平台上碰到的一些狀況了。

當時本來是想放棄的,不過後來還是繼續玩下去了;而玩了一個多禮拜,也總算是把整個環境初步完成了。

而這篇,就來分享一下,Heresy 這邊建置出 Visual C++ 2017 建置環境的 Docker 映像檔的紀錄。

首先,微軟官方其實針對怎麼建立包含 Visual Studio 的 Docker 映像檔有好幾個地方都有範例(範例一範例二範例三),內容基本上都相當地類似。

Heresy 這邊最後能用的範例,是基於 dotnet-framework:3.5-sdk-windowsservercore-1709 的版本(連結),其內容如下:

閱讀更多»

GitLab CI + Windows Docker 的一些紀錄

Docker(官網)這種比虛擬機器更輕量化的「容器」虛擬化技術,基本上算是這幾年來一個滿重要的技術。透過 Docker,他可以將需要的環境打包、建構出類似虛擬機器,但是更小、更彈性的可移植環境,在需要自動佈署的環境上,應該算是很實用的一種技術。(參考介紹參考介紹

不過由於工作的領域不同,所以 Heresy 其實之前都沒有去碰這一個技術;真的開始接觸到,是之前試著使用 Docker 來架設 GitLab Server 的時候開始的。

後來,Heresy 也很認真地開始搞整個 GitLab CI/CD 的架構,試著透過 GitLab 的系統來做一些程式開發的自動化建置、測試。最初,考慮到環境的熟系程度,Heresy 都是直接使用作業系統的 shell 來作為 gitlab-runner 的 executor。

閱讀更多»

C++11/14 literals:part 2

針對 C++11C++14 的 literals,前面已經寫了 part 1 來針對標準提供的 literals 做了一些說明;而接下來這篇,則是來紀錄一下如何自訂屬於自己的 literals、也就是所謂「User-defined literals」(CppReference)。

在定義 User-defined literals 的時候,能支援的格式是有限制的,包括了:

  • 整數:(unsigned long long int)
  • 浮點數:(long double)
  • 字元:(char)(wchar_t)(char16_t)(char32_t)
  • 字串:(char,size_t)(wchar_t,size_t)(char16_t,size_t)(char32_t,size_t)

如果不是這些型別的話,是不能編譯的。

閱讀更多»