首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >制作自我引用程序的工具?

制作自我引用程序的工具?
EN

Stack Overflow用户
提问于 2011-08-11 10:02:14
回答 2查看 376关注 0票数 3

可计算性理论(如Kleene第二递推定理)的许多结果确保了可以构建能够在自己的源代码上操作的程序。例如,在Michael Sipser的“计算理论导论”中,他证明了递归定理的一个特例,该定理指出,任何表示接受两个字符串并产生字符串的函数的程序都可以转换成一个等价的程序,其中第二个参数等于程序自己的源代码。此外,这一过程可以自动完成。

用来生成访问自己的源代码的程序的构造是众所周知的(大多数计算书籍都包含它),并且经常用于生成quine。我的问题是,是否有人编写了一个通用工具,该工具以某种语言(例如C语言)接受一个程序作为输入,其中包含程序源代码的占位符,然后处理该程序,生成一个新的程序,并访问它自己的源代码。例如,这样就可以自动生成quine,或者编写可以对其语法树进行内省的程序(可能允许在不支持它的语言中进行反射)。如果不是,我计划编写我自己版本的这样一个工具,但我不想重新发明车轮,如果已经这样做了。

编辑:基于@Henning Makholm的建议,我决定坐下来执行这样的程序。生成的程序(我称之为"kleene")接受一个C++程序作为输入,并生成一个新的C++程序,该程序可以通过调用函数kleene::MySource()来访问自己的源代码。这意味着您可以使用kleene程序将这个非常简单的程序转换为Quine:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#include <iostream>

int main() {
    std::cout << kleene::MySource() << std::endl;
}

如果您有兴趣查看它,它是可用的在我的网站上

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-08-11 10:09:49

维基百科文章上有很多例子和链接。在看了一两个之后,应该清楚地知道如何构建一个quine生成器,这是一种以任意有效负载代码作为输入的给定语言。

反射思想的一个问题是,程序通常不能知道它所构建的是它自己的源代码。

票数 3
EN

Stack Overflow用户

发布于 2011-08-11 13:22:02

我们的DMS软件重组工具包是一个程序转换系统,它将接受任意语法的程序(以一个称为“域描述”的显式参数向DMS描述),将它们解析为AST,执行对AST的分析和转换,并可以从修改后的版本重新生成修改后的程序文本。

当然,DMS是用一种语言(实际上是一组特定于域的语言)编码的,其中已经有DMS-域描述。因此,DMS可以读取自己,我们使用该功能引导附加的DMS功能并优化其性能。因此,虽然我们不生产奎因,但我们正在用自我增强的代码构建程序。

是的,你对这样一个工具的观察为任意的语言提供了反映。大多数以语言提供的反射工具只允许访问那些语言编译器人员认为在运行时访问的最重要的东西,例如“方法名称”。当然,他们不感兴趣的东西是不可访问的;有没有见过一种反射机制,可以告诉你表达式中的内容?在评论里?

DMS提供了对源代码的所有细节的完整访问,通过从外部检查代码,使用通用的、完整的机制。如果您的语言没有反射,DMS是访问代码的方式,并任意地解释它。即使您的langauge有反射,DMS也可以用您的语言对程序进行推理,这是您的语言无法做到的,因为它无法访问它自己的详细结构。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7030653

复制
相关文章
HTML自我介绍表格代码制作[通俗易懂]
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/169647.html原文链接:https://javaforall.cn
全栈程序员站长
2022/09/22
3.7K0
HTML自我介绍表格代码制作[通俗易懂]
看板:自我管理的高效工具!
当在团队中在做看板管理的时候,我们一直强调的是看板中的工作项需要承载价值。通过拉动承载价值的工作项在看板中的流动,我们可以清晰地看到产品价值从需求端流动到交付端的进展及状态。也正因如此,我们需要及时识别看板中没有价值的工作项并将其从看板中拿下来。同时,对于看板中的各个工作项,我们也需要进行及时更新,以便与当前的实际任务状态实现同步。
敏捷开发
2023/02/03
3690
制作属于你自己 github 自我介绍
之前 Github 的个人主页里面只可以放一些简单的信息,比如个人状态、博客链接、以及一些代码仓库。最近 Github 推出了一个新的功能,假如你创建一个与自己用户名相同的代码仓库,那么这个代码仓库的 README.md 文件的内容就会呈现在你的个人自我介绍中。
madneal
2020/07/31
1.2K0
制作属于你自己 github 自我介绍
[Android][Framework]系统jar包,sdk的制作及引用
之前在PowerManager里面添加过一个新接口,用来释放所有的wake lock,接口调用如下:
wOw
2020/01/20
5.1K0
时间是人类自我欺骗的工具_arp欺骗工具
LLMNR(Link-Local Multicast Name Resolution,链路本地多播名称解析)协议是一种基于DNS包格式的协议。它可以将主机名解析为IPv4和IPv6的IP地址。这样用户就可以直接使用主机名访问特定的主机和服务,而不用记忆对应的IP地址。该协议被广泛使用在Windows Vista/7/8/10操作系统中。
全栈程序员站长
2022/09/20
7440
生信人的自我修养:Linux 命令速查手册(全文引用)
作者精心整理了生物信息学中常用的 Linux 命令,很不容易。所有命令的用法都经本人亲自测试。掌握这些命令,是每一个生信人基本的自我修养。
巴啦啦小魔仙
2021/04/13
4K0
生信人的自我修养:Linux 命令速查手册(全文引用)
msf工具之木马程序制作以及伪装
将木马程序点击执行,监听端口得到回应,成功控制电脑 输入shell,彻底控制电脑
行云博客
2020/09/16
2.4K0
msf工具之木马程序制作以及伪装
程序员的自我修养专题分享
正式做自媒体也有大半年的时间,更新频率并不是很高,本着宁缺毋滥的原则,写好每一篇文章,拍好每一段视频。有的博主靠自媒体轻松年入百万,我还没有到人家的水平,也不能像别人一样给粉丝送汽车,送手机,送房子。
马拉松程序员
2022/04/26
2380
程序员的自我修养专题分享
初试小刀自我简历小程序
最近在做小程序,和域名更换,和新域名备案事情,甚是较忙,少写了文章,今天尝试写一篇小白总结小程序的常见问题,刚接触小程序不到2周,在业余时间尝试小刀小程序,在做这个简历之前,自己亲身搜索了个人简历的小程序,都体验过,大部分是参差不齐,我这个算是比较用心的制作了,搜索出来的简历小程序要不就是其他第三方支持自动生成的,或者是自己制作的,但是都是放置一个设计的图,比较简单,但是也不缺一些好的案例。
张炳
2019/08/05
1.1K0
木马程序的制作
0x01:使用msfpayload windows/meterpreter/reverse_tcp LHOST=192.168.30.101 LPORT=443 R | msfencode -e x86/shikata_ga_nai -c 5 -t exe -x /root/Desktop/putty.exe -o /root/Desktop/putty_backdoor.exe
知识与交流
2023/03/25
9500
木马程序的制作
MySQL自我保护工具--pt-kill
MySQL出现运行时间过长的SQL(慢SQL),会使线上数据库压力倍增,影响业务稳定性及可用性
俊才
2021/12/13
8930
程序员自我欺骗的 9 个谎言
程序员有充分的理由感到自豪,因为其他人是无权进入数据库并更改的。世界越是依赖计算机定义,程序员的能力就越强。
逆锋起笔
2020/02/24
7030
程序员自我欺骗的 9 个谎言
制作开发预约小程序报价 微信小程序开发工具小程序公司
随着互联网时代的飞速发展,微信小程的火爆其中原因少不了时代的推动、用户的需求,不少商家开始纷纷制作小程序、预约系统小程序
微信小程序开发加盟服务商
2018/09/04
12.7K0
程序员如何提升自我价值?
记得前一阵子看过的一个关于 2022 年程序员薪资的研究报告,里面说, 2022 年,随着数字经济的大力进行,预计数字化人才的薪酬会水涨船高——主要表现在技术研发岗位工作者将获得 11.3% 左右的薪资增长。 但根据我周围人的反馈来看,这个预测还是过于理想了。从年初开始,焦虑就好像一块乌云一直笼罩在互联网人的头上,在疫情和大厂“裁员潮”的双重打击下,大家的日子都不太好过。 不过说句不中听的,我还是认为能不能涨薪和当前形势的关系并没有那么大。涨薪考量的关键因素,还得是你所在公司的业务模式行不行、业绩如何、发展
jeanron100
2022/04/06
7960
程序员如何提升自我价值?
程序员的自我修养5️⃣—不至于代码
相比码农、程序猿、软件工程师、张江男、屌丝程序员等等这些网络词汇,当你把自己看作是一个屌丝程序员的话,那你也可能就是那个衣食不愁,但整天浑浑噩噩、无所追求的屌丝。我更愿意用技匠这个词来形容程序员,就像我给自己起的花名一样。
马拉松程序员
2022/04/26
3930
程序员的自我修养 - 系统调用及原理
系统调用是应用程序(包含运行库)与操作系统内核的接口,它决定了应用程序如何与内核打交道。在现在的操作系统系统里,程序运行的时候,本身是没有权利访问系统的资源,由于系统有限的资源有可能被不同的应用程序同时访问,因此,如果不加以保护,各个应用程序的冲突在所难免。所以现代操作系统都尽可能的把冲突的资源保护起来,阻止程序直接访问。这些资源,包括文件、网络、IO、各种设备等。
changan
2020/11/04
5050
程序员的自我修养 - 系统调用及原理
程序员的自我修养2️⃣—选择考研or就业
时间回到2015年冬天,那时候我在上大三,某公司以实训的形式来给我们专业的学生上课。按照本身的学校教学计划,我们专业在大三下是有2个周的Java开发实训,最后需要交一个小demo,2个学分。不过后来才知道,给我们上实训课的就是找的某培训班的老师。
马拉松程序员
2022/04/26
3160
程序员的自我修养2️⃣—选择考研or就业
干货 | 移动互联网应用程序(APP)个人信息安全自我评测工具
截止今年6月,我国已经有APP 232万款,手机网民达到10.47亿,在APP中大规模的个人信息收集和使用成为常态,个人信息安全也极容易受到威胁。
数据派THU
2023/03/29
8860
干货 | 移动互联网应用程序(APP)个人信息安全自我评测工具
程序员如何自我学习和成长?[通俗易懂]
大家好,又见面了,我是全栈君。 关于成长,这是一个上至10年的大牛、下至3年的菜鸟 都能参与的话题,作为一名在坑里挣扎了六年的码农,我 也一直在探索、一直在思考、一直在总结,作为一名码农 到底该怎么成
全栈程序员站长
2022/07/19
4280
程序员如何自我学习和成长?[通俗易懂]
winform制作小工具的技巧
在使用winfrom制作一些工具的时候,一些基本设置都是去属性里面找来找去,一段时间就忘了,记录记录以备不时之需。
易墨
2018/09/14
7850

相似问题

自我引用

24

mootools自我引用

10

接口中的自我引用

22

未解决的“自我”引用

10

作为论据的自我引用

10
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文