前言
由于倉頡目前是內測狀態, 不能展示倉頡的詳細信息,但是華為倉頡官網的公共文檔的內容是可以公開的。
我相信有不少喜歡編程的朋友都申請了內測,但是一些編程初學者應該和我一樣,處于摸索階段。所以,我這里把我測試的一個示例程序分享一下,以便大家參考。
環境配置
系統:windows 10
平臺:visual studio code
語言:倉頡
庫:–
一、倉頡sdk和vscode插件獲取
這個需要關注倉頡編程的公眾號,要去填內測申請,等官方審核通過,就可以在gitcode上下載,需要注冊一個gitcode賬號。
根據我的經驗,這個審核挺快的,基本上一天就可以。至于gitcode的界面,根據官方要求,暫時無法展示。
二、socket服務端程序
下載安裝好sdk和插件后,在visual studio code上新建一個倉頡項目,這里暫時也無法展示倉頡項目的具體內容,但是如果你已經申請內測成功,應該就了解了。
我這里主要說一下代碼,官方文檔有一個socket的示例,這是公開文檔,如下:
代碼:
import std.socket.*
import std.time.* 導入 std.time.*
import std.sync.*let SERVER_PORT: UInt16 = 8080func runTcpServer() {try (serverSocket = TcpServerSocket(bindAt: SERVER_PORT)) {serverSocket.bind()try (client = serverSocket.accept()) {let buf = Array<Byte>(10, item: 0)let count = client.read(buf)// 服務端讀取到的數據為: [1, 2, 3, 0, 0, 0, 0, 0, 0, 0]println("Server read ${count} bytes: ${buf}")}}
}main(): Int64 {spawn {runTcpServer()}sleep(Duration.millisecond * 500)try (socket = TcpSocket("127.0.0.1", SERVER_PORT)) {socket.connect()socket.write(Array<Byte>([1, 2, 3]))}return 0
}
這里有個注意的問題,如果你按照文檔上面提供的導入方法,即:
import std.socket.*
import std.time.*
import std.sync.*
vscode很可能會提示錯誤,你可以改一下:
from std import socket.*
from std import time.*
from std import sync.*
至少,在我測試的時候,改成from這種導入形式是可以的。
我們再來看socket,官方文檔提供的示例,是將服務端和客戶端寫在一起,而且只運行了一次,但我們實際使用中,通常都是循環讀取的,所以我們來改寫一下:
let port:UInt16=2000let server1=TcpServerSocket(bindAt:port)server1.bind()try(clt1=server1.accept()){println("client is ${clt1}")var i:UInt16=0while (i<20){if (clt1 is Nothing){println("no client")}else{let buf=Array<Byte>(10,item:0)let count=clt1.read(buf)println("server read ${count} bytes:${buf}")}//}i +=1sleep(Duration.millisecond * 1000)}}
可以看到,我們使用了while來循環,在上面的示例中,我為while循環添加了條件,即循環20次就退出,我本來是想用loop的,但我在倉頡的官方文檔中沒找到loop關鍵字。
我們運行以上代碼后,程序就會生一個本地端口為2000的server,這時候,你可以使用其他調試助手,打開一個socket客戶端,連接到“127.0.0.1:2000”,然后給服務器發送數據,可以在vscode的終端上看到接收數據:
以上是我初學倉頡的一個體驗,根據倉頡的官方文檔,可以發現倉頡語言縫合不少其他語言的特性,對于有經驗的程序員來說,應該是感到很熟悉的。