仓颉编程入门

news2024/11/14 14:40:03

#体验华为仓颉编程语言#

仓颉发布的第一时间,就申请了测试。昨天发现申请通过 ,果断下载SDK体验一下。

废话不多说,从下载完开始,下面这个图,就是下载的文件:

看文件夹样子跟c/c++套路差不多。bin目录是cjc.exe所在目录。runtime是运行时所需的dll文件夹。lib为编译时的库文件。modules是各种库的文件夹,类似lib文件夹。另外应该是第三方的一些东西,我看了一下,有gcc,有clang的一些基础库。不过这些都不重要。

首先还是设置环境变量,根目录下面有一个envsetup.bat,尝试双击运行,以及管理员方式运行后,发现并没有啥卵用。

所以还是手动来吧,这个文件里面,建议创建一个CANGJIE_HOME的环境变量,这点类型JAVA_HOME。实际不这样设置也行。不过还是按照他们建议来。

在设置环境变量之前,cjc运行是报错的。

创建CANGJIE_HOME,以及添加仓颉的bin文件到path里面。

这个时候cjc可以运行了,也就是说可以编译了。到这一步还是挺简单的。接下来写个hello world。

接下来是编译,cjc t.cj -o t.exe.  这里需要说明这个跟命令跟GCC一模一样。

接下来运行t.exe

弹出提示,缺少dll,原因是没有吧运行环境加到path里面。一般gcc项目,gcc和运行库是放在一块的,仓颉是分开的,所以需要再增加一个path,就是运行环境。见下图:

注意设备完环境变量,cmd需要关掉再打开一次。

再次运行,可以输出hello world。

为啥不用网上的仓颉编程插件,以及一次性配置好两个path呢。因为那样逼格不够高,废话多一点显得比较专业。

现在环境弄好了,就仓颉开放一个http服务器吧,大致功能,启动一个http服务,可以供浏览器浏览静态页面。app启动的时候,读取配置文件,配置文件主要是配置http服务端口,以及html所在的路径。就像下面这样:

首先需要写一个配置文件类,读取这个配置文件。解析文件内容,生成配置。代码如下,目前csdn还不支持cangjie语法好像。

这个代码是一遍看官方文档,一遍摸索出来。相关资料太少,官方给的案例也不多,例如找按行读取文件,就找不到。

/**
*配置文件类
*/
class Config
{
    let map:HashMap<String,String>=HashMap<String,String>()    //存储配置文件的map

    public init(){
        let datas=File.readFrom("./config.ini")                 //读取当前目录下面的config.ini
        let bs=ByteArrayStream()                                //创建一个ByteArrayStream
        bs.write(datas)                                         //把配置文件的内容,写入到字节流
        let sr=StringReader(bs)                                 //创建一个字符串流读取对象
        var s=sr.readln()??""                                   //读取一行,如果没有内容就是空
        while(s.size>0){                                        //如果这一行有数据
            let a=s.split("=")                                  //对这一行分割 key = value
            map[a[0]]=a[1]                                      //a[0]是key  ,a[1]是value,存储到hashmap
            s=sr.readln()??""                                   //读取下一行
        }
        println(map)                                            //输出一下
    }

    public func getString(key:String):String{                   //获取一个字符串配置
        return map[key]
    }

    public func getInt(key:String):Int32{                       //获取一个整数配置
      
       return Int32.parse(map[key])                             //字符转换为整数
        
    }
}

主函数调用一下:

main()
{
    println("cangjie http") 
    let cfg=Config()                                        //创建config对象
    let port=cfg.getInt("port")                             //获取整数
    let dir=cfg.getString("dir")                            //获取字符串
    println("Server port = ${port}")                        //输出,这个输出功能有点像php
    println("HTML dir = ${dir}")
      
}

 编译运行如下:

下一篇写启动http和响应请求。 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2151713.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

linux安装nginx+前端部署vue项目(实际测试react项目也可以)

&#x1f9f8;本篇博客作者测试上线过不下5个项目&#xff0c;包括单纯的静态资源&#xff0c;vue项目和react项目&#xff0c;包好用&#xff0c;请放心使用 &#x1f4dc;作者首页&#xff1a;dream_ready-CSDN博客 &#x1f4dc;有任何问题都可以评论留言&#xff0c;作者将…

什么是大模型的泛化能力?

大模型的泛化能力指的是模型在未见过的数据上表现的能力&#xff0c;即模型不仅能在训练数据上表现良好&#xff0c;也能在新的、未知的数据集上保持良好的性能。这种能力是衡量机器学习模型优劣的重要指标之一。 泛化能力的好处包括但不限于&#xff1a; 提高模型的适应性&a…

基于uniapp的民宿酒店预订系统(后台+小程序)

&#x1f497;博主介绍&#x1f497;&#xff1a;✌在职Java研发工程师、专注于程序设计、源码分享、技术交流、专注于Java技术领域和毕业设计✌ 温馨提示&#xff1a;文末有 CSDN 平台官方提供的老师 Wechat / QQ 名片 :) Java精品实战案例《700套》 2025最新毕业设计选题推荐…

F28335中断系统

1 中断介绍 1.1 中断概念 1.2 TMS320F28335 中断概述

CUDA并行架构

一、CUDA简介 CUDA(Compute Unified Device Architecture)是一种由NVIDIA推出的通用并行计算架构&#xff0c;该架构使GPU(Graphics Processing Unit)能够对复杂的计算问题做性能速度优化。 二、串并行模式 高性能计算的关键是利用多核处理器进行并行计算。 串行模式&#…

使用LangGPT提示词让大模型比较浮点数

使用LangGPT提示词让大模型比较浮点数 背景介绍环境准备创建虚拟环境安装一些必要的库安装其他依赖部署大模型启动图形交互服务设置提示词与测试 LangGPT结构化提示词 背景介绍 LLM在对比浮点数字时表现不佳&#xff0c;经验证&#xff0c;internlm2-chat-1.8b (internlm2-cha…

Excel-时间取整,工作有效时长计算

在计算考勤时&#xff0c;打卡时间不是整点&#xff0c;上班时间是遵循整点开始计算的&#xff0c;员工提前打卡&#xff0c;所以要用到时间向上取整。 上班取整&#xff1a; 使用CEILING函数可实现该需求&#xff0c;参考以下公式&#xff0c;第一个参数为上班打卡时间&#…

MySQL篇(窗口函数/公用表达式(CTE))(持续更新迭代)

目录 讲解一&#xff1a;窗口函数 一、简介 二、常见操作 1. sumgroup by常规的聚合函数操作 2. sum窗口函数的聚合操作 三、基本语法 1. Function(arg1,..., argn) 1.1. 聚合函数 sum函数&#xff1a;求和 min函数 &#xff1a;最小值 1.2. 排序函数 1.3. 跨行函数…

一文读懂SpringCLoud

一、前言 只有光头才能变强 认识我的朋友可能都知道我这阵子去实习啦&#xff0c;去的公司说是用SpringCloud(但我觉得使用的力度并不大啊~~)… 所以&#xff0c;这篇主要来讲讲SpringCloud的一些基础的知识。(我就是现学现卖了&#xff0c;主要当做我学习SpringCloud的笔记吧&…

英集芯IP5902:集成电压可调异步升压转换充电管理功能的8位MCU芯片

英集芯IP5902是一款集成了9V异步升压转换、锂电池充电管理及负端NMOS管的8-bit MCU芯片&#xff0c;外壳采用了SOP16封装形式&#xff0c;高集成度和丰富的功能使其在应用时只需很少的外围器件&#xff0c;就能有效减小整体方案的尺寸&#xff0c;降低BOM成本&#xff0c;为小型…

Vue使用axios实现Ajax请求

1、什么是 axios 在实际开发过程中&#xff0c;浏览器通常需要和服务器端进行数据交互。而 Vue.js 并未提供与服务器端通信的接口。从 Vue.js 2.0 版本之后&#xff0c;官方推荐使用 axios 来实现 Ajax 请求。axios 是一个基于 promise 的 HTTP 客户端。 关于 promise 的介绍…

C#开源的一个能利用Windows通知栏背单词的软件

前言 今天给大家推荐一个C#开源且免费的能利用Windows通知栏背单词的软件&#xff0c;可以让你在上班、上课等恶劣环境下安全隐蔽地背单词&#xff08;利用摸鱼时间背单词的软件&#xff09;&#xff1a;ToastFish。 操作系统要求 目前该软件只支持Windows10及以上系统&…

Scrapy爬虫实战——某瓣250

# 按照我个人的习惯&#xff0c;在一些需要较多的包作为基础支撑的项目里&#xff0c;习惯使用虚拟环境&#xff0c;因为这样能极大程度的减少出现依赖冲突的问题。依赖冲突就比如A、B、C三个库&#xff0c;A和B同时依赖于C&#xff0c;但是A需要的C库版本大于N&#xff0c;而B…

Linux系统查找文件的所属目录

在Linux下查找文件的所属目录方法较多&#xff0c;既可以在图形桌面系统中用搜索功能查找文件&#xff0c;也可以在字符终端窗口中用不同的命令查找不同类型文件并显示其所在目录&#xff0c;针对不同的文件类型&#xff0c;有不同的命令。 一、在图形桌面系统中查找 如图1&a…

利用 ARMxy边缘计算网关和 BLiotlink 软网关,实现工业智能化升级

在当今数字化、智能化的时代浪潮中&#xff0c;工业领域也在不断寻求创新与突破&#xff0c;以提高生产效率、降低成本并提升竞争力。ARM 工业计算机与 BLiotlink 协议转换软件的结合&#xff0c;为工业智能化带来了新的机遇和解决方案。 一、ARM 工业计算机的优势 ARM 工业计…

【4.4】图搜索算法-BFS和DFS两种方式解岛屿数量

一、题目 给你一个由 1&#xff08;陆地&#xff09;和 0&#xff08;水&#xff09;组成的的二维网格&#xff0c;请你计算网格中岛屿的数量。岛屿总是被水包围&#xff0c;并且每座岛屿只能由水平方向或竖直方向上相邻的陆地连接形成。此外&#xff0c;你可以假设该网格的四条…

I2C中继器TCA9517A(TI)

一、芯片介绍 本芯片是一款具有电平转换功能的双向缓冲器&#xff0c;适用于I2C和SMBus系统&#xff0c;同时支持各种拓扑结构的扩展使用。芯片支持SCL和SDA缓冲&#xff0c;因此允许两条总线的负载电容达到400pF。 TCA9517A的A和B侧驱动器是不同的&#xff0c;但是均可耐受5…

Obsidian 全部笔记共享配置文件,obsidian仓库-文件夹配置统一化

obsidian仓库-文件夹配置统一化 在每次新建obsidian仓库(vaults)时&#xff0c;仓库的主题和快捷键等都需要重新设置&#xff0c;这是因为每次创建新的仓库时 新仓库的配置文件都是默认配置但是如果通过复制粘贴旧配置文件来达到新仓库的配置和旧仓库一致的话&#xff0c;无法…

kafka3.8的基本操作

Kafka基础理论与常用命令详解&#xff08;超详细&#xff09;_kafka常用命令和解释-CSDN博客 [rootk1 bin]# netstat -tunlp|grep 90 tcp6 0 0 :::9092 :::* LISTEN 14512/java [rootk1 bin]# ./kafka-topics.s…

MVCC机制解析:提升数据库并发性能的关键

MVCC机制解析&#xff1a;提升数据库并发性能的关键 MVCC&#xff08;Multi-Version Concurrency Control&#xff09; 多版本并发控制 。 MVCC只在事务隔离级别为读已提交(Read Committed)和可重复读(Repeated Read)下生效。 MVCC是做什么用的 MVCC是为了处理 可重复读 和…