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

辽宁做网站哪家好/淘宝搜索关键词排名

辽宁做网站哪家好,淘宝搜索关键词排名,学院网站建设报告,做网站公司郑州郑州的网站建设公司排名这里写自定义目录标题 相似点(主要与Swift进行对比)不同点亮点 花了半天时间,对华为新出的仓颉编程语言做了简单的了解,整体观感如下: 仓颉语言看起来是一门大而全的语言,吸纳了现存的很多中编程语言的范式…

这里写自定义目录标题

  • 相似点(主要与Swift进行对比)
  • 不同点
  • 亮点

花了半天时间,对华为新出的仓颉编程语言做了简单的了解,整体观感如下:

  • 仓颉语言看起来是一门大而全的语言,吸纳了现存的很多中编程语言的范式和语法。
  • 语法非常像Swift,有些语法又有rust的影子;
  • 静态类型语言,但编译为二进制可执行文件,无虚拟机。并发、垃圾回收与内存管理模块与java类似;
  • 支持声明式UI语法,类似于现在ArkUI使用的ArkTS语法,估计以后HarmonyOS的开发语言会从ArkTS转化为仓颉。

相似点(主要与Swift进行对比)

  • 类型扩展

    1. 添加函数 (swift包含)

      仓颉:
      extend String { func printSize() {print(this.size)}
      }"123".printSize() // 3
      Swift:
      extension String {func printSize() {print(self.size)}
      }"123".printSize() // 3
      
    2. 添加属性 (swift不包含)

    3. 添加操作符重载 (swift包含)

      仓颉:
      struct Point {let x: Intlet y: Intinit(x: Int, y: Int) {...}operator func +(rhs: Point): Point {return Point(this.x + rhs.x,this.y + rhs.y)}
      }let a: Point = ...
      let b: Point = ...
      let c = a + b
      
      Swiftstruct Point {let x: Intlet y: Intinit(x: Int, y: Int) {self.x = xself.y = y}static func +(lhs:Point, rhs: Point) -> Point {return Point(x:lhs.x + rhs.x,y: lhs.y + rhs.y)}
      }let c: Point = Point(x: 1, y: 1)
      let d: Point = Point(x: 2, y: 2)
      let e = c + d
    4. 实现接口 (swift包含)

      仓颉:
      sealed interface Integer {}extend Int8 <: Integer {}
      extend Int16 <: Integer {}
      extend Int32 <: Integer {}
      extend Int64 <: Integer {}let a: Integer = 123 // ok
      
      Swift:
      protocol Integer {}extension Int8 : Integer {}let a :Integer = Int8(123)
  • 代数数据类型和模式匹配

    仓颉中的枚举定义与使用:enum BinaryTree {| Node(value: Int, left: BinaryTree, right: BinaryTree)| Empty
    }func sumBinaryTree(bt: BinaryTree) {match (bt) { //match关键字实际是rust语言中的模式匹配关键字。case Node(v, l, r) => v + sumBinaryTree(l) + sumBinaryTree(r)case Empty => 0}
    }
    
    Swift中的枚举定义与使用:indirect enum BinaryTree {case Node(value: Int, left: BinaryTree, right: BinaryTree)case Empty
    }func sumBinaryTree(bt: BinaryTree) -> Int {switch bt {case .Node(let value, let left, let right):return value + sumBinaryTree(bt: left) + sumBinaryTree(bt: right)case .Empty:return 0}
    }
  • 泛型
    泛型函数的声明方式几乎一样,尤其是针对泛型类型T的限制,两者都使用where关键字。

    仓颉:
    func lookup<T>(element: T, arr: Array<T>): Bool where T <: Equatable<T> {for (e in arr){if (element == e){return true}}return false
    }
    
    Swift:
    func lookup<T>(element: T, arr: Array<T>) -> Bool where T : Equatable {for e in arr {if (element == e){return true}}return false
    }
    
  • 命名参数&参数默认值

    仓颉:
    func dateOf(year!: Int64, month!: Int64, dayOfMonth!: Int64, timeZone!: TimeZone = TimeZone.Local) {}dateOf(year: 2024, month: 6, dayOfMonth: 21) // ok
    dateOf(year: 2024, month: 6, dayOfMonth: 21, timeZone: TimeZone.UTC) // ok
    Swift:
    func dateOf(year: Int64, month: Int64, dayOfMonth: Int64, timeZone: TimeZone = TimeZone.current) {}dateOf(year: 2024, month: 6, dayOfMonth: 21) // ok
    dateOf(year: 2024, month: 6, dayOfMonth: 21, timeZone: TimeZone.gmt) // ok
    
  • 尾随lambda(trailing lambda)

    仓颉:
    func unless(condition: Bool, f: ()->Unit) {if(!condition) {f()}
    }int a = f(...)
    unless(a > 0) {print("no greater than 0")
    }
    
    Swift:
    func unless(condition: Bool, f: () -> Void) {if !condition {f()}
    }unless(condition: true) {print("no greater than 0")
    }
  • 属性
    属性的get/set配置。

    仓颉:
    x和y是只读的,只有get实现,而color则是可变的,用mut prop修饰,同时具有getset实现。
    class Point {private let _x: Intprivate let _y: Intprivate var _color: Stringinit(x: Int, y: Int, color: String) {...}prop x: Int {get() {Logger.log(level: Debug, "access x")return _x}}prop y: Int {get() {Logger.log(level: Debug, "access y")return _y}}mut prop color: String {get() {Logger.log(level: Debug, "access color")return _color}set(c) {Logger.log(level: Debug, "reset color to ${c}")color = c}}
    }main() {let p = Point(0, 0, "red")let x = p.x // "access x"let y = p.y // "access y"p.color = "green" // "reset color to green"
    }
    
    Swift:
    x和y是只读的,只有get实现,而color则是可变的,同时具有getset实现。
    class Point2 {private let _x: Intprivate let _y: Intprivate var _color: Stringinit(_ x: Int, _ y: Int,_ color: String) {self._x = xself._y = yself._color = color}var  x: Int {get {return _x}}var y: Int {get {return _y}}var color: String {get {return _color}set(c) {_color = c}}
    }let p = Point2(0, 0, "red")p.x = 100 //errorlet x = p.x // "access x"let y = p.y // "access y"p.color = "green" // "reset color to green"
  • 空引用安全

    在仓颉中,对于任意类型T,都可以有对应的可选类型Option。具有Option类型的变量要么对应一个实际的具有T类型的值v,因此取值为Some(v),要么具有空值,取值为None。

    可选类型(Option)是一种 enum 类型,是一个经典的代数数据类型,表示有值或空值两种状态。
    在Swift,用来表示变量可空的关键字为Optional.

    仓颉:
    var a: ?Int = None
    a?.toString() // None
    a ?? 123 // 123
    a = Some(321)
    a?.toString() // Some("321")
    a ?? 123 // 321
    
    Swift:
    var f: Int? = nil
    print(f) //nil
    print(f ?? 123) // 123
    var g = Optional(321)
    print(g) //Optional(321)
    print(g ?? 123) // 321
    
  • 值类型
    仓颉和Swift都使用struct来实现用户自定义的值类型。

    仓颉:
    struct Point {var x: Intvar y: Intinit(x: Int, y: Int) { ... }...
    }var a = Point(0, 0)
    var b = a
    a.x = 1
    print(b.x) // 0
    
    Swift:
    struct Point {var x: Intvar y: Intinit(x: Int, y: Int) { self.x  = xself.y = y}}var a1 = Point3(x:0,y: 0)
    var b1 = a1
    a1.x = 1
    print(b1.x) // 0
    
  • 仓颉:
    定义一个名为 DebugLog 的宏:
    public macro DebugLog(input: Tokens) {if (globalConfig.mode == Mode.development) {return quote( println( ${input} ) )}else {return quote()}
    }
    使用 DebugLog 宏:
    @DebugLog( expensiveComputation() )
    
    Rust:
    use proc_macro;#[some_attribute]
    pub fn some_name(input: TokenStream) -> TokenStream {
    }
    
  • Actor

    使用更简洁的语法来实现异步编程、并发编程中的数据竞争问题。

    仓颉:
    actor Account {instance var balance: Int64init (x: Int64) { this.balance = f1() }instance func performWithdraw(amount: Int64): Unit {balance -= amount}receiver func withdraw(amount: Int64): Bool {if (this.balance < amount) {return false} else {this.performWithdraw(amount);return true}}
    }
    
    Swift:
    注意:这段代码是来自于Swift的官方文档。仓颉的文档示例与swift的文档示例代码基本是一致的,看来仓颉语言应该是参考了Swift语言不少的东西。
    actor Account {var balance: Int = 20// current user balance is 20// ...func withdraw(amount: Int) {guard balance >= amount else {return}self.balance = balance - amount}
    }
    
  • 可变性修饰符
    可变性修饰符:let 与 var,分别对应不可变和可变属性,

不同点

  • 垃圾收集方案

    仓颉使用追踪式垃圾回收,类似于java中的基于可达性分析的垃圾回收算法;Swift使用引用计数法。(Swift有weak关键字)

亮点

  • 管道(Pipeline)操作符

    func double(a: Int) {a * 2
    }func increment(a: Int) {a + 1
    }double(increment(double(double(5)))) // 425 |> double |> double |> increment |> double // 42
    
  • 类型扩展可添加属性

  • try-with-resources
    该特性应该借鉴自java.

    try (input = MyResource(),output = MyResource()) {while (input.hasNextLine()) {let lineString = input.readLine()output.writeLine(lineString)}
    }
    
  • 溢出检查
    这个机制使得大多数时候,整数溢出都会及时被感知,避免造成业务隐患。

    @OverflowWrapping
    func test(x: Int8, y: Int8) { // if x equals to 127 and y equals to 3let z = x + y // z equals to -126
    }
    
  • 并发编程

    1. 线程创建简单且占用内存量小。使用Spawn关键字来创建新线程。

      func fetch_data(url: String) {let response = http_get(url)process(response)
      }main() {let urls = ["https://example.com/data1", "https://example.com/data2", ...]let futures = ArrayList<Future<Unit>>()for (url in urls) {let fut = spawn { fetch_data(url) }  // 创建仓颉线程进行网络请求futures.append(fut)}for (fut in futures) {  // 等待所有仓颉线程完成fut.get()}
      }
      
    2. 无锁并发对象。
      运行时库提供了一系列的原子操作对象,尽量让开发者少使用互斥量或者锁来实现线程安全。同时提供的这些原子操作对象,针对多线程操作做了优化,其效率比单纯使用互斥量要高得多。

相关文章:

华为仓颉编程语言观感

这里写自定义目录标题 相似点&#xff08;主要与Swift进行对比&#xff09;不同点亮点 花了半天时间&#xff0c;对华为新出的仓颉编程语言做了简单的了解&#xff0c;整体观感如下&#xff1a; 仓颉语言看起来是一门大而全的语言&#xff0c;吸纳了现存的很多中编程语言的范式…...

Elasticsearch:倒数排序融合 - Reciprocal rank fusion - 8.14

警告&#xff1a;此功能处于技术预览阶段&#xff0c;可能会在未来版本中更改或删除。语法可能会在正式发布之前发生变化。Elastic 将努力修复任何问题&#xff0c;但技术预览中的功能不受官方正式发布功能的支持 SLA 约束。 倒数排序融合 (reciprocal rank fusion - RRF) 是一…...

Day13—大语言模型

定义 大语言模型&#xff08;Large Language Models&#xff09;是一种基于深度学习的自然语言处理&#xff08;NLP&#xff09;模型&#xff0c;用于处理和生成人类语言文本。 一、认识NLP 什么是NLP ​ NLP&#xff08;Natural Language Processing&#xff09;&#xff0…...

php基础语法_面向对象

PHP php代码标记 多种标记来区分php脚本 ASP标记&#xff1a;<% php代码 %> 短标记&#xff1a; 脚本标记: 标准标记&#xff08;常用&#xff09;&#xff1a; 简写风格&#xff1a; ASP风格&#xff1a;<% php代码 %> 注意&#xff1a;简写风格和ASP风格…...

开源模型应用落地-LangChain高阶-LCEL-表达式语言(八)

一、前言 尽管现在的大语言模型已经非常强大,可以解决许多问题,但在处理复杂情况时,仍然需要进行多个步骤或整合不同的流程才能达到最终的目标。然而,现在可以利用langchain来使得模型的应用变得更加直接和简单。 LCEL是什么? LCEL是一种非常灵活和强大的语言,可以帮助您更…...

c# 协议数据计算陀螺仪的角度,带符号

subStrL str.Substring((76 - 8), 2); subStrH str.Substring((78 - 8), 2); Data[7] (short)(Convert.ToInt16(subStrH, 16) * 256 Convert.ToInt16(subStrL, 16));//角度X subStrL str.Substring((80 - 8), 2); subStrH str.Subst…...

ArcGIS arcpy代码工具——批量要素裁剪栅格影像

系列文章目录 ArcGIS arcpy代码工具——批量对MXD文件的页面布局设置修改 ArcGIS arcpy代码工具——数据驱动工具批量导出MXD文档并同步导出图片 ArcGIS arcpy代码工具——将要素属性表字段及要素截图插入word模板 ArcGIS arcpy代码工具——定制属性表字段输出表格 ArcGIS arc…...

discuz插件之优雅草超级列表互动增强v1.2版本更新

https://doc.youyacao.com/9/2142 v1.2更新 discuz插件之优雅草超级列表互动增强v1.2版本更新 [title]20220617 v1.2发布[/title] 增加了对php8的支持 增加了 对discuz3.5的支持...

三、用户中心项目笔记----后端多环境实战+原始部署

后端多环境主要是修改&#xff1a; 依赖的环境地址 数据库地址 缓存地址 消息队列地址 项目端口号 服务器配置 后端怎么去区分不同的环境&#xff1f; 我们后端的SpringBoot项目&#xff0c;通过application.yml添加不同后缀来区分配置文件 application.yml就是公共的配置&a…...

SpringMVC的使用

SpringMVC详情 RequestMapping("/hello") 负责用户的请求路径与后台服务器之间的映射关系 如果请求路径不匹配,则用户报错404 ResponseBody 作用: 将服务器的返回值转化为JSON. 如果服务器返回的是String类型,则按照自身返回. 新增: post请求类型 PostMapping("…...

Vue73-命名路由

一、路由的name属性 二、小结...

TrustOne发布一周年成绩单,15000家数智化转型客户的选择!

新一代终端安全TrustOne 发布一周年 交出亮眼成绩单 目前已经为 15000家数智化转型客户 带来高效、全方位的解决方案 TrustOne 新一代终端安全 2023年6月 新一代终端安全TrustOne正式发布&#xff0c;极简新主义的创新理念为数字变革而来&#xff1b; 2023年12月 IDC&…...

Nginx实战:故障处理_后端服务正常,nginx偶发502(Bad Gateway)

一、故障场景 用户访问服务偶发报错【502 Bad Gateway】,但是服务后端正常运行。架构如下: #mermaid-svg-4dDszusKEuPgIPlt {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-4dDszusKEuPgIPlt .error-icon{fill:#5…...

mac系统清理软件哪个好用?CleanMyMac X清理工具轻松拿捏mac

还在为 mac 电脑里的垃圾文件、无用缓存和隐私痕迹而烦恼&#xff1f;想找一个软件直接全面清理优化电脑&#xff1f;维护苹果设备的清洁和高效运行是非常重要的&#xff0c;特别是在设备经过长时间使用后。有效的苹果清理软件不仅可以帮助您节省时间&#xff0c;还能延长设备的…...

拔掉独显提升性能,AMD新一代核显可以通杀主流游戏了

在今年台北电脑展上&#xff0c;AMD 除了带来了全新的 Ryzen 9000 系列。 与此同时也带来了全新的移动端处理器 Ryzen AI 9 HX 300 系列。 来源&#xff1a;AMD 也许是在 AI 领域稍晚一步&#xff0c;AMD 的全新移动端处理器命名直接把 AI 焊在脸上。 也就是咱们今天的主角 R…...

关于单片机那些事?

周期 时钟周期&#xff1a;也叫振荡周期&#xff0c;就是单片机外接晶振的倒数&#xff0c;如12Mhz&#xff0c;周期就是1/12us&#xff0c;最小的时间单位。频率越高&#xff0c;速度越快 指令周期&#xff1a;执行一条指令需要的时间&#xff0c;一般由若干个机器周期组成 …...

第5章 传输层

王道学习 考纲内容 &#xff08;一&#xff09;传输层提供的服务 传输层的功能&#xff1a;传输层寻址与端口&#xff1b;无连接服务和面向连接服务 &#xff08;二&#xff09;UDP UDP数据报&#xff1b;UDP检验 &#xff08;三&#xff09;TCP …...

典型传感器简介及驱动安装

双目视觉传感器 Indemind 传感器简介 INDEMIND M1 是专为开发者提供的一款硬件&#xff0c;采用“双目摄像头IMU”多传感器融合架构与 微秒级时间同步机制&#xff0c;为视觉 SLAM 研究提供精准稳定数据源&#xff0c;以满足 SLAM 研究、导航及 避障开发、视觉动作捕捉开发、…...

linux和Win——显卡驱动、Anaconda及pytorch安装(无需单独安装cuda、cudnn)

今天给新电脑的双系统&#xff08;windows11和ubuntu22.04&#xff09;安装了深度学习环境&#xff0c;在此记录一下。 一、Linux系统 &#xff08;一&#xff09;安装显卡驱动 &#xff08;1&#xff09;在安装Nvidia显卡驱动前&#xff0c;一定要点一下下面的“软件更新器…...

机器学习之多模态学习FLAVA(Foundational Language and Vision Alignment)

FLAVA(Foundational Language and Vision Alignment)是Meta AI提出的一种多模态学习模型,旨在处理自然语言和视觉任务。FLAVA通过联合学习文本和图像的特征表示,实现了在多模态任务上的优异性能。 FLAVA的基本概念 多模态学习: 多模态学习涉及同时处理多种类型的数据,例…...

Maven高级-证书校验

文章目录 SSL忽略配置IDEA里配置SSL忽略补充场景 SSL忽略配置 mvn -X clean install -Dmaven.resolver.transportwagon -Dmaven.wagon.http.ssl.insecuretrue -Dmaven.wagon.http.ssl.allowalltrue -Dmaven.wagon.http.ssl.ignore.validity.datestrueIDEA里配置SSL忽略 两个地…...

flutter是app跨平台最优解吗?

哈喽&#xff0c;我是老刘 最近在知乎上看到这样一个问题 我们先来解释一下问题中碰到的几个现象的可能原因&#xff0c;然后聊聊跨平台的最优解问题 问题解释 1、跟手、丝滑问题 这个问题其实很多人是有误解的&#xff0c;觉得原生的就丝滑跟手 其实不是这样的 我在做Flut…...

算法 Hw9

Hw 9 1 Scheduling with profits and deadlines12345 2 Parallel machine1234 1 Scheduling with profits and deadlines 1 决策问题表述&#xff1a; 给定一个利润值 P P P&#xff0c;是否存在一个任务调度方案使得完成所有任务的总利润至少为 P P P 2 在 NP 类中&…...

前端JS必用工具【js-tool-big-box】学习,字符串字母大小写转换的方法使用

这一小节&#xff0c;我们说一下 js-tool-big-box 工具库中&#xff0c;字符串字母大小写转换的使用。请注意&#xff1a;不是说单纯的把字符串转为大写&#xff0c;或者小写。关注 js-tool-big-box 的小伙伴可能知道&#xff0c;我们并没有把一些特别基础的&#xff0c;JS原生…...

Zookeeper:分布式系统中的协调者

Zookeeper&#xff1a;分布式系统中的协调者 前言&#xff1a;引言Zookeeper是什么&#xff1f; 基本概念Zookeeper 数据模型Znode 类型会话Watcher 应用场景分布式锁配置维护组服务名字服务 典型应用场景数据发布/订阅负载均衡命名服务分布式协调/通知集群管理Master选举 工作…...

如何使用代理IP进行数据抓取,PHP爬虫抓取京东商品数据

使用代理IP进行数据抓取通常是为了绕过IP封锁、提高抓取效率或保护你的真实IP地址。在PHP中&#xff0c;你可以使用cURL库来发送HTTP请求&#xff0c;并通过设置cURL选项来使用代理IP。 以下是一个基本的步骤说明&#xff0c;展示如何使用PHP和cURL库结合代理IP来抓取京东商品…...

一口气安装【Python】教程

浏览器搜索python&#xff0c;或者直接跳转网址。 https://www.python.orghttps://www.python.org/ 找到想下载的版本 根据自己电脑下载相应的版本 自定义安装 下一步 修改路径&#xff0c;然后点击安装 等待一会&#xff0c;喝个饮料 点击关闭 安装成功 安装结束...

华为HCIP Datacom H12-821 卷13

1.多选题 以下关于二层漫游和三层漫游的描述,以下说法正确的是? A、如果 STA 漫游时前后关联的 VLAN ID 相同则一定属于二层漫游 B、二层漫游是指客户端在同一子网内漫游 C、三层漫游是指客户端在不同子网间漫游 D、三层漫游前后 STA 关联的 AP 服务集上的 VL AN 必须相…...

基于SSM的酒店客房管理系统

基于SSM的酒店客房管理系统 ✌全网粉丝20W,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;获取项目下载方式&#x1f345; 链接点击直达&#xff1a;下载…...

【数据结构与算法】最短路径,Floyd算法,Dijkstra算法 详解

Floyd算法 for (int k 0; k < n; k) {for (int i 0; i < n; i) {for (int j 0; j < n; j) {if (d[i][k] ! INF && d[k][j] ! INF) {d[i][j] min(d[i][j], d[i][k] d[k][j]);}}} }Dijkstra算法&#xff08;基于最小堆&#xff09; void dijkstra(int st…...