成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

倉頡開發入門體驗

企業動態
倉頡語言作為面向未來的下一代編程語言,當前已經完成設計與實現并啟動了開發者預覽,未來將與 ArkTS 共同發展,為鴻蒙原生應用開發者提供極致高效的開發體驗。

前言

在剛剛召開的華為開發者大會(HDC 2024)上,華為內部研發已久的國產自主編程語言倉頡終于正式對外官宣!

當前在鴻蒙原生應用的開發中,支持聲明式 UI 和一次開發、多端部署的 ArkTS 語言已經被廣泛使用。倉頡語言作為面向未來的下一代編程語言,當前已經完成設計與實現并啟動了開發者預覽,未來將與 ArkTS 共同發展,為鴻蒙原生應用開發者提供極致高效的開發體驗。

倉頡的優勢

倉頡的定位同樣如此,據官方介紹,它是一款面向“全場景”智能的新一代編程語言,主打原生智能化、天生全場景、高性能、強安全。

  • 原生智能化:倉頡編程語言內嵌了 AgentDSL 的編程框架,實現了自然語言與編程語言有機融合。多 Agent 協同,簡化符號表達,模式可以自由組合,支持各類智能應用開發。
  • 天生全場景:倉頡編程語言采用輕量化可縮放運行時和模塊化分層設計,即使在資源受限的設備上也能流暢運行。同時,它支持全場景領域擴展,元編程和 eDSL 技術,可助力面向領域聲明式開發。
  • 高性能:倉頡編程語言采用全并發 GC,應用線程運行更加流暢,響應速度更快。輕量化線程設計進一步提升了并發性能,降低了開發成本。
  • 強安全:倉頡編程語言將安全理念融入語言設計,幫助開發者專注于業務邏輯,減少安全漏洞的產生,實現“編碼即安全”的愿景。

當然好像每個新的語言都會這么說,而對于觀望的開發者來說,我們首先還是需要來了解一下倉頡的語法。

環境配置

可以直接使用HarmonyOS DevEco Studio或者VsCode進行開發,但需要安裝倉頡插件,目前來看,需要報名倉頡語言開發者預覽版Beta招募,才能獲得對應的Studio版本。在獲得對應的Studio版本后,就可以體驗倉頡的語法特性了。

HelloWorld

和所有語言一樣,我們先來實現倉頡的HelloWorld程序。

新建腳本文件Hello,后綴名是.cj沒錯就是倉頡的中文??

main() {
  println("你好,倉頡")
}

> cjc hello.cj -o hello
> ./hello你好,倉頡

通過cjc命令運行,打印輸出“你好,倉頡”。emm... 只看main這個方法誰也不知道這是kotlin還是啥。

變量聲明

變量定義的具體形式為:

修飾符 變量名: 變量類型 = 初始值

其中修飾符用于設置變量的各類屬性,可以有一個或多個,常用的修飾符包括:

  • 可變性修飾符:let 與 var,分別對應不可變和可變屬性,可變性決定了變量被初始化后其值還能否改變,倉頡變量也由此分為不可變變量和可變變量兩類。
  • 可見性修飾符:private 與 public 等,影響全局變量和成員變量的可引用范圍,詳見后續章節的相關介紹。
  • 靜態性修飾符:static,影響成員變量的存儲和引用方式,詳見后續章節的相關介紹。

如下程序所示,定義了兩個 Int64 類型的不可變變量 a 和可變變量 b,隨后修改了變量 b 的值。

main() {
    let a: Int64 = 20
    var b: Int64 = 12
    b = 23
    println("${a}${b}")
}

從這里來看,相當于把Kotlin中的“val”替換成了“let”。接著我們來看它的struct 類型。

Struct類型

基礎結構

struct Rectangle {
    let width: Int64
    let height: Int64

    public init(width: Int64, height: Int64) {
        this.width = width
        this.height = height
    }

    public func area() {
        width * height
    }
}

如上述代碼所示,通過struct關鍵字定義了一個Rectangle結構,聲明了變量width、height并提供了init、area兩個方法。我們完全把它當成一個class 即可,通過下列方法我們可以創建struct的實例并調用相關方法。

let r = Rectangle(10, 20)
let width = r.width   
let height = r.height
let a = r.area() 
let r = Rectangle(10, 20)
let width = r.width   
let height = r.height
let a = r.area()

但是倉頡也是有自己的class的,主要區別在于:class 是引用類型,struct 是值類型,class 之間可以繼承,但 struct 之間不能繼承。

struct Test {
    var i = 0

    public func add() {
        i += 1  
    }
}

我們是無法在add函數中修改成員變量i的值的,如果想要修改我們就需要借助mute函數。

mute函數

修改代碼如下所示:

struct Test {
    var i = 0

    public mute func add() {
        i += 1  
    }
}

在add函數前新增一個mute關鍵字,就可以在函數內修改i的值了。需要注意的是mute關鍵字不能修改靜態函數,如下列代碼無法正常編譯:

public mut static func g(): Unit {} 

 public mut static func g(): Unit {}

其他的語法如模式匹配、網絡編程等幾乎與Kotlin無異,我們可以在手機操作過程中了解。

跨語言操作

和大多數語言一樣,倉頡是支持跨語言調用的,當前支持倉頡-C語言與倉頡-Artks語言的互操作。這里我們以倉頡調用C語言為例。

在倉頡中要調用 C 的函數,需要在倉頡語言中用 @C 和 foreign 關鍵字聲明這個函數,但 @C 在修飾 foreign 聲明的時候,可以省略。舉個例子,假設我們要調用 C 的 rand 和 printf 函數,它的函數簽名是這樣的:

// stdlib.h
int rand();

// stdio.h
int printf (const char *fmt, ...);

那么在倉頡中調用這兩個函數的方式如下:

foreign func rand(): Int32
foreign func printf(fmt: CString, ...): Int32

main() {
    let r = unsafe { rand() }
    println("random number ${r}")
    unsafe {
        var fmt = LibC.mallocCString("Hello, No.%d\n")
        printf(fmt, 1)
        LibC.free(fmt)
    }
}

foreign func rand(): Int32
foreign func printf(fmt: CString, ...): Int32

main() {
    let r = unsafe { rand() }
    println("random number ${r}")
    unsafe {
        var fmt = LibC.mallocCString("Hello, No.%d\n")
        printf(fmt, 1)
        LibC.free(fmt)
    }
}

在引入與 C 語言的互操作過程中,同時也引入了 C 的許多不安全因素,因此在倉頡中使用 unsafe 關鍵字,用于對跨 C 調用的不安全行為進行標識。

最后

同時,倉頡當前在嘗試支持AI Native原生智能應用開發、DSL KIT、Actor和分布式編程等。不過,就目前來看感覺倉頡是一個所有語言的組合,不管你之前使用的是什么語言可能都會感覺得到很熟悉。但我覺得,開發者的腦子馬上就不夠用了。

現在又多了一個選擇,你會學嗎?

相關推薦:如何獲取倉頡編程語言通用版本SDK?一篇文章讓帶您了解清楚

責任編輯:張燕妮 來源: Android技術圈
相關推薦

2014-06-23 09:11:01

2010-04-21 17:07:54

Windows Pho

2011-07-25 18:43:54

iPad iPad開發 UI

2017-09-19 15:55:04

Docker入門實踐

2010-12-14 18:56:12

微軟

2014-04-04 11:06:02

微軟Microsoft A云開發

2010-08-01 16:11:53

Android

2010-07-01 10:15:27

UML開發工具

2010-07-02 09:54:32

Symbian開發

2011-09-09 14:09:17

Android Wid

2012-01-10 09:56:32

WPF

2009-10-21 12:45:07

linux程序開發基礎入門

2023-02-08 16:20:39

2022-10-12 15:00:02

設備開發應用開發

2012-05-16 10:50:17

Windows Pho

2022-05-07 15:34:16

ETS低代碼應用

2016-09-27 16:38:24

JavaScript微信Web

2011-11-17 13:29:44

Android用戶體驗導向

2013-04-08 14:12:03

Android開發googleMap入門SDK

2011-05-03 15:13:23

BlackBerryWidget
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 久久久久久久久久久久久9999 | 色婷婷av一区二区三区软件 | 成人在线小视频 | 日韩另类视频 | 超碰在线免费 | 欧美激情国产精品 | 国产日韩精品在线 | 特黄色毛片 | 国产精品毛片一区二区三区 | 欧洲尺码日本国产精品 | 亚洲一区久久 | 日韩在线电影 | 91看片免费| 久青草影院 | 亚洲精品乱码 | 国产在线观看一区二区三区 | av中文字幕在线 | 能免费看的av | 久草热播 | 青青久草 | 欧美一级在线免费 | 欧美中文字幕在线观看 | 91精品欧美久久久久久久 | 欧美精品v国产精品v日韩精品 | 91久久久久久久久久久久久 | 成年男女免费视频网站 | 国产一区二区三区在线看 | 午夜精品一区二区三区在线观看 | 欧美一区二区三区在线看 | 国产精选一区 | 欧美日韩视频在线 | 久久久婷| 国产激情91久久精品导航 | 亚洲精品成人 | 精品欧美一区二区三区免费观看 | 精品成人 | 久久免费视频观看 | 亚洲欧美一区二区三区在线 | 国产综合在线视频 | 男女网站在线观看 | 欧美久久一级 |