精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

Djinn:一個受 Jinja2 啟發的代碼生成器和模板語言

開發 開發工具
我決定制作一個類似于 Jinja2 的工具,但讓我可以通過使用范圍算法轉換數據來生成復雜的文件。這個想法非常簡單:一個直接用 D 語言代碼重寫的模板語言。因為它 就是 D 語言,它可以支持 D 語言所能做的一切。

代碼生成器是非常有用的工具。我有時使用 jinja2 的命令行版本來生成高度冗余的配置文件和其他文本文件,但它在轉換數據方面功能有限。顯然,Jinja2 的作者有不同的想法,而我想要類似于 列表推導list comprehensions 或 D 語言的 可組合范圍composable range 算法之類的東西。

我決定制作一個類似于 Jinja2 的工具,但讓我可以通過使用范圍算法轉換數據來生成復雜的文件。這個想法非常簡單:一個直接用 D 語言代碼重寫的模板語言。因為它 就是 D 語言,它可以支持 D 語言所能做的一切。我想要一個獨立的代碼生成器,但是由于 D 語言的 mixin 特性,同樣的模板語言可以作為嵌入式模板語言工作(例如,Web 應用程序中的 HTML)。有關該技巧的更多信息,請參閱 ??這篇?? 關于在編譯時使用 mixins 將 Brainfuck 轉換為 D 和機器代碼的文章。

像往常一樣,??源碼在 GitLab 上???。??這篇文章中的例子也可以在這里找到??。

Hello world 示例

這是一個演示這個想法的例子:

Hello [= retro("dlrow") ]!
[: enum one = 1; :]
1 + 1 = [= one + one ]

??[= some_expression ]??? 類似于 Jinja2 中的 ??{{ some_expression }}???,它在輸出中呈現一個值。??[: some_statement; :]??? 類似于 ??{% some_statement %}??? ,用于執行完整的代碼語句。我更改了語法,因為 D 也大量使用花括號,并且將兩者混合使模板難以閱讀(還有一些特殊的非 D 指令,比如 ??include???,它們被包裹在 ??[<??? 和 ??>]?? 中)。

如果你將上面的內容保存到一個名為 ??hello.txt.dj??? 的文件中并運行 ??djinn??? 命令行工具,你會得到一個名為 ??hello.txt?? 的文件,其中包含你可能猜到的內容:

Hello world!
1 + 1 = 2

如果你使用過 Jinja2,你可能想知道第二行發生了什么。Djinn 有一個簡化格式化和空格處理的特殊規則:如果源代碼行包含 ??[:??? 語句或 ??[<?? 指令但不包含任何非空格輸出,則整行都會被忽略輸出。空行則仍會原樣呈現。

生成數據

好的,現在來講一些更實用的東西:生成 CSV 數據。

x,f(x)
[: import std.mathspecial;
foreach (x; iota(-1.0, 1.0, 0.1)) :]
[= "%0.1f,%g", x, normalDistribution(x) ]

一個 ??[=??? 和 ??]??? 對可以包含多個用逗號分隔的表達式。如果第一個表達式是一個由雙引號包裹的字符串,則會被解釋為 ??格式化字符串??。下面是輸出結果:

x,f(x)
-1.0,0.158655
-0.9,0.18406
-0.8,0.211855
-0.7,0.241964
-0.6,0.274253
-0.5,0.308538
-0.4,0.344578
-0.3,0.382089
-0.2,0.42074
-0.1,0.460172
0.0,0.5
0.1,0.539828
0.2,0.57926
0.3,0.617911
0.4,0.655422
0.5,0.691462
0.6,0.725747
0.7,0.758036
0.8,0.788145
0.9,0.81594

制作圖片

這個例子展示了一個圖片的生成過程。??經典的 Netpbm 圖像庫定義了一堆圖像格式??,其中一些是基于文本的。例如,這是一個 3 x 3 向量的圖像:

P2 # PGM 格式標識
3 3 # 寬和高
7 # 代表純白色的值(0 代表黑色)
7 0 7
0 0 0
7 0 7

你可以將上述文本保存到名為 ??cross.pgm??? 之類的文件中,很多圖像工具都知道如何解析它。下面是一些 Djinn 代碼,它以相同的格式生成 ??Mandelbrot 集?? 分形:

[:
import std.complex;
enum W = 640;
enum H = 480;
enum kMaxIter = 20;
ubyte mb(uint x, uint y)
{
const c = complex(3.0 * (x - W / 1.5) / W, 2.0 * (y - H / 2.0) / H);
auto z = complex(0.0);
ubyte ret = kMaxIter;
while (abs(z) <= 2 && --ret) z = z * z + c;
return ret;
}
:]
P2
[= W ] [= H ]
[= kMaxIter ]
[: foreach (y; 0..H) :]
[= "%(%s %)", iota(W).map!(x => mb(x, y)) ]

生成的文件大約為 800 kB,但它可以很好地被壓縮為 PNG:

$ # 使用 GraphicsMagick 進行轉換
$ gm convert mandelbrot.pgm mandelbrot.png

結果如下:

解決謎題

這里有一個謎題:

一個 5 行 5 列的網格需要用 1 到 5 的數字填充,每個數字在每一行中限使用一次,在每列中限使用一次(即,制作一個 5 行 5 列的拉丁方格Latin square)。相鄰單元格中的數字還必須滿足所有 ??>?? 大于號表示的不等式。

??幾個月前我使用了 線性規劃linear programming(LP)??。線性規劃問題是具有線性約束的連續變量系統。這次我將使用混合整數線性規劃mixed integer linear programming(MILP),它通過允許整數約束變量來歸納 LP。事實證明,這足以成為 NP 完備的,而 MILP 恰好可以很好地模擬這個謎題。

在上一篇文章中,我使用 Julia 庫 JuMP 來幫助解決這個問題。這次我將使用 ??CPLEX:基于文本的格式??,它受到多個 LP 和 MILP 求解器的支持(如果需要,可以通過現成的工具輕松轉換為其他格式)。這是上一篇文章中 CPLEX 格式的 LP:

Minimize
obj: v
Subject To
ptotal: pr + pp + ps = 1
rock: 4 ps - 5 pp - v <= 0
paper: 5 pr - 8 ps - v <= 0
scissors: 8 pp - 4 pr - v <= 0
Bounds
0 <= pr <= 1
0 <= pp <= 1
0 <= ps <= 1
End

CPLEX 格式易于閱讀,但復雜度高的問題需要大量變量和約束來建模,這使得手工編碼既痛苦又容易出錯。有一些特定領域的語言,例如 ??ZIMPL??,用于以高級方式描述 MILP 和 LP。對于許多問題來說,它們非常酷,但最終它們不如具有良好庫(如 JuMP)支持的通用語言或使用 D 語言的代碼生成器那樣富有表現力。

我將使用兩組變量來模擬這個謎題:??v_{r,c}??? 和 ??i_{r,c,v}???。??v_{r,c}??? 將保存 r 行 c 列單元格的值(從 1 到 5)。??i_{r,c,v}?? 是一個二進制指示器,如果 r 行 c 列的單元格的值是 v,則該指示器值為 1,否則為0。這兩組變量是網格的冗余表示,但第一種表示更容易對不等式約束進行建模,而第二種表示更容易對唯一性約束進行建模。我只需要添加一些額外的約束來強制這兩個表示是一致的。但首先,讓我們從每個單元格必須只有一個值的基本約束開始。從數學上講,這意味著給定行和列的所有指示器都必須為

0,但只有一個值為 1 的例外。這可以通過以下等式強制約束:

[i_{r,c,1} + i_{r,c,2} + i_{r,c,3} + i_{r,c,4} + i_{r,c,5} = 1]

可以使用以下 Djinn 代碼生成對所有行和列的 CPLEX 約束:

\ 單元格只有一個值
[:
foreach (r; iota(N))
foreach (c; iota(N))
:]
[= "%-(%s + %)", vs.map!(v => ivar(r, c, v)) ] = 1
[::]

??ivar()??? 是一個輔助函數,它為我們提供變量名為 ??i??? 的字符串標識符,而 ??vs??? 存儲從 1 到 5 的數字以方便使用。行和列內唯一性的約束完全相同,但在 ??i?? 的其他兩個維度上迭代。

為了使變量組 ??i??? 與變量組 ??v??? 保持一致,我們需要如下約束(請記住,變量組 ??i?? 中只有一個元素的值是非零的):

[i_{r,c,1} + 2i_{r,c,2} + 3i_{r,c,3} + 4i_{r,c,4} + 5i_{r,c,5} = v_{r,c}]

CPLEX 要求所有變量都位于左側,因此 Djinn 代碼如下所示:

\ 連接變量組 i 和變量組 v
[:
foreach (r; iota(N))
foreach (c; iota(N))
:]
[= "%-(%s + %)", vs.map!(v => text(v, ' ', ivar(r, c, v))) ] - [= vvar(r,c) ] = 0
[::]

不等符號相鄰的和左下角值為為 4 單元格的約束寫起來都很簡單。剩下的便是將指示器變量聲明為二進制,并為變量組 ??v??? 設置邊界。加上變量的邊界,總共有 150 個變量和 111 個約束 ??你可以在倉庫中看到完整的代碼??。

GNU 線性規劃工具集 有一個命令行工具可以解決這個 CPLEX MILP。不幸的是,它的輸出是一個包含了所有內容的體積很大的轉儲,所以我使用 awk 命令來提取需要的內容:

$ time glpsol --lp inequality.lp -o /dev/stdout | awk '/v[0-9][0-9]/ { print $2, $4 }' | sort
v00 1
v01 3
v02 2
v03 5
v04 4
v10 2
v11 5
v12 4
v13 1
v14 3
v20 3
v21 1
v22 5
v23 4
v24 2
v30 5
v31 4
v32 3
v33 2
v34 1
v40 4
v41 2
v42 1
v43 3
v44 5
real 0m0.114s
user 0m0.106s
sys 0m0.005s

這是在原始網格中寫出的解決方案:

這些例子只是用來玩的,但我相信你已經明白了。順便說一下,Djinn 代碼倉庫的 ??README.md?? 文件本身是使用 Djinn 模板生成的。

正如我所說,Djinn 也可以用作嵌入在 D 語言代碼中的編譯期模板語言。我最初只是想要一個代碼生成器,得益于 D 語言的元編程功能,這算是一個額外獲得的功能。

責任編輯:龐桂玉 來源: Linux中國
相關推薦

2017-03-20 17:49:21

Java Web模板代碼

2023-08-04 09:00:00

人工智能GPT-4語言模型

2019-01-24 09:46:38

PelicanPython生成器

2012-03-30 09:31:44

WEBCSS

2024-04-07 00:00:01

TypeScript語言REST

2024-06-12 13:40:58

2018-11-19 10:10:51

Python數據庫隨機生成器

2009-07-03 09:29:24

KeelKit

2020-09-08 11:21:48

SQL生成器跨庫

2022-05-19 14:57:30

CSS代碼工具

2015-08-25 15:54:17

程序員代碼生成器

2021-07-23 11:24:54

Create Inc開源G代碼生成器

2022-07-25 10:27:36

背景生成器工具前端

2023-02-07 16:11:41

2023-05-17 16:02:00

CSS工具代碼生成器

2022-03-10 10:48:30

PolyCoder自動代碼生成器語言

2024-08-19 00:00:00

表單生成器開發開源

2025-01-08 08:00:20

2015-09-10 08:45:39

CSS3生成器

2020-10-20 09:53:11

代碼IDEA生成器
點贊
收藏

51CTO技術棧公眾號

韩日毛片在线观看| 精品人妻一区二区三区蜜桃| 亚洲精华一区二区三区| 欧美性猛交xxx| 茄子视频成人在线观看| 一级特黄aaa大片| 中文字幕午夜精品一区二区三区| 日韩一区二区三区在线观看| 国产色一区二区三区| 欧美成人综合在线| 久久99精品久久久| 久久久久国产精品一区| 97人妻天天摸天天爽天天| 亚洲第一会所001| 成人免费在线视频| 国产综合动作在线观看| 波多野结衣高清视频| 围产精品久久久久久久| 亚洲国产婷婷香蕉久久久久久| 免费日韩中文字幕| 18av在线播放| 久久欧美中文字幕| 国产精品亚洲一区二区三区| 超碰人人人人人人人| 日韩精品一页| 欧美日韩国产丝袜美女| 在线精品亚洲一区二区| 天天操天天舔天天干| 奇米色一区二区| 久久噜噜噜精品国产亚洲综合| 精品人妻一区二区三区蜜桃视频| 日本一区影院| 欧亚一区二区三区| 狠狠干 狠狠操| 国产视频中文字幕在线观看| 97超碰欧美中文字幕| 成人免费午夜电影| 久久久黄色大片| 欧美一区影院| 中文在线资源观看视频网站免费不卡| 精品伦一区二区三区| 成人精品国产| 精品国产福利在线| 台湾无码一区二区| 黄色网址在线免费观看| 中文字幕精品一区二区精品绿巨人 | 人人做人人澡人人爽欧美| 成人免费毛片东京热| 不卡中文字幕| 日韩经典一区二区三区| 精品国产一二区| 粉嫩av一区二区三区四区五区 | 久久久成人网| 97高清免费视频| 免费一级黄色大片| 天天做天天爱天天综合网| 国产亚洲xxx| 五月婷婷综合在线观看| 精品亚洲自拍| 欧美岛国在线观看| 小早川怜子一区二区三区| 78精品国产综合久久香蕉| 亚欧色一区w666天堂| 日本人妻伦在线中文字幕| 美女黄视频在线观看| 国产欧美精品在线观看| 欧美亚洲精品日韩| 日本护士...精品国| 波多野结衣在线一区| 超碰在线观看97| 99久久精品免费看国产交换| 极品少妇xxxx精品少妇偷拍| 国产精品视频免费观看www| www.国产毛片| 日韩高清不卡一区| 国产精品久久久久91| 久久亚洲精品石原莉奈| 另类图片国产| 国产成人亚洲综合91精品| 黄色在线免费观看| 老**午夜毛片一区二区三区| 国产99久久精品一区二区| 亚洲天堂男人av| 日韩电影在线观看电影| 国产欧美日韩精品在线观看| 中文天堂在线视频| 久久福利视频一区二区| 91免费国产视频| 精品国产亚洲av麻豆| 丁香啪啪综合成人亚洲小说| 国产精品久久久久久久久久久久午夜片 | 潘金莲激情呻吟欲求不满视频| 日韩三区四区| 日韩天堂在线观看| 亚洲啪av永久无码精品放毛片| 美国一区二区| 亚洲香蕉av在线一区二区三区| 一级肉体全黄裸片| 久久久久久久久久久9不雅视频 | 中文字幕国产专区| 成人在线免费观看91| 久久精品国产免费观看| 久久这里只有精品免费| 国产精品日韩欧美一区| 国产精品扒开腿做爽爽爽男男| 中文字幕在线观看欧美| 国产激情精品久久久第一区二区 | 久久1电影院| 亚洲女人天堂色在线7777| 日本性高潮视频| 综合精品久久| 欧美一区深夜视频| 97在线公开视频| 成人福利在线看| 日韩精品一区二区三区色偷偷| 欧美被日视频| 亚洲二区视频在线| 五月婷婷六月合| 红杏成人性视频免费看| 综合网日日天干夜夜久久| 精品无码久久久久久久| 蜜臀99久久精品久久久久久软件 | 欧美综合自拍| 深夜福利一区二区| av图片在线观看| 国产伦精品一区二区三区免费迷 | 豆国产97在线 | 亚洲| 日精品一区二区| 国产精品10p综合二区| av在线电影观看| 亚洲福利一二三区| 伊人国产精品视频| 国产日产精品一区二区三区四区的观看方式 | 国产精品综合| 亚洲va欧美va国产综合久久| 免费av在线电影| 亚洲国产精品自拍| 亚洲色图偷拍视频| 国内黄色精品| 97av在线视频免费播放| av资源免费看| 1区2区3区国产精品| 久久久久久香蕉| 日本一道高清一区二区三区| 欧美高清视频在线播放| 夜夜骚av一区二区三区| 久久精品亚洲麻豆av一区二区| 女人被男人躁得好爽免费视频| 日日狠狠久久| 亚洲一级免费视频| 在线天堂中文字幕| 成人动漫一区二区| 亚洲爆乳无码精品aaa片蜜桃| 欧美性生活一级| 亚洲午夜av电影| 欧美激情黑白配| 99精品久久久久久| 精品国产免费av| 乱亲女h秽乱长久久久| 97热精品视频官网| 五十路在线视频| 午夜视频在线观看一区| 手机在线成人av| 亚洲精品少妇| 精品综合久久| 色一区二区三区| 亚洲精品中文字| 国产中文字幕视频| 久久噜噜亚洲综合| 日本久久精品一区二区| 精品国产乱码久久久久久1区2匹| 日韩免费精品视频| 国产视频网站在线| 欧美午夜一区二区| 亚洲综合久久av一区二区三区| 麻豆一区二区在线| 一区二区三区四区欧美日韩| 亚洲精品成a人ⅴ香蕉片| 日韩在线一区二区三区免费视频| 亚洲一区在线观| 国产精品不卡视频| 日本少妇一级片| 亚洲精品婷婷| 奇米精品在线| 日韩成人在线一区| 欧美情侣性视频| 风流少妇一区二区三区91| 欧美日韩国产色视频| 性欧美精品中出| 久久国产夜色精品鲁鲁99| 女女百合国产免费网站| 最新国产一区二区| 欧美一区二区三区免费观看| www日韩tube| 91精品国产综合久久精品麻豆| 欧美精品久久久久性色| 91亚洲永久精品| 美女网站色免费| 欧美va亚洲va日韩∨a综合色| 国产精品美女黄网| 日韩中文影院| 久久影院中文字幕| 天天舔天天干天天操| 欧美视频在线一区| 久久婷婷一区二区| 久久蜜桃香蕉精品一区二区三区| 国产精品视频中文字幕| 欧美日韩午夜| 日本在线高清视频一区| 日韩中文字幕无砖| 秋霞av国产精品一区| 美女黄视频在线观看| 日韩国产高清视频在线| 国产又大又黄的视频| 午夜欧美大尺度福利影院在线看| 国产精品美女高潮无套| 成人综合在线视频| 中文字幕第100页| 亚洲国产高清一区| 一区二区不卡在线视频 午夜欧美不卡' | 自拍自偷一区二区三区| 亚洲一区二区日本| 春暖花开亚洲一区二区三区| 欧美成人性色生活仑片| 高清美女视频一区| 日韩电影免费观看在线观看| 97超碰国产在线| 欧美日韩国产一中文字不卡| 91香蕉一区二区三区在线观看| 本田岬高潮一区二区三区| 亚洲欧美天堂在线| 日本少妇一区二区| 人妻有码中文字幕| 亚洲一级影院| 夜夜爽www精品| 少妇久久久久| 99三级在线| 成人精品一区二区三区电影| 97免费视频在线| 中文字幕有码在线视频| 最新国产精品拍自在线播放| 日韩私人影院| 精品久久久久99| 99国产在线播放| 欧美日韩视频一区二区| 天天干在线播放| 亚洲一区二区三区四区五区中文| 任我爽在线视频| 国产婷婷一区二区| 亚洲精品视频大全| 97国产一区二区| 午夜视频在线观看国产| 国产成人av一区| 免费看的av网站| 韩国视频一区二区| 天天干天天av| 另类调教123区| www.com操| 蜜臀av性久久久久蜜臀aⅴ四虎 | 中文字幕有码av| 久久最新视频| 欧美少妇性生活视频| 久久不射中文字幕| 国产a级一级片| 99视频一区| 天天夜碰日日摸日日澡性色av| 亚洲精品视频啊美女在线直播| 人人干视频在线| 在线亚洲精品| 哪个网站能看毛片| 日韩vs国产vs欧美| 免费一区二区三区在线观看| 蓝色福利精品导航| caoporm在线视频| 国产美女一区二区| 潘金莲一级淫片aaaaaaa| 国产一区二区三区香蕉| 风韵丰满熟妇啪啪区老熟熟女| 国产成人日日夜夜| 亚洲综合自拍网| ww亚洲ww在线观看国产| 精品人伦一区二区| 中文字幕一区二区在线播放| 中文字幕人妻一区二| 一区二区国产盗摄色噜噜| 免费网站观看www在线观| 偷拍日韩校园综合在线| 中文字幕精品无码一区二区| 欧美伊人精品成人久久综合97 | 夜夜嗨av一区二区三区网页| 日韩乱码人妻无码中文字幕| 粉嫩av一区二区三区免费野| 亚洲综合成人av| 欧美精品vⅰdeose4hd| 亚洲a视频在线观看| 亚洲精品自产拍| 亚洲麻豆精品| 久久久成人精品| 成人影音在线| 国产精品成人一区二区| 国产va免费精品观看精品| 国产精品香蕉视屏| 欧美日韩国产在线观看网站| a级黄色片网站| 国产精品二区影院| 成人黄色一区二区| 国产成人综合自拍| 青青草福利视频| 亚洲天堂a在线| 中文字幕激情小说| 91精品国产色综合久久不卡电影| 亚洲免费不卡视频| 伊人久久综合97精品| 色爱综合区网| 国产精品视频一区二区三区四 | 在线免费黄色网| 99精品视频一区二区三区| 国产福利视频网站| 色婷婷av一区二区三区gif| 国产乱码久久久久| 亚洲欧美日韩网| 视频在线这里都是精品| 国产精品电影一区| 女同一区二区三区| 国产精品啪啪啪视频| 免费av成人在线| 真人bbbbbbbbb毛片| 一区二区三区色| 在线观看日批视频| 亚洲欧美日韩综合| 91制片在线观看| 99电影在线观看| 91综合网人人| 好男人www社区| 91丨porny丨户外露出| 国产一级二级三级| 欧美一区二区三区播放老司机| 国产资源在线看| 国语自产精品视频在免费| 国产精品欧美一区二区三区不卡| 日本亚洲欧洲精品| 国产精品久久久久毛片大屁完整版| 超碰在线超碰在线| 国产精品久久久久久久久晋中| 国产精品久久久久久久久久久久久久久久久 | 丁香综合av| 男人天堂成人网| 另类小说一区二区三区| 日韩视频在线观看免费视频| 欧美视频13p| 天天操天天操天天干| 欧美大片在线看| 国产高清亚洲| 日韩第一页在线观看| 久久99精品一区二区三区| xxxxx99| 91久久精品午夜一区二区| 免费资源在线观看| 欧洲精品在线视频| 亚洲黄页网站| 日韩精品视频久久| 久久免费视频一区| 亚洲黄网在线观看| 亚洲视频在线观看视频| 免费亚洲电影| 日本亚洲欧洲精品| 奇米在线7777在线精品| 亚洲不卡的av| 欧美日韩久久一区| 看女生喷水的网站在线观看| 成人av电影天堂| 一区二区三区网站| 深夜视频在线观看| 天涯成人国产亚洲精品一区av| 四虎影视在线播放| 国产精品久久激情| 午夜影院欧美| 成人一区二区三区仙踪林| 亚洲国产精品一区二区www| 色香蕉在线视频| 日本久久久久久久久| 精品理论电影在线| 中文字幕精品一区二区三区在线| 中文字幕欧美一区| jlzzjlzzjlzz亚洲人| 久久久久久久999| 三级精品视频| 黄色一级大片在线观看| 中文字幕一区二区三区在线播放| 国产精品-色哟哟| 欧美放荡办公室videos4k| 精品欧美午夜寂寞影院| 日本xxxxxxx免费视频| 亚洲天堂精品视频| 你懂的网站在线| 国产成人福利视频| 国产精品videosex性欧美| 亚洲麻豆一区二区三区| 91福利在线观看| www.久久ai|