欢迎回到我的GSOC 2023旅程中的另一个激动人心的进度更新。
到目前为止的旅程
到目前为止,我的GSOC旅程绝对令人赞叹。
而且,我很高兴分享我已经成功通过了中期评估,我对到目前为止取得的进步感到不高兴!在我的导师的大力支持下,我的旅程是一个充实的旅程,使这种经历顺利而愉快。 ðð¥³
完成的工作(7月11日 - 7月25日):
在中期评估后,我遵循导师提供的宝贵建议,开始从事国家机器任务。主要目的是实现一种模态,每当仿真期间发生未知的异常误差时。在模态内,我努力创建一个模拟区域,类似于模拟器画布中的模拟区域。这项任务取得了很大的进展,但是我在测试过程中遇到了一些挑战,导致了几次失败的测试。为了确保有强大的解决方案,我决定将此任务暂时搁置。
向前迈进,我的目标是将误差电路加载到模态上,在模态内实现删除和撤消功能,并在电路回到其正常状态后关闭模态。我计划与我的导师讨论这一点,并旨在在接下来的两个星期内完成。
识别和修改当前选择的组件:
之后,我开始从事以下任务:
应该有一种方法来识别当前选择的组件(在画布上)并修改该组件的对象(在全局范围中)。
为了实现这一目标,我创建了两个功能:
-
getCurrantySelectedComponent():此功能负责返回画布上当前选择的组件。
-
modifyCurrantySelectedComponent(属性,值):此函数采用两个参数。第一个参数是需要修改的当前选择组件的属性,第二个参数是将替换指定属性的现有值的新值。此功能有效地修改了GlobalsCope中当前选择的组件的指定属性。
当前,在电路中识别特定组件并在GlobalsCope中修改其属性是具有挑战性的。但是,通过实现这些功能,我们现在可以轻松地找到并修改当前选择的组件。
让我为您提供一个示例,以说明如何利用此功能。考虑一个电路,现在选择要修改其属性的任何组件。假设我们要将特定节点的位属性从1个修改为10。我们可以通过在控制台中运行以下命令来完成此操作。
globalScope.getCurrentlySelectedComponent();
globalScope.modifyCurrentlySelectedComponent('bitWidth', 10);
查找并修复数据完整性问题:
接下来,我面临的挑战是解决导致许多用户数据损坏的数据完整性问题。这些问题对于解决更流畅的用户体验至关重要。
在此任务下,我从事Issue #103
在此中,仿真队列的当前实现使用线性实现来管理优先级队列,这涉及对数组中的元素进行排序以维护优先顺序。结果,add
方法使用线性时间复杂度(O(n))来找到根据其时间戳添加元素的正确位置。
为了使性能更好,我一直在努力降低o(log n)的复杂性,我正在利用二进制堆数据结构来管理优先级队列。二进制堆是一种基于树的专门数据结构,可维护堆属性,其中父节点的优先级(时间戳较小)比其子节点更高。在此实现中,添加方法使用heapify-up查找添加元素的正确位置,并且删除方法在删除元素后使用heapify-down来维护堆属性。与线性实现相比 由于插入和删除操作的效率更高(log n)时间复杂性,这将导致更大的事件队列的性能更好。
拉请求:
- Change the implementation of the priority queue to use a heap data structure
- Added helpful functions for debugging of circuit
接下来是什么?
当我向前看接下来的两个星期时:
-
我将继续专注于解决数据完整性问题并旨在解决其余问题。
-
完成拉请请求#3781是另一个优先事项,我将确保对拟议的更改进行彻底审核和整合。
-
接下来,我将开始处理识别代码库中我们可以实施更多防御性编码实践的任务,从而降低对数据的依赖性始终为正确的格式。
GSOC'2023的第7周和第8周的旅程既具有挑战性又有益。
请继续关注未来几周的更多更新和进度!