首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

可以不source脚本情况下将变量从Bash脚本导出到环境

echo $VAR 有没有一种方法可以通过只执行 export.bash 而不 source 它获取 $VAR? 答: 不可以。 但是有几种可能解决办法。...调用 shell 上下文中执行脚本: $ cat set-vars1.sh export FOO=BAR $ . set-vars1.sh $ echo $FOO BAR 另一种方法是脚本打印设置环境变量命令.../set-vars2.sh)" $ echo "$FOO" BAR 终端上执行 help export 可以查看 Bash 内置命令 export 帮助文档: # help export export...-f 指 shell 函数 -n 从每个(变量)名称删除 export 属性 -p 显示所有导出变量和函数列表 ---- 参考: stackoverflow question 16618071...help eval 相关阅读: 用和不用export定义变量区别 shell编程$(cmd) 和 `cmd` 之间有什么区别 ----

14420

如何在C++17实现stackless coroutine以及相关任务调度器

前言 C++协程一直是大家比较关注一个技术点, C++20 coroutine属性正式推出之前, 就已经有很多项目实装了, 实现机制也略也差异, 下面先来简单看下比较常见实现方式: 1.1 基于...对于无GC情况, 也有部分项目使用这种模式来实现自己协程, 但对比stackful协程使用上会稍显麻烦, 原来可以正常使用stack变量需要手动处理, 存储特定地方. 1.3 C++20coroutine.... 3. stackless coroutine实现 当前框架无栈协程实现是基于switch caseduff device特性来实现, 通过对应case label, 可以重入一个函数时候跳转到不同...对于一段代码, 整个协程化机制大致如下: 展开, 形成switch(coroutine_state()){case 挂起点: }这种结构代码, 通过关键辅助, 我们可以实现每次resume CoPromise...具备条件情况下, 推荐直接使用C++20coroutine特性, 笔者项目实装对比下来, 整体业务侧编码舒适度, 以及可控性, 还是高非常多.

1.7K20
您找到你想要的搜索结果了吗?
是的
没有找到

C++20新书推荐!

今天推荐一个新书,C++20一些特性: 通过Modules淘汰了C++之前编写大程序陈旧方式; 使用Concepts帮助创建类型安全模板和实现灵活模板特化; 使用Ranges彻底改变了处理数据方式...C++20可以使用midpoint计算中位数、lerp计算线性差值,std::is_bounded_array检查数组是不是有界,并添加了Ranges库以用来处理元素范围和组件。...C++20,可使用lambda表达式捕获this方式,lambda表达式可以使用模板,某些时候不需要使用typename,结构体可以直接初始化。...范围库 使其能够容器上直接表达算法,通过管道符号组合算法,并将其用于数据流。范围是概念首个客户,它支持算法满足以下条件:可以直接在容器上操作,无需迭代器指定范围;可以宽松地评估;可以组合。...模块能够实现更快编译时间、隔离、表达代码逻辑结构、不必再使用头文件,且能够摆脱丑陋方法。 总之,C++20作为一个重大版本发布,又给C++带来了更多新可能。

75010

解读C++即将迎来重大更新(一):C++20四大新特性

C++20 有很多更新,上图展示了 C++20 更新概况。下面作者首先介绍 了 C++20 编译器支持情况,然后介绍 The Big Four(四大新特性)以及核心语言方面的新特性。...我们这里不介绍 C++20 具体协程,而会介绍编写协程框架。编写协程框架由 20 多个函数构成,其中一部分需要你去实现,另一部分则可能需要重写。因此,你可以根据需求调整协程。... getNext 调用之后,这个协程再一次暂停。其暂停会一直持续到下一次调用 next()。我这个示例中有一个很大未知,即 getNext 函数返回值 Generator。...这部分内容很复杂,后面我写协程文章更详细地介绍。 使用 Wandbox 在线编译器,我可以向你展示这个程序输出: ? 模块(Module) 模块部分简单介绍一下就好。...模块承诺能够实现: 更快编译时间; 隔离; 表达代码逻辑结构; 不必再使用头文件(header file); 摆脱丑陋方法。

1.4K20

「深入浅出」主流前端框架更新批处理方式

结果是:vue 底层通过批量处理,只让组件 update 一次。 2 一次 react 案例 上面介绍了 vue 更新批处理案例之后,我们来看一下在 react 批量更新处理。...批处理主要是出于对性能方面的考虑,这里拿 react 为例子,看一下批处理前后对比情况: 例子一:假设没有批量更新: / ------ js 层面 ------ 第一步:发生点击事件触发一次任务。...我们可以看到如果没有批量更新处理,那么会多走很多步骤,包括 render 阶段 ,commit 阶段,dom 更新等,这些都会造成性能浪费,接下来看一下有批量更新情况。 例子二:存在批量更新。...所谓任务,我们可以理解成, 标签主代码执行,一次用户交互(比如触发了一次点击事件引起回调函数),定时器 setInterval ,延时器 setTimeout 队列, MessageChannel...本质上外层 React 事件系统处理函数上下文中,这样情况下,就可以通过一个开关,证明当前更新是可控可以做批量处理。接下来 React 就用一次可以了。

72820

C++20 Text Formattingfmtlib 适配问题小记

于此同时,我们构建系统改成了会检测编译环境是否支持 C++20 Text Formatting ,支持情况下使用 C++20 Text Formatting ,不支持情况下使用 fmtlib...如果没有自定义 formatter , fmtlib 里是能够自动转换成整数类型输出,但是(至少是 MSVC) C++20 Text Formatting 实现里是不会自动转换,我翻了一下ISO...这种情况下,同时 Visual Studio 2019 version 16.10 之前,VS还没有 /std:c++20 选项,所以cmake会把C++标准设为 /std:c++latest 。...-845572895 简单地说就是 MSVC 对一些C++20特性实现没有进入ABI稳定期,所以使用 /std:c++20 时并不会启用 C++20一些内容,包括但不限于Text Formatting...另一方面针对MSVC这种情况构建系统C++20 Text Formatting 检测脚本做了适配。

1.1K20

我用 Rust 改写了自己C++项目:这两个语言都很折磨人!

C++ 多数函数和方法都需要声明两次:一次 header 里,一次实现文件里。但 Rust 不需要,因此代码行数会更少。 C++ 完整构建时间比 Rust 长(Rust 更胜一筹)。...主要影响 Rust 和 C++ 构建时间问题在于,C++ 诊断系统是通过大量代码生成、、constexpr(常量表达式)实现,而我重写 Rust 版时,则用了代码生成、proc 、普通以及一点点...传闻 proc 速度很慢,也有说是因为代码质量太差导致 proc 速度慢。希望我写 proc 可以(祈祷~)。...我第一次搭建 Rust 自定义工具链比 Nightly 还要慢 2%,我 Rust config.toml 各种选项反复调整,不断交叉检查 Rust CI 构建脚本以及我自己脚本,最终好几天挣扎后才让这二者性能持平...我不爽?确实。改写过程,我不断学习着 Rust 相关知识,比如 proc marco 能替代三个不同代码生成器,简化构建流水线,让新开发者们日子更好过。

1.1K20

打通游戏服务端框架C++20协程改造最后一环

最后改造过程,因为C++20协程还是比较新东西,我们希望某些开发环境测试新协程,老环境还是走原先协程调用方式,我设计了一套对RPC和任务系统抽象,让无论是新协程还是老协程调用方式都保持一致...这里有感兴趣同学也可以一起交流下。 task::then() 生命周期变化 原先有栈协程,我们可以通过 task::then(action) 来串联一些相关逻辑。...而在新式协程 task_promise ,为了降低不必要开销,我没有提供这类事件存储。...那么可能比较自然能想到,如果我两个函数里 call_parent() 会调用 call_child() 且返回值一样,某些情况是否可以直接 return call_child() 返回值,而不使用...整个新协程实现接入过程,由于C++20协程能够让我们对类型信息做更多地编译期处理,我也优化了框架层很多类型检测细节。这些不是C++20协程接入必须项,这里就不列出了。

52420

盘点C++20模块那些事

3.2 子模块 4.接口与实现 最近看到大佬们写C++20库使用了module特性,特意来学习一下,于是有了这篇文章,本篇文章所有代码都在我星球里面,需要代码可以扫文末二维码。...其目的是将模块接口和实现封装在单个翻译单元,而不暴露实现细节。 例如:我想要创建一个Shape,计算其面积。...private里面,我自己g++版本是13,目前还不支持,会报如下错误: gcc目前支持情况可以戳这里 https://gcc.gnu.org/projects/cxx-status.html...,导入也有一些规则,例如: 不可导入自身 模块单元,所有导入必须出现在该模块单元任何声明之前。...时,不可以省略主模块名,上面主分区引入分区模块,我们可以使用:circle,这里不可以使用.circle。

18610

C++20终于要来了…

C++20 ,最重要两个特性是“模块 (Modules)”和“协程 (Coroutine)”。...“到现在为止,我们有了三种这样语言特性,让程序员可以(a)将一个用户定义名称(b)给予某个隐藏自身实现事物,从而创建自己“语言力量”。...协程(Coroutine)则表示一个函数泛化。C++ 贡献者协程提案解释说:“常规函数总是起始处开始,然后结束处退出,而协程还可以中止执行,之后中断位置继续执行。”...一次邮件采访,C++ 之父 Bjarne Stroustrup 曾表示,“对许多人来说,协程是个新事物。为了从中受益,必须学习一种全新风格。...采访,我们谈到了与 C++20 有关几个问题。 ? 他说,“我现在很有信心,C++20 会非常出色。我经常提到,C++11 用起来就像是一种全新语言。

53220

万字好文:从无栈协程到C++异步框架!

聊到中断, 其中比较重要就是执行环境保存和恢复了, 而上下文保存能力可以是操作系统直接提供, 也可以是程序机制自身所提供了, 综上所述, 我们大致可以将 c++协程实现方案迭代看成如下情况...另外, 相关调度器实现, 与 C++17 和 C++20 都是兼容, 像我们项目当时实现, 是可以很好做到 C++20 与 C++17 协程混用, 也样也方便在过渡阶段, 项目可以更平滑从...(六)绕开栈变量限制方法 提到栈变量限制, 肯定有同学会想到, 是否有方法绕开栈变量限制, 用一种更灵活方式处理协程临时值存取, 使其跨越中断点和重入点情况依然有效? 答案是肯定....子任务 - 导弹类技能相关代码 对于上面介绍导弹类技能(火球), 核心实现也比较简单, 实现了一个飞行物按固定速度逼近目标的效果, 具体代码如下, 利用 yield 我们可以实现在飞行物未达到目标点时候每帧执行一次效果..., 依赖 C++20 新特性和我们自己封装调度器, 我们已经可以很自然很顺畅用比较低心智负担来表达原来 python 实现功能了, 这应该算是一个非常明显进步了。

1K30

从无栈协程到C++异步框架

聊到中断, 其中比较重要就是执行环境保存和恢复了, 而上下文保存能力可以是操作系统直接提供, 也可以是程序机制自身所提供了, 综上所述, 我们大致可以将c++协程实现方案迭代看成如下情况...另外, 相关调度器实现, 与C++17和C++20都是兼容, 像我们项目当时实现, 是可以很好做到C++20与C++17协程混用, 也样也方便在过渡阶段, 项目可以更平滑从C++17向C...提到栈变量限制, 肯定有同学会想到, 是否有方法绕开栈变量限制, 用一种更灵活方式处理协程临时值存取, 使其跨越中断点和重入点情况依然有效?...在有协程调度器存在情况下, 业务侧对协程使用感受, 与其他语言如Python差异. 7.1 一个Python实现技能示例 我们以一个原来python利用包装协程调度器实现技能系统为例..., 依赖C++20新特性和我们自己封装调度器, 我们已经可以很自然很顺畅用比较低心智负担来表达原来python实现功能了, 这应该算是一个非常明显进步了。

20921

从无栈协程到 C++异步框架

聊到中断, 其中比较重要就是执行环境保存和恢复了, 而上下文保存能力可以是操作系统直接提供, 也可以是程序机制自身所提供了, 综上所述, 我们大致可以将 c++协程实现方案迭代看成如下情况...另外, 相关调度器实现, 与 C++17 和 C++20 都是兼容, 像我们项目当时实现, 是可以很好做到 C++20 与 C++17 协程混用, 也样也方便在过渡阶段, 项目可以更平滑从...提到栈变量限制, 肯定有同学会想到, 是否有方法绕开栈变量限制, 用一种更灵活方式处理协程临时值存取, 使其跨越中断点和重入点情况依然有效?..., 在有协程调度器存在情况下, 业务侧对协程使用感受, 与其他语言如 Python 差异. 7.1 一个 Python 实现技能示例 我们以一个原来 python 利用包装协程调度器实现技能系统为例..., 依赖 C++20 新特性和我们自己封装调度器, 我们已经可以很自然很顺畅用比较低心智负担来表达原来 python 实现功能了, 这应该算是一个非常明显进步了。

2.2K41

Linux 内核大转变:是否将迈入现代 C++ 时代?

Peter Anvin 邮件列表重启了关于 Linux内核C代码转换为C++讨论,并陈述了自己观点。说之前先看一下这个话题历史背景。...我是说,作为内核中大量和内联汇编黑客作者。...真正让我这么说是,我们最近要求 gcc 特定扩展很多东西实际上是标准 C++ 相对容易实现,并且许多情况下,允许无需全局代码更改情况下改进基础设施。...选择,C++14 是具有合理元编程支持“最低”版本。没有早期版本类型地狱(C++11 拥有大部分,但 C++14 填补了一些关键缺失部分)。...然而,在我看来,C++20 确实是主要游戏规则改变者;尽管早期版本可以玩很多 SFINAE hacks,但它们也给出了绝对无用信息作为错误消息。

17710

C++Rust 元编程之 BrainFuck 编译器(constexpr 过程解法)

之前模板元方式解法不支持嵌套循环,同时也不支持输入输出,在这次实现,支持嵌套循环、输出。...毕竟C++20之前constexpr不支持动态分配内存,像链表这种随时扩容方式暂时不可行。...C++版本实现过程可以先不加constexpr关键字,通过打印等debug手段调试通过后,最终加上constexpr关键字即可,最后既可以在运行时使用,也可以在编译时使用。...如果在编译期出现内存越界(cells越界)情况下,编译报错,即避免了ub。 Rust实现过程只能通过lib方式做,同样地也可以直接加打印,在编译时候输出,最终将打印去掉。...输出结果可以直接用Vec这种动态容器存,C++20之前暂时得通过定长(预留长度或提前计算)数组搞。而Rust过程只能用在编译时,无法用在运行时,而且只支持字面量方式,不支持变量传参给过程

98340

曾遭 Linus 炮轰“很烂” C++,现受开发者支持:Linux 内核应从 C 转到 C++!

Peter Anvin 说道,“让我有此感觉真正原因是,Linux 最近提出许多针对 GCC 扩展要求,其实在标准 C++ 很容易实现,而且许多情况下,无需修改全局代码即可改进基础架构。”...Peter Anvin 透露,其 Linux 内核中进行了大量元编程,这些代码通常使用一些极其糟糕定义来实现,而且几乎无法调试。例如 uaccess.h 类型欺骗,其中一些是 H....64 位内核 32 位用户空间类型情况,并强制执行字节序转换。...Peter Anvin 也帖子特别指出,没有一个正常人会期望使用 C++ 所有功能。...如果 OOP、异常或 RTTI 在内核没有意义的话,Linux 就不需要使用它们,但用更安全模板元编程和概念来取代 C 语言中容易出错,会让错误较少代码编程变得更容易。

47710

TIOBE 9月编程语言排行榜发布,C++增速最快,C++20功劳?

机器之心报道 编辑:小舟、魔王 C++20 能让 C++ 复兴? TIOBE 公布 2020 年 9 月编程语言排行榜,C++ 位列第四,仅次于 C、Java 和 Python。...该指数每月更新一次,是基于谷歌、必应等 25 种搜索引擎上与编程相关搜索查询得到结果。TIOBE 指数旨在反映编程语言受欢迎程度变化。 ?...C++20 两个关键特性是「模块」(modules)和「协程」(coroutines)。Jansen 表示:「模块这一特性将取代可怕 include 机制」。...「概念」并未出现在这本书中,但 Bjarne 用了三页篇幅为此致歉。Bjarne 表示,当时没有人知道如何设计和实现这一特性。...有开发者表示:「学习全部 C++ 规则是不切实际。甚至实际编写,C++ 代码越来越像 C 语言代码。」 ? 但是也有开发者表示,虽然要花时间了解更新内容,但每次更新都是有道理: ?

59820

实际编程避免内存越界几种方法

) 上面的定义表示表示把src所指向字符串以src地址开始前n个字节复制到dest所指数组,并返回被复制后dest。...代码中使用定义可以确保缓冲区大小和需要复制字符串大小同步修改,从而保证长度定义一致性。...]={"abc"}; printf("%lu",sizeof(pc)); } 如此,一些代码体量比较大项目中,可以一个地方定义系列以方便后期对字符串大小进行扩充改造。...总之,目前C/C++库,安全函数和非安全函数都进行了保留,实际编码,大家尽量选择安全库函数进行使用。...- EOF - 推荐阅读 点击标题可跳转 1、C++20新特性(十三)—约束和概念(上) 2、28 张图,一次性说清楚 TCP 3、C++20新特性(十二)—编程中常用几个新特性

22930
领券