华为仓颉编程语言观感


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

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

目前仓颉语言只开放了文档,未开放sdk让开发者测试开发。可以申请仓颉的开发者预览版Beta招募,链接Here

相似点(主要与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: Int
          let y: Int
      
          init(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: Int
          let y: Int
      
          init(x: Int, y: Int) {
             
             
              self.x = x
              self.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
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值