开发_仓颉编程语言-与其他开发语言的关键字

开发语言

 基础类型  类型声明(Type Declaration) 操作符  控制(Control Flow)
   对象模型(Object Model)
   内存模型(Memory Model)  并发模型(Concurrency Model)  异常模型(Exception Model)
   语言互操作   模块化支持

  编程方式:函数式、指令式、反射式、结构化和面向对象
  语言实现:将引入什么样的编程思想,追求什么样的编程风格

  仓颉也选择了这种居中的定位,被设计为了具备自动内存管理功能、静态类型、面向应用开发的语言
     居于动态脚本语言和系统编程语言之间
  仓颉借鉴 web 端和移动端的技术发展,希望通过领域特定语言 DSL 能力来构建类似 AI 领域的声明式范式
   @agent @prompt
  带GC的路线	
      关键字和操作符	
      库 编译器 
      编译器源码--操作系统等 编译是将程序从某种编程语言(如 C/C++)的源代码(文本形式)转换为机器代码的过程		 

仓颉编程语言

在语言特性方面,
  1.数据类型:
     静态类型语言:类型检查和类型自动推断 
	 仓颉使用结构体作为值类型、类作为引用类型,泛型
	 函数是一等公民  代数数据类型和模式匹配
  2.控制结构上:
     Flow 表达式、match、if-let、while-let 和重导出等语法
	 仓颉添加了扩展机制,类似Rust的impl关键字,提供了比继承更灵活的面向对象的组合方式。
  3.编程方式:
     仓颉支持面向对象、函数式、命令式等多种编程范式的融合
      仓颉实现了基于底层支持的函数式特性;使用代数数据类型解决了Java的空指针问题;
      仓颉还提供了高阶与现代的语言特性,包括元编程能力,使用宏操作词法单元,适合内嵌式领域专用语言(eDSL)的构建;
  4.语言底层设计与实现方面,
     仓颉提供基于垃圾回收的内存管理机制,同时支持两种运行模式:基于虚拟机的运行以及编译为可执行文件。
      隐藏了指针细节,同时提供了易懂好用的值与引用的概念。
	  编译器根据变量或表达式的上下文信息自动推测出类型
	  提供了用户态轻量化线程(原生协程),以及简单易用的并发编程机制  M:N 线程模型
	  编译器前端基于 CHIR(Cangjie HighLevel IR)高层编译优化
  5.在AI开发中
     此外 还具有自动微分特性,可有效减少 AI 开发中数学运算相关的编码,适合AI开发的场景。

  6.上下游配合: 
     动静态检查、自动内存管理、以及工具链 
	 支持和 C、ArkTS/JS、Java 、Python 等编程语言的互操作
	 内置库,涉及数据结构、常用算法、数学计算、正则匹配、系统交互、文件操作、网络通信

运行仓颉编译器的依赖

链接工具、C 语言开发工具、C++ 开发工具、GCC 编译器、以及 OpenSSL 3 
  binutils  libc-dev   libc++-dev   libgcc-7-dev
  binutils  glibc-devel  gcc-c++
  
 说明:GNU binutils 是一个二进制工具集 
    系统库(libc)
GNU Binutils是一个二进制工具集。主要包括以下组件:
    ld      - GNU 链接器
    as 		- GNU 汇编器
    addr2line - 把程序地址转换为文件名和行号
    ar      - 创建、修改和提取归档文件
    c++filt - 过滤 C++ 符号
    dlltool - 为构建和使用 DLL 创建文件
    gold    - 新颖快速的 ELF 链接器,仍在 Beta 测试阶段
    gprof   - 显示分析信息
    nlmconv - 转换对象代码到 NLM
    nm      - 从目标文件列出符号
    objcopy - 复制和转换目标文件
    objdump - 从目标文件显示信息
    ranlib  - 生成归档文件内容的索引
    readelf - 从 ELF 格式目标文件显示信息
    size    - 列出目标或归档文件的段大小
    strings - 列出文件中可打印字符串
    strip   - 丢弃符号
    windmc 	- 兼容 Windows 消息的编译器
    windres - Windows 资源文件编译器
 库文件: libiberty.a, libbfd.[a,so] 和 libopcodes.[a,so]

可执行文件格式

 它们都是 COFF(Common File Format)格式的变种
    Windows 下的 PE(Portable Executable)
    Linux 下的 ELF(Executable Linkable Format)
      Executable and Linking Format
        ELF文件由4部分组成,分别是ELF头(ELF header)、程序头表(Program header table)、节(Section)和节头表(Section header table)	 
  
  源文件--目标文件--可执行文件
        -- 共享目标文件
		--核心转储文件(Core Dump File)Linux 下的 core dump
      文件结构上来讲,目标文件已经是二进制文件,它与可执行文件的组织形式非常类似
  
  type    ###:内部命令,外部命令和别名
  whereis ls
  file /bin/ls
  ldd /bin/ls         ##ldd 命令了解 ls 命令所依赖的系统库
  readelf -h /bin/ls
        DYN (Shared object file)
		
  交叉编译工具链是一个由编译器、链接器和解释器组成的综合开发环境,主要由binutils、gcc和glibc三个部分组成,安装在宿主机host上		

API-ABI-EABI

API--代码层级的--Programming
   API(Application Programming Interface,应用程序接口)
    提供相应功能的同时隐藏实现细节,让其使用者可以按照较为统一和稳定的方式来使用系统能力
ABI--二进制文件层级的-Binary--机器指令层面的具体格式
     abi 应用二进制接口(Application Binary Interface , ABI)
	eabi 嵌入式应用二进制接口(Embedded Application BinaryInterface , EABI)
	ABI 将程序与操作系统、硬件平台之间紧密协作需要遵守的特定规则暴露了出来
    兼容性--移植性
   EABI的目的是使不同的编译器编译出来的二进制文件可以互相使用(interoperability) 
      应用程序的各个组件  应用程序与库 应用程序与操作系统
	  
	本地编译--交叉编译 busybox  

C

  运行时库(Runtime Library),C 语言的运行时库,称为 C 运行库(CRT	
    glibc即GNU C Library,是GNU旗下的C标准库
      C标准库有静态和动态两个/lib/libc.so.6 , /usr/lib/libc.a
	libc 是 linux 下的 ANSI C 函数库  			

仓颉编译器

 Cangjie SDK 版本
    cjc          仓颉编译器:cjc 时仓颉编译器会自动进行前端、后端的编译以及链接工作
	cjc-frontend 仓颉前端编译器
    编译器:编译目标的 CPU 类型时,编译器在生成二进制时会尝试使用该 CPU 类型特有的扩展指令集
 cjc 默认会将给定源代码文件编译成可执行文件,并将可执行文件命名为 main

仓颉运行时库
   运行时的优化

 CJPM(Cangjie Package Manager)包管理工具
    cjpm init	
       cjpm.toml 文件,并且新建 src 源码文件夹,在 src 下生成默认的 main.cj 文件
	cjpm build 用来构建当前仓颉项目,执行该命令前会先检查依赖项,检查通过后调用 cjc 进行构建
cjdb 提供源码级调试能力	

 DevEco Studio 
     HUAWEI DevEco Studio是基于IntelliJ IDEA Community开源版本打造,面向华为终端全场景多设备的一站式集成开发环境(IDE)
 VSCode底座: IDE插件
 HDC是为开发者提供HarmonyOS应用/服务的调试工具		

C语言:

ANSI标准定义的C语言关键字共32个:
	void char int float double short long signed unsigned
	struct union enum typedef sizeof
	auto static register extern const volatile
	return continue break goto
	if else switch case default for do while
C99新增关键字:
    _Bool _Complex _Imaginary inline restrict
C11新增关键字:
   _Alignas _Alignof _Atomic _Generic _Noreturn _Static_assert _Thread_local	

 基本数据类型 --类型修饰关键字 复杂类型关键字  存储级别关键字
 流程控制关键字

C++关键字

 C++98/03中的63个关键字,其中C语言的32个关键字。
 C++11中有73个关键字,新增加的10个分别为:
    alignas、alignof、char16_t、char32_t、constexpr、decltype、noexpect、nullptr、static_assert、thread_local

rust关键字

 i8/i16/i32/i64/i128   u8/u16/u32/u64/u128  f32/f63 
 array  bool  char unit  true/false
 isize  usize  references  slice str  tuple
 type  const let
 union enum trait struct  
 fn
 impl
 if continue break else for loop  while  in match  return
  mut ref  static  unsafe   move
  async  await  std::thread相关的库
  Result类型和panic!宏  通过Result和Option等类型,提供了一种可靠地处理错误的方式
  extern 使用 std::ffi库
  super  mod  crate  use  where

 Rust 支持闭包(closure)  泛型工作方式	

仓颉关键字

Int8	Int16  Int32	Int64  Float16	Float32 Float64
Unit   UInt8	UInt16	UInt32  UInt64	UIntNative
Rune   IntNative  Bool   false     true  Nothing
const  static let  as	abstract var
class  enum  struct  interface
func   main  	mut  return	
if break  continue  for  in do	else  case match where	while
extend	 override
 try catch  finally throw
 foreign	 is	init
 public	package	open  private	protected import
 prop  operator
 macro	 quote synchronized	 	
 redef	spawn super	this This type	 unsafe	VArray
  换行省略了分号

比较异同

 Java访问修饰符:public、protected、default、private四种
 仓颉访问修饰符:public、protected、internal、 private四种
 

 仓颉class 是引用类型,struct 是值类型 class 之间可以继承,但 struct 之间不能继承
  构造函数--主构造函数和普通构造函数
   类的构造函数普通构造函数以关键字 init 开头,后跟参数列表和函数体
   可以定义若干普通的以 init 为名字的构造函数外,class 内还可以定义(最多)一个主构造函数。主构造函数的名字和 class 类型名相同
  终结器的函数名固定为 ~init
 
 扩展成员可使用的修饰符有:static、public、protected(仅限于被扩展类型是 class 类型)、private、mut
  
 仓颉中,没有提供 null 值,换句话说,仓颉的引用类型永远是非空的  都可以有对应的可选类型Option<T>

Java关键字

java有 48个关键字:
   abstract、assert、boolean、break、byte、case、catch、char、class、continue、default、
   do、double、else、enum、extends、final、finally、float、for、if、implements、
   import、int、interface、instanceof、long、native、new、package、private、protected、public、return、
   short、static、strictfp、super、switch、synchronized、
   this、throw、throws、transient、try、void、volatile、while

scala关键字

Scala 有 39 个关键字:
  package, import, class, object, trait, extends, with, type, forSome private, protected, abstract, 
  sealed, final, implicit, lazy, override try, catch, finally, throw
  if, else, match, case, do, while, for, return, yield def, val, var
  this, super new
  true, false, null
说明: Scala 中没有 break 和 continue 俩个关键字

Python关键字

  and, as, assert, break, class, continue, def, del, elif, else, except, finally,
  for, from, global, if, import, in, is, lambda, not, or, pass, raise, return,
  try, while, with, yield

Javascript 关键字

JavaScript一共提供了26个关键字:
    break, case, catch, continue, debugger, default, delete, do, else, finally, for, 
    function, if, in, instanceof, new, return, 
    switch, this, throw, try, typeof, var, void, while, with

R语言关键字

  if else repeat while function for in next break     
  TRUE FALSE NULL Inf NaN NA NA_integer_ NA_real_ NA_complex_ NA_character_

SQL关键字

 select .......from ......where ...... group by ......having ...... order by ...... limit ...... ;
  SELECT INSERT UPDATE DELETE CREATE ALTER DROP TRUNCATE WHERE ORDER BY
   GROUP BY   HAVING JOIN LEFT JOIN、RIGHT JOIN、INNER JOIN UNION DISTINCT LIMIT OFFSET COUNT
  SUM、AVG、MAX、MIN

参考

 https://developer.huawei.com/consumer/cn/doc/openharmony-cangjie/keyword
 编程语言学习-Rust关键字 https://zhuanlan.zhihu.com/p/394954544
 编程语言学习-初始篇  https://zhuanlan.zhihu.com/p/373516919
posted @ 2024-06-24 16:23  辰令  阅读(112)  评论(0编辑  收藏  举报