实习项目
2024 年夏季
在任何地方运行 OCaml 练习
实习生
Divyanka Chaudhari
导师
Cuihtlauac Alvarado <[email protected]>
Sayo Bamigbade <[email protected]>
Shakthi Kannan <[email protected]>
目前,有几组旨在学习 OCaml 的练习题可用: https://github.com/gs0510/ofronds https://github.com/sudha247/learn-ocaml-workshop https://github.com/kayceesrk/cs3100_f19 https://github.com/ocaml-sf/learn-ocaml,来源: http://ocaml-sf.org/learn-ocaml-public https://github.com/ocaml.org,来源: https://ocaml.org.cn/exercises
可能还有更多。每组练习都使用不同的执行框架(例如 Jupyter、Learn-OCaml 或自定义框架)。它们提供了从可用解决方案到候选解决方案测试的各种用户体验。该实习项目的主要目标是构建一个通用配置,允许在大多数已知设置中运行每组练习。这将具有以下好处
- 练习不再局限于特定的设置,它们可以在多个设置中使用 - 学习内容和技术设置之间的松散耦合 - 对于学习者:练习集之间的功能对等,自学,独特、简单和快速入门 - 对于教师:专注于练习编写,使用通用设置 - 对于社区:更多练习,更容易上手,改进 OCaml 的学习曲线 目标不是让所有项目的所有练习都在所有设置中运行。相反,目标是证明这样做是可行的。然而,这将通过将每个练习组的有意义的部分移植到几个设置或分支(如果需要)来建立。作为一个设计约束,我们希望在 https://ocaml.org.cn/ 提供练习。我们考虑自动处理练习组以生成 https://ocaml.org.cn/exercises 页面。通用设置应该允许这样做,尽管它不是实习的一部分。
试验可访问的差异查看器
实习生
Alan Matthew
导师
Paul-Elliot Anglès d'Auriac <[email protected]>
Jules Aguillon <[email protected]>
查看两个文件之间的差异是开源工作中最常见的活动之一。它发生在审查拉取请求、检查提交以及许多其他情况下。然而,阅读这样的差异并不总是容易的。许多工具的出现是为了改善这种情况并使差异审查更容易:使用颜色来区分添加和删除的行(传统上是绿色和红色),使用粗体来引起人们对单词级别行修改部分的注意,并排显示两个文件,......然而,上面提到的大多数改进
- 是为文件的“通用”差异而设计的。有些文件可能有很长的行,不适合当前的差异输出。 - 仅限于视力正常的人。该项目的目标是开发一个基于 Git diff 的可视化工具。该可视化工具是一个终端用户界面,实习的主要任务是使其高度适用于屏幕阅读器。
2023年冬季
为 OCaml 开发一个几何创意编程库
实习生
Fay Carsons
导师
Sudha Parimala
Kaustubh M
OCaml 是一种工业级的函数式编程语言,已经有近三十年的历史。
虽然函数式编程本身并不新鲜,但它并没有在主流编程语言中占据主导地位。最近,越来越多的主流语言开始采用函数式编程的概念。现在比以往任何时候都更需要各种类型的函数式编程学习资料。
创意编程是一种计算机编程,侧重于使用软件和数字工具生成艺术性、表现力和创造性的输出。它在游戏开发等领域有其应用。最重要的是,它是一个很棒的教学工具,可以为读者提供可视化的输出。
Joy 是一个用 Python 编写的微型创意编程库。Joy 很大程度上基于函数式编程概念,很少涉及 Python 语法。
该项目旨在用 OCaml 实现一个几何创意编程库。它很大程度上受到了 Joy 的启发。完成后,它将成为在 OCaml 中进行几何创意编程的一种方式。
为 OCaml.org 实现夜间模式
实习生
Oluwaseun Oyenuga
导师
Sayo Bamigbade
punchagan
OCaml 是一种功能强大、静态类型的编程语言,以其效率和表现力而闻名。OCaml.org 作为 OCaml 社区的中心枢纽,提供资源、文档和新闻。在当今的数字时代,用户期望更加个性化和舒适的网络体验。其中一个期望就是提供夜间模式,这已成为网站和应用程序上的一个流行功能。该项目概述了为 OCaml.org 实现夜间模式的计划,以增强用户体验并使平台现代化。随着 OCaml 在各行各业的不断普及,使其在线形象现代化以满足全球用户的期望至关重要。
当前明亮模式的样式和颜色已经存在,因此实现夜间模式将涉及根据 Figma 设计添加对比色和样式。它还将考虑可访问性标准,并创建一个在明亮模式和夜间模式之间切换的按钮。
改进 OCaml 用户的 GUI 体验
实习生
PrincessIddy
导师
Guillaume Petiot
Moazzam Moriani
受Rust 的“Are we GUI yet?”的启发,我们希望对 OCaml GUI 库进行同样的工作。OCaml Web 库也进行了类似的工作:“Is OCaml web yet?”(参见拉取请求)。这项工作将使我们能够在未来解决“Are we game yet?”的问题。
该调查必须考虑到这些库的目标平台、依赖项、(不)兼容性、特性、最新更新等。OCamlVerse 中有一个列表,但不够完整或详细。具有其他语言 GUI 库经验的实习生也可以将它们与等效的 OCaml 库进行比较。
这项工作必须在 OCaml.org 上生成一份指南,类似于“Is OCaml web yet?”页面。
2023 年夏季
MirageOS Unikernel 中的持久存储
实习生
PizieDust
导师
Reynir Björnsson
每个操作系统,即使是 unikernel,都需要一种在重启后持久化数据的方法。在 MirageOS 中拥有持久存储功能绝对是一个值得考虑的功能。开发此功能包括构建用于磁盘分区的库、用于这些分区的⽂件系统,以及以简单、直观和程序化的方式从用户的角度与这些存储设备进行交互。该项目通过构建用于 GPT 分区的库,将这一愿景向前推进了一步。
改进现有基于 PPXLIB 的 PPX 的错误报告
实习生
Abongwa Bonalais
导师
Paul-Elliot Anglès d’Auriac
过去,当 'ppxlib' 在转换中遇到异常时,它会停止重写过程,导致后续的重写器无法被处理。此外,当多个重写器失败时,无法同时报告多个错误,因为只有第一个引发异常的重写器会引发异常,编译过程就此停止。但现在,一个引发异常的重写器不会阻止前面的重写器运行,允许在无上下文阶段和所有其他阶段引发多个异常。
使用 MirageOS 实现以太网 MIDI
实习生
Aryan Godara
导师
Claes (rand)
Sonja Heinze
Moazzam Moriani
MIDI(乐器数字接口)是音乐和音频技术领域广泛使用的协议。MirageOS 是一个专门创建轻量级、安全且高效的单内核库操作系统。单内核是高度专业化、单一用途的虚拟机映像,专为特定应用程序而设计,并且是用 OCaml 编写的。该项目专注于实现 rtpMIDI 协议,用于通过以太网序列化和反序列化 MIDI 消息,并实现基于发布-订阅的服务器-客户端模型等 MIDI 消息用例。
2022 年冬季
实现 TopoJSON 的非阻塞流式编解码器
实习生
Prisca Chidimma Maduka
导师
Patrick Ferris
Odinaka Joy
TopoJSON 是 GeoJSON 的扩展,用于编码拓扑结构。这允许删除冗余数据并大大减小文件大小。这通常是非常理想的,尤其是在浏览器中处理数据时。在之前的 Outreachy 实习中,实现了一个新的 OCaml 库,以提供用于 TopoJSON 的 OCaml 库。该项目将在此基础上构建,向库中添加更多功能,并提供类似于 geojsone 库的非阻塞流式编解码器版本。
2022 年夏季
扩展 OCaml 5.0 并行基准测试套件
实习生
Moazzam Moriani
导师
Sudha Parimala
OCaml 5.0 即将发布!它支持 OCaml 多年来一直缺少的共享内存并行和并发。它还将附带一套强大的多核库,可用于并行编程。多核编译器和库正在积极开发中,并将随着 OCaml 生态系统向多核发展而不断发展。为了评估 OCaml 编译器和多核库中新特性的影响,我们在基准测试套件中提供了一组顺序和并行基准测试。虽然顺序基准测试包含许多实际应用程序,但更广泛的并行基准测试将非常有用。该项目需要收集 https://github.com/ckoparkar/ocaml-benchmarks 等各种地方提供的并行基准测试,并使其在基准测试套件中可用。
扩展 OCaml 的 GeoJSON 库以支持 TopoJSON
实习生
Jay Dev Jha
导师
Patrick Ferris
TopoJSON 是 GeoJSON 的扩展,用于编码拓扑。这允许移除冗余数据并大大减小文件大小。这通常是非常需要的,尤其是在浏览器中处理数据时。该项目旨在扩展 ocaml-geojson
以支持 TopoJSON。
2021 年冬季
为 OCaml.org 构建监控仪表板
实习生
Jiae Kam
导师
Thibaut Mattio
Patrik Keller
我们目前无法了解服务于 v3.ocaml.org 的服务器的性能,哪些页面访问量最大,是否发生错误等。为了提供一些可见性,我们可以实现一个基本的监控仪表板,提供以下指标:内存、CPU、打开的文件描述符,以及统计信息(首先检查是否符合 GDPR!):请求的 URI、用户代理、语言、日志。该项目主要由两部分组成:前端和后端。后端包括构建一个高级库来收集数据并获取统计信息。前端将使用此库来显示指标、统计信息和我们想要收集的其他数据的图表。
改进 OCaml 元编程生态系统
实习生
Aya Sharaf
导师
Shon Feder
Sonja Heinze
Patrik Keller
编程语言通常会提供某种元编程方法,以便在代码到达最后编译步骤之前对其进行预处理,例如,以宏或模板的形式。OCaml 编译器不提供完整的内置宏系统,但 OCaml 解析器确实提供了用于预处理的语法:属性和扩展点。我们——OCaml 社区——还有一个名为 ppxlib
的官方框架,用于编写基于该语法的预处理器(称为 PPX)并将其集成到编译过程中。然而,由 OCaml 社区负责编写重要的 PPX 并将其提供给 OCaml 开发人员。我们注意到,将最重要的 PPX 放在官方 PPX GitHub 组织下(紧挨着 ppxlib
)很有帮助。开发人员可以轻松找到它们;开发人员可以信任它们;而且它们编写良好且卫生,因此开发人员可以将它们用作编写其他 PPX 的指南。在这个项目中,你将编写一个或一些官方标准 PPX。
在 OCaml 的 VSCode 扩展中支持 `.eml` 文件
实习生
Sayo Bamigbade
导师
Thibaut Mattio
Gargi Sharma
Patrik Keller
在 OCaml 的 VSCode 扩展中支持 .eml
文件。OCaml Web 框架 Dream 使用 .eml
文件将 HTML 嵌入 OCaml 文件中。目前,使用官方 OCaml VSCode 扩展在 VSCode 中打开这些文件不会为 .eml
文件提供任何语法高亮或诊断,因为它们不受支持。该项目的目标是第一步在扩展本身中添加对该语法的支持,最终第二步在 OCaml 语言服务器 (LSP) 中添加对该语言的支持。
2021年夏季
创建 opam 包搜索
实习生
Odinaka Joy
导师
Sonja Heinze
Patrick Ferris
Opam 是 OCaml 代码的基于源码的包管理器。该项目包括编写一个新的 Web 客户端来渲染 opam 包数据库的输出。opam.ocaml.org 上有一个 JSON 端点,它提供有关包的信息,这些信息将提供有关包的元数据。我们可以扩展此 JSON 元数据以包含所有 opam 包(而不仅仅是前 10 个),并使用它为网站提供搜索前端。这可能包括将数据呈现为 GraphQL 端点,前端使用 GraphQL 查询该端点。
改进 OCaml.org 网站
实习生
迪克莎·古普塔
导师
伊莎贝拉·莱安德松
Patrick Ferris
Gargi Sharma
OCaml.org 是 OCaml 的主要网站,OCaml 是一种函数式、类型化的高级编程语言。该项目围绕多方面改进网站,包括:布局、可访问性和内容。
改进 OCaml.org 网站
实习生
施雷亚·库马里·古普塔
导师
伊莎贝拉·莱安德松
阿尼尔·马达瓦佩迪
Patrick Ferris
Gargi Sharma
OCaml.org 是 OCaml 的主要网站,OCaml 是一种函数式、类型化的高级编程语言。该项目围绕多方面改进网站,包括:布局、可访问性和内容。
2020年夏季
减少 OCaml 编译器代码库中的全局可变状态
实习生
Anukriti Kumar
导师
Guillaume Bury
Vincent Laviron
OCaml 编译器消息的结构化输出格式
实习生
Muskan Garg
导师
Florian Angeletti
通常,编译器的输出消息对机器来说比较难以阅读,因此查找警告、错误等及其来源更加耗时。通过生成结构化的编译器消息输出,其他工具可以更轻松地与它们进行互操作,并在消息之上提供工具。
2019年夏季
使用代码覆盖率工具测试 OCaml 编译器
实习生
Oxana Kostikova
导师
Sébastien Hinderer
Florian Angeletti
使用代码覆盖率工具改进编译器测试流程。核心 OCaml 系统有一个大型测试套件,查看系统的哪些部分测试更活跃,哪些部分不活跃非常有用。这将帮助开发人员查看需要添加新测试的位置,并且在提高覆盖率的过程中,可以发现未探索的错误并修复它们。这可能有助于使 OCaml 及其库更加可靠。
使用随机测试和参考解释器测试 OCaml 编译器
实习生
Ulugbek Abdullaev
导师
Gabriel Scherer
Jan Midtgaard
该项目的目的是扩展 OCaml 编译器的现有测试用例生成器,使用参考解释器(现有或新开发的)来查找编译器中的大量错误并尽可能多地修复它们。
2016年夏季
2015年冬季
2014年夏季
MirageOS 云 API 支持
实习生
Jyotsna Prakash
导师
David Scott
阿尼尔·马达瓦佩迪
MirageOS(参见 http://xenproject.org/developers/teams/mirage-os.html, http://www.openmirage.org/)是用 OCaml 编写的类型安全单内核。它生成高度专用的“设备”虚拟机,可以直接在 Xen 上运行,而无需中间内核。MirageOS 应用程序通常通过云上多个通信内核实例运行。如今,这些实例难以管理;我们希望探索使用常见的公共云 API(例如 Amazon EC2 和 Rackspace 提供的 API)来管理这些分布式计算的策略。首先,我们需要为(例如)EC2 和 Rackspace 创建纯 OCaml API 绑定(需要纯度以确保可移植性)。然后,可以使用这些 API 绑定向单内核提供操作系统级抽象。例如,传统的虚拟机可能会热插拔 vCPU;而 MirageOS 应用程序将使用云 API 请求“创建虚拟机”并将新实例“连接”到现有网络。我们应该能够通过在集群环境中使用此类 API 来启动数千个“CPU”。除了帮助 Xen/Mirage 之外,公共云 API 绑定对其他人在其他环境中也非常有用——这是一个很好的副作用。
Outreachy 实习项目
即将到来的 OCaml Outreachy 实习机会
这些实习机会专为那些在其所居住地区受到系统性偏见和技术行业代表性不足影响的人士而设计。了解更多关于Outreachy的机会和资格要求。