那些脑子转不过来的程序员连 Parser Combinator 都搞不懂,用 JS 写出 JS 的 Parser、写出 C 语言的 Tokenizer 和 Grammar Analyzer 就能称霸一方,你一去他们岂不是集体跪拜?然后你在社区获得了正反馈,积累来的编程语言优化经验给了你大厂的工作机会,公司的网站又快了几倍,被无所事事的同事抢了三分之二的功劳剩下的钱也够你过上学生时代希望的平淡生活了。
"连 Parser Combinator 都搞不懂" 说的是我啊(对号入座付"Tokenizer 和 Grammar Analyzer 是梗,只会这些当然是不可能称霸一方的。" 也是我(跑路
如果我不会 LALR 或者其他词条流匹配算法的话,RegularPP 就写不出来了(
当然,字典树也是一样,RegPP 的替换是基于字节流处理 C 编写的,所以需要 ByteTrie 树来完成 section-based 替换
目前想到一种基于 ArrayMap 的 ByteTrie 树结构和算法
“Perl6 和 Nimlang 可以修改自己的语法。” 如果这次我能写出 ApkBundler Scheme(以后这里都简称 ABS(
那它也可以修改自己的语法了,BreakLexer、Combinator 即是为这种特性计划的,BreakLexer 可以用于扩展词法(自定义部分词法特性、自定义运算符和关键字),Combinator 用于结合运算符(虽然后来还是打算好好学习一下 Parserc,然后就扩展了吧...
ABS 是面向流解释代码的,就是说可以即时执行匹配到的 S 表达式,所以可以随意操作字符流、词条流、S 表达式流来任意切换语言前端
[require 'inscript]
[lang inscript]
# InScript code goes here
lang 'apkbundler-scheme'
; ApkBundler Scheme code goes here
#Haha #backend #PL #java #cpp #recommended
笑哭 🙈 ice1000/algo4j/jni/math/BigInt.cpp#3
笑哭 🙈 ice1000/algo4j/jni/math/BigInt.cpp#3
我的高精度 简洁简洁最简洁 逃课去机房我情不自禁 测试测试 在那垃圾的电脑上测试
月光下我看到测试全通过 有时很快有时很慢 感到一种力量驱使我的手速 有了高精度
负数都不怕 加法减法 乘法除法 乘方取余不压位 为了方便输出 为了方便输出 为了方便输出
GitHub
ice1000/algo4j
:horse_racing: An algorithm library using java native interface - ice1000/algo4j
duangsuse::Echo
https://chortle.ccsu.edu/java5/Notes/chap85/ch85_12.html
#word inline,JIT,fusion(haskell optimization),tco,lazy,unwrap lambda(absal programming language)
两个没听说过
两个没听说过
#c #php #java #recommended http://ice1000.org/2018/09/24/CodeEditor4/
duangsuse 阅读时注意到的事情(本文第一次,作为编辑器后端架构基本蒙蔽)
0. 我又看到了 gap buffer
1. freenode #lisp 有 dalao
2. Oracle 开发 JavaX 的程序员很有文化
3. VSCode 前端程序员们有不考虑字面 literal 包含 EOL 的 Token “优化” 的黑历史
4. 他们曾经也没考虑当前编辑行
5. VS 很厉害,会缓存每行代码渲染后生成的纹理 buffer
我也想试用下 FreeType 来着
可惜后来没时间了 2333
我曾经修改的一个 Rust badge 生成器,现在还在 docs.rs 上,用了 FreeType 的一个 Rust 绑定,当初看不懂 算
6. 冰冰现在也做数据结构 & 算法可视化动画了 LineSpan 的数据结构可视化
7. 太长不看 TLDR
8. 所谓太长不看的大多是 文本序列数据结构的通用性质
讲的还挺好的
+ 一个 item 指文本序列的最小单位,通常是
+ 一个 item 序列如果同时是 sequence 和 buffer 那么它是一个 span like
8.5. PHP 也是,如上文,Java 当然也是
9. 菜鸡 duangsuse 也是正式入坑 CS 足足一年半后才知道啥是位长度啥是进制的,烫烫烫烫烫烫烫烫烫烫...
10. code 现在使用 Piece Table 来作为存储后端数据结构实现
11. 简单数据库操作 CRUD 简单序列操作 QID
duangsuse 阅读时注意到的事情(本文第一次,作为编辑器后端架构基本蒙蔽)
0. 我又看到了 gap buffer
1. freenode #lisp 有 dalao
2. Oracle 开发 JavaX 的程序员很有文化
3. VSCode 前端程序员们有不考虑字面 literal 包含 EOL 的 Token “优化” 的黑历史
4. 他们曾经也没考虑当前编辑行
5. VS 很厉害,会缓存每行代码渲染后生成的纹理 buffer
我也想试用下 FreeType 来着
可惜后来没时间了 2333
我曾经修改的一个 Rust badge 生成器,现在还在 docs.rs 上,用了 FreeType 的一个 Rust 绑定,当初看不懂 算
6. 冰冰现在也做数据结构 & 算法可视化动画了 LineSpan 的数据结构可视化
7. 太长不看 TLDR
8. 所谓太长不看的大多是 文本序列数据结构的通用性质
讲的还挺好的
+ 一个 item 指文本序列的最小单位,通常是
char 或者 wchar_t
+ 一个 sequence 指一系列以各种方式组合并在逻辑上是连续的 item ,即刚才提到的抽象结构,比如 LinkedList<Character>, std::list<char>
+ 一个 buffer 指一段在物理上连续的 item std::vector<char>::data, java.util.ArrayList<Character>, mmap() 映射的+ 一个 item 序列如果同时是 sequence 和 buffer 那么它是一个 span like
java.lang.String, std::string
+ Ruby/Lua/JavaScript/Dart/Perl 等语言中的 string 是 span8.5. PHP 也是,如上文,Java 当然也是
// 可以认为 PHP 里 string 是这样的这里
struct php_string {
php_refcount rc;
unsigned long hash;
size_t length;
char buffer[1]; // 多出来的一字符用于存储 CString 的 EOS '\00'
};
struct php_string 是一个 item 为 char 的 (sequence 兼 buffer)a.k.a. span,因为它在物理上也是连续的9. 菜鸡 duangsuse 也是正式入坑 CS 足足一年半后才知道啥是位长度啥是进制的,烫烫烫烫烫烫烫烫烫烫...
10. code 现在使用 Piece Table 来作为存储后端数据结构实现
11. 简单数据库操作 CRUD 简单序列操作 QID
Bilibili
LineSpan 数据结构可视化_哔哩哔哩 (゜-゜)つロ 干杯~-bilibili
一个简单的数据结构可视化。是以 GapBuffer 作为 active line 的 LineSpan 。
Forwarded from 羽毛的小白板
一篇简单的 C# LINQ to Monads 文章 #好文分享
C# 函数式编程:LINQ - 不如隐茶去 - 博客园
https://www.cnblogs.com/JacZhu/p/9729587.html
C# 函数式编程:LINQ - 不如隐茶去 - 博客园
https://www.cnblogs.com/JacZhu/p/9729587.html
module A+B where
open import Data.List
open import Data.Nat
open import Agda.Builtin.Equality
a+0=0+a : ∀ a → a + 0 ≡ a
a+0=0+a zero = refl
a+0=0+a (suc a) rewrite a+0=0+a a = refl
++a+b=a+b++ : ∀ a b → suc a + b ≡ a + suc b
++a+b=a+b++ zero b = refl
++a+b=a+b++ (suc a) b rewrite ++a+b=a+b++ a b = refl
a+b=b+a : ∀ a b → a + b ≡ b + a
a+b=b+a zero zero = refl
a+b=b+a zero b
rewrite a+0=0+a b
= refl
a+b=b+a (suc a) b
rewrite a+b=b+a a b
| ++a+b=a+b++ b a
= refl
来源请求 A + B = B + A (加法交换律)证明
open import Data.List
open import Data.Nat
open import Agda.Builtin.Equality
a+0=0+a : ∀ a → a + 0 ≡ a
a+0=0+a zero = refl
a+0=0+a (suc a) rewrite a+0=0+a a = refl
++a+b=a+b++ : ∀ a b → suc a + b ≡ a + suc b
++a+b=a+b++ zero b = refl
++a+b=a+b++ (suc a) b rewrite ++a+b=a+b++ a b = refl
a+b=b+a : ∀ a b → a + b ≡ b + a
a+b=b+a zero zero = refl
a+b=b+a zero b
rewrite a+0=0+a b
= refl
a+b=b+a (suc a) b
rewrite a+b=b+a a b
| ++a+b=a+b++ b a
= refl
来源请求 A + B = B + A (加法交换律)证明
module EscapeTheMines where
import Control.Applicative
type XY = (Int, Int)
data Move = U | D | R | L deriving (Eq, Show)
dfs :: [[Bool]] -> [XY] -> XY -> XY -> Maybe [Move]
dfs m v s e
|s == e = Just []
|x < 0 || y < 0 = Nothing
|x >= len m = Nothing
|y >= len (m !! x) = Nothing
|elem s v = Nothing
|not $ m !! x !! y = Nothing
|otherwise = (R:) <$> f (x + 1, y)
<|> (D:) <$> f (x, y + 1)
<|> (L:) <$> f (x - 1, y)
<|> (U:) <$> f (x, y - 1)
where (x, y) = s
len = length
f a = dfs m (s : v) a e
--
solve :: [[Bool]] -> XY -> XY -> [Move]
solve a b c = case dfs a [] b c of Just res -> res
来源请求 函数式 DFS(深度优先搜索)
import Control.Applicative
type XY = (Int, Int)
data Move = U | D | R | L deriving (Eq, Show)
dfs :: [[Bool]] -> [XY] -> XY -> XY -> Maybe [Move]
dfs m v s e
|s == e = Just []
|x < 0 || y < 0 = Nothing
|x >= len m = Nothing
|y >= len (m !! x) = Nothing
|elem s v = Nothing
|not $ m !! x !! y = Nothing
|otherwise = (R:) <$> f (x + 1, y)
<|> (D:) <$> f (x, y + 1)
<|> (L:) <$> f (x - 1, y)
<|> (U:) <$> f (x, y - 1)
where (x, y) = s
len = length
f a = dfs m (s : v) a e
--
solve :: [[Bool]] -> XY -> XY -> [Move]
solve a b c = case dfs a [] b c of Just res -> res
来源请求 函数式 DFS(深度优先搜索)
operator fun <A, B, C> ((B) -> A).plus(p: (C) -> B) = { it: C -> this(p(it)) }
fun main(args: Array<String>) {
val a: (Int) -> String = { it.toString() }
val b: (String) -> ByteArray = { it.toByteArray() }
println((b + a)(233))
val c: (ByteArray) -> List<Int> = { it.map { it.toInt() } }
println((c + b + a)(666)) // Haskell: c . b . a $ 666
}
来源请求 Kotlin Function Composition Kotlin 函数合成
fun main(args: Array<String>) {
val a: (Int) -> String = { it.toString() }
val b: (String) -> ByteArray = { it.toByteArray() }
println((b + a)(233))
val c: (ByteArray) -> List<Int> = { it.map { it.toInt() } }
println((c + b + a)(666)) // Haskell: c . b . a $ 666
}
来源请求 Kotlin Function Composition Kotlin 函数合成
WebPack Gradle http://ice1000.org/gist/posgen-gradle/
知乎 Haskell 蜘蛛 http://ice1000.org/gist/rina-spider-zhihu-stu/
C++ Vector http://ice1000.org/gist/vector/
Agda 类型安全 printf http://ice1000.org/gist/safe-printf-agda/
#recommended #backend #blog #lisp(希望大量转载不会引发版权问题 😶
知乎 Haskell 蜘蛛 http://ice1000.org/gist/rina-spider-zhihu-stu/
C++ Vector http://ice1000.org/gist/vector/
Agda 类型安全 printf http://ice1000.org/gist/safe-printf-agda/
#recommended #backend #blog #lisp(希望大量转载不会引发版权问题 😶