JHHK

欢迎来到我的个人网站
行者常至 为者常成

Base

目录

运行环境

xy:软件的运行、脚本的运行都需要一个运行环境,运行环境提供了软件和脚本运行所需的一切。

“运行环境”(Runtime Environment)是指在计算机科学中,程序或应用程序执行时所需的硬件和软件的集合。
这个环境提供了程序运行所需的一切,包括操作系统、依赖库、语言运行时等。

关于运行环境的要点包括:

操作系统: 程序需要在特定的操作系统上运行。例如,Windows、Linux、macOS 等。操作系统提供了程序运行所需的资源管理、文件系统访问、进程控制等服务。

依赖库和框架: 许多程序依赖于外部的库和框架,这些需要在运行环境中可用。这可能包括图形库、网络库、数据库连接库等。

语言运行时: 对于使用高级编程语言编写的程序,可能需要相应的语言运行时环境。例如,Java 应用程序需要 Java 虚拟机(JVM)。

硬件架构: 程序可能是特定于某种硬件架构的,因此需要在相应的硬件上运行。例如,x86 架构、ARM 架构等。

配置和环境变量: 程序可能需要特定的配置和环境变量设置来正确运行。这包括路径配置、许可证信息、数据库连接信息等。

运行时参数: 某些程序在运行时可能需要一些参数或配置文件。

总的来说,运行环境提供了程序执行所需的一切,确保程序在特定的系统上以期望的方式运行。运行环境的概念适用于各种类型的软件,从操作系统本身到应用程序和脚本。

编译过程

词法分析(Lexical Analysis),语法分析(Syntax Analysis),和语义分析(Semantic Analysis)是编译器构建过程中的三个主要阶段,它们负责将源代码转换为可执行代码的中间表示形式。

对于输入表达式一: “2 + 3 * 4”
对于输入表达式二: “2 + 3 * h”

一、词法分析(Lexical Analysis):

任务: 词法分析器负责将源代码分解为词法单元(Token)序列。
作用: 词法单元是编程语言中的基本语法单元,例如关键字、标识符、运算符、常量等。词法分析器通过扫描源代码并识别这些词法单元,生成一个标记流用于后续的语法分析。
工作流程: 通常包括跳过空白字符、识别关键字和标识符、解析数字和字符串等步骤。

表达式一:词法分析器将生成以下词法单元序列:

Number(2)   Plus(+)   Number(3)   Multiply(*)   Number(4)

表达式二:词法分析器将生成以下词法单元序列:

Number(2)   Plus(+)   Number(3)   Multiply(*)   String(h)

二、语法分析(Syntax Analysis):

任务: 语法分析器负责根据词法分析生成的标记流,构建抽象语法树(Abstract Syntax Tree,AST)或其他中间表示形式。
作用: 语法分析器检查代码的结构是否符合语法规则,确保源代码形成有效的语法结构。它也有助于理解程序的层次结构和语法规则。
工作流程: 通常采用上下文无关文法,通过解析器将标记流转换为语法结构。

表达式一:语法分析器根据词法单元构建抽象语法树(AST):

     +
    / \
   2   *
      / \
     3   4

表达式二:语法分析器根据词法单元构建抽象语法树(AST),这个语法树仍然是个合法的,语法分析通过:

     +
    / \
   2   *
      / \
     3   h

语法分析关注的是源代码的结构,两个操作符分别连接两个操作数,这是合法的代码结构

三、语义分析(Semantic Analysis):

任务: 语义分析器负责检查源代码的语义是否合法,并生成中间代码或直接进行代码优化。
作用: 语义分析阶段关注程序的含义和行为。它会检查变量的声明和使用、类型匹配、函数调用等语义规则,并确保程序在执行时不会产生不一致的行为。
工作流程: 语义分析可能包括类型检查、符号表管理、作用域分析等步骤。它通常在语法分析之后进行。

表达式一:

检查语法树确保它在语义上是合法的。
    语法树中的每个节点都有一个操作符,例如加法和乘法。
    检查每个操作符的操作数是否具有合适的类型(在这个例子中是数字)。
在这个例子中,语法树是合法的,因为每个操作符都有正确的操作数类型。

表达式二:

词法分析和语法分析仍然会创建词法单元和语法树,
但语义分析将会发现乘法操作符的两侧有一个数字和一个字符,这是不合法的。
这是一个语义错误,因为数字和字符不能直接相乘。

语义分析关注的是源代码的含义

这三个阶段协同工作,确保源代码经过正确的解析、结构化,以便后续的优化和代码生成阶段。这些阶段是编译器设计中的关键步骤,它们为构建高效、可靠的编译器提供了基础。

Build 和 Archive

在Xcode工程中,”Build”和”Archive”是两个不同的过程,它们分别用于不同的目的。

Build(构建):
“Build”是指编译项目源代码并生成可执行文件(或者库文件)的过程。
在开发过程中,你会频繁执行Build,以便检查代码的语法错误、逻辑问题等。
Build过程会生成一个可执行文件,该文件通常存储在Derived Data目录下。这个可执行文件是你在模拟器或真机上运行应用时所使用的。

Archive(归档):
“Archive”是指将项目的构建结果打包成一个发布版本(archive)的过程。
归档的目的通常是为了将应用进行分发、发布或提交到App Store。归档会创建一个包含可执行文件和相关资源的压缩文件,该文件可以被用于分发给测试人员、提交到App Store等。
在进行Archive之前,你通常需要选择一个真机作为目标,因为你将会构建一个适用于真机的可执行文件。

简而言之,Build是为了验证和测试,而Archive是为了将应用程序准备好发布。在实际的开发流程中,你可能会先执行Build,确保代码没有错误,然后再执行Archive,准备应用程序进行发布。

从头开发一个app都需要什么

1、网络请求
2、路由
3、webView
4、本地存储
5、推送通知

随记

代码编译之后是二进制文件也就是0101指令

计算机执行二进制文件就是运行指令:开辟空间+处理操作数

静态语言:编译时检查类型

动态语言:运行时检查类型


行者常至,为者常成!





R
Valine - A simple comment system based on Leancloud.