当前位置: 首页 > news >正文

谁是世界上最好的编程语言?--编程语言70年浅谈

1、编程语言发展史纵览

严谨起见,本文提到的编程语言指的是「第三代高级编程语言」。

首先,我们从时间维度入手聊聊编程语言。一图胜千言,我们从目前主流的编程语言中,挑选出流行的、具有历史影响力的语言。把它们按时间从上往下排序,依据类型和指导思想进行聚类,根据互相的影响使用线条指向。在补充了一些关键性的特征和评价之后,我整理出下图:

在这里插入图片描述

整理图的过程中,我发现很多有趣的点。让我们按时间顺序从上往下讲这张图。

Fortran

1950-1959:**这期间出现了第三代高级语言的鼻祖:Fortran 和 Lisp。**并且在 1958 年已经提出了结构化编程、递归、异常、函数式、命令式、垃圾回收等目前常用的概念。现在用到的大部分语言特性的理论的出现比我们想象的早。

CPL

1960-1969:这一阶段,IBM 的 ALGO 系列语言主要是对理论概念的探索和实践,经过两个版本后诞生出 ALGO60 里程碑式的作品。**这奠定了现代高级编程语言的基础。**同时这期间也有 Basic 语言降了低编程门槛,并第一次引入了「类型后置」的语法以更符合人类阅读习惯。

我们继续往右看,发现一个独特的系列:CPL 和 BCPL。这两个语言首次阐释了「特性不是越多越好」的黄金原则。因为拉长时间看,CPL 是第一个想成为大而全的语言。从 CPL 到 BCPL 到 C,都是在不断的减少特性;从 C 到 C++再到 C++20,特性又在不断增加。这时你就会明白为什么 C++语言会对添加新特性是那么谨慎和小心,但是还是阻挡不了让 C++ 变成下一个 CPL 的步伐。

1967 年诞生的 Simula64 提出了面向对象思想。面向对象思想开始发展。

Smalltalk 和 C

1970-1979:**这一年诞生出两个影响力极大的语言:Smalltalk 和 C。**巧合的是这两个语言都是在 1972 年发布的。Smalltalk 一定程度上继承了 Basic 远离机器、靠近人类的探索方式,发扬了语言动态性的思想,探索了面向对象的思想,模糊了编译型语言和解释型语言的界限,对后续的动态语言、脚本语言、客户端语言产生了深远的影响。

C 语言的诞生是为了满足 Unix 。当时 Unix 使用 BCPL 或 B 语言都无法满足操作系统对编程语言的要求,因此 C 语言应运而生。抛开语言特性,我们也能发现 C 语言的优势有非常多:不但有需求(开发操作系统的动机),还有经验的加成(尝试了 BCPL 和 B 语言,积累了大量的应用经验),并且遇到了好项目(Unix 操作系统),被最聪明的一群人使用(Unix 操作系统开发工程师)。这些注定了 C 语言具有强大的生命力。这期间编程语言的思想已经成熟,在面向对象思想在 Smalltalk 的推动下,C 语言成为下一阶段新语言的首捧。

C++

1980-1989:面向对象在 GUI 领域具有独特的优势。借着这十年图形界面交互高速发展的东风,面向对象思想发展进入快车道。**近十年是「面向对象思想」横行的十年。**还记得上个十年的 Smalltalk 和 C 吗?Smalltalk+面向对象诞生了 Self,C 语言+面向对象诞生了 C++,而 Smalltalk+C 语言+面向对象诞生了 Objective-C。苹果公司选择 Objective-C 作为其生态原生语言,使得我们在 2022 年还在写 Objective-C 的代码;C++和 Objective-C 对 C 语言的 100%兼容,使得这两个语言可以充分继承 C 语言的生态和运用它的人才。但是 Objective-C 的语法实在太别扭了,Objective-C 的关键字数量众多,并且语法没有一致性可言,在没有 IDE 补全环境下可以被称得上是最难写的语言。

C++保留了 C 语言的语法习惯和设计原则。从 C 切换到 C++几乎没有学习成本,并复用了 C 的生态,这使得 C++迅速流行起来。面向对象的思想在当时来看是实用且先进的。但是现在我们发现:基于面向对象思想发展出来的各种设计模式,渐渐地把代码玩出花来了。需要学习设计模式的就那几个架构师,但是现在人手一本设计模式。「把大象放到冰箱里」如此简单事情都要先写一堆的抽象。看代码把人绕晕… 当然,这是面向对象思潮的后话了。这也导致后来很多人投向简单直接的 C 了(做了这么多项目下来,发现面向对象很多时候是过度设计的源泉)。

VB

1990-1999:这是编程语言发展最快速的时代。这得益于计算机平民化和图形界面的发展,计算机进入千家万户、应用开发的需求激增。

编程语言的诉求开始发生变化:对性能要求变弱,而对安全(内存安全,线程安全)、人性化(可读性,表达力,低门槛)、动态性等提出更高要求。首先登场的是 VisualBasic。它强化了 IDE 和编程语言的结合,降低了应用开发门槛。

Python

接下来,到目前仍非常火的 Python 诞生了。Python 诞生在关键字和语法越来越复杂的年代。于是反其道而行之,追求简洁的语法。最具有标志性的是为了省略“{}”直接用「空格缩进」来划分代码块(这种语法首创是 1966 年的ISWIM语言)。

有趣的是,Python 追求的简洁语法,不是其成功的关键(由于 IDE 的进步,这种语法的形式核心价值已经消失),Python 成功的关键在于其出色的扩展性和跨平台。这让 Python 长期稳坐解释型语言头把交椅,并且后来的同类语言都很难超越。另一方面,Python 提出的「一件事最好是只有一种方法来做」的理念,贯穿语言设计,也成就了其优秀的学习曲线和低门槛的优点。所以一门语言能让人快速上手也是其核心竞争力。

JavaScript Java PHP Ruby

时间来到 1995 年,这一年诞生了四个我们耳熟能详的编程语言:JavaScript;Java;PHP;Ruby。说编程语言发展最快速的时代是这个时代,不为过。**Java 对 C++ 做减法、增加了安全性,成为历史上最成功的语言之一。**嵌入式、客户端、后台都有 Java 的身影。但是这种成功不会持续太久。因为Java 涉及领域太多了,语言特性博而不精。这注定了 Java 在 20 年后的没落。但是话又说回来,能在主流编程语言连续 10 多年榜上有名, Java 已经完成了的历史使命。

JavaScript 逐渐发展为浏览器上的原生语言。乘着 Web1.0、2.0 的东风,依仗和低门槛的学习成本,以及解释型引擎的快速发展,JavaScript 已经突破浏览器领域的限制,几乎无所不能。前端开发者们拿着 JavaScript 一次又一次的向客户端和后台阵地发起冲锋。ReactNative、Node.js 等技术炙手可热。

C#

2000-2010:这是 PC 互联网的高峰和移动互联网的萌芽的时代,也是我们记忆深刻的时代。C# 在 2000 年首发,微软基于 C++和 VB 的经验,借鉴 Java 推出了浓墨重彩的 C#。我们站在历史的高度可以说.Net 是失败的框架,但是这都难以掩盖 C#的光辉。C# 和 Java 同样是对 C++做减法,但是在很多细节上 C# 相对 Java 更接近 C++。由于 C# 搭上了不争气的搭档.Net,不像 Java 那样一开始就那么成功。塞翁失马,反而让 C# 的历史包袱非常轻。

**C# 在接下来的编程语言发展中多次成为第一个吃螃蟹的人。**C#给现代语言带来了非常多理念和思想,从 C#1.0 到 C#11,几乎一年一个版本。这发展速度其他编程语言只能望其项背。第一次接触可空类型(空安全)、??运算符、dynamic 类型都是在 C#。从工程角度来看,.Net 和 C# 支持跨平台。它俩动作总是慢半拍,错过了 PC 互联网和移动互联网的机会,只在 Windows 平台流行了。

个人认为,C++作为通用语言真的太成功了。但是它已经不是一门高安全性高人性化的一门语言,开发出更友好的安全的「C++」变得迫切起来。这时出现了很多新的语言蠢蠢欲试,其中包括 D 语言和 Rust:**D 语言是 C++编译器作者设计实践的一门新语言,它吸收了很实际项目的 C++经验教训。**但是仔细了解 D 语言你会发现,这就是拿 C++编译器魔改的一个「私有 C++语言」编译器。这也导致很多 C++的弊病不能彻底废除,属于改良派。

Rust

过了 3 年,Rust 横空出世。Rust 在理念上有很大的进步,比如虽然没有垃圾回收器。但是强制使用者明确对象的所有权,通过所有权编译器可以在合适的时机释放内存。**这是流行语言第一次不使用垃圾回收方式解决内存管理问题,在性能上比垃圾回收有着极大的优势。**虽然性能无损,但是相比垃圾回收模式更需要开发者编码时增加对象所有权的思考过程。即便如此,这也比在 C++花几个星期解决内存访问异常的问题好的多。**Rust 属于改革派。重新审视 C++的应用场景,对语言特性重新设计,这真的是一次精彩的尝试。**个人认为,Rust 也比 D 语言更加成功。

GO

到了 2007 年,对后台影响深远的 Go 语言诞生。当时大部分后台开发者还是用 C++或者 Java。我们前面说了 Java 注定会被替代,Go 首先在后台开发尝试吹响号角。后面还会提到 Kotlin 在客户端尝试替代 Java。

**Go 的诞生是一个非常好的时间节点。**除了剔除很多 Java 的弊病,还直击应用场景的痛点,在性能(多核,网络,并发)上着重发力,前进了一大步!

另外,Go 在工程上的成功,展示其了语法特性上的新尝试:Go 语言是近代第一个捡起类型后置的语言,提供了丰富的语法糖(如:=)使得代码简短并语义明确,这直接影响了后面的 Swift,Rust、Kotlin 等有着改革雄心的语言。Go 的成功除了 Go 的优秀因素外,我们也发现:瞄准细分应用场景的语言,在工程上是非常具有活力的。

Kotlin VS Swift

2011-2020:这是移动互联网的快速发展时代,最需要的是提高移动端高生产力语言。首先登场的是 Android 平台的 Kotlin。Kotlin 是 JVM 语言,能直接复用 JVM 的生态。Kotlin 和 Java 有点像当年的 Objective-C 和 C,但是不像 Objective-C 和 C 能混编。Kotlin 重新设计了语法规则,大大提高了可读性和安全性。3 年后苹果公司也交出 Swift 的答卷。Swift 被简单的形容为 「没有 C 的 Objective-C」。Objective-C 花了 30 年,终于摒弃了 C 语言的影响。

新的语言不能没有成熟生态的支持。和 Kotlin 与 Java 同是 JVM 语言不同,Swift 使用桥接(Bridging)的方法,得以复用 Objective-C 的生态。这未尝不是一次创新的尝试,可以让 Swift 没有任何包袱而重新设计。Kotlin 和 Swift 都选择了更适合于阅读的类型后置——更简洁的语法,更丰富的语法提高可读性和语义准确性。对于现有的大型项目的开发人员来说,从 Java 到 Kotlin ,或者从 Objective-C 到 Swift 有点难以适应。开个玩笑,我们被 C 风格语言「荼毒」了这么久,突然不荼毒了会很不习惯。

**在这个时期诞生的 Dart 旨意成为 Javascript 的接班人。**但是其关注度不多。随着 Flutter 的火热,Dart 也进入了大众的视野。Dart 与 Kotlin、Swift 彻底断舍离 C 风格,Dart 仍然选择 C 语言风格。

TypeScript

Dart 没有很好地成为 JavaScript 的接班人,谁能想到下一年的 TypeScript 火起来了?TypeScript 选择和 Dart 不同的方法接班——相比 Dart 激烈的方式,TypeScript 完全兼容 JavaScript。TypeScript 还增加一些语法让编译器把错误提前暴露,大大增强了 JavaScript 的安全性,给 JavaScript 狠狠的续了一命,让 JavaScript 可以继续「荼毒」程序员们。话说回来,Dart 在安全性、性能方面都给 JavaScript 带来了巨大的进步,也祝福 Dart 最终能顺利接班。

Carbon

2021-今:虽然新语言在诞生,但我们也不能忽视每个编程语言都在不断的发展和变化。在 2022 年谷歌推出的 Carbon,旨在修复 C++的几个明显缺点,提高 C++的可读性、安全性,并平滑语言的学习曲线。Carbon 和 D 语言有点相似,属于对 C++现代化的改良派,但是和 D 语言不同的是:Carbon 有个好父亲,并且通过「双向互操作性」融入 C++生态,也抛弃 了C++的历史包袱,并使得语言的语法可以重新设计。

从 Java 被逐渐替代的经验教训中我们发现,目前 C++在应用层正处于城池渐失的状态。我们应该明白:应用层和底层框架的需求不同,不应该从顶到底都使用一套语言。现在 C++ 所失之城池就是新语言非常好的机会。抓住应用层的安全、人性化、和与 C++ 的双向互操作性,Carbon 确实是准确找到了定位。简而言之,谷歌的 Carbon 还是备受期待的。

除了在应用层 C++ 有待进步,在底层场景上的C++也有很大的进步空间。2022 年,Herb Sutter 的实验项目 CppFront 值得一提。简单来说,CppFront 通过给 C++增加一层预处理语法规则(cpp2) 来提高 C++的易用性和安全性。和 Rust、Carbon 不同,Herb Sutter 的这个实验项目不是寻找 C++的代替者,而是 「寻找突破界限的方法」,使 C++ 本身向前发展,并加倍努力使用 C++,而不是切换到其他东西。这是个为 C++标准探路的实验项目,有丰富的理论和实验,下一代 C++标准必然能焕发出新的活力。但是也别太奢望 C++能回到从前那样样能手的辉煌,历史的经验告诉我们大而全的语言最后都会被替代。

我们从时间维度简单的从上往下捋了一遍,不难看出:主流通用编程语言主要受 2 个成熟语言(Smalltack 和 C 语言,且都诞生于 1972 年)的影响。有的语言被某个影响深一些,有的两者都汲取;接着主要往更安全、人性化、跨平台这三个方向进行发展,而在性能,语法,重用生态、扩展性,IDE 友好等多维度各有发展、取舍、借鉴。

同时我们也发现:**编译型和解释型语言边界逐渐模糊,语法流行交替更迭,语法语义更加明确,语言的目标领域更加细化。**别看近十几年新语言出了那么多,语法花里胡哨,其实很多语言同质化严重。类型后置也是早就玩过的,每个时代流行不同罢了。前面我们顺着时间简单过了一遍图中的部分语言,这张大图可以帮助各位梳理思路。

在这里插入图片描述

2、 编程语言未来二十年发展趋势

**编程语言的发展离不开计算机领域其他技术的发展。**编程语言发展至今,特性的互相借鉴的情况越来越普遍,语言生态互通也更常见(如直接兼容,或者 Bridging 技术),编译型和解释型界限也越来越模糊(比如 Dart 既能编译运行也能解释运行,还能边解释运行边编译),语言之间的性能差异也越来越小(V8 引擎,JIT,硬件性能提高),语言之间的互相转换也开始普遍(Kotlin to Java to JavaScript,Dart to Javascript)。甚至,在 AI 的加持下,准确的把具有垃圾回收语言(如 Kotlin)往没有垃圾回收语言(如 C)的转换,也变得可能。

如果使用 AI 做预处理,静态检查和类型安全的语言没有了优势。如果使用 AI 辅助编程,我们甚至发现我们不是在写代码,而是在跟 AI 聊天(如最近很火的 chatGPT)!这时你还会纠结 AI 在使用什么编程语言吗?高级编程语言发展的黄金时代即将落幕。我们很难再看到像垃圾回收、空安全、异步等让我们兴奋不已的新语言特性了。当然,编程语言还是会继续往更安全、人性化(可读性、可写性)、跨平台这三个方向进行发展。

但是 AI 辅助编程的出现让编程语言的使用者发生了一些变化,编程语言将同时被人类和 AI 共同使用——基于这个方向,编程语言的可读性(精简、语义准确)和跨平台会更加重要。

3、长期展望:二十年后的发展趋势是什么?

探讨这个问题,我们要回到编程语言的初心:什么是编程语言?编程语言是被标准化的、用来向计算机发出指令、让程序员利用计算机能力的工具。

简而言之,编程语言只是我们利用计算机能力的工具。小白用户能理解按钮、图片、短视频,计算机能理解汇编指令。这时需要一群聪明的人把用户需求转换为机器代码,这群人用编程语言让这项工作变得简单。

二十年后我们还需要一群人专门设计交互、视觉、框架、代码来架起小白用户使用计算机的桥梁吗?也许到那时的人们也许分不清 AI 和计算机的区别了,到那时利用计算机的能力也许就像我们现在跟同事说话交流一样简单。

也许你会觉得 AI 也需要编程语言去实现,以方便后续的维护和迭代。但是也许那时 AI 已经具备自己维护代码的能力了,也许人类已经看不懂什么是 C++、Python,只有 AI 懂了,甚至 AI 自己发明新的编程语言编写了下一代的 AI(AI 可能已经觉得可读性是个包袱了,直接写机器代码不是更爽?)。就如第一个 C 语言编译器是用汇编写的,后面 C 语言编译器是用 C 语言写的一样。我们前面讨论的大部分的编程语言注定回到了历史的垃圾桶里。本来无一物,何处惹尘埃。

相关文章:

谁是世界上最好的编程语言?--编程语言70年浅谈

1、编程语言发展史纵览 严谨起见,本文提到的编程语言指的是「第三代高级编程语言」。 首先,我们从时间维度入手聊聊编程语言。一图胜千言,我们从目前主流的编程语言中,挑选出流行的、具有历史影响力的语言。把它们按时间从上往下…...

Webpack前端资源加载/打包工具

文章目录一、Webpack1、什么是Webpack2、Webpack安装2.1全局安装2.2安装后查看版本号3、创建项目3.1初始化项目3.2创建src文件夹3.3 src下创建common.js3.4 src下创建utils.js3.5 src下创建main.js4、JS打包4.1创建配置文件4.2执行编译命令4.3创建入口页面4.4测试5、CSS打包5.1…...

springcloud3 fegin实现服务调用1

一 Fegin的作用 1.1 fegin的作用 fegin是一个声明式的web服务客户端,让编写web服务器客户端变得非常容易,只需创建一个接口并在接口中添加FeginClients注解即可。 Fegin的使用方式:使用fegin的注解定义接口,调用这个接口&#…...

专业版即将支持自定义场景测试

物联网 MQTT 测试云服务 XMeter Cloud 专业版于 2022 年底上线后,已有不少用户试用,对数千甚至上万规模的 MQTT 并发连接和消息吞吐场景进行测试。同时我们也收到了希望支持更多物联网协议测试的需求反馈。 新年伊始,XMeter 团队全力聚焦于 …...

Process Monitor工具使用实验(23)

实验目的 学习Process Monitor实用小工具的使用,学会利用Process Monitor工具观察程序进程/线程、文件系统、注册表、网络连接等的活动。预备知识 Process Monitor是一个Windows系统下先进的监视工具,它可以显示文件系统、注册表、网络连接、进程…...

钓鱼客服到拿下服务器全过程(重点在于钓鱼添加img src)

重点总结 钓鱼时主动在变量中添加了字段,等待用户点击获取ip信息进行下一步资金盘plus呢 左看右看没啥东西,看看客服系统能不能打xss。 吊毛客服居然不在线,这套客服系统见过是whisper,之前审计过没有存储xss 但能通过伪造图片…...

【C++】list迭代器的深度剖析及模拟实现(感受类封装,类和对象的思想)

早点睡兄弟,别一天到晚就熬夜。 文章目录一、通过list迭代器来感受类和对象以及类封装的思想1.迭代器的特征和本质是什么?(两大特征:类的内嵌类型,行为像指针。本质:内置类型定义的变量或自定义类型实例化…...

JavaScript 语句、注释和代码块实例集合

文章目录JavaScript 语句、注释和代码块实例集合JavaScript 语句JavaScript 代码块JavaScript 单行注释JavaScript 多行注释使用单行注释来防止执行使用多行注释来防止执行JavaScript 语句、注释和代码块实例集合 JavaScript 语句 源码 <!DOCTYPE html> <html> &…...

华为机试题:HJ103 Redraiment的走法(python)

文章目录&#xff08;1&#xff09;题目描述&#xff08;2&#xff09;Python3实现&#xff08;3&#xff09;知识点详解1、input()&#xff1a;获取控制台&#xff08;任意形式&#xff09;的输入。输出均为字符串类型。1.1、input() 与 list(input()) 的区别、及其相互转换方…...

html+css 实现 熊猫样式

效果 html代码 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><meta http-equiv"X-UA-Compatible"…...

Vue基础19之插槽

Vue基础19插槽不使用插槽App.vueCategory.vue默认插槽&#xff1a;slotApp.vueCategory.vue具名插槽App.vueCategory.vue作用域插槽App.vueCategory.vue总结插槽 不使用插槽 App.vue <template><div class"bg"><Category :listData"food"…...

[Gin]框架底层实现理解(一)

前言&#xff1a;路由原理———压缩字典 这边简单讲一下gin非常重要的一个基点&#xff0c;也就是他作为go web框架的一个亮点 也就是Trie树和压缩字典算法 gin 通过树来存储路由&#xff0c;讲路由的字符拆解为一个个的结点&#xff0c;在获取handler函数时&#xff0c;会…...

css3横向无限公告消息滚动功能

html部分 {{item}}css部分 .boxingeds{ display: flex; flex-wrap: wrap; width: 150%; position: relative; left: 1000rpx; padding: 30rpx 0; position: absolute; top: 23%; z-index: 2; -webkit-animation: myfirst 30s linear 2s infinite; .textname{ display: inlin…...

【Git】Git工作流程及使用

Git工作流程及使用Git工作流程与常用命令Git工作流程Git常用命令项目中使用Git的场景需求开发前的分支拉取流程&#xff0c;需求开发后的分支合并流程分支合并出现冲突如何解决线上出现事故代码如何回退Git工作流程与常用命令 Git工作流程 workspace&#xff1a;工作区 stagin…...

降本增效,合作伙伴营销助力业绩增长

事实上&#xff0c;SaaS品牌透过“推荐奖励计划” 带来的业务营收平均占比高达 30%。例如&#xff0c;Evernote超过11300万用户通过老用户推荐来到Everote&#xff1b;Trello每日注册用户中有35%来自用户推荐&#xff1b;PayPal自从推行“推荐奖励计划”以来&#xff0c;用户日…...

【独家】华为OD机试 - 运动会(C 语言解题)

最近更新的博客 华为od 2023 | 什么是华为od,od 薪资待遇,od机试题清单华为OD机试真题大全,用 Python 解华为机试题 | 机试宝典【华为OD机试】全流程解析+经验分享,题型分享,防作弊指南)华为od机试,独家整理 已参加机试人员的实战技巧文章目录 最近更新的博客使用说明本期…...

【每天学习一点新知识】JNDI注入

什么是JNDIJNDI是Java的一种API&#xff0c;为我们提供了查找和访问各种命名和目录服务的通用统一的接口。通过JNDI统一接口我们可以来访问各种不同类型的服务&#xff0c;例如远程方法调用&#xff08;RMI&#xff09;&#xff0c;通用对象请求代理体系结构&#xff08;CORBA&…...

Transwarp KunDB 实施方案

星环科技 KunDB 实施方案方案描述优点缺点定期全量逻辑备份基于kundb导入导出工具&#xff0c;定期向kundb导出全量的逻辑数据,恢复时向kundb导入最近全量的逻辑数据。如每天00&#xff1a;00进行一次全量逻辑备份。1. 数据可视化2.方便问题排查3.还原失败不影响数据库的运行状…...

Redis学习之主从复制(八)

这里写目录标题一、主从复制简介1.1原理1.2 主从复制的作用二、主从复制工作流程2.1 建立连接2.1.1 master和slave连接流程2.1.2 master和slave互联2.1.3主从断开连接&#xff08;了解&#xff09;2.1.4 授权访问&#xff08;了解&#xff09;2.2 数据同步2.3 命令传播2.3.1 命…...

mysql8.0安装

创建文件 mkdir /usr/local/mysql mkdir /usr/local/mysql/data cd /usr/local/mysql 下载 wget https://dev.mysql.com/get/Downloads/MySQL-8.0/mysql-8.0.20-linux-glibc2.12-x86_64.tar.xz 解压 xz -d mysql-8.0.20-linux-glibc2.12-x86_64.tar.xz tar xvf mysql-8.0.20-…...

前端经典面试题(有答案)

代码输出结果var a 10var obj {a: 20,say: () > {console.log(this.a)}}obj.say() var anotherObj { a: 30 } obj.say.apply(anotherObj) 输出结果&#xff1a;10 10我么知道&#xff0c;箭头函数时不绑定this的&#xff0c;它的this来自原其父级所处的上下文&#xff0c…...

华为云服务器安装mysql连接失败问题

新买了一个华为云服务器&#xff0c;装了一个宝塔linux工具&#xff0c;很好用&#xff0c;很好用。安装软件&#xff0c;管理软件都很方便。具体怎么操作官方文档很详细&#xff0c;不在这里赘述了。 问题&#xff1a;安装好mysql&#xff0c;安全组开放3306端口。修改root连接…...

合作伙伴管理软件VS CRM,企业应该选择哪一个?

当涉及到管理你公司的伙伴关系和与客户的关系时&#xff0c;有两个主要选择&#xff1a;合作伙伴管理软件和CRM&#xff08;客户关系管理&#xff09;软件。虽然这两种工具都可以帮助你跟踪商业关系的重要信息&#xff0c;但它们都有各自的优势和不足。 合作伙伴管理软件是专门…...

Matter 系列 #9|乐鑫 Matter 预配置服务加速设备生产

乐鑫 Matter 系列文章 #9 目录 Matter 预配置服务 1. 设备认证 (Device Attestation) 2. 独特性 (Uniqueness) 3. 安全性 (Security) 联系我们​​​​​​​ 如今&#xff0c;物联网行业蓬勃发展&#xff0c;大量市场参与者正在积极地构建 Matter 智能设备。 乐鑫一直致…...

手把手交叉编译mysql

1.下载mysql&#xff08;注意下载boost版本&#xff0c;这样会少一步编译&#xff09; 下载mysql的时候一定要看好交叉编译工具链的版本。因为mysql 8.0需要的工具链版本较高&#xff0c;所以有可能不支持 查看链接如下&#xff1a; MySQL :: MySQL 8.0 Reference Manual :: …...

升压模块直流隔离低压转高压稳压电源5v12v24v转50V100V110V150V200V250V400V500V600V800V1000V

特点效率高达80%以上1*2英寸标准封装单电压输出价格低稳压输出工作温度: -40℃~85℃阻燃封装&#xff0c;满足UL94-V0 要求温度特性好可直接焊在PCB 上应用HRB W2~40W 系列模块电源是一种DC-DC升压变换器。该模块电源的输入电压分为&#xff1a;4.5~9V、9~18V、及18~36VDC标准&…...

LeetCode:977 有序数组平方

给你一个按 非递减顺序 排序的整数数组 nums&#xff0c;返回 每个数字的平方 组成的新数组&#xff0c;要求也按 非递减顺序 排序。 示例 1&#xff1a; 输入&#xff1a;nums [-4,-1,0,3,10] 输出&#xff1a;[0,1,9,16,100] 解释&#xff1a;平方后&#xff0c;数组变为 […...

JAVA环境配置多个环境(全,详细,简单)

下载java包&#xff1a;https://www.oracle.com/java/technologies/downloads &#xff08;8版本稳定&#xff09; 直接无脑安装java程序 &#xff08;包括jdk-开发与jre-运行&#xff09; 接下来是java环境配置&#xff1a; 创建系统变量 &#xff08;用户变量也可以&#…...

10 Seata配置Nacos注册中心和配置中心

Seata配置Nacos注册中心和配置中心 Seata支持注册服务到Nacos&#xff0c;以及支持Seata所有配置放到Nacos配置中心&#xff0c;在Nacos中统一维护&#xff1b; 高可用(集群)模式下就需要配合Nacos来完成: 具体配置如下 注册中心 Seata-server端配置注册中心&#xff0c;…...

[数据库]表的增删改查进阶

●&#x1f9d1;个人主页:你帅你先说. ●&#x1f4c3;欢迎点赞&#x1f44d;关注&#x1f4a1;收藏&#x1f496; ●&#x1f4d6;既选择了远方&#xff0c;便只顾风雨兼程。 ●&#x1f91f;欢迎大家有问题随时私信我&#xff01; ●&#x1f9d0;版权&#xff1a;本文由[你帅…...

河北省住建和城乡建设厅网站/网络优化软件

目录1、读写分离简介2、读写分离实现1、读写分离简介 对于同一时刻有大量并发读操作和较少写操作类型的应用系统来说&#xff0c;将数据库拆分为主库和从库&#xff0c;主库负责处理事务性的增删改操作&#xff0c;从库负责处理查询操作&#xff0c;能够有效的避免由数据更新导…...

网站案例 中企动力技术支持/短视频推广app

多数时候需要以日志形式记录程序运行状态&#xff0c;日志的名称用时间&#xff08;精确到秒&#xff09;来命名可以避免重复 实例&#xff1a; int CreateErrorLog() {string path "F:\logpath";char buffer[256]; buffer path.c_str();len path.length();if (…...

企业网站的建立要做的准备/网站建设开发

转载自&#xff1a;http://www.cnblogs.com/SissyNong/archive/2009/09/22/1571752.html 一、获取当前文件的路径 1. System.Diagnostics.Process.GetCurrentProcess().MainModule.FileName 获取模块的完整路径&#xff0c;包括文件名。 2. System.Environment.CurrentDirect…...

共享网站哪里建/全球疫情最新消息

在前面我们讲到了基于矩阵分解的LSI和NMF主题模型&#xff0c;这里我们开始讨论被广泛使用的主题模型&#xff1a;隐含狄利克雷分布(Latent Dirichlet Allocation&#xff0c;以下简称LDA)。注意机器学习还有一个LDA&#xff0c;即线性判别分析&#xff0c;主要是用于降维和分类…...

织梦分类信息做的网站/企业网络营销策略案例

五大核心质量工具经常被冠以“TS五大质量工具”&#xff0c;实际上这五个工具为北美AIAG—汽车工业行动组织(AIAG由美国三大汽车集团Ford、GM、Chrysler发起)开发。五大工具包括APQP、FMEA、PPAP、SPC、MSA。1. APQP--Advanced Product Quality PlanningAPQP即先期质量策划&…...

wordpress企业授权/外链

这是一道poj1184的题目&#xff0c;由于求解的是最优解&#xff0c;所以首先想到的就是使用广度优先搜索。对于这道题目我同时使用set容器&#xff0c;来作为状态判重。 代码如下&#xff1a; /** POJ 1184 聪明的打字员 * 版本1 &#xff1a; 普通的广度搜索 ,使用set进行状态…...