programming

Rust语言的异步编程模型和协程支持

本文有 11113 字,大约需要 27 分钟可以读完, 创建于 2019-12-07

通用的注重性能的现代编程语言都在慢慢地加入对异步编程和协程模型的支持,作为一门强调性能和零成本抽象的语言,Rust自然也不甘落人之后。 可能是因为Rust语言社区出于对自身特殊的生存周期管理机制多带来的其它语言所有没有的额外的编译器实现复杂性,以及开放语言生态系统中的功能开发优先级(它迄今为止还在快速演进中)考...

Rust文本处理的性能及优化

本文有 9807 字,大约需要 24 分钟可以读完, 创建于 2019-11-29

作为一门秉承零成本抽象这一极具挑战的目标为语言设计核心的静态变成语言,用Rust语言来编写一些文本处理程序可以不需要可以优化就能达到很高的性能。 但是如果我们对已经写就的文本处理程序的性能不甚满意,觉得不够快或者想将它推向性能更高的境地,即需要进一步优化,可能还不得不额外下一些功夫才能做到。

现代C++的内存模型和高性能的多线程编程

本文有 12812 字,大约需要 32 分钟可以读完, 创建于 2019-11-04

内存模型是现代C++语言标准里面的一个经常不太为人重视的特性;这种忽视大概是由于大部分的程序员关注的还是核心语言特性或者库设施这样的一些比较实用的“硬特性”。 相对而言,内存模型这样的底层的概念和机制看起来更像是给面向程序库编程的底层程序员用的。 然而如果我们想追求极致的应用程序性能,又想追求可移植性、高性能这...

reduce-cpp-template-overhead

本文有 17976 字,大约需要 44 分钟可以读完, 创建于 2019-10-04

新的C++语言标准的演进越来越强调静态编译(即运行期计算)的优势,因为这一发展方向无疑更贴合现代的C++语言Zero Cost Abstraction的目标; 可惜这样做有个非常明显的副作用就是给编译器带来了巨大的挑战,乃至于稍微复杂一点的项目也动辄需要数个小时才能编译完成。

微服务开发:C++语言是否真的不适用?

本文有 6356 字,大约需要 15 分钟可以读完, 创建于 2019-10-01

微服务架构模式是当今炙手可热的企业软件架构范式,经过最近几年的广泛的讨论和优缺点争辩之后已经随着 云原生架构 的逐渐火热而日益呈现星火燎原之势。 抛开这些争论不谈,假设我们需要实现一个微服务架构的服务,是否该用C++语言或者是否能用C++语言呢?

C++20 - 下一个大版本功能确定

本文有 12400 字,大约需要 31 分钟可以读完, 创建于 2019-06-23

C++20的功能特性已经于3月份冻结,显然这次终于来了一波大的改进,而不再是像之前C++14/C++17那般小打小闹的做小步快跑,尤其是三个讨论很久的大feature终于被合入主干;并且这些feature终将会极大地影响后续C++代码的书写方式。

C++正则表达式比Python慢?

本文有 3625 字,大约需要 9 分钟可以读完, 创建于 2019-06-22

C++17 推出已经有将近3年的时间,速度快一些的公司才慢慢采纳了6年前的C++14进入正式的生产环境。 程序员们的一个大福利就是终于不用外挂第三方库(无论是准标准的boost还是其它形形色色的其它第三方库)就可以直接方便地使用标准库自带的<regex>来写代码; 这显然比直接使用原始而笨拙的stri...

读Uncle Bob新书-Clean Archtiecture

本文有 14506 字,大约需要 36 分钟可以读完, 创建于 2019-01-26

不经意发现Bob大叔出版了新书,延续之前的命名风格定名为《Clean Architecture》,英文版已经于2017年底正式上市; 刚好公司的账户可以访问Orielly公司的在线书城,于是就断断续续地读了起来。 Bob大叔讲故事的能力即使在久负盛名的技术作家圈里面也是闪耀出众的,可以算作是高手中的高手,行文由浅...

Rust2018版:生产力提升的开始

本文有 6722 字,大约需要 16 分钟可以读完, 创建于 2019-01-19

不同于传统的工业标准的C++/Java语言缓慢的更新节奏(最近几年大家都加快了演进的节奏),Rust从一开始就采用了滚动发布的模型, 基本上是按照固定的步伐每个六个星期就会放出来一个新版本,并且从正式发布了1.0开始,最近两年来一直是保持向后兼容的。 社区在2018年初的时候,就约定好会在18年发一个大版本出来,...

现代C++语言是否走上了歧路?

本文有 4557 字,大约需要 11 分钟可以读完, 创建于 2018-12-30

C++标准的演进和推出速度过慢一直被内外社区批评,甚至当第一个21世纪的语言标准终于于2011年发布的时候,标准委员会的人都自嘲说我们是一门计算机语言,所以0x需要用十六进制数表示。 进入了第二个十年之后,社区的老学究们终于决定引入时髦的"发布火车"的模型,滚动地推出新的功能,之后新的语言标准总算按照一个大版本一...

用Rust来辅助报表解析

本文有 12573 字,大约需要 31 分钟可以读完, 创建于 2018-12-15

最近遇到一个麻烦而繁琐的操作,需要从工作用的缺陷跟踪系统中导出报表,分析其中的一些数据模式,分类整理后用更好的方式整合出来; 本来这类反复重复的零碎工作,如果不是很复杂,依赖于Excel本身的强大的表格计算功能是很容易自动化的(在线系统比较古老仅仅支持CSV格式导出), 只是内部的字段量比较多,并且有很复杂的相互...

用Rust实现一个高效的REST解析工具

本文有 7076 字,大约需要 17 分钟可以读完, 创建于 2018-09-23

公司里面进来切换到了一个新的Backlog管理工具来管理日常的需求和项目规划,可惜新的工具虽然是名门之秀的JIRA(来自于澳大利亚的IT公司confluence),但是访问起来却异常痛苦, 经常一个页面打开需要等待大半天还是不是崩溃。有些心急的同时已经默默地回到了老的方式,导出数据到Excel然后打开Office...

Spring新版本的响应式编程

本文有 10857 字,大约需要 27 分钟可以读完, 创建于 2018-04-04

流式编程在微服务架构风格越来越流行的背景下日益引起开发者的关注 (前文有一些简单探讨) ,新的Java语言规范加入了流的概念从语言库上添加了对FRP的支持。 Spring最新的5.0版本更新也顺应这一潮流,加入了原生支持FRP的行列。

函数式反应式编程

本文有 14372 字,大约需要 35 分钟可以读完, 创建于 2018-03-10

流式编程或者响应式编程则是一个不断进入我们视线的设计概念;它采用声明式编程范式,并将数据流和数据更新的处理作为程序运算的核心。 由于函数式编程本身即强调声明式编程,这使得用函数式编程的语言或者工具来实现响应式编程更自然清晰, 一般人们将二者的结合称为函数式反应式编程或者FRP。 FRP最早可以追溯到微软和耶鲁的两...

C++17整装待发

本文有 13693 字,大约需要 34 分钟可以读完, 创建于 2017-10-04

9月份对于C++社区而言绝对是个令人振奋的收获季节。

架构服务化的一点思考

本文有 5256 字,大约需要 13 分钟可以读完, 创建于 2017-08-29

微服务是个非常热门的话题,最近几年随着互联网的深入演进和云计算的逐渐普及,几乎所有的公司、技术社区、组织都是言必谈微服务; 似乎没有微服务都不好意思说自己能保持技术能力的与时俱进了。这厢微服务还没有完全在实践中铺开,那边潮头Amazon又挑起了无服务器架构的大旗,引来无数人的关注。 本文试图对这些概念和架构思想做...

用Java Flight Recorder来调优JVM性能

本文有 6486 字,大约需要 16 分钟可以读完, 创建于 2017-08-22

随着Java程序在后端压倒性的普及,其性能本身早已经无人质疑;然而一个经常不为人道的事实是,Java平台上的程序不是天然就具有很高的性能; 因为Java语言显著降低了程序员的准入门槛,真正到系统性能这一块,仍然需要大量的调试和优化,即所谓的JVM性能调优。

TCP服务端socket会丢连接的诡异问题及思考

本文有 4564 字,大约需要 11 分钟可以读完, 创建于 2017-07-14

最近在跟踪项目的性能测试的过程中,发现了一个奇怪的问题:Netty服务器端新建的Channel的数目比Tcpdump抓包得到的经历过三次握手成功的连接数要少: 总有几个连接从抓包来看成功,然后Netty并没有为其分配Channel。直观上来看,似乎是Netty的处理问题值得怀疑,似乎是用于接受新连接的线程池堵塞了。

Excessive null checks in Java Defensive Programming?

本文有 7218 字,大约需要 18 分钟可以读完, 创建于 2017-06-27

最近在参与某开发小组的团体代码审查会的时候,发现组内的一线开发工程师对于何时应该做空指针检查并没有很清晰的认识;然而这在Java社区里早已经是个老生常谈的争论 。

Kotlin语言之变量约束设计

本文有 5309 字,大约需要 13 分钟可以读完, 创建于 2017-06-05

可变状态的泛滥往往被认为是软件维护灾难的元凶之一,尤其是当过程封装遇上多线程,普通的面向对象编程技巧完全不堪大用,因为继承/封装/多态等手法针对的都是程序组织上的处理措施,具体到底层实现上,传统的C/C++/JAVA依然依赖过程式实现跟操作系统打交道。

Kotlin语言之函数式编程

本文有 4884 字,大约需要 12 分钟可以读完, 创建于 2017-06-04

Kotlin语言是大名鼎鼎的JetBrains公司(就是可以甩Eclipse数条大街的IntelliJ IDEA背后的公司)出品的现代的编程语言,之前已经在IDEA中蹦达出来很多次了;只是最近随着Google在其2017年的I/O大会上将其列为Android平台官方支持的语言而窜上了热点。

Java8中的函数式编程

本文有 15553 字,大约需要 38 分钟可以读完, 创建于 2016-10-14

Java8是日益臃肿、略显老态的老牌程序语言对日益流行的新的函数式编程范式的反击; 它采用了巧妙的技术让自己面向对象的古老躯体也套上了函数式编程的舞鞋再度翩翩起舞,焕发新的光彩。

A software design and test guideline for C++ project

本文有 9396 字,大约需要 23 分钟可以读完, 创建于 2016-04-07

To make large scale C++ software project in good shape is not an easy job, especially when you have a pretty big development team that may form multiple sub-...

Faster build optimization for large CMake based project

本文有 10164 字,大约需要 25 分钟可以读完, 创建于 2016-03-03

Building time is always a big concern for large scale C/C++ based software projects, there’ve been a lot of outstanding tools invented to relief the pain, CM...

用C++11/14实现一个现代的异步服务调度库

本文有 7156 字,大约需要 17 分钟可以读完, 创建于 2015-12-19

很多C++项目中都存在一个能够异步调度任务的基础库;大部分这样的库都是用老的C++语言(98/03)写成的,要么模板元语法满天飞外加各种黑魔法导致维护困难, 要么是采用传统的宏方式导致维护困难,布满各种隐患。既然C++11/C++14提供了更好用的武器,我也耐不住手痒自己实现一个。

Rust编程语言初探

本文有 18789 字,大约需要 46 分钟可以读完, 创建于 2015-11-28

静态、强类型而又不带垃圾收集的编程语言领域内,很久没有新加入者参与竞争了,大概大部分开发者认为传统的C/C++的思路已经不太适合新时代的编程需求,即便有Ken Tompson这样的大神参与设计的golang也采用了GC的思路来设计其新一代的语言;一方面垃圾收集技术和即使编译技术一直在发展和完善,另一方面是大量的未...

CppCon2015 and Cpp Core Guidelines

本文有 3004 字,大约需要 7 分钟可以读完, 创建于 2015-10-04

C++社区的第二届编程语言社区活动CppCon2015落下了帷幕;作为C++语言的发明人和灵魂人物, Stroustroup和Herb Sutter一起宣布他们正工作与一个基于现代C++核心语言的编程规范(Core Guidelines)并发布 在GitHub上,并立即引起了轰动。

PyQt学习小笔记

本文有 2625 字,大约需要 6 分钟可以读完, 创建于 2013-02-24

PyQT是知名跨平台框架QT的python绑定;用它来做些小程序既可以利用QT的跨平台性又能利用python强大的表达能力,从而取得事半功倍的效果。下边是使用它开发一个小程序过程中的学习小笔记。

Ruby 学习笔记 6 - 正则表达式

本文有 2126 字,大约需要 5 分钟可以读完, 创建于 2012-03-12

文本处理是Python/Ruby这类脚本语言的重头戏之一,而强大的正则表达式支持对于文本处理来说也是必不可少的。Ruby的设计很多方面沿袭perl,正则表达式方面也不例外。

ruby 学习笔记 5 - class&module&methods

本文有 2442 字,大约需要 6 分钟可以读完, 创建于 2012-03-11

和其它的面向对象语言类似,ruby的类方法也分为_class method_ 和 instance method, module和class具有相当大程度的相似性, 但是用于重用module中定义的方法时( 同样也有 class method 和 instance method 之分 ),又有一些微妙的差异。

ruby学习笔记-4 class&module

本文有 4448 字,大约需要 11 分钟可以读完, 创建于 2012-03-06

Class和Module是Ruby中的两个重要概念。作为一个纯OO语言,class的概念自然容易理解,即为object的抽象;而module则明显有别于其它语言地提供了mixin方法来解决多继承缺失带来的不便 - 集成多个基类的接口并维持IS-A关系以及LSP替换.

Ruby学习笔记-3 Rake

本文有 1648 字,大约需要 4 分钟可以读完, 创建于 2012-02-28

Rake - the make in ruby world

ruby学习笔记-2

本文有 5611 字,大约需要 14 分钟可以读完, 创建于 2012-02-27

blocks&&closure ruby的blocks和closure特性明显有别于其它的语言,其closure本身是__real closure__,所绑定的context是共享的而非copy,其设计思路和_lisp_的相同;blocks本身则可以用于实现closure。二者的关系如下所述 li...

YAML-YAML Ain’t Markup Language

本文有 1660 字,大约需要 4 分钟可以读完, 创建于 2012-02-26

YAML - The language YAML is a markup language that dates back to 2001 by Clark Evants.

hello octopress

本文有 3943 字,大约需要 9 分钟可以读完, 创建于 2012-02-26

Mark down syntax study

ruby学习笔记-1

本文有 2023 字,大约需要 5 分钟可以读完, 创建于 2012-02-19

看得再多也不如自己动手试,最近有闲就打算认真研究一下ruby语言了。Pragmatic programmer中说,需要一年学一门新语言一遍改造思想,去年浅浅的学了javascript的皮毛,今年可以看看ruby这个有lisp之风的OO语言了。

UNIX神器之awk/gawk

本文有 1089 字,大约需要 2 分钟可以读完, 创建于 2011-01-02

AWK及特点