如何与ITMO大学的LLP相识:“低级编程”课程

最流行的编程语言是高级语言。 例如,Java,Python或C#。 当然,您可以对它们进行编程,而无法想象各种抽象级别实际上是如何工作的。 但是,对于一名优秀的IT专家而言,了解与之交互的平台是如何构建的,开发环境,编译器和调试器的功能非常重要。 这导致我们谈论低级编程。

LLP(低级编程)是找出如何编写可靠,快速,紧凑和高效程序的便捷方法。 我们的学生主要学习汇编程序和C语言,以更好地了解软件的工作方式。

Pablo BD CC BY-SA

你为什么要知道


IT行业正在迅速发展,并受技术和语言的流行影响。 基本概念(例如,计算模型,虚拟内存,编译和程序汇编)的更改频率要低得多。 了解这种概念的基本原理如何在一种编程语言中体现出来,将有助于您快速学习类似的语言(如果需要)。 在这种情况下,LLP可以使源文本中的程序如何变成一组机器指令,以及它们如何在计算机上执行。 反过来,熟悉内存管理机制和编译器的原理将有助于您编写对计算资源要求不高的代码。

澄清:我们经常不得不遇到这样的论点,即LLP只是在编写Iron和类似的任务。 事实并非如此。

在哪里可以找到LLP:

  • 交易方式 在交易所交易使得程序对市场波动的反应时间要求极高。 由于高级语言从“铁”中脱颖而出,因此很难预测程序对外部事件的响应时间。 因此,此处涉及LLP以提供对交易速度的控制。

  • 机器人学 。 这里的计算资源有限,因此对软件质量和代码紧凑性的要求很高。 此处公认的创建软件的方法并不总是有效,并且开发通常可以使用C或其他系统语言进行。

  • 系统软件 。 它们是操作系统,编译器(JIT,AOT),浏览器(今天它们已成为创建复杂应用程序的平台)。 他的工作并不总是为外行所注意,而是为应用程序软件创建了基础结构。

我们如何为此做准备?


我们的方向为09.03.01“信息学和计算机工程”和09.03.04为“软件工程”的学生学习了许多与底层编程相关的学科。 这些是操作系统,系统软件(包括Unix),编译器开发,虚拟化技术等。

起点-课程“低级编程”。 在这里,学生正在等待与汇编程序和C一起工作。 并行-他们研究编译和执行程序的过程。 该课程采用“从设置任务到完成程序”的格式。 本课程的主要目标是使您了解以下过程之间的转换过程中,程序的显示方式是如何变化的:

  • 编写代码;
  • 预处理和编译;
  • 连结
  • 执行和调试。


hackNY.org CC BY-SA

对于希望参加本课程的学生,我们希望他们对高级语言(例如Java或C#)的编程经验最少。 我们建议以下在线课程:


“低级编程”课程主要由专门为我们的学生编写的授课。 该书以英文出版,并已翻译成日文和葡萄牙文。 我们还经常与Intel64软件开发人员手册和System V AMD64 ABI合作。

课程内容


简而言之,本课程可以按如下方式进行详细说明(关于上面已经确定的主题):

  • 拼写代码 。 假设使用适用于Intel 64(NASM,Linux)和C11的免费汇编语言。 在这里,我们研究计算模型,并就编写代码的样式提供高级建议。

  • 预处理和编译 。 研究了NASM和C预处理器,形式语法,编译器的通用代码优化以及汇编器级别的C语言构造的典型实现的机制(换句话说,是“ C是高级汇编器”概念的演示)。

  • 链接(linking) 。 静态和动态。 在实践中,正在研究ELF格式-学生正在探索链接器和动态加载器的功能。 顺便说一句,为此专门开设了一个单独的迷你课程。

  • 运行和调试程序 。 在这里,我们了解这些任务与计算机的体系结构,虚拟内存设备和特权模式,中断以及系统调用机制之间的关系。 另外,我们考虑了gdb的使用方式(一个强大的调试器,它使您可以“窥探”任何程序)。

重要的组织细微差别


我们通过共同编写代码并使用binutils(objdump,readelf)或gdb的工具研究编译文件来中断讲座。 在授课期间(不仅如此),学生会在著名的Messenger中通过口头和课程渠道提出问题,老师会尽快回答。

作为实践课,学生们进行实验室工作。 有时,学习过程中的学生想要开发自己的个人感兴趣的东西(游戏,控制机器人的程序,编译器等)。

因此,作为考试的替代品,学生可以针对与老师达成一致的主题制作单独的项目。 在经过代码审查并在GitHub上发布后,他们录制了一个视频,演示了该项目 (此频道包含自2014年以来实施的项目,描述中指向GitHub的链接)。

学生作品的一个示例:模拟电子琴( 有关Habr项目详细故事

课程结束时完成了其他一些项目:



关于老师


在课程中,整个教师团队与学生进行互动,他们进行讲座,进行实验室工作并为学生提供建议。 高年级学生参加讨论并帮助当前课程的学生了解低级编程的复杂性。

有关课程准备材料的主要工作是由课程的教科书作者伊戈尔·日尔科夫(Igor Zhirkov)完成的。 伊戈尔曾就读于ITMO大学和学术大学,并于2016年获得ITMO硕士学位。 他感兴趣的领域是类型理论,数学逻辑,编程语言和低级编程。 他当前的主要项目与使用Coq和经过验证的C编译器CompCert编译器对C语言重构进行形式验证有关。



本课程将帮助您学习如何从足够的抽象水平看问题,并且有条件地说,不要尝试“用汇​​编器编写Web应用程序”。 我们正在尝试通过理解与这些“工具”及其环境(操作系统和CPU)相关的概念来进行C语言和汇编语言的研究。

顺便说一句,您可以在这里找到一本书,该书的写作受到该课程教学的启发(以英语,日语和葡萄牙语出版)。

Source: https://habr.com/ru/post/zh-CN425249/


All Articles