我对实现Forth系统感兴趣,因此我可以获得构建简单VM和运行时的一些经验.
当在Forth开始时,人们通常首先了解堆栈及其运算符(DROP,DUP,SWAP等),因此很自然地将它们视为原始运算符之一.但他们不是.它们中的每一个都可以分解为直接操作内存和堆栈指针的运算符.后来人们学习了存储(!)和获取(@),可以用来实现DUP,SWAP等等(哈!).
那么原始运营商是什么?哪些必须直接在运行时环境中实现,可以从中构建所有其他环境?我对高性能不感兴趣; 我想要一些我(和其他人)可以学习的东西.运营商优化可以在以后进行
(是的,我知道我可以从图灵机启动并从那里开始.这有点极端.)
编辑:我的目标是类似于引导操作系统或新编译器.我至少需要做什么才能实现,以便我可以用这些原始构建块构建系统的其余部分?我不会在裸硬件上实现它; 作为一项教育活动,我会编写自己的最小虚拟机.
在这次演讲中,Chuck Moore(Forth的创始人)提出了一些非常大胆,全面的主张,例如:
我想弄清楚摩尔先生是否是一个绝对出色的天才或者b)一个疯子.但这是一个主观问题,我不是在寻找这个问题的答案.我正在寻找的是复杂的,现实世界的问题的例子,可以使用Forth在"1000指令或更少"中解决,以及演示如何执行此操作的源代码.一个例子只显示一个真实世界系统中的一个非平凡的部分,但是没有"玩具"代码样本可以在另一个高级语言的5或10行中复制.
如果您在Forth中编写了真实系统,只使用少量源代码,但不能自由地显示源代码(因为它是专有的),我仍然希望听到它.
很久以前我记得我认为Forth编程语言非常酷.多年来我真的没有听说过任何关于它的事情.Forth还在使用吗?如果是这样,它用于什么类型的应用程序?
我正在寻求开发一种新的Forth系统,旨在使游戏开发更容易在一个或几个复古的控制台平台上.我是第四个初学者,需要你帮助决定从哪个Forth代码库开始移植.
我基本上都在寻找特定Forths相互之间的优缺点.我已经阅读了JonesFORTH的来源,以及对它的赞美和批评,以及对ANS的讨论,不幸的是,我感到很困惑.据我所知,Forth社区似乎在标准遵守问题上相当粗暴地分裂,两个阵营都提出了非常好的论据,说明为什么标准既好又坏.然而,我似乎无法找到关于标准变化究竟是什么的良好实用建议,除了一般意义上它使事情变得比他们可能需要的更复杂和更臃肿.
我希望让程序员和业余爱好者更容易开发,因为他们在组装或C方面的发展前景吓坏了,所以我倾向于更简单的Forth,但我真的不太了解Forth还没有做出一个有教养的决定.
我想开始学习Forth(比如相关的Stack Overflow问题,学习和使用Forth是否实用?).我看到有很多实现.我想用一个
可以推荐什么特定的实现?
我需要为编程语言实现一个解释器,作为我正在进行的项目的一部分.我不认为这个项目的细节太相关,除了它要求我从头开始实现一个解释器,我不能使用现有的编程语言(要求包括支持便携式分隔连续,并能够编写一个在Javascript和Java中解释它.
显然我宁愿避免发明一种全新的编程语言,所以我希望有一些非常简单的语言可以复制,或者至少从中汲取灵感.
我的第一个想法是Forth或一种基本的类似Lisp的语言,但是我更喜欢这种语言的语法更接近更流行的编程语言,如Java,Python或Ruby.特别是,这意味着支持中缀运算符(a + b),以及a = b变量赋值.
换句话说,我希望这种语言对于今天用PHP编程的人来说感觉相当熟悉,我不相信Forth或Lisp都符合这个标准.
任何人都可以为这种语言提供任何建议吗?
所以我只是在学习Forth,并且好奇是否有人可以帮助我理解内存管理通常如何工作.目前我只有(一些)使用C stack-vs-heap范例的经验.
根据我的理解,可以在Dictionary中或在堆上进行分配.字典是否比C中的堆栈更快/更喜欢?但与C不同,没有范围和自动堆栈回收,所以我想知道是否只使用字典来表示全局数据结构(如果有的话).
就堆而言,它是否与C非常相似?堆管理是标准(ANS)概念,还是实现定义的?
每个Common Lisp程序员都知道宏是一个强大的工具.除了其他方面,已经使用Common Lisp宏在Lisp之上添加面向对象而不改变语言规范; read-macros是另一种具有思维弯曲功能的构造.
另一个允许元编程的程序是Forth.Forth采用"单词"和"生成单词"的方式略有不同.
我想知道,从涉及两种语言的人那里,如果普通的lisp宏和前面的结构在广度/功率方面具有可比性:你可以用前者做一些你不能用后者做的事吗?或相反亦然?
当然,我不是在谈论两种语言的图灵完整性:我在谈论元编程能力.C是Turing-complete,但只有傻瓜会说C宏与Common Lisp的功能相当.
forth ×10
lisp ×2
common-lisp ×1
embedded ×1
factor-lang ×1
gforth ×1
heap ×1
ide ×1
interpreter ×1
keyword ×1
operators ×1