分类: 开发

用Prolog实现符号微分:优雅的DCG与高效的表计算

2025-03-12

本文介绍了如何使用Prolog语言及其强大的定义子句语法(DCG)来实现符号微分。首先,文章讲解了微积分的基本概念,特别是导数的定义和计算规则。然后,利用DCG构建了一个数学表达式解析器,它能够将字符串形式的数学表达式转换成抽象语法树(AST)。为了解决左递归问题,文章引入了表计算技术,提高了程序的效率。最后,文章定义了一套简化规则,对导数结果进行简化,得到更简洁的表达式。整个过程展示了Prolog在处理符号计算方面的优势,其简洁性与高效性令人印象深刻。

开发 DCG 符号微分

DuckDB内置本地UI发布!

2025-03-12
DuckDB内置本地UI发布!

DuckDB团队和MotherDuck联合发布了DuckDB的内置本地UI!这个强大的Web界面可以直接在本地运行,无需安装额外的软件。它提供交互式笔记本、数据库浏览器、表格数据预览以及数据分析工具,让用户能更方便地操作DuckDB。所有查询都在本地进行,保证数据安全。该UI还支持连接MotherDuck云服务,实现数据共享与协作。

开发 本地UI

持续编码一年的心得:从菜鸟到开发者

2025-03-12
持续编码一年的心得:从菜鸟到开发者

作者坚持每日编码并发布到Github一年,积累了约10万行代码。过程中经历了挑战,也取得了进步。他总结了几个关键点:软件开发很难,但坚持就能做到;迭代至关重要;自信是逐渐建立的;休息很重要;寻求帮助是技能;挑战自己才能进步;失败是成功的一部分。未来,他将继续每日编码,完善项目Vewrite并探索新的想法。

开发

告别传统平铺窗口管理器:拥抱Niri带来的无限空间

2025-03-12
告别传统平铺窗口管理器:拥抱Niri带来的无限空间

作者长期使用平铺式窗口管理器(Sway和i3),但最近因Sway的一个bug而转向了新型窗口管理器Niri。Niri采用可滚动平铺设计,解决了传统平铺管理器空间受限的问题。作者详细比较了Niri和Sway,发现Niri在屏幕共享、截图、电池续航等方面均有显著提升,并更容易进行二次开发。他认为Niri打破了传统平铺管理器对空间的限制,提升了工作效率,强烈推荐其他用户尝试。

开发 Niri

无需服务器的P2P浏览器文件传输:FilePizza v2强势来袭

2025-03-12
无需服务器的P2P浏览器文件传输:FilePizza v2强势来袭

FilePizza v2 是一款基于 WebRTC 的浏览器端 P2P 文件传输工具,无需服务器中转,直接在用户浏览器之间传输文件,保证速度快、隐私安全。新版本拥有现代化的 UI、暗黑模式、移动端支持、多文件上传(压缩为zip)、上传进度监控、密码保护、服务端状态的Redis存储等特性。文件传输过程使用端到端加密,安全可靠。开发者在伯克利大学吃披萨时构思了这个项目,现在已开源,并提供在线服务 file.pizza。

开发

HTML 界面控件的现代化:Open UI 社区组的使命

2025-03-12
HTML 界面控件的现代化:Open UI 社区组的使命

网页的交互性源于HTML提供的表单控件和UI控件。然而,HTML5之后,复杂的网页项目需要更强大的UI控制能力,开发者不得不依赖JavaScript框架,这导致了可访问性差、页面速度慢等问题。Open UI社区组旨在通过研究、规划和建议,改进HTML、CSS、JavaScript和Web API,为开发者提供构建现代化自定义用户界面的能力,最终目标是让网页UI更灵活、高效且易于访问。

开发

从Common Lisp到KC3:一位程序员的十年编程之旅

2025-03-12
从Common Lisp到KC3:一位程序员的十年编程之旅

一位拥有20年经验的资深程序员,在学习Common Lisp后,深刻体会到垃圾回收的局限性以及容器技术的安全性问题。为了追求性能和可移植性,他放弃了之前的所有项目,潜心开发了一门新的C语言方言KC3,并用其重写了之前的图形数据库等项目。这篇文章讲述了他从Common Lisp转向C语言的历程,以及KC3语言的设计理念和主要特性,展现了其对编程语言和系统设计的深入思考。

开发 系统开发

类型类一致性研究:Swift、Rust、Scala与Haskell的比较

2025-03-12
类型类一致性研究:Swift、Rust、Scala与Haskell的比较

类型类是实现泛型算法和数据结构的流行工具,在Haskell之后,Swift、Rust和Scala等语言也广泛采用。然而,隐式编程带来的类型推断歧义可能会破坏一致性(程序只有一个含义)。学术界对此存在分歧:一方支持上下文相关的灵活推断;另一方则主张全局唯一实例以避免歧义。本文比较了这四种语言处理类型类一致性的方法,发现尽管语法不同,但它们在规避实例唯一性限制方面策略惊人地相似。

AI编码助手Cursor:神器还是鸡肋?

2025-03-12
AI编码助手Cursor:神器还是鸡肋?

AI编码工具Cursor褒贬不一,有人宣称三天内就能用它构建完整SaaS,也有人认为它毫无用处。作者作为AI怀疑论者,分享了提高Cursor使用效率的经验。核心在于创建`.cursorrules`文件,逐步完善规则,避免冗余输入;明确指定代码位置和相关上下文;区分使用Composer(Agent)和Chat(Ask)功能;谨慎对待AI生成的代码,定期手动检查和重构;对于复杂任务,需先与AI充分沟通。作者总结,AI编码工具适合在脑力疲惫时使用,但需谨慎,切勿过度依赖,并意识到它可能导致编码能力退化。

开发 AI编码

开源软件的困境:免费与可持续的矛盾

2025-03-12

开源软件世界面临着一个两难困境:高质量的终端用户软件,例如办公套件和视频会议软件,通常难以通过完全开源的模式盈利,导致其发展受限。文章以“木材与椅子”的比喻,阐述了开源软件(木材)与商业软件(椅子)的区别,指出开源软件的维护需要持续投入,而完全免费的模式难以支撑这种投入。文章还探讨了欧洲软件主权的议题,强调了减少对美国科技巨头依赖的重要性,并呼吁寻找一种平衡开源自由与商业可持续性的新模式,以确保高质量开源软件的长期发展。

开发 软件主权

LLVM Fortran 编译器 Flang:十年磨一剑,正式发布

2025-03-12

历经近十年发展,LLVM Fortran 编译器 Flang 终于从 “flang-new” 正式更名为 “flang”。这篇文章回顾了 Flang 的发展历程,从最初由美国国家实验室和 NVIDIA 合作开发,到采用 LLVM 的多级中间表示 (MLIR) ,最终成为 LLVM 项目的一部分。Flang 的出现是为了提供一个长期、非专有的 Fortran 编译器,降低单一编译器带来的风险,并促进 Fortran 社区的蓬勃发展。Flang 的旅程也见证了编译器技术的进步,例如采用 MLIR 优化 Fortran 代码。如今,Flang 已成熟稳定,并得到 AMD 等厂商的支持,成为 Fortran 开发者的有力工具。

开发

模型上下文协议 (MCP):昙花一现还是未来标准?

2025-03-12
模型上下文协议 (MCP):昙花一现还是未来标准?

LangChain CEO Harrison Chase 和 LangGraph Lead Nuno Campos 就模型上下文协议 (MCP) 的实用性展开了一场辩论。Chase 认为 MCP 对于向开发者无法控制的代理程序添加工具非常有用,例如为 Claude Desktop 等应用添加自定义工具。Campos 则认为 MCP 的实际应用价值被高估了,因为它需要对代理程序进行大量的定制,并且目前的模型在调用正确工具方面准确率不高。两人还比较了 MCP 与 OpenAI 插件和 Zapier 的异同,并讨论了 MCP 未来需要改进的方向,例如简化实现、提高易用性以及在服务器端实现等。最终,辩论以一个 Twitter 投票结束,询问 MCP 是否是昙花一现还是未来标准。

开发

一站式远程连接管理中心

2025-03-12
一站式远程连接管理中心

这款工具如同你的远程连接中枢,将所有远程连接(SSH、Docker、Kubernetes等)集中管理。它支持各种终端、容器运行时环境和虚拟化技术(Proxmox、Hyper-V等),并提供SSH完整支持,包括配置文件、代理集成、跳板服务器、隧道、密钥文件、智能卡、X11转发等高级功能,让你一键启动终端会话,高效管理所有远程资源。

开发 终端管理

命令行日出日落时间追踪工具:daylight

2025-03-12
命令行日出日落时间追踪工具:daylight

daylight是一个命令行工具,用于追踪日出、日落、太阳正午时间和日照时长,并能预测未来十天的变化。它利用你的IP地址确定位置和时区,即使在极地地区或使用VPN也能正常工作。该工具支持Homebrew安装(MacOS和Linux),也提供手动安装方式(包括Windows)。此外,它还支持自定义位置和日期,并提供简洁的输出模式。作者用Go语言编写了这个项目,旨在学习Go语言,并欢迎用户提出问题。

开发 日出日落

开源实时3D渲染引擎VSC:致敬经典,挑战极限

2025-03-12
开源实时3D渲染引擎VSC:致敬经典,挑战极限

VSC是一个完全用软件编写的实时3D渲染引擎,旨在实现跨平台兼容。它受到DoomGeneric的启发,采用了新颖的前后端分离架构,并借鉴了作者NormalExisting之前为游戏开发的C++后端经验。该引擎是一个光栅化器,通过计算技术逼近光照、阴影、纹理和材质的真实效果。项目基于Eric Lengyel的《Mathematics for 3D Game Programming and Computer Graphics》一书,并参考了其他资源。代码主要由NormalExisting编写,并以Geometry Dash关卡VSC Verified为灵感,该关卡以Michael Bublé的歌曲为背景音乐,需要精确的节奏控制。引擎目前处于开发阶段,API仍在不断变化,但变化幅度不大。项目包含ESP32兼容代码,并提供示例代码和Makefile。

创业CTO手册:构建高绩效工程团队的实用指南

2025-03-12
创业CTO手册:构建高绩效工程团队的实用指南

本书是Zach Goldberg多年创业经验的总结,为所有工程领导者提供了一份宝贵的日常资源。作者从自身经历出发,结合大量案例和实用框架,涵盖了招聘、团队管理、技术架构、文化建设等多个方面,帮助读者解决构建高绩效工程团队过程中的复杂问题。书中强调持续学习的重要性,并提供了诸多实践技巧,例如:高效的1:1会议、跳层会议、技术债务管理、以及如何与CEO有效沟通等。无论你是初入职场的工程领导者,还是经验丰富的CTO,本书都将是你不可或缺的指南。

开发 工程文化

CUDA 并行计算加速合并排序算法

2025-03-12

本文作者基于之前的排序算法文章,使用 CUDA 对合并排序算法进行了并行计算优化。文章首先介绍了基本的递归自顶向下合并排序算法及其 CPU 实现,然后尝试了 CUDA 实现,但发现递归方式效率低下。作者随后改用迭代自底向上合并排序,并通过 CUDA 并行化合并操作,显著提升了效率。实验结果表明,对于较大的数组,CUDA 实现的迭代合并排序算法与 CPU 实现的标准排序算法性能相当,甚至略胜一筹。

开发 合并排序

计算机科学的残酷真相:Dijkstra 的 1975 年呐喊

2025-03-11

1975年,图灵奖得主Dijkstra发表了一篇直言不讳的文章,痛斥当时计算机科学界的诸多弊病。他毫不留情地批评了COBOL、PL/I、BASIC等编程语言的缺陷,以及学术界对这些问题的沉默。他认为,糟糕的编程语言和方法论正在损害计算机科学的智力完整性,并预言了过度依赖IBM系统带来的风险。这篇文章如同一声呐喊,至今仍值得我们反思:如何在追求技术进步的同时,保持科学的严谨和诚实。

开发

嵌入式系统中的逻辑优化:用 De Morgan 定律加速你的代码

2025-03-11

两位黑客Bob和Alice在资源受限的微控制器上发现了一个bug:OR运算比其他运算慢五倍。为了在三天期限内解决这个问题,他们利用逻辑等价性,特别是De Morgan定律,将代码中的OR运算替换为AND和NOT运算,从而避免了性能瓶颈。文章还介绍了NAND运算的普遍性及其在优化加密运算中的应用,例如在TFHE库中,使用NAND运算可以显著提高同态加密的效率。

fastplotlib:一个简单易用的科学可视化库

2025-03-11
fastplotlib:一个简单易用的科学可视化库

fastplotlib是一个新的Python科学可视化库,它专注于提供快速交互式可视化和易于使用的API。其核心设计理念是将数据视为数组,简化数据交互,并通过简单的回调函数处理事件。用户无需学习复杂的API即可进行动态数据操作和交互式可视化构建,例如更改颜色、数据等,以及定义点击事件等。这种简化的API设计降低了使用门槛,提高了可视化效率。

开发

本地运行LLM:隐私、成本和实验的完美结合

2025-03-11
本地运行LLM:隐私、成本和实验的完美结合

本文探讨了在本地运行大型语言模型(LLM)的优势和方法。作者指出,虽然本地运行LLM的性能不如云端服务,但在注重隐私、控制成本以及进行实验性开发时,它具有显著的优势。文章介绍了三种运行LLM的工具:Ollama(易于使用,模型库丰富)、Llama.cpp(跨平台,功能强大)和Llamafiles(单文件可执行,便于分享)。此外,文章还讨论了模型选择、参数、量化以及模型能力等重要因素,并提醒用户注意模型文件大小和安全问题。总而言之,本地运行LLM为开发者提供了一种灵活、可控的AI开发方式。

开发

UUIDv7:一种全新的、基于时间的UUID

2025-03-11
UUIDv7:一种全新的、基于时间的UUID

UUIDv7是一种新兴的、基于时间的UUID,它结合了传统UUID的优点和现代可扩展分布式系统的优势。不同于随机生成的UUIDv4,UUIDv7在保证全局唯一性的同时,还能按照时间顺序排序,这对于需要时间戳和唯一性的应用场景非常有用。它解决了UUIDv1中可能存在的隐私问题,并与现有UUID库兼容。UUIDv7在分布式系统、数据库索引、日志监控和电子商务等领域有着广泛的应用前景。

开发

Godot引擎构建大小优化:93MB到6.4MB的蜕变

2025-03-11
Godot引擎构建大小优化:93MB到6.4MB的蜕变

本文详细介绍了如何大幅减小Godot游戏引擎的构建大小。作者通过一系列优化手段,例如禁用3D功能、高级文本服务器、高级GUI对象以及不必要的模块等,将一个93MB的Windows版本exe文件压缩至6.4MB。过程中,作者还使用了UPX压缩工具进一步减小体积,并探讨了WebAssembly优化和Brotli压缩等技术。文章以一个简单的2D弹跳游戏为例,循序渐进地展示了每个步骤的具体操作和效果,并对每种方法的优缺点进行了分析,是一篇非常实用且具有参考价值的教程。

开发 引擎优化

TypeScript原生编译器:性能提升10倍

2025-03-11
TypeScript原生编译器:性能提升10倍

TypeScript团队宣布将TypeScript编译器和工具移植到原生代码,以显著提升性能。该原生实现预计将使编辑器启动速度大幅加快,构建时间缩短10倍,并大幅减少内存使用。初步测试结果显示,对多个大型项目(如VS Code、Playwright)的编译速度提升了10倍以上。未来,原生TypeScript(计划命名为TypeScript 7)将支持更高级的重构和更深入的代码分析,并为下一代AI开发工具奠定基础。TypeScript 6(基于JS)将继续维护,以确保平滑过渡。

Cinder JIT编译器:利用位集和半格优化类型表示

2025-03-11
Cinder JIT编译器:利用位集和半格优化类型表示

Cinder JIT编译器采用了一种巧妙的类型表示方法,将类型视为集合(甚至格),并选择紧凑的位集表示。文章深入探讨了Cinder如何利用位集和半格结构高效地处理类型信息,包括对基本类型的表示、类型联合以及特殊化处理。通过将类型信息编码为位集,Cinder能够有效地表示类型联合,并支持对类型进行更精细的区分。此外,Cinder还引入了特殊化机制,以跟踪特定对象的具体值,从而进一步提高编译器的优化效率。文章还讨论了Bottom类型以及如何生成类型格等细节。

开发 位集

用 PlusCal 和形式化验证实现零停机数据库迁移

2025-03-11

本文讲述了作者如何利用 PlusCal(一种 TLA+ 的 DSL)和形式化验证来确保零停机数据库迁移的正确性。作者构建了一个 PlusCal 模型,模拟了用户对数据库的 Upsert、Delete 和 Get 操作,以及后台迁移过程。通过模拟一个无迁移的系统和一个有迁移的系统,并验证两者在所有状态下 Get 操作结果一致,作者确保了迁移算法的正确性。形式化验证帮助作者及早发现了算法中的缺陷,例如对 TOMBSTONE 的处理不当,并强调了原子操作的重要性,例如在迁移过程中检查和插入数据的原子性。

开发 PlusCal

提升代码可读性的八大视觉模式

2025-03-11
提升代码可读性的八大视觉模式

一位程序员在审计代码时发现,即使代码质量很高,也很难长时间工作,因为他感到极度疲惫。这并非由代码复杂度引起,而是可读性问题。经过研究,他总结出八个可提升代码可读性的视觉模式:减少代码行数和操作符/操作数数量;避免新奇的函数形状、操作符或语法糖;将长函数链分割成逻辑分组;保持条件测试简短;尽量避免使用goto语句;最小化嵌套逻辑;使用描述性和视觉上清晰的变量名;缩短变量生命周期。这些模式可以帮助程序员提高代码可读性,减少bug,提高工作效率。

GCC 15即将支持COBOL语言!

2025-03-11

GCC 15编译器即将迎来一个重磅更新:COBOL语言前端已合并!这标志着GCC对COBOL语言的支持迈出了重要一步,将有助于将传统的基于大型机的COBOL应用程序迁移到Linux和云端。尽管COBOL的流行程度不如以往,但此次合并仍然令人惊喜。开发者可以使用`gcobol`命令调用COBOL编译器前端。GCC 15.1稳定版预计在未来几周内发布,届时将正式支持COBOL。

开发

本地深度研究助手:结合LLM和网络搜索的强大AI研究工具

2025-03-11
本地深度研究助手:结合LLM和网络搜索的强大AI研究工具

一款强大的AI驱动型研究助手,利用多个大型语言模型(LLM)和网络搜索进行深入的迭代式分析。该系统可在本地运行以保护隐私,也可配置为使用基于云的LLM以增强功能。它支持本地处理(使用Ollama模型)和云端LLM(Claude、GPT),并能分析完整网页内容,而非仅限于摘要。此外,它提供丰富的输出选项,包括带引用的详细研究结果、综合研究报告和快速摘要,并支持本地文档搜索(RAG),允许用户搜索和检索自己文档集中的内容。

开发

Sidekick:本地运行的强大LLM应用

2025-03-11
Sidekick:本地运行的强大LLM应用

Sidekick是一款运行于macOS系统的本地LLM应用程序,无需任何额外软件即可访问Mac上的文件、文件夹和网站信息。它使用RAG技术,能够处理大量数据,并支持多种推理模型,包括代码解释器,可生成图像,并具有强大的Markdown渲染功能,以及内置的写作助手等工具。Sidekick注重简单易用,完全本地运行,不追踪对话,并开源以确保透明性。

开发 本地LLM
1 2 140 141 142 144 146 147 148 213 214