d亚当博客1219
有人指出写障
,不需要注册
线程的问题:还需要知道栈
在哪里,才能扫描他们
以前有,从C#
调用D代码
不正常的报道,本周在论坛
上又有,关于从Java
调用D代码
不正常,这里.
Ali
诊断其为Java
运行时创建的线程
,未通知D运行时
.有了写障
,就可避免通知D运行时
;可在写障
边界处懒执行
.
我展示了在一月份
写在博客上的FF1-nsf
程序,研究minigui
中一些旧的硬件
和一些实用
实现代码有意思.然后过渡
到编写微型
媒体播放器,并观察是否可自动从接口
创建对话框
.答案是否定
的.
我只做了类,所以我编辑了minigui.d
来增加对接口
的支持,足够好了,但我想让它引用变化
的对象,然后开始增加一些指针
支持,结果有点陷入了兔子洞,然后我就没时间了.
关于内容,我仅作几点主要评论
:
1)
,Atila
在反射库
中使用串
是错误
.如前,我更喜欢最小化
使用串,用它们时,尽量用本地名
而不是构造全名
,并且只做想做
的,而不是堆积更多
抽象层.
2)
,RobertSchadek
对nogc
有个正确的想法,只是不要去搞那些无聊
的东西!的确,很多js
可相当容易地移植到D
.如"D
中声明式界面
"帖子,那里的噪音生成器
是一个JS
移植.
3)
,我喜欢Steve
的模型思想,也同意API
应该易于使用.他和我现在有一些重叠
项目.
4)
,拉里让我想起了一些旧的d形式
的东西.事实上,使用时,我发现崩溃快乐
并易产生漏洞
,因此我开始minigui
的一部分!我已考虑写个自定义编辑器
,vim
有时确实惹恼了我.但首先我需要新的文本布局
系统.
dom.d
的XmlDocument
另外,我在dom.d'
中的XmlDocument
修复了错误.不让<script>
和<style>
按HTML
处理xml
.这对svg
也重要.
文本布局
我又开始了TextLayouter
类.两年前,我开始写ExperimentalTextComponent2
,并在这里写了博客.
来替换Linux
上的minigui
构建TextEdit
(和LineEdit
等)组件所依赖的非常有缺陷的ExperimentalTextComponent
.
虽然ExperimentalTextComponent2
一开始很有希望,但它最终与ExperimentalTextComponentv1
陷入了同一堵墙,我找不到解决办法,而且破坏了它上面的API
,所以被无限期地搁置.
v1
是在我写OperatingSystemFont
类之前写的,所有函数都绑定到simpledisplay
的ScreenPainter
,所以必须有个实例
来布局;它会在绘画
(或至少是伪绘画)时布局
,然后缓存
些信息供未来
使用来.由于与ScreenPainter
紧密耦合,它也会绘画自己
及其部分
,如选区和光标
(因此会出现闪烁
,它不知道minigui
的焦点模型).
还想搞富文本编辑器
.
对v2
,现在OperatingSystemFont
工作了,我试从ScreenPainter
解耦,并同时简化域
,它避免了布局
时直接依赖ScreenPainter
.但仍然有draw(ScreenPainter)
函数,它避免了v1
内置的一些混乱,并通过ComponentInFlow
接口,来具有些可扩展性
.但仍然向外部暴露了太多的内置构
,破坏了所有的API
,并限制了功能和优化
.
正在开发v3
.与v2
一样,它主要基于OperatingSystemFont
,但不完全是.具体来说,它使用了OperatingSystemFont
实现的MeasurableFont
接口.
几个月前,重构
中创建了MeasurableFont
,它非常适合,并影响了前进方向,OperatingSystemFont
是simpledisplay
相关的,但MeasurableFont
,虽然在simpledisplay
中,但可很容易地在其他地方使用,且有完全
不同实现.甚至不需要严格地以像素
为单位测量,表明它甚至可在字符单元
终端中工作.
现在,文本布局器
已完全解耦
,它不需要绘画
自己,而是公开迭代
可渲染片段的方法
.片段
包含文本
,可绘画信息
,如抽象
坐标空间中的基线和边界框
.及相对不透明的TextStyle
实例.
TextStyle
必须可提供字体度量
,因此它有返回MeasurableFont
方法,除此外,布局器
不关心(包括字体颜色
).
也表明绘图
代码可能会基于布局引擎
完全未知的来设置
文本风格,如,在绘画
时,基于这些串
语法高亮,而不是嵌入这些信息
至布局器自己的数据结构
.
因此,不像v2
那样限制使用提供
风格,现在可用自己定义风格选项
使用布局器
.
类似,v3
使用闭包
来确定各种点边距
.类似css
浮点,文本
出现在图像
旁边,然后在图像
下面环绕.v1
和v2
都有用矩形
表示的排除区
的概念.v3
使用闭包
,表明可定义想要的形状
,与旧方法相比,更易编码且更灵活
.
除了布局和渲染
外,文本
系统的另一个关键
组件是导航和操作
.v1
基于自己
方法实现.v2
未真正实现.v3
已基于选区对象
概念工作.可四处
移动,设置锚点和焦点
,然后删除,插入,取数据
,这样不需要暴露底层
实现细节,就给你重要访问
权限,选区
是相当不透明
对象,它不会告诉文本偏移
等.
表明不必用数组
,因为用户不能切片它,修复了v1
和v2
问题.PoC
实现是数组
,但是我可在,不破坏用户API
就添加间隙
或索引
或其他
数据结构.
此外,这些api
非常好用,因为你可映射
它们到你已熟悉
的文本编辑器
中的熟悉
操作.
最后,我决定支持多选区/光标
,这对用户
来说是个有用的文本编辑工具
,可不同用户
控制,来获得有GoogleDoc
风格的协作
体验.
ExperimentalTextComponent1和2
之间的关键
区别在于是否有OperatingSystemFont
的度量方法.再加上ScrollMessageWidget
,在新代码
中帮助很大.
这里
现在一些文件,依赖core.d
了.
import arsd.dom;
void main() {
auto document = new Document("<html></html");
}
dmd -i yourapp.d
自动拉arsd.dom
文件.加上
document.parseGarbage("<html></html");
自动拉arsd.characterencodings
文件.而:
auto document = Document.fromUrl("http://dlang.org/");
自动拉arsd.characterencodings
和arsd.http2
文件.
你可能会喜欢cgi
调度器,通过它的serveApi
函数,它可从D函数
自动生成html
表单.
import arsd.cgi;
class TheClass : WebObject {
@UrlName("") // 根函数.
string hello(string name) {
return "Hello, " ~ name ~ "!";
}
static struct Info {
string name;
string title;
}
@AutomaticForm
@(Cgi.RequestMethod.POST)
Info[] withAutomaticForm(Info[] info) {
return info;
}
}
mixin DispatcherMain!(
"/".serveApi!TheClass
);
我实际上使用了arsd.terminal.Terminal
的API
的子集,作为代码
中内省类似终端对象
的基础.有许多通用函数使用DbI
实现虚屏幕,子屏幕,缓冲屏幕
等类似终端功能.
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现