不如D:2)官网主页例子解析

这篇,我们先从进入官网的例子开始见识下D的强大。

此篇不是入门介绍,没有D基础,不要深究里面的实现细节,当开阔眼界即可。

进入D官网,就有一个例子,那个例子加上注释也就17行代码, 真正main函数里就一句代码,但是却完成了:从控制台按行读取,然后正则提取可能是浮点数的数,把其替换为四舍五入后的整数,然后在输出。 继续阅读“不如D:2)官网主页例子解析”

不如D:1)开篇说明

想写个D的系列介绍和用法的想法有很长时间了,但是由于个人比较懒惰,而且写作不及格,一直迟迟没有动手。今天在知乎上又看到rust和kotlin的专栏了,就决定必须动手了。

这两年用D语言,也算入门了,应该不会出现误人子弟的错误,自己写作向来没有条理,也希望能组织出来条理, 继续阅读“不如D:1)开篇说明”

垃圾回收介绍与D语言内存管理

此文是个ppt的分享,主要内容是:

  • GC 算法的基本介绍
  • D语言的GC的介绍
  • D语言内存管理的方法
  • 混合管理字节的经验

相信见ppt:

GC和D语言垃圾回收

PPT 内容顺序:

一、 GC 相关概念与基本算法

先介绍三种基本GC算法: 继续阅读“垃圾回收介绍与D语言内存管理”

[转]一个专家眼中的Go与Java垃圾回收算法大对比

我最近看过一堆宣传 Go 语言的最新垃圾收集器的文章。 其中一些文章来自 Go 项目本身。 他们声称 GC 技术发生了根本性的突破。

以下是 2015 年 8 月新垃圾收集器的公告:

Go 正在构建一个垃圾收集器(GC),不仅是为了了 2015 年,同时也为 2025 以及更远的未来…… stw 停顿不再是使用 Go 语言的障碍。在将来,应用程序随着硬件轻松地扩展,并且跟随硬件一起变得更加强大,GC 不会成为软件可扩展性的绊脚石。

继续阅读“[转]一个专家眼中的Go与Java垃圾回收算法大对比”

D语言中的值类型,引用类型和函数传递方式

D语言和C#,java类似,是一门区分值类型和引用类型的语言。

概念和区分:

(注:没有找到权威的定义,维基百科没有,只有勉强链接到百度百科了)

  • 值类型:百度百科 , 说下个人理解:默认在栈中分配的,传递时默认(自定义赋值函数可以做其他实现)是占用的内存的copy的。
  • 引用类型:百度百科 ,说下个人理解:默认在堆中分配,使用的时候都是其引用,也就是其指针。所谓的赋值也就是引用(指针)更新。

继续阅读“D语言中的值类型,引用类型和函数传递方式”

D语言内存管理杂谈

D是一个系统级语言,但是也是一个GC语言(虽然现在GC在可选化,但是有的语言特性是基于GC的,例如:关联数组,数组连接等等)。D是GC语言,但不是全GC语言,D同时也提供了简单的手动管理内存的方式。所以下面我就分为GC,NoGC的方式来说。

继续阅读“D语言内存管理杂谈”

Qt信号槽的一些事

注:此文是站在Qt5的角度说的,对于Qt4部分是不适用的。

1.先说Qt信号槽的几种连接方式和执行方式。

1)Qt信号槽给出了五种连接方式:

Qt::AutoConnection 0 自动连接:默认的方式。信号发出的线程和糟的对象在一个线程的时候相当于:DirectConnection, 如果是在不同线程,则相当于QueuedConnection
Qt::DirectConnection 1 直接连接:相当于直接调用槽函数,但是当信号发出的线程和槽的对象不再一个线程的时候,则槽函数是在发出的信号中执行的。
Qt::QueuedConnection 2 队列连接:内部通过postEvent实现的。不是实时调用的,槽函数永远在槽函数对象所在的线程中执行。如果信号参数是引用类型,则会另外复制一份的。线程安全的。
Qt::BlockingQueuedConnection 3 阻塞连接:此连接方式只能用于信号发出的线程(一般是先好对象的线程) 和 槽函数的对象不再一个线程中才能用。通过信号量+postEvent实现的。不是实时调用的,槽函数永远在槽函数对象所在的线程中执行。但是发出信号后,当前线程会阻塞,等待槽函数执行完毕后才继续执行。
Qt::UniqueConnection 0x80 防止重复连接。如果当前信号和槽已经连接过了,就不再连接了。

继续阅读“Qt信号槽的一些事”

C/C++取出变量的每一位的值

以前写程序最多也只是字节级别操作,用char和memcpy进行一系列内存操作。此次一个sdk,其状态值直接是每位一个标示,所以需要取出每位进行操作。当然CPP也有丰富的位运算操作,但是虽然也学过,知道意思,但是实际却几乎没用过。这次只能动用它了。

第一种方法:思路就是全部用位与,这样就能取出来每一位是否为1。直接上代码吧,反正看了也就理解了。

    uint j = 1;
    for (uint k = 0;k < sizeof(uint) * 8;(j = j<<1),k++){
        std::cout << "The " << k << " bit is :" << (i&j)  << std::endl;
    }

这是取一个无符号整数的, 继续阅读“C/C++取出变量的每一位的值”