- 博客(78)
- 收藏
- 关注
原创 C++教程之函数(二)
在C++中,我们可以使用inline关键字来定义内联函数。内联函数的定义通常放在头文件中,以便在多个源文件中使用。a : b;在上面的例子中,max函数是一个内联函数,它的定义前面有inline关键字。当我们在程序中调用max函数时,编译器会将其直接嵌入到调用它的代码中,从而避免了函数调用的开销。在C++11中,我们可以使用constexpr关键字来定义constexpr函数。在上面的例子中,factorial函数是一个constexpr函数,它的定义前面有constexpr关键字。
2023-04-02 23:56:11 419 1
原创 C++教程之函数(一)
在 C++ 中,函数的定义和调用都非常简单。// 定义一个名为 add 的函数,它有两个参数 x 和 y,返回值为 x + y// 调用 add 函数,并将返回值赋值给变量 zreturn 0;在这个示例中,我们定义了一个名为 add 的函数,它有两个参数 x 和 y,返回值为 x + y。然后在 main 函数中,我们调用了 add 函数,并将返回值赋值给变量 z,最后输出了 1 + 2 = 3。
2023-03-28 23:13:12 2484
原创 Aptos DAPP之智能合约编写
package]我们可以看到包信息和一个AptosFramework的依赖,其中的name属性就是我们使用–name指定的属性,其中的AptosFrame依赖指向github仓库main分支aptos-core/aptos-move/framework/aptos-framework。这篇文章主要讲述了DAPP中智能合约的编写,更多文章可以关注公众号QStack。
2023-03-12 18:21:01 391
原创 C++教程之array
上一篇文章我们介绍了C++中的迭代器,这篇文章将会介绍C++中数组的概念,数组是一种和vector类似的数据结构,但是其在性能和灵活性上的权衡中选择了性能而放弃了一定的灵活性,其与vector相同的地方是,它们都是同一类型的对象的容器,也都可以通过下标访问。其不同点是数组的大小是固定的,所以无法向一个数组添加元素,也正是因为其大小固定,所以其在运行时有更好的性能。需要注意的是一些编译器是不支持数组的拷贝,如果直接通过一个数组去初始化另一个数组可能会报错。在理解声明时可以按照从左到右,从内到外的顺序。
2023-03-07 22:44:37 893
原创 Aptos发布模块
官网提供的Move模块在aptos-core/aptos-move/move-examples/hello_blockchain目录下,首先进入该目录下。首先我们需要创建一个aptos账户,然后获取一些代币,我们可以使用以下命令去初始化一个新的本地账户,这个是需要安装aptos命令行工具。这时候我们就生成了一个账户,其地址如下,由于这个账户是随机生成的,所以其与一般账户有所不同,在使用上这个账户地址与default等价。在编译测试好模块后,可以通过以下命令发布模块。编译测试Move模块。
2023-03-05 23:25:35 223
原创 TypeScript笔记(三)
上一篇文章我们主要介绍了TypeScript的基本类型boolean、number、string、void、null和undefine,还介绍了任意类型any和联合类型,这篇文章我们将会了解对象类型Interface和数组的相关知识。在面向对象的语言中,接口是一个非常重要的概念,它是对于行为的抽象,具体的行为是需要由类去实现的。在TypeScript中接口是一个非常灵活的概念,除了可用于对类的一部分行为进行抽象外,也可以用于对对象的形状进行描述,这里的形状就可以理解为对象的属性。age: 25。
2023-02-22 21:05:58 1035
原创 C++教程之迭代器Iterator
之前的两篇文章我们主要了解了vector和string的相关知识,从中我们知道可以通过下标来访问vector的元素或者string的字符,但是除了这种方式还有一种更为通用的方式获取元素,那就是迭代器,这篇文章就会简单介绍迭代器的相关内容。在我们使用容器去存储元素的时候有时候会需要获取存储的元素,而迭代器就是用于从容器中获取元素的,基本上所有容器的库都支持迭代器,但是只有其中一小部分支持下标获取元素的。虽然string不是容器但是其支持很多容器的操作,其中就包括下标和迭代器。
2023-02-20 22:54:07 2373
原创 TypeScript笔记(二)
这篇文章主要介绍了TypeScript的基本类型如boolean、number、string、void、null和undefine,还介绍了任意类型Any和联合类型。更多内容可以关注公众号QStack。
2023-02-18 15:53:56 382
原创 TypeScript笔记(一)
为什么会突然学TypeScript呢?那是很多web3的项目都是基于TypeScript开发的,所以为了更快的熟悉项目,还是想系统性学习下TypeScript的相关内容。这些文章都是基于有一定编程基础的前提写的,很多的还是了解TypeScript的一些特性。那么什么是TypeScript?TypeScript和JavaScript又是什么关系呢?添加了类型系统的 JavaScript,适用于任何规模的项目。
2023-02-15 22:12:26 183
原创 从零开始学习构建系统之cmake(二)
一个基于cmake的构造系统是通过一系列逻辑上的target组织起来的,一个target对应于一个可执行文件或者库,或者是一个自定义的一个target,其包含了一些自定义的命令,target之间的依赖关系决定了构建的顺序以及对于修改的重新生成的规则。这篇文章主要介绍了cmake构建系统各种库文件的内容,更多文章可以关注公众号QStack。
2023-02-14 22:35:19 263
原创 C++教程之vector
以下提供了关于vector的六种定义与初始化的方式// vector包含string类型对象,默认初始化,v1为空//v2复制v1的所有内容//v3也是复制v1的所有内容// v4中有四个”123“//v5有10个初始化值的对象// 列表初始化,v6中有两个对象”12“, ”23“//列表初始化,v7中有两个对象”21“, "32"需要注意的是列表初始化方式在C++99是不支持的,要C++11及以上才可以,否则会编译报错。
2023-02-09 23:18:46 1233
原创 下一代的智能合约开发语言Move(七)
上一篇文章我们主要介绍了Move语言中的泛型,了解了泛型的定义与使用,在Move中泛型可以用于结构体和函数。结构体这个数据类型能够帮助我们创建自己的类型和存储复杂的数据结构,但是有时候我们需要更灵活,扩展性更好和管理性更好的数据结构,为了满足这个需求,Move提供了Vector。script {// 使用泛型创建一个空的vectorlet i = 0;// 填充数据i = i + 1;// 打印vector的长度// 从vector中移除数据// 重新打印长度。
2023-02-08 22:05:54 192
原创 从零开始学习构建系统之cmake(一)
根据其官网的定义,cmake是一个开源跨平台的,用于构建、测试和打包软件的一个套件工具。与cmake相关的几个概念需要明晰,如GCC,make和makefile。GCC:GCC是GNU Compiler Collection(就是GNU编译器套件),也可以简单认为是编译器,它可以编译很多种编程语言(括C、C++、Objective-C、Fortran、Java等等)
2023-02-06 22:49:32 367
原创 从零开始学习构造系统之bazel(一)
Bazel 是一款与 Make、Maven 和 Gradle 类似的开源构建和测试工具。它使用人类可读懂的高级 build 语言。Bazel 支持使用多种语言的项目,并针对多个平台构建输出。Bazel 支持跨多个代码库和大量用户的大量代码库。这篇文章主要介绍了构造系统bazel的简单使用,更多文章可以关注公众号QStack。
2023-02-02 22:59:14 1939
原创 从零开始学习构建系统之概述
那么什么是构建系统呢?系统是由相互作用相互依赖的若干组成部分结合而成的,具有特定功能的有机整体,而且这个有机整体又是它从属的更大系统的组成部分。那么我们又该如何理解构建呢?与构建相关联的是编译,编译是将一个源文件转换成一个二进制文件,而构建就是对于编译的安排,在一个大的工程中包含很多源文件,其中可能还包含这复杂的依赖关系,构建就是对于多个编译的合理安排。构建系统:拥有安排多个编译功能的一个有机整体。
2023-01-30 23:11:06 825
原创 下一代的智能合约编程语言Move(六)
世界杯终于结束了,也要慢慢调回中国的作息了,不能再继续划水了,最近也看到Aptos在2月份将会在韩国举行黑客松,这也是一个练手的好机会,还是要赶紧学完Move,今天这篇文章将会主要介绍Move中的泛型,泛型对于Move来说十分重要,其令Move在区块链世界的地位十分特殊,也是Move灵活性的源泉。可以看到在结构体旁边我们使用了'',其中的T就是我们在结构体里使用的类型,在结构体里我们可以将T当作常规类型使用,实际上T并不是一个存在的类型,其只是其他任何类型的占位符。在结构体中也是一样的。
2022-12-20 22:46:07 460
原创 C++教程之引用与指针
之前的文章我们已经介绍了C++中的基本类型如int,bool和double等,除了基本类型C++还有一些更复杂的数据类型复合类型,所谓的复合类型就是通过其他类型定义的类型,本篇文章我们将会着重介绍C++的复合类型引用和指针。在之前的例子中很容易认为*和&作用于一个声明语句的所有对象,其很大一个原因是我们可以将修饰符与变量名分开如下int* p;//合法但是很容易造成误解//p1是一个指针,p2是一个整型//p1, p2都是指向整型的指针。
2022-12-15 19:38:10 511
原创 下一代智能合约编程语言Move(四)
.....}module M {}}}需要注意的是每一个定义的结构体都会变成一个新的类型,这个类型可以桶模块访问,如M::MyStruct。}
2022-11-26 17:11:35 770
原创 OpenGL教程(五)
正如之前章节所提到的,着色器就是运行在GPU上的小程序,简单来说,着色器就是仅仅是一个将输入数据经过一定转换然后输出的过程,着色器之间是非常独立的,彼此之间除了输入输出之外没有其他交流,这篇文章将会详细介绍着色器以及编写着色器的语言GLSL。编写、编译和管理着色器十分的繁琐,为了方便管理我们通过建立一个着色器的类从硬盘读取着色器,然后编译并且链接它们,检查是否有错误,十分方便使用。出于学习的目的,我们将着色器的类定义在一个头文件内,其结构如下{public:// 项目ID。
2022-11-19 10:30:17 742
原创 OpenGL教程(四)
片段着色器是我们需要编写的第二个也是最后一个着色器程序,其主要用于计算每一个像素的颜色,在例子中为了简单我们会将每个颜色设置为橘黄色。计算机中的颜色是由一个四维数组组成的,分别是红、绿,蓝以及透明度,通常被称为RGBA,在OpenGL或者GLSL中定义一个颜色需要吧每个部分定义到0.0和1.0之间,例如我们将红色和绿色都设置为1.0,那么就会得到二者混合之后的颜色黄色。
2022-11-14 22:31:34 653
原创 下一代智能合约编程语言Move(三)
Move的函数主要可以分为两类,一类事private(默认的),一类事public,如果时public则是其他模块也可以访问,但是如果时private,则只能在定义函数的地方访问。Move中默认的上下文是空的,这意味着你只能使用基本类型如interger,bool和address,而且智能操作这些基本类型和变量,为了实现更加复杂的功能,你可以引入已经发布的模块或者标准库。模块是发布在发送者的地址的,标准库是发布在0x1地址的,当发布一个模块时它的函数并未执行,需要使用use script去执行模块。
2022-11-13 13:19:00 384
原创 OpenGL教程(三)
之前的文章我们已经介绍了如何绘制一个窗口,但是也仅仅就是一个窗口,没有任何的图案和纹理,这篇文章就将介绍如何利用OpenGL去绘制一个三角形。在OpenGL中所有的东西都是3D空间中,但是显示屏是2D的,所以绝大多数OpenGL的工作就是通过管线将3D坐标转化为2D的屏幕坐标。管线主要可以分为两个部分,一个部分将3D坐标转化为2D坐标,另一部分则是将2D坐标转化为着色的像素。这篇文章会简单介绍一下管线以及如何利用它去创造有趣的像素。
2022-11-09 23:30:48 422
原创 下一代智能合约编程语言Move(二)
上一篇文章我们已经介绍了Move开发的环境配置以及Move内置的基本类型u8,u64,u128,boolean以及address,我们还了解了Move与其他的智能合约开发语言不同,Move将脚本与模块区分开,脚本中包含更多的逻辑,这篇文章将会主要介绍Move的表达式与作用域,以及控制流。一个由{}包围组成的代码块也是一个表达式,一个代码块可以包含表达式,也可以包含其他代码块,从某种意义上说函数体也是带有某种限制的代码块。代码块也是一个表达式,一个表达式就有返回值,其返回值就是最后一个没有分号的表达式的值。
2022-11-08 22:14:20 477
原创 C++教程之基本数据类型
每一种编程语言都会提供一些与其他语言不同的特性,这也是它产生的原因,但是作为编程语言,它也会保留所有编程语言的共性,例如一些基本类型,整形,浮点型,字符等,还有变量、表达式和控制流,所有的编程语言这些部分都不会有很大差异。
2022-11-06 20:26:01 349
原创 下一代智能合约开发语言(一)
Move是一种新的智能合约的开发语言,它和C,C++一样都是一种编程语言,但是其主要用于编写智能合约,那么什么又是智能合约呢,以下是维基百科的定义,由此可知智能合约是指根据协定能够自动执行、控制活记录相关事件和行为的计算机程序或交易协议。这里我们可以先简单把智能合约理解成一个程序,区块链和智能合约更多内容之后会专门讲解(又开一个新坑)。
2022-11-06 15:48:33 1542
原创 Python多线程(一)
最近常常需要处理大量的crash数据,对这些数据进行分析,在此之前需要将存量的数据导入自己的数据库,开始一天一天的去导,发现太慢了,后来尝试通过python多线程并行导入多天数据,以此记录对于Python多线程的使用。
2022-11-04 00:12:16 314
原创 OpenGL入门(二)
这个glad是一个开源库,正如之前我们所提到的OpenGL只是一个标准,具体的实现是有各个显卡厂商完成的, 所以显卡驱动的版本有很多种类,虽然都是基于OpenGL标准,实现的函数和最终的效果是一样的,但是函数的位置在编译期是无法知道的,且需要在运行时检索这些函数,然后将这些函数的位置存储在函数指针中以便之后使用,而这个检索函数的过程又是与操作系统高度相关的,而glad就是用来帮助开发者完成这些繁琐的过程。然后需要创建一个主函数,然后在主函数中对glfw进行初始化和各种配置,以便之后使用,其代码如下,
2022-11-01 23:33:00 436
原创 C++教程之string
前一篇文章我们已经了解了C++中的基本类型,C++还提供了很多抽象数据类型,例如字符串string,string包含多个字符,以及可变长度的vector,vector可以包含多个同一类型的对象。string的定义和初始化方法有以下几种string s1;//默认初始化,s1是一个空字符串// s2是s1的拷贝//等同于s2 = s1,s3是s1的拷贝//s4是value的拷贝// s6是ccccreturn 0;}
2022-10-16 16:20:29 571
原创 C++入门教程(一)
自这篇文章我们即将开始C++的奇幻之旅,其内容主要是读C++ Primer的总结和笔记,有兴趣可以找原版书看看,对于学习C++还是有很大帮助的。这篇文章将从一个经典的程序开始介绍C++的类型、变量、表达式、语句、控制流和函数的相关内容,由此可以建立起对于C++总体上的认识。通过这篇文章,我们已经对C++有了基本的认识,初步了解了一个C++程序的基本组成,了解了输入输出,命名空间,注释,控制流。更多文章可以关注微信公众号QStack。
2022-10-13 00:17:53 319
原创 OpenGL入门(一)
对于C++和OpenGL的学习是同时进行的,因为我觉得相较于简单的编程练习,OpenGL本身就是对于C++的非常好的实践,能够有助于我们进一步理解C++的语言特性。作为OpenGL系列的第一篇文章,本文将会帮助大家建立起对于OpenGL的初步印象。在我们学习一个东西之前我们第一个疑问就是它是什么?那么什么是OpenGL呢?
2022-10-10 21:43:31 4035
原创 微信小程序开发入门教程(十二)
背景上一篇文章我们讲述了微信小程序的三个基础组件icon、text和progress。这些基础组件主要用途是进行信息展示,微信小程序除了信息展示还需要与用户交互,而表单是应用中获取用户输入的重要手段,它对于系统极其重要,用户在应用中输入的大部分内容都是在表单元素中完成的,本篇文章着重介绍表单组件的特性,至于数据如何传输到后段会在之后的文章着重介绍。radio组件单选框可以用来生成一组单选按钮,供用户从一批固定的选项中做出选择,它适用于数据不多的情况,小程序中的单选框是由ra-group和radio两个
2022-05-21 19:33:05 1875
原创 微信小程序开发入门教程(十一)
背景终于入职了,线上入职远程办公,感概还是很多的,有机会专门写一下,刚入职熟悉项目,适应新的节奏还是需要时间的,所以时间可能不肯像以前那么充裕了,我尽力保持日更吧,其实之前的两篇都是之前的存稿,确实没什么精力,虽然没做什么事,但是还是觉得很累,可能就是如此吧,无论你是否愿意,生活总是推着我们不断向前。话不多说,之前我们介绍了微信小程序中的容器组件view和scroll-view,而容器内放置的就是各种基本组件,这篇文章就会主要介绍基本组件。基础组件icon组件icon是页面中非常常见的组件,通常表示
2022-04-05 16:10:51 568
原创 微信小程序开发入门教程(十)
背景前几篇文章我们已经学习了WXML相关的数据绑定与几种渲染方式,还学习了与WXSS相关的样式绑定、浮动定位和Flex布局,其中无论是WXML的页面布局还是WXSS的样式都是基于元素而言的,而这些元素就是组件,微信团队已经为我们封装了很多功能齐全的组件,这些组件可以满足绝大多数开发的需求,从这篇文章开始,我们将系统的学习微信小程序的组件,虽然不需要将每一个组件和属性都牢牢记住,但是至少要有一个概念,知道微信团队已经提供了哪些能力,你不需要知道所有问题的答案,但是你需要知道去哪找到你问题的答案。组件定义
2022-04-03 18:40:36 1248
原创 微信小程序开发入门教程(九)
背景上一篇文章我们已经介绍了微信小程序布局相关内容,介绍了块级元素、行内元素和行内块元素,与此同时还介绍了浮动与定位,如何解决浮动引起的高度坍塌问题。浮动和定位是基于盒子模型传统的布局解决方案,它在处理一些特殊布局时特别不方便,比如垂直居中,2009年W3C提出了一种新的方案Flex,给传统的盒子模型带来了更大的灵活性,微信小程序的WXSS也对其进行来实现。Flex布局基本概念Flex布局主要由容器和项目构成,采用Flex布局的元素成为Flex元素,它所有的子元素自动成为容器成员。可以通过设置disp
2022-04-02 22:12:02 1135
原创 微信小程序开发入门教程(八)
背景上一篇文章我们已经讲述了WXSS的一部分内容,其中包括尺寸、选择器、内联样式以及全局样式和局部样式,本篇文章将会讲述WXSS布局相关内容,WXSS实现了CSS布局相关的绝大部分规范。盒模型盒子模型是CSS的基础,如下图所示,CSS假定每个元素都会生成一个或多个矩形框,每个元素框中心都有一个内容区(content),这个内容区周围有内边距(padding)、边框(border)和外边距(margin),这些项默认宽度为0。简单来说,HTML的每个元素就是一个盒子,在微信小程序中也是如此,元素的宽度和
2022-04-01 11:12:43 1743
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人