精华内容
下载资源
问答
  • 困惑接触Rust也一段时间了,但对References(引用) 、borrowing(借用) 、 &关键字、ref关键字、* ...(因为人在学习中总与现有的知识对比,所以有了这一条)网上有很多对Rust中引用和借用部分进行翻译和解释。...

    困惑

    接触Rust也一段时间了,但对References(引用) 、borrowing(借用) 、 &关键字、ref关键字、* 关键字,这几个词非常困惑。常见的问题不在乎下面几条:

    &关键字是代表引用还是借用?

    ref 和 & 有什么区别?

    总是与c++的引用对比,他们意思相同?(因为人在学习中总与现有的知识对比,所以有了这一条)

    网上有很多对Rust中引用和借用部分进行翻译和解释。看得真是云里雾里,一会说借用,一会说引用,那到底是引用还是借用?

    现象

    rust中借用和引用的附带功效都一样,就是都有生命周期。借用使用&关键字,引用使用ref关键字。借用的对象是必须存在的,引用的对象可以虚拟的,后期附上对象。

    我看这网上的一段解释,Rust的引用和c++ 语言的引用完全不一样啊,c++ 语言说的是,引用类似变量别名,声明引用时,必须同时对其进行初始化。

    引用的声明方法:类型标识符 &引用名=目标变量名

    再看下出自《Programming Rust Fast, Safe Systems Development》

    in Rust terminology, we say that it borrows a reference to x. Given a

    reference r, the expression *r refers to the value r points to. These are very much like

    the & and * operators in C and C++

    Unlike C pointers, however, Rust references are never null: there is simply no way to

    produce a null reference in safe Rust. And Rust references are immutable by default:

    这怎么拿Rust引用与C++的指针进行比较了。都不知道那种是更合理的解释。

    实践

    实践出真知,还是动动手。

    首先证明的是引用是否可以为空。

    let ref a:i32;

    //a = 1; // expected &i32,consider borrowing here: `&1`

    a = &1;

    上面代码能编译通过,这说明Rust中的引用和c++ 中的引用不是一个意思,更像c++ 中的指针类型。c++ 通过int *a来声明指针类型。

    ref 与 & 的区别

    let ref a=2;

    let a = &2;

    两个值都是&i32类型。

    所以ref用在变量绑定与&用在表达式上是一样的效果。

    看到上一个例子的错误提示,consider borrowing here,那么&在Rust的表达式上可以看成是借用,这与c++ 取地址符是一个意思。

    struct B {

    pub a: &'l u32,

    // pub b: ref u32, expected type, found keyword `ref`

    }

    let ref a = &1;

    let b = B{ a: a };

    在类型声明上,&表示引用类型。

    & 与 * 的关系

    那么&用在绑定上是怎么样的?其实&用在绑定上与*用在表达式上是一样的:

    let r=&1;

    let &a=r;

    let a=*r;

    两个值都是i32类型。

    如果上面的解释还没有让你明白他们之间的关系,那么通过代码直接输出具体类型,这能加深理解。

    #![feature(core_intrinsics)]

    fn main() {

    let x = &false;

    print_type_name_of(x);

    let &x = &false;

    print_type_name_of(x);

    let ref x = &false;

    print_type_name_of(x);

    }

    fn print_type_name_of(_: T) {

    println!("{}", unsafe { std::intrinsics::type_name::() })

    }

    &bool

    bool

    &&bool

    例子:

    #![feature(core_intrinsics)]

    enum Favour {

    Nor(u32),

    NorRef(u32),

    Ref(&'a u32),

    RefRef(&'a u32),

    }

    fn config(data: &u32) {

    println!("log data: {}", data);

    }

    // fn con(data: ref u32){ //expected type, found keyword `ref`

    // println!("log data: {}", data);

    // }

    fn log(fav: Favour) {

    match fav {

    Favour::Nor(data) => {

    config(&data);

    print_type_name_of(data);

    },

    Favour::NorRef(ref data) => {

    config(data);

    print_type_name_of(data);

    },

    Favour::Ref(data) => {

    config(data);

    print_type_name_of(data);

    },

    Favour::RefRef(ref data) => {

    config(data);

    print_type_name_of(data);

    }

    }

    }

    fn print_type_name_of(_: T) {

    println!("{}", unsafe { std::intrinsics::type_name::() })

    }

    fn main() {

    log(Favour::Nor(1));

    log(Favour::Ref(&2));

    log(Favour::NorRef(3));

    log(Favour::RefRef(&4));

    }

    log data: 1

    u32

    log data: 2

    &u32

    log data: 3

    &u32

    log data: 4

    &&u32

    match的模式匹配上只能使用 ref,在函数声明上只能使用&来表示引用类型

    总结

    单纯Rust语言上考虑。

    我们在不同情况下解释&的意思:

    在表达式上,表示的是借用。

    在变量绑定上,表示解地址操作与*类似。

    在类型声明上,表示引用类型。

    在模式匹配上,无效关键字

    那么ref的通用解释是:

    在表达式上,无效关键字。

    在变量绑定上,表示引用类型。

    在类型声明上,无效关键字。

    在模式匹配上,表示引用类型。

    非要给区分ref和&到底哪个是引用,哪个是借用。我们可以先从词性划分,引用我归类为名词,而借用归类为动词。&A在表达式上 表示借用A,这是一个动作,那结果就是产出一个引用类型。所以let ref B表示声明了一个引用类型,它只能绑定到某次借用动作上。

    所以ref 更适合叫引用, &叫借用。

    参考:

    展开全文
  • 在python中,可以通过以下语法替换多个变量: a,b = b,a python解释器会将a,b替换为元组(a,b),等号右边同理。再应用元组的逐元素赋值。

    在python中,可以通过以下语法替换多个变量:

    a,b = b,a
    

    python解释器会将a,b替换为元组(a,b),等号右边同理。再应用元组的逐元素赋值。

    展开全文
  • 这个有意思,指针解释获新生!!! fn main() { let mut s = String::from("hello"); s.push_str(", world!"); println!("{}", s); let s1 = String::from("hello"); let (s2, len) = calculate_...

    这个有意思,指针解释获新生!!!

    fn main() {
        let mut s = String::from("hello");
        s.push_str(", world!");
        println!("{}", s);
    
        let s1 = String::from("hello");
        let (s2, len) = calculate_len(s1);
        println!("The len of '{}' is {}.", s2, len);
    
        let s1 = String::from("hello");
        let len = calculate_length(&s1);
        println!("The length of '{}' is {}.", s1, len);
    }
    
    fn calculate_len(s: String) -> (String, usize) {
        let length = s.len();
        (s, length)
    }
    
    
    fn calculate_length(s: &String) -> usize {
        s.len()
    }

    转载于:https://www.cnblogs.com/aguncn/p/11397293.html

    展开全文
  • 1.2、一些文件解释 buildspec.yaml: 主要是 codebuile 在构建过程中需要的一个文件,用了告知如何构建。 appspec.yaml: 是 codedeploy 在部署过程中的修订文件,可以比作为一个环境变量配置文件吧。 taskdef.json:...

    Build Status

    一、架构图

    1.1、架构图

    借用 AWS 服务 CodePipeling + ECS 实现蓝绿发布 (awscli)

    1.2、一些文件解释

    • buildspec.yaml: 主要是 codebuile 在构建过程中需要的一个文件,用了告知如何构建。
    • appspec.yaml: 是 codedeploy 在部署过程中的修订文件,可以比作为一个环境变量配置文件吧。
    • taskdef.json:是我们的 ECS task 的一个定义文件,有这个文件 codepipeline 才可以在每次构建中根据要求为我们创建 task definition。
    • imageDetail.json:用来输出我们新构建的镜像地址,用于新的部署使用。

    1.3、流程

    1. codebuild 通过文件buildspec.yaml进行构建,生成文件imageDetail.json
    2. codepipeline 会提取文件imageDetail.json中的 imageurl,放入环境变量IMAGE1_NAME
    3. codepipeline 把taskdef.json中的<IMAGE1_NAME>替换为新的 URL,并请求 ECS RegisterTaskDefinition API 进行新的任务定义注册;
    4. 注册完成后 API 会返回其任务定义 ARN,codepipeline 并用此 ARN 信息替换appspec.yaml中的<TASK_DEFINITION>;
    5. 而后 CodePipeline 根据appspec.yaml的信息,发动 CreateDeployment API 开始透过 CodeDeploy 执行蓝绿布署。

    二、创建 ECR 仓库

    创建 ECR 镜像仓库,我所有的操作都是在 us-east-1 这个区域,操作的 IAM 用户拥有 root 权限。

    $ aws ecr create-repository --repository-name nginx-ecs --image-scanning-configuration scanOnPush=true --region us-east-1 
    {
        "repository": {
            "repositoryUri": "921283538843.dkr.ecr.us-east-1.amazonaws.com/nginx-ecs", 
            "imageScanningConfiguration": {
                "scanOnPush": true
            }, 
            "registryId": "921283538843", 
            "imageTagMutability": "MUTABLE", 
            "repositoryArn": "arn:aws:ecr:us-east-1:921283538843:repository/nginx-ecs", 
            "repositoryName": "nginx-ecs", 
            "createdAt": 1580358204.0
        }
    }

    三、创建 codebuild project

    3.1、创建 ServiceRole

    codebuild 需要获取 s3 等权限。

    $ aws iam create-role --role-name AWSCodeBuildServiceRole --assume-role-policy-document '{"Version":"2012-10-17","Statement":{"Effect":"Allow","Principal":{"Service":"codebuild.amazonaws.com"},"Action":"sts:AssumeRole"}}'

    创建 policy。

    $ aws iam create-policy --policy-name AWSCodeBuildPolicy --policy-document https://raw.githubusercontent.com/wangzan18/codepipeline-ecs/master/awscli/AWSCodeBuildPolicy.json
    {
        "Policy": {
            "PolicyName": "AWSCodeBuildPolicy", 
            "PermissionsBoundaryUsageCount": 0, 
            "CreateDate": "2020-01-30T09:34:36Z", 
            "AttachmentCount": 0, 
            "IsAttachable": true, 
            "PolicyId": "ANPA5NAGHF6NYARCBUGDT", 
            "DefaultVersionId": "v1", 
            "Path": "/", 
            "Arn": "arn:aws:iam::921283538843:policy/AWSCodeBuildPolicy", 
            "UpdateDate": "2020-01-30T09:34:36Z"
        }
    }
    角色附加策略。
    $ aws iam attach-role-policy --role-name AWSCodeBuildServiceRole --policy-arn arn:aws:iam::921283538843:policy/AWSCodeBuildPolicy
    $ aws iam attach-role-policy --role-name AWSCodeBuildServiceRole --policy-arn arn:aws:iam::aws:policy/AmazonEC2ContainerRegistryPowerUser

    3.2、创建 codebuild project

    $ wget https://raw.githubusercontent.com/wangzan18/codepipeline-ecs/master/awscli/create-project.json
    $ wget aws codebuild create-project --cli-input-json file://create-project.json

    四、创建 ECS 蓝绿 CodeDeploy

    4.1、为 CodeDeploy 创建服务角色

    $ aws iam create-role --role-name AWSCodeDeployServiceRole --assume-role-policy-document '{"Version":"2012-10-17","Statement":{"Effect":"Allow","Principal":{"Service":"codedeploy.amazonaws.com"},"Action":"sts:AssumeRole"}}'

    附加策略。

    $ aws iam attach-role-policy --role-name AWSCodeDeployServiceRole --policy-arn arn:aws:iam::aws:policy/AWSCodeDeployRoleForECS

    4.2、创建 ECS 使用的 ALB

    使用 create-load-balancer 命令创建 应用程序负载均衡器。指定两个不属于同一可用区的子网以及一个安全组。

    aws elbv2 create-load-balancer \
         --name nginx-ecs-bluegreen-alb \
         --subnets subnet-694b2b35 subnet-f5761192 \
         --security-groups sg-cdc5cf8f \
         --region us-east-1

    使用 create-target-group 命令创建目标组。此目标组将流量路由到服务中的原始任务集。

    aws elbv2 create-target-group \
         --name bluegreentarget1 \
         --protocol HTTP \
         --port 80 \
         --target-type ip \
         --vpc-id vpc-ebff4c91 \
         --region us-east-1
    aws elbv2 create-target-group \
         --name bluegreentarget2 \
         --protocol HTTP \
         --port 80 \
         --target-type ip \
         --vpc-id vpc-ebff4c91 \
         --region us-east-1

    使用 create-listener 命令创建负载均衡器侦听器,该侦听器带有将请求转发到目标组的默认规则。

    aws elbv2 create-listener \
         --load-balancer-arn arn:aws:elasticloadbalancing:us-east-1:921283538843:loadbalancer/app/nginx-ecs-bluegreen-alb/28cd5055a92630c1 \
         --protocol HTTP \
         --port 80 \
         --default-actions Type=forward,TargetGroupArn=arn:aws:elasticloadbalancing:us-east-1:921283538843:targetgroup/bluegreentarget1/80b89a8c4e5f574d \
         --region us-east-1

    4.3、创建 Amazon ECS 集群

    使用 create-cluster 命令创建要使用的名为 nginx-ecs-bluegreen 的集群。

    aws ecs create-cluster \
         --cluster-name nginx-ecs-bluegreen \
         --region us-east-1

    为 ECS task 创建执行角色。

    $ aws iam create-role --role-name AWSECSTaskServiceRole --assume-role-policy-document '{"Version":"2012-10-17","Statement":{"Effect":"Allow","Principal":{"Service":"ecs-tasks.amazonaws.com"},"Action":"sts:AssumeRole"}}'

    附加策略 AmazonECSTaskExecutionRolePolicy。

    $ aws iam attach-role-policy --role-name AWSECSTaskServiceRole --policy-arn arn:aws:iam::aws:policy/service-role/AmazonECSTaskExecutionRolePolicy

    然后,使用您创建的 fargate-task.json 文件注册任务定义。

    $ wget https://raw.githubusercontent.com/wangzan18/codepipeline-ecs/master/awscli/fargate-task.json
    $ aws ecs register-task-definition \
         --cli-input-json file://fargate-task.json \
         --region us-east-1

    创建 ECS Service。

    $ wget https://raw.githubusercontent.com/wangzan18/codepipeline-ecs/master/awscli/service-bluegreen.json
    $ aws ecs create-service \
         --cli-input-json file://service-bluegreen.json \
         --region us-east-1

    4.4、创建 AWS CodeDeploy 资源

    使用 create-application 命令创建 CodeDeploy 应用程序。指定 ECS 计算平台。

    $ aws deploy create-application \
         --application-name nginx-ecs \
         --compute-platform ECS \
         --region us-east-1

    使用 create-deployment-group 命令创建 CodeDeploy 部署组。

    $ wget https://raw.githubusercontent.com/wangzan18/codepipeline-ecs/master/awscli/deployment-group.json
    $ aws deploy create-deployment-group \
         --cli-input-json file://deployment-group.json \
         --region us-east-1

    四、创建 codepipeline

    4.1、创建 codepipeline 所需 SerivceRole

    如果您的 AWS 账户中还没有 CodePipeline 服务角色,请创建一个。借助此服务角色,CodePipeline 可代表您与其他 AWS 服务进行交互,包括 AWS CodeBuild。

    $ aws iam create-role --role-name AWSCodePipelineServiceRole --assume-role-policy-document '{"Version":"2012-10-17","Statement":{"Effect":"Allow","Principal":{"Service":"codepipeline.amazonaws.com"},"Action":"sts:AssumeRole"}}'

    为 codepipeline role 创建 policy,并将 policy 附加到 AWSCodePipelineServiceRole。

    $ aws iam create-policy --policy-name AWSCodePipelineServiceRolePolicy --policy-document https://raw.githubusercontent.com/wangzan18/codepipeline-ecs/master/awscli/AWSCodePipelineServiceRolePolicy.json
    {
        "Policy": {
            "PolicyName": "AWSCodePipelineServiceRolePolicy", 
            "PermissionsBoundaryUsageCount": 0, 
            "CreateDate": "2020-01-30T05:33:22Z", 
            "AttachmentCount": 0, 
            "IsAttachable": true, 
            "PolicyId": "ANPA5NAGHF6NULEJS574V", 
            "DefaultVersionId": "v1", 
            "Path": "/", 
            "Arn": "arn:aws:iam::921283538843:policy/AWSCodePipelineServiceRolePolicy", 
            "UpdateDate": "2020-01-30T05:33:22Z"
        }
    }
    角色附加策略。
    $ aws iam attach-role-policy --role-name AWSCodePipelineServiceRole --policy-arn arn:aws:iam::921283538843:policy/AWSCodePipelineServiceRolePolicy

    4.2、创建 pipeline

    $ wget https://raw.githubusercontent.com/wangzan18/codepipeline-ecs/master/awscli/create-pipeline.json
    $ aws codepipeline create-pipeline --cli-input-json file://create-pipeline.json --region us-east-1

    注意:文档中的 OAuthToken 自己去 github 中去申请。

    4.3、为 pipeline 创建 webhook

    $ wget https://raw.githubusercontent.com/wangzan18/codepipeline-ecs/master/awscli/my-webhook.json
    $ aws codepipeline put-webhook --cli-input-json file://my-webhook.json --region us-east-1
    $ aws codepipeline register-webhook-with-third-party --webhook-name nginx-ecs-webhook --region us-east-1

    相关参数可以根据自己情况填写,参考文档:https://docs.aws.amazon.com/zh_cn/codepipeline/latest/userguide/pipelines-webhooks-create.html

    获得了 webhook 的相关信息之后,我们登陆 github,选择相应的存储库,

    展开全文
  • 电子书(英文版)。 本文章对 DNS 对网络系统构成的安全弱点做分析,解释了网络安全性应该注意的问题。
  • 感觉可能有的朋友需要,就将我的回复帖在我的blog,由于时间问题,我没有写中文版的,而是直接用的英文,希望大家见谅,不过代码会告诉大家我的思路,其实也没多少可以解释的,我认为这只是一个小技巧罢了。...
  • 设计模式之解释器模式,C++实现

    千次阅读 2013-03-10 19:53:19
    借用下设计模式的图 代码 表示不是比较正规的实现。不过设计模式嘛,随心而设计,差不多是那个意思,“认真你就输了 // Interpert.cpp : Defines the entry point for the console ...
  • 云计算的解释

    2008-05-13 09:48:00
    “云计算”(Cloud Computing)是分布式处理(Distributed Computing)、并行处理(ParallelComputing)和网格计算(GridComputing)的发展,或者说是这些计算机科学...云计算这个名词可能是借用了量子物理中的“电子云”(Elect
  • dllhost.exe 解释

    2009-12-30 17:41:00
    dllhost.exe是什么? dllhost.exe是运行COM+的组件,即... 什么时候会出现dllhost.exe?...例如江民KV2004 冲击波杀手又是怎么一回事? 冲击波杀手借用了dllhost.exe作为进程名,但是由于Windows不允许同一个目录...
  • ZigBee & XBee:什么区别?终极解释

    千次阅读 2018-07-22 21:40:30
    (http://www.bitconn.com/form_1/注册后,购买XBee模块,送USB评估底板及相关中文资料,... 下面,我们将介绍每种情况的解释,当您选择其中一种或两种情况时。 ZigBee ZigBee是基于IEEE 802.15.4的无线2.4 GHz标...
  • Unity中的旋转的API解释和使用 Unity中关于旋转主要是有欧拉角和四元数两种方式,每种方式的简单介绍可以参考我之前写的总结。 时间不是很充裕,要看的东西很多,所以有别人写好的就不在重新总结了,直接借用别人...
  • 本次利用代码细致解释一下接口的具体使用方法,以及介绍解耦的重要性和方法 借用刘铁猛老师PPT里的一个图,感觉很清晰,接口,抽象之间的联系 接口与单元测试 接口的本质,决定了接口中的纯虚方法必须是public,而...
  • 拓扑结构详细解释

    千次阅读 2007-11-30 10:08:00
    "拓扑"这个名词是从几何学中借用来的。网络拓扑是指网络形状,或者是它在物理上的连通性。网络的拓扑结构主要有:星形拓扑、总线拓扑、环形拓扑、树形拓扑、混合形拓扑及网形拓扑,如图2.16所示。 拓扑结构的选择往往...
  • Shell知识总结

    2021-05-10 11:08:25
    1.借用解释器执行 sh/bash aa.sh 2.给脚本加上执行权限后直接执行 chmod 777 aa.sh || chmod u+x aa.sh [gky@hadoop101 scripts] aa.sh 显示当前Shell中所有变量:set 变量设置: (1)定义变量A [gky@hadoop...
  • 借用练习题1.22和1.20中判断质数和欧几里得算法的过程,然后编写带过滤器的过程filtered-accumulate。 #lang racket (define (square x) (* x x)) (define (inc n) (+ n 1)) (define (identity x) x) (define (add ...
  • 要回答这些问题,我们需要先了解一下ioc为什么会产生为什么要有iocjava是一门面向对象的语言,我们的应用程序通过一个个对象之间的相互关联和作用来完成功能,在网上看到一个特别形象的比喻,这里借用一下:这里的每...
  • 借用网上找到的一幅图[1],来直观描绘一下这种复合关系。其对应的表达式如下:上面式中的Wij就是相邻两层神经元之间的权值,它们就是深度学习需要学习的参数,也就相当于直线拟合y=k*x+b中的待求参数k和b。和直线...
  • 混叠/借用 好的 高阶函数( map , filter等) map , fori 数组与元组(复合系统)表示法 将复合系统( <q1> )和元组用于qubit,将数组用于经典数据 xor (高/低电平?量子傅立叶变换?) 布尔值 不 索引编制 ...
  • 作者RPN网络前面的g层借用的是ZF网络,网络相对较浅,不过并不影响后期介绍。 1、首先,输入图片大小是 224*224*3(这个3是三个通道,也就是RGB三种) 2、然后第一层的卷积核维度是 7*7*3*96 (所以大家要认识到...
  • 所有这些和隐含求助解释器有关,这会导致引用拥有者清除引用。 第一个也是最重要导致这个问题的是关于Py_DECREF()使用在不相关对象,上,而对象是对列表对象的借用引用,如: voidbug(PyObject *list){ PyObject *...
  • 而孤儿进程借用了现实中孤儿的概念,也就是父进程不在了,子进程还在运行,这时我们就把子进程的PPID设为1。前面讲PID提到,操作系统会创建进程号为1的init进程,它没有父进程也不会退出,可以收养系统的孤儿进程。 ...
  • 然后在upsampling的时候借用pooling index去恢复图像,keras是在upsampling的时候是没有根据pooling index去特定恢复的功能,这里需要自己用tf去写一个pooling与upsampling。 其次,git里的训练...
  • 那个年代内存超级贵,于是从硬盘借用空间,模拟出一个内存空间,所以称为虚拟内存。 那么这里的ratio是啥意思呢? 因为虚拟内存的性能比真实性能差一些,所以spark的yarn-site.xml中有这个的变量的意思是: 在物理...
  • 首先来一张图:   人工智能: ...数学常被认为是多种学科的基础科学,数学也进入语言、思维领域,人工智能学科也必须借用数学工具。 人工智能实际应用:机器视觉,指纹识别,人脸识别,视网...
  • Interpreter模式是一种比较不常用的模式,因为这种模式存在一些弊端,他的使用有很大的条件限制。Interpreter是一种特殊的设计模式,它建立一个解释器,...先借用李建忠老师的代码例子 public class Program { s
  • 2、简化代码,对象直接可以相关借用。3、方便调试与系统更新 类:类是对象的抽象化,基类可以被继承,添加自己的属性 接口:接口是全是空methed的类,可以被继承。规范类的方法调用 包:管理类的命名空间,相当于...
  • 步进电机28BYJ-48的驱动(arduino平台),最全的驱动详细原理,驱动电路分析,驱动代码解释 提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 系列文章目录 前言 一、pandas是...
  • 首先借用阳哥的脑图: 1、轻量级:是相对jvm的三个特性,volatile只实现了可见性、有序性来说的。 2、可见性: 如下图:线程工作时,会从堆中(主内存)里拷贝变量age=25到各自栈中(工作内存),当任一线程如t1...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 730
精华内容 292
关键字:

借用解释