分类: 开发

用Common Lisp编写的Java JIT编译器和运行时:OpenLDK

2025-02-06
用Common Lisp编写的Java JIT编译器和运行时:OpenLDK

OpenLDK是一个用Common Lisp编写的Java即时编译器和运行时环境。它通过将Java字节码增量转换为Lisp,然后编译成原生机器码来执行,从而桥接了Java和Common Lisp之间的差距。这种独特的方法允许Java类无缝映射到Common Lisp对象系统(CLOS)类,从而实现Java和Common Lisp代码库之间的轻松集成。虽然性能并非其主要目标,但OpenLDK为在Lisp工作流程中集成Java库提供了一种实用方案。目前,它主要支持Linux系统和SBCL,并且仍在开发中,许多功能尚未实现,例如对Java 8之后版本的类文件的支持以及字节码验证。

开发

GitHub Copilot 重大更新:引入代理模式和 Copilot Edits 正式发布

2025-02-06
GitHub Copilot 重大更新:引入代理模式和 Copilot Edits 正式发布

GitHub Copilot 迎来重大更新!全新代理模式赋予 Copilot 更强的自主性,能够自主迭代代码、识别并修复错误,甚至推断并完成未明确指明的子任务。Copilot Edits 也正式发布,支持跨多个文件进行代码编辑,并提供流畅的对话式交互体验。此外,GitHub 还预告了代号为“Project Padawan”的自主式软件工程师代理,未来将能够直接处理 GitHub 上的任务,自动生成并测试代码,甚至分配代码审查人员。这些更新旨在将开发者从繁琐任务中解放出来,让他们专注于更具创造性的工作。

开发

代码重构的误区:何时不该重构?

2025-02-06
代码重构的误区:何时不该重构?

本文探讨了代码重构的误区,指出并非所有代码都需要重构。作者列举了数个场景,例如试图通过重构解决bug或第三方代码变更后的调整;盲目追求完美抽象,导致代码复杂化;同时处理多个代码异味;重构未经测试的代码;以及重构不变的代码等。文章强调,重构应遵循循序渐进、行为保持不变的原则,在测试保障下进行小的、可逆的改变,必要时应暂停重构,待理解更深或有新的需求后再进行。只有针对频繁变化且复杂的代码进行重构,才能事半功倍。

开发

虚拟管道法:一种用于地形上水体模拟的简易高效方法

2025-02-06
虚拟管道法:一种用于地形上水体模拟的简易高效方法

本文介绍了一种用于在游戏中模拟地形上水流的简易高效方法——虚拟管道法。该方法基于浅水方程,采用交错网格,将水流视为通过虚拟管道连接的水柱。通过水位差加速水流,并通过流出缩放避免出现负水量。作者详细解释了该方法的三个步骤:水流加速、流出缩放和水柱更新,并给出了相应的代码示例。该方法简单易懂,计算效率高,适用于需要地形修改和水流模拟的游戏,例如城市建设游戏。虽然该方法存在一些局限性,例如缺乏惯性和速度扩散,但对于大多数游戏场景来说已经足够实用。

开发 水体模拟

arXivLabs:与社区协作者开展实验性项目

2025-02-06
arXivLabs:与社区协作者开展实验性项目

arXivLabs是一个框架,允许协作者直接在我们网站上开发和分享新的arXiv功能。与arXivLabs合作的个人和组织都拥抱并接受了我们开放、社区、卓越和用户数据隐私的价值观。arXiv致力于这些价值观,并且只与遵守这些价值观的合作伙伴合作。有一个想法可以为arXiv社区增加价值吗?了解更多关于arXivLabs的信息。

开发

Par:一种实验性并发编程语言及其交互式游乐场

2025-02-06
Par:一种实验性并发编程语言及其交互式游乐场

Par是一种实验性的并发编程语言,它尝试将线性逻辑的表达能力应用于实践。它具有独特的特性:进程通过通道进行通信,每个通道最多有两个端点,且不会出现死锁。所有值都是通道,包括列表、函数和无限流。目前Par还缺少一些特性,例如基本类型和非确定性,但它已经足够表达丰富的并发性。本文详细介绍了Par的语法、语义和一些例子,包括通道、信号、递归、表达式语法等。通过交互式游乐场,用户可以体验Par的并发特性。

开发 线性逻辑

跨平台定时器API的缺失:一场操作系统API的探险

2025-02-06

本文探讨了跨平台C语言编程中定时器API的困境。作者发现,不同Unix系统(包括Linux、FreeBSD、NetBSD等)对定时器的处理方式差异巨大,POSIX提供的timer_create方法因其基于信号机制而存在诸多问题,例如与其他操作系统原语的互操作性差、信号掩码的影响等。文章深入分析了timerfd_create、kqueue、port_create以及io_uring等不同方案的优缺点,并最终指出,对于跨平台应用,在用户空间实现定时器,例如libuv的做法,是更有效率和可靠的方案,它使用最小堆数据结构管理定时器,并通过poll/epoll/kqueue等系统调用实现多路复用。

开发

Memfault招聘Android SDK工程师,年薪10万-18万美元

2025-02-06
Memfault招聘Android SDK工程师,年薪10万-18万美元

物联网可靠性平台Memfault正在招聘Android (AOSP) SDK工程师。你将与其他SDK(Linux,MCU)负责人以及多个跨职能团队一起,推动Memfault的Android技术发展。Memfault技术栈庞大,涵盖微控制器SDK、后端大规模数据处理和前端复杂自定义图表等。公司鼓励员工参与多个技术领域,并提供相应机会。工作地点灵活,公司定期组织团队聚会和年度公司活动。

开发 Android SDK

AsciiDoc:比Markdown更强大的文档写作利器

2025-02-06
AsciiDoc:比Markdown更强大的文档写作利器

厌倦了Markdown的局限性?AsciiDoc或许是你的理想替代品。它拥有更强大的功能,例如轻松处理表格、脚注和交叉引用,支持文档组合和条件内容,并拥有统一的生态系统。本文以一个应用用户指南为例,详细介绍了AsciiDoc的用法,包括元数据设置、标题组织、文本格式、列表、表格、属性和条件内容等。此外,还介绍了adoc Studio这款编辑器,它简化了AsciiDoc文档的导出和管理流程,并支持与Git协同工作,实现Docs-as-Code。AsciiDoc结合Git和adoc Studio,让文档编写和维护更高效、更专业。

Go语言多键映射库:go-multikeymap

2025-02-06
Go语言多键映射库:go-multikeymap

go-multikeymap是一个高效的Go语言库,实现了支持多个键的映射数据结构。它提供两种类型:MultiKeyMap和BiKeyMap。MultiKeyMap允许一个主键和多个字符串副键,而BiKeyMap则要求两个主键都唯一。两者都提供并发安全和非并发版本,性能测试显示其访问速度接近O(1)。该库易于使用,并提供了详细的文档和基准测试结果,方便开发者快速集成和评估性能。

开发 多键映射

程序员的创作之路:从自动化视频到Origami语言的动漫画

2025-02-06

一位程序员为了更有效率地创建Web Origami项目的视频内容,尝试了自动化生成音频和视频的方法,并最终转向了制作动漫画。他利用HTML/CSS和少量JavaScript动画构建了一个动漫画系统,可以从剧本生成音频和视频,并利用Origami语言的特性进行测试和更新。这个过程让他更专注于故事本身,提升了创作效率,也避免了视频更新的麻烦。

开发 动漫画

Alpine Linux寻求社区支持以应对Equinix Metal停服

2025-02-06

Alpine Linux 的关键基础设施依赖于即将停用的 Equinix Metal 服务。这将影响其下载镜像、持续集成和开发环境。为确保服务的连续性,Alpine Linux 正在寻求社区的帮助,包括提供荷兰附近的机架空间、裸机服务器(用于镜像和 CI)或虚拟机,以及资金支持。他们强调了可持续资金的重要性,并鼓励通过 Open Collective 捐款。

开发 社区支持

Marksmith:一款GitHub风格的Rails Markdown编辑器

2025-02-06
Marksmith:一款GitHub风格的Rails Markdown编辑器

厌倦了复杂的Markdown编辑器?Marksmith来了!这款为Ruby on Rails打造的编辑器,拥有GitHub风格的简洁界面和强大的功能。它支持ActiveStorage,提供预览面板、工具栏和列表延续等实用特性,让你像在GitHub上一样流畅地编写Markdown。更棒的是,它集成了Avo,方便你管理已上传的媒体文件。还在等什么,赶紧试试吧!

OpenWrt 24.10 稳定版发布:支持超过1970款设备

2025-02-06

OpenWrt 社区发布了 24.10 稳定版,这是 OpenWrt 23.05 后的重大更新,包含超过 5400 个提交,历时一年多开发完成。该版本支持超过 1970 款设备,新增 100 多款设备的支持,并包含对 OpenWrt One 的支持。升级方面,从 OpenWrt 23.05 升级到 24.10 通常可以使用 sysupgrade 工具,但建议备份配置。部分设备(例如 Linksys E8450、Xiaomi AX3200 和 Zyxel GS1900 系列交换机)升级需要遵循特殊的步骤,否则可能导致设备损坏。

开发

Vulnerability-Lookup:一个协作式漏洞管理平台

2025-02-06
Vulnerability-Lookup:一个协作式漏洞管理平台

Vulnerability-Lookup是一个强大的开源平台,用于快速关联来自不同来源的漏洞,简化协调漏洞披露(CVD)流程。它支持多种数据源导入,包括NIST NVD、CISA等,并允许用户添加漏洞观测、评论和创建漏洞集合。其提供的API和Python库方便了与其他工具的集成,开发者可以轻松创建自己的漏洞观测工具。Vulnerability-Lookup采用GNU Affero GPL v3.0开源许可证,由CIRCL、Alexandre Dulaunoy、Raphaël Vinot和Cédric Bonhomme共同开发。

开发 漏洞管理

6502汇编:学习汇编的最佳起点?

2025-02-06
6502汇编:学习汇编的最佳起点?

学习汇编语言的最佳起点是什么?作者认为是6502。尽管6502在现代应用中并不常见,但其简单的指令集(只有56条指令)和丰富的学习资源使其成为学习汇编语言基本概念的理想选择。6502曾广泛应用于经典电脑,例如Apple II和Commodore 64,因此拥有大量的模拟器和学习资料。作者推荐了Easy 6502和Visual6502.org作为学习资源,并比较了其他架构如x86-64和ARM的复杂性,进一步强调了6502的优势。

开发

Oracle的JavaScript商标之争:一场旷日持久的拉锯战

2025-02-06
Oracle的JavaScript商标之争:一场旷日持久的拉锯战

Deno Land CEO Ryan Dahl领导的社区行动挑战Oracle对"JavaScript"商标的拥有权,引发轩然大波。Oracle被指控在商标续期申请中提交虚假材料,并试图拖延诉讼进程。这场争议的核心在于JavaScript是否已成为通用术语,以及Oracle是否放弃了该商标。Oracle则反驳称其拥有正当理由,并提交了额外的证据。这场法律纠纷反映了科技巨头对商标的严格保护以及开源社区争取公平使用的努力。

开发

Discord Messenger for Windows:一个支持 Windows 2000 的非官方客户端

2025-02-06
Discord Messenger for Windows:一个支持 Windows 2000 的非官方客户端

Discord Messenger 是一款非官方的 Discord 客户端,惊人地支持 Windows 2000 及更高版本系统。该项目开源,使用 MIT 许可证,但使用第三方客户端违反 Discord 的服务条款,用户需自行承担风险。该客户端目前为测试版,功能尚不完善,但已实现消息收发、附件上传下载、表情包显示等核心功能。编译该客户端需要一定的技术能力,支持使用 MinGW 或 Visual Studio 编译,并需要自行编译或下载 OpenSSL 库。

开发

构建你自己的语言:一个语言构建工具包

2025-02-06

本文介绍了一个构建人工语言的工具包,适合用于创造奇幻世界或外星文明的语言。作者Mark Rosenfelder详细讲解了构建自然语言的方法,并提供了相应的步骤,包括确定语言的音素、词汇、语法、字母表以及书写方式等。文章还以作者自己创作的Verdurian语言为例,并指出构建语言的步骤顺序的重要性,避免像Hergé的Syldavian语言那样前后矛盾。最后,文章还提供了额外的网络资源和书籍,方便读者进一步学习。

WebRTC点对点通信SDK:@pulsebeam/peer开发者预览

2025-02-05
WebRTC点对点通信SDK:@pulsebeam/peer开发者预览

PulseBeam发布了新的WebRTC点对点通信SDK——@pulsebeam/peer,目前处于开发者预览阶段。该SDK简化了实时应用开发,处理了连接建立、媒体和数据传输的信令协议,并提供了基础设施。它支持音频、视频和数据通道传输,自动重新连接,并可选地支持服务器中继通信。安装方便,支持npm、deno和yarn。文档和API密钥请参考PulseBeam官方文档。

开发

mt32-pi项目终止:开发者不堪网络暴力

2025-02-05
mt32-pi项目终止:开发者不堪网络暴力

mt32-pi,一个为树莓派打造的裸机MIDI合成器项目,由于开发者持续遭受网络暴力,最终宣布停止更新。开发者在博客中描述了不堪重负的经历,包括人身攻击、代码盗用、3D打印设计被盗卖等。尽管该项目受到部分用户的支持,但持续的负面经历严重影响了开发者的身心健康,最终迫使其放弃项目维护。mt32-pi支持多种树莓派型号,并具备丰富的功能,包括I²S Hi-Fi DAC支持、网络MIDI支持等。

开发 MIDI合成器

Okta安全事件:Bcrypt算法的长度限制漏洞

2025-02-05
Okta安全事件:Bcrypt算法的长度限制漏洞

Okta的安全事件源于其使用的Bcrypt算法对输入长度的处理方式。Bcrypt算法最大支持72个字符,超过部分会被忽略,导致仅需猜测部分用户名和缓存密钥即可登录。文章分析了Go、Java、JavaScript、Python和Rust等语言中Bcrypt库的实现,发现许多库未对输入长度进行有效验证,存在安全风险。作者呼吁改进API设计,明确拒绝无效输入,避免此类安全漏洞。

开发 Bcrypt

康威定律:软件架构与组织结构的镜像

2025-02-05
康威定律:软件架构与组织结构的镜像

软件架构师们普遍认同康威定律的重要性:任何设计系统的组织,其产生的设计方案的结构都与该组织的沟通结构相对应。这意味着软件架构往往反映了开发团队的组织结构。忽视这一点会导致系统架构与组织结构冲突,增加开发难度。文章探讨了应对康威定律的三种策略:忽略、接受和逆康威操作(通过调整组织结构来引导软件架构)。作者强调,在软件开发过程中,系统架构和组织结构的演进应同步进行,并建议采用领域驱动设计等方法来辅助组织结构设计。

开发

两位程序员的数独求解器:设计哲学的碰撞

2025-02-05
两位程序员的数独求解器:设计哲学的碰撞

本文讲述了Ron Jeffries和Peter Norvig两位程序员各自编写数独求解器的经历。Jeffries采用增量式设计,从简单的List[Option[Int]]表示开始,经过多次迭代,最终完成求解器,但代码冗长且不够优雅。Norvig则利用其在搜索领域的专业知识,采用Map[Coord, Set[Int]]表示,代码简洁高效,并展现了约束传播的思想。文章探讨了两种不同设计哲学的优劣,以及程序员的领域知识对其编程风格的影响,引发了对软件设计方法的深入思考。

开发 编程哲学

Java 8 环形缓冲区库:j8cu

2025-02-05
Java 8 环形缓冲区库:j8cu

j8cu是一个针对Java 8的集合工具类库,其核心功能是一个高效的环形缓冲区(RingBuffer)实现。该RingBuffer支持有序和无序两种读取模式,有序模式遵循FIFO原则,适合维护最近N个对象的缓冲区。此外,它还提供事件监听器、批量复制和清除/重置等功能,极大地方便了开发者在Java 8中使用环形缓冲区。

现代 C++:性能、类型安全和灵活性的关键

2025-02-05

本文探讨了现代 C++(C++20 及更高版本)在性能、类型安全和灵活性方面的关键概念,例如资源管理、生命周期管理、错误处理、模块化和泛型编程。作者指出,许多开发者仍然使用过时的 C++ 技术,导致代码难以表达、性能低下、可靠性差且难以维护。文章介绍了现代 C++ 机制,并提出了确保代码现代化的指导方针和配置文件,旨在帮助开发者编写更简洁、高效、安全的 C++ 代码。

开发

Zig 0.13.0发布:一款注重稳健性和优化的通用编程语言

2025-02-05
Zig 0.13.0发布:一款注重稳健性和优化的通用编程语言

Zig 0.13.0版本发布,这是一个注重构建稳健、高效和可复用软件的通用编程语言和工具链。虽然目前仍处于不稳定状态,但Zig凭借其对底层编程概念的关注,吸引了众多程序员的兴趣。如果你具备一定的编程经验,并且了解C、C++、Rust等语言,那么学习Zig将相对容易。

开发 底层编程

在Kubernetes集群上运行ArchiveTeam Warrior

2025-02-05

作者原本在Proxmox虚拟机上运行ArchiveTeam Warrior项目,但为了提高效率并利用其Kubernetes集群,作者将其迁移到容器化环境中。文章详细描述了作者如何编写Kubernetes manifests,使用环境变量配置,并利用内存型emptyDir解决磁盘空间问题。此外,作者还开发了一个Python脚本监控Warrior的运行状态。文章最后更新部分提到作者与其他开发者交流后,改进了方案,使用了更轻量级的`*-grab`镜像,并计划构建一个管理UI。

开发 ArchiveTeam

OpenWISP:连接全球社区的开源网络解决方案

2025-02-05
OpenWISP:连接全球社区的开源网络解决方案

OpenWISP是一个备受全球各地信赖的开源网络解决方案,已在195多个国家部署超过2万次,服务超过40家商业客户。它在连接社区、促进数字包容性方面发挥了关键作用,为数千个活跃热点和每日用户提供高效的解决方案。网络管理员、市政部门和大学都依赖OpenWISP来简化网络管理,并提升网络的适应性和连接性。

AI赋能:个人软件时代的来临

2025-02-05
AI赋能:个人软件时代的来临

过去,个人电脑软件普遍缺乏个性化,功能臃肿。但AI的出现改变了这一切。现在,无需编程经验,普通人也能利用AI轻松创建专属应用,解决个人特定问题,如同在家烹饪专属美食。这并非取代专业软件开发,而是让更多人参与其中,提升对优质软件的鉴赏力,最终推动软件创新和发展。

开发
1 2 167 168 169 171 173 174 175 213 214