作为一个程序员或编程技术爱好者,你是不是开始厌倦了各种虚拟机语言和脚本语言??no vm scripting 它们要么不是C系的。需要你重新学习一套语法。如python,c#,java,js之类….
cpp的宏定义,适当的使用既可以减少重复代码,又避免了模板带来的代码膨胀,是很顺手的利器。
时间大约在2015年,Arm第一次在 MDK 5.20 中引入了Arm Compiler 6(那时候的版本是 6.9),正式拉开了Arm官方编译器从第五版(armcc)到第六版(armclang)升级替换的序幕……
在我写 Makefile 的头 10 年里,我养成了一个非常不好的习惯 -- 完全严格使用 GNU Make 的扩展名。过去我并不知道, GNU Make 与 POSIX 所保证的可移植特性之间的区别与联系。通常情况,它并不十分重要,但是当在非 Linux 系统上进行构建时,比如在各种 BSD 系统上,就会变成一件麻烦事儿。我不得不指定安装 GNU Make,然后在心里记住不要使用系统自带的 make ,而是使用 gmake 这样的工具来调用它。
iOS 编译采用 Clang 作为编译器前端,LLVM 作为编译器后端,编译器前端负责语法分析,语义分析,生成生成中间码 (LLVM IR),在这个过程中,会进行类型检查,如果发现错误或者警告会标注出来在哪一行;编译器后端会进行机器无关的代码优化,生成机器语言,并且进行机器相关的代码优化。
开篇 我们人类创造东西的时候有个词叫做”仿生学“!人类创造什么东西都会模仿自己来创造,所以上帝没有长成树的样子而和人长得一样,科幻片里面外星人也像人一样有眼睛有鼻子……但是人类自己创造的东西如果太像自己,自己又会吓尿(恐怖谷效应),人类真是奇葩;奇葩的我们在20世纪创造了改变世界的东西——计算机(电脑),不用怀疑,这货当然也是仿生学!这货哪里长得像人了??别不服,先听我说完,先把你的砖头放下。狭义的仿生学是外形上仿生嘛,其实广义上仿生学还可以原理的仿生,构造的仿生,性能的仿生阿拉巴拉……,计算机(这里我狭义
在Liteos-a中,使用LLVM来编译程序。LLVM的本意是“Low Level Virtual Machine”,一个底层的虚拟机。但是它现在已经发展成了一种编译器(compiler)的框架系统。简单地说,LLVM可以取代GCC,LLVM容易扩展,可以提供更好的性能。
本文翻译自 2020 年 Facebook 的一篇博客:BPF Portability and CO-RE[1], 作者 Andrii Nakryiko。
编译器的作用便是把我们的高级编程语言(Objective-C)通过一系列的操作转化成可被计算机执行的机器语言(MachineCode)。
相信大部分使用过 ReactiveCocoa 的开发者都会使用都会喜欢 @weakify 和 @strongify 这两个宏。
导语 :这绝不仅仅是一篇 WWDC 2017 Session 411 学习笔记。除了有关 LLVM 9.0 的新特性之外,还有关于静态分析器和 Clang 5 Objective-C ARC 的一点看
在上一篇文章中介绍了提高socket性能的几个socket选项,其中给出了几个源于内核源码树中的例子,如果选择使用内核树中的Makefile进行编译的话,可能会出现与本地头文件冲突的情况,如重复定义变量,结构体类型不对等错误。这些问题大大影响了BPF程序的可移植性。
2000年,伊利诺伊大学厄巴纳-香槟分校(University of Illinois at Urbana-Champaign 简称UIUC)这所享有世界声望的一流公立研究型大学的 Chris Lattner(他的 twitter @clattner_llvm ) 开发了一个叫作 Low Level Virtual Machine 的编译器开发工具套件,后来涉及范围越来越大,可以用于常规编译器,JIT编译器,汇编器,调试器,静态分析工具等一系列跟编程语言相关的工作,于是就把简称 LLVM 这个简称作为了正式的名字。Chris Lattner 后来又开发了 Clang,使得 LLVM 直接挑战 GCC 的地位。2012年,LLVM 获得美国计算机学会 ACM 的软件系统大奖,和 UNIX,WWW,TCP/IP,Tex,JAVA 等齐名。
合抱之木,生于毫末;九层之台,起于垒土;千里之行,始于足下。--(老子·道德经 )
今年以来,就业市场不尽如人意的形式大家有目共睹,根据一份11月15日统计局发布的就业市场数据来看,1-10月份,全国城镇调查失业率平均值为5.6%。10月份,全国城镇调查失业率为5.5%,与上月持平。16-24岁、25-59岁劳动力调查失业率分别为17.9%、4.7%,均与上月持平,仍然处于2020年以来的高位。
在前一篇 <<C++反射 - 基于反射的Lua中间层实现>> 中, 我们介绍了如何利用c++反射的基础设施来实现一个lua中间层. 其中也有一些注册代码的示例. 当项目比较简单的时候, 手动编写相关的反射注册代码不会占用太多的时间. 但当项目达到一定规模, 手动编写并维护这些注册代码费时费力, 相关接口改个名可能会涉及到多处关联注册代码的修改, 这肯定是我们所不能接受的. 所以大部分项目在使用反射, 或者类反射的脚本中间层生成的过程中, 都会开发一些自动生成工具来减少重复性的工作, 笔者所经历的项目也是如此. 得益于llvm的流行, 我们大部分相关工具都是以libclang解析源代码头文件生成AST作为基础的. 本文将结合笔者的项目经验, 介绍如何在C#中用一种逐层处理的方式完成前文中提到的反射注册信息的自动生成的.
在中文嵌入式环境中,时不时的总能看到不少朋友”堆”“栈“傻傻分不清楚,我很早之前在文章《漫谈C变量——夏虫不可语冰》介绍过二者的区别,这里就不再深入展开,总之:
作者 | Strager 译者 | 马可薇 策划 | 褚杏娟 C++ 漫长的构建时间可谓臭名昭著,编程圈的“我的代码在编译”只是个段子,但 C++ 让这个段子长盛不衰。 谷歌 Chromium 规模的项目在新硬件上的构建时间长达一小时,而在老硬件上的构建时间更是达到了六个小时。虽然也有海量的调整方案能加速构建速度,还有不少削减构建内容但极易出错的捷径供人选择,再加上数千美元的云计算能力,Chromium 的构建时间仍是接近十分钟。这点我完全无法接受,人们每天都是怎么干活的啊? 有人说 Rus
今天开始,我们对编译器架构系统LLVM进行一个简单的了解和分析,了解完LLVM的编译流程之后,简单实现一个Clang插件玩玩。下面就开始今天的内容。
除了gtest之外,还有很多轻量级易用的单元测试库,比如doctest和catch。相比gtest需要编译/安装,他们都是header only的,直接包含到工程里就可以做单元测试了,portable又没有任何依赖,而且对编译器版本要求也不高,只需要C++11就行了,用了之后只有一个字:爽!
pch头文件的内容能够被项目中的其他所有源文件共享和访问,通常我们可在pch文件定义一些全局的宏和导入一些基础类
这是一件发生在我身上的真实事件,它根本不是一个故事——由于它差点就变成我人生的一次巨大乌龙——所以应该算是个事故。此前,我曾经发现过不下两位数的编译器Bug,所以一开始,当这一次事件到来的时候,我并未过多的产生过怀疑……
在《深入解析C++的auto自动类型推导》和《深入解析decltype和decltype(auto)》两篇文章中介绍了使用auto和decltype以及decltype和auto结合来自动推导类型的推导规则和用法,虽然确定类型的事情交给编译器去做了,但是在有的时候我们可能还是想知道编译器推导出来的类型具体是什么,下面就来介绍几种获取类型推导结果的方法,根据开发的不同阶段,你可以在不同阶段采用不同的方法,比如在编写代码时,编译代码时,代码运行时。
enca: http://dl.cihar.com/enca/ 文件名编码转换 iconv: 文件编码转换 convmv: 文件名编码转换 ldd: 查看可执行文件或动态链接库的依赖库 getconf: 查看配置信息(如getconf LONG_BIT可知当前系统是32位还是64位版本) tcpdump: 监视网络服务 sync: 将缓冲区内容写入磁盘 echo 3 > /proc/sys/vm/drop_caches: 手动释放缓存 man: 文档
作者丨 Vittorio Romeo 译者丨明知山 策划丨杜小芳 到目前为止,“‘零成本抽象’是一个谎言”应该(希望如此)已经成为一个常识了。公平地说,这更像是用词不当——“抽象在经过优化后可能提供零运行时开销”这样的说法可能会更恰当一些,但我知道为什么不是这么回事…… 大多数 C++ 程序员倾向于接受这样一个事实——“零成本抽象”只在启用了优化的情况下才能提供零运行时开销,而且它们对编译速度有负面的影响。同样是这些人,他们倾向于相信这种抽象是如此的有价值,以至于认为让他们的程序在调试模式下执行得很差(即没
本文讲述如何将基于BCC的BPF应用转换为libbpf + BPF CO-RE。BPF CO-RE可以参见上一篇博文。
在ARC项目中使用 performSelector: 函数出现“performSelector may cause a leak because its selector is unknown”这样的警告。这个问题的出现是因为在ARC模式下,运行时需要知道如何处理你正在调用的方法的返回值。这个返回值可以是任意值。所以平时我们用到的静态选择器就不会出现这个警告。因为在编译期间,这些信息都已经确定。
使用VBA编写用户自定义函数,不仅可以在程序中进行调用,还可以像Excel内置的工作表函数一样,在工作表公式中使用。例如下面的用户自定义函数GetNum:
导语 | 本文将结合笔者的项目经验,介绍如何在C#中用一种逐层处理的方式完成前文中提到的反射注册信息的自动生成的,希望为更多感兴趣的开发者提供一点经验和帮助。 在前一篇中:《C++反射:全方位解读Lura库的前世今生!》我们介绍了如何利用c++反射的基础设施来实现一个lua中间层。其中也有一些注册代码的示例。 当项目比较简单的时候,手动编写相关的反射注册代码不会占用太多的时间。但当项目达到一定规模,手动编写并维护这些注册代码费时费力,相关接口改个名可能会涉及到多处关联注册代码的修改,这肯定是我们所不能接受的
最近看到大佬们写的C++20库使用了module特性,特意来学习一下,于是有了这篇文章,本篇文章的所有代码都在我的星球里面,需要代码的可以扫文末的二维码。
C++允许任意长度的标识符名称,因此在命名时没必要非要保持简洁,建议使用描述性名称,并在风格上保持一致。
毫无疑问,宏是 Rust 编程语言的一个重要特性。像 println!, lazy_static!、各种派生宏和许多其他宏这样的宏节省了无数小时编写繁琐的样例代码。rust 改进了声明性宏,但 Rust 也有 proc-macros(过程宏)。Proc-macros 本质上是将标记流转换为标记流的编译器的扩展。在这两者之间,您可以使用常规的 Rust 代码和任意复杂的逻辑来重新排序、创建、删除或转换令牌。几乎没有任何限制。这使得 proc-macros 在声明性宏无法处理的情况下非常强大和有用。文章为我们讲解了 proc-macros 的优劣,同时也给出了很棒的 proc-macros 代码。
岁月真是个养猪场,这几年,人胖了,微信代码也翻了。记得 14 年转岗来微信时,用自己笔记本编译微信工程才十来分钟。如今用公司配的 17 年款 27-inch iMac 编译要接近半小时;偶然间更新完代码,又莫名其妙需要全新编译。在这么低的编译效率下,开发心情受到严重影响。于是年初我向上头请示,优化微信编译效率,上头也同意了。
前言 岁月真是个养猪场,这几年,人胖了,微信代码也翻了。记得 14 年转岗来微信时,用自己笔记本编译微信工程才十来分钟。如今用公司配的 17 年款 27-inch iMac 编译要接近半小时;偶然间更新完代码,又莫名其妙需要全新编译。在这么低的编译效率下,开发心情受到严重影响。于是年初我向上头请示,优化微信编译效率,上头也同意了。 现有方案 在动手之前,先搜索目前已有方案,大概有这几个优化点: 一、优化工程配置 1、将 Debug Information Format 改为 DWARF Debug 时是不
为了让xmake更好得支持交叉编译,这个版本我重构了整个工具链,使得工具链的切换更加的方便快捷,并且现在用户可以很方便地在xmake.lua中扩展自己的工具链。
早期 iOS 选用的是当时一家独大的 GCC 编译器作为 OC 语言的前端,但是随着时间的推移,Apple 为 OC 增加了很多特性,想要 GCC 给与实现,但是 GCC 却并没有支持,并且 GCC 本身代码耦合度较高,模块独立性比较差,并且《GCC运行环境豁免条款》限制了LLVM-GCC。这种背景下,Apple 就想找到一个高效、模块化的且开源的替换品,LLVM 进入了苹果的视线。
工作原因有时候会用python写写测试工具,感受到其快速实现应用的便利,但由于偏底层开发,主力语言依然是C。对于开发语言没有什么优劣概念,在特定的情景下哪种实现更佳就用哪种,工具合适才是最好的。
C11标准是C语言标准的第三个版本,前一个标准版本是C99标准。2011年12月8日,国际标准化组织(ISO)和国际电工委员会
c++ modules已经正式纳入了c++20草案,msvc和clang也已经基本实现了对modules-ts的支持,随着c++20的脚步离我们越来越近,xmake也开始对c++modules提前做好了支持。
首先要避免将 Homebrew 的 bin 目录添加到PATH ,而仅仅将你需要使用的几个可执行做软连接放到~/bin 下面(这个目录在PATH 中),以避免环境污染。
本文来自微信开发团队WeMobileDev公众号的原创技术分享,原题“iOS 微信编译速度优化分享”,即时通讯网收录时排版及部分文字有修订和优化。
本文档旨在收集对C++最佳实践所进行的协作性讨论,是《Effective C++》(Meyers) 和《C++ Coding Standards》(Alexandrescu, Sutter) 等书籍的补充。在讨论如何确保整体代码质量的同时,补充了一些没有讨论到的较低级别的细节,并提供了具体的风格建议。
从4.1.0版本开始,RT-Thread在保证向前兼容的基础上对原有的HOOK方式进行了改进,实现了如下的效果:
出错提示更友 好,比如 clang 在编译过程可以直接指出相对简单的出错位置以及它 “ 认为 ” 正确的方式 。
对于平常的应用程序开发,我们很少需要关注编译和链接过程。我们平常Xcode开发就是集成的的开发环境(IDE),这样的IDE一般都将编译和链接的过程一步完成,通常将这种编译和链接合并在一起的过程称为构建,即使使用命令行来编译一个源代码文件,简单的一句gcc hello.c命令就包含了非常复杂的过程!
实现一个TODO宏 转载http://blog.sunnyxx.com/2015/03/01/todo-macro/ 实现一个能产生warning的TODO宏,用于在代码里做备忘,效果: 下面一步步来
2021 年 4 月 14 号,一封主题名为《Rust support》的邮件出现在 LKML 邮件组中。这封邮件主要介绍了向内核引入 Rust 语言支持的一些看法以及所做的工作。邮件的发送者是 Miguel Ojeda,为内核中 Compiler attributes、.clang-format 等多个模块的维护者,也是目前 Rust for Linux 项目的维护者。
整洁的代码在团队中无疑是很受欢迎的,可以高效的被其它成员理解和维护,本文参考《C++代码整洁之道》和《Google C++编码规范》,结合自己的一些想法整理如下:
“工其事必先利其器”,对于一个全栈而言,一个与自己匹配的开发和学习环境,能够极大地提高个人的工作效率,很多时候都可以做到事半而功倍。环境也是一个外延很广的概念,这里我所涉及的包括硬件环境,集成开发环境与工具,数据库环境,操作系统环境,沟通工具和个人笔记本。
领取专属 10元无门槛券
手把手带您无忧上云