什么是最低级别的数据结构?

时间:2014-05-09 03:09:48

标签: data-structures scheme abstraction sicp

我再次观看了一场SICP讲座,其中Sussman演示了如何使用Scheme cons carcdr来实现方案。

它是这样的:

(define (cons x y)
  (lambda (m) (m x y)))

(define (car z)
  (z (lambda (p q) p)))

这让我思考;令人兴奋的是数据结构?创建语言时,数据结构是作为程序构建的抽象实现的吗?如果它们只是由程序组成,那么最低级别的程序是什么?

我想我想知道的是抽象链底部的东西(除非它恰好是抽象的一直向下)。它在什么时候变成了硬件?

4 个答案:

答案 0 :(得分:8)

诀窍是你不必关心。 conscdrcar抽象,因此它们的基础实现无关紧要。

你所拥有的是所谓的“教会对”,我们从功能构建一切。在现代机器中,我们从1和0的字符串构建所有内容,但实际上,它并不重要。

现在,如果您想知道所有这些抽象是如何在您的特定实现中实现的,那取决于。很可能你的编译器/互操作者在幕后跳过箍,将cons个单元分配为紧密排列的指针(或类似的),并将你的函数转换为0和1的字符串,形成适当的机器代码并配对指向其环境的指针。

但就像我说的那样,构建这些抽象的整体美妙之处在于你不必像用户那样关心:)

答案 1 :(得分:2)

抽象链底部的基板因硬件而异,但它可能是某种寄存器机器,它将具有某种本机指令集。

SICP' last chapter就是这一层。这本书并没有提供任何真实的硬件,但是一个抽象的( ahem turtles!)注册机器,它有点类似于实际可能发生的事情...这恰好是模仿的计划,只是为了额外的metacircular乐趣。我觉得这很难读,但值得。

如果您对此类内容感兴趣,也可以查看Knuth

答案 2 :(得分:0)

抽象链存在几个底部。根据基础任务,计算机科学家可以选择一个更适合的任务。最常见的是Turing MachineLambda Calculus

答案 3 :(得分:0)

很酷的问题!

每当有人将其交给对处理器(CPU)的调用时,它就变成了硬件。如果你必须阅读芯片制造商的手册以了解如何做你想做的事,那么你在你描述的水平上。

chipset http://www.micro-examples.com/pics/087-PIC16-SECRET-OPCODE-instructionset.JPG

以下是从物理到硬件到代码到用户的路径的概述:http://ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-002-circuits-and-electronics-spring-2007/video-lectures/lecture-1/虽然我不认为这与lambda演算有关。 (但你只是说这是启发这个问题的原因 - 这本身不是问题,对吗?)

编写语言的人必须与处理器指令接口,例如https://en.wikipedia.org/wiki/X86_instruction_listings || https://en.wikipedia.org/wiki/X86_calling_conventions

查看kernel programming或考虑嵌入式系统(在微波炉,飞机机翼上),ARMs或移动设备 - 这些是人们编程的非笔记本电脑的东西芯片组。

编写BLAS(线性代数求解器库)的人有时会达到这个细节水平。例如https://en.wikipedia.org/wiki/Math_Kernel_Libraryhttps://en.wikipedia.org/wiki/Automatically_Tuned_Linear_Algebra_Software。当他们说BLAS被“调整”时他们的意思是什么?他们谈论的是嗅出有关处理器的事实,并改变内部 - 内部循环决定如何通过物理配置的方式浪费更少的时间。

north bridge

如果我没记错的话,高级编程语言(如C;))不会假设它们将运行在哪个系统上,因此它们会使得不可知的调用运行速度比它们运行时慢10倍†他们提前知道要拨打哪种电话。每一个。时间。这种事情可能会让你疯狂,但这是技术人员时间与最终用户表现的经典工程权衡。我想如果你成为一个内核程序员或嵌入式系统程序员,你可以帮助结束全球计算机上所有浪费的时钟周期 - 处理器越来越热,因为他们浪费了很多毫无意义的来回。 (尽管世界上发生的事情明显更糟。)

†:我刚刚快速搜索了BLAS的加速比是多少,是的,它可能是15或20的因素。所以我不认为我夸大/错误记录了我所听到的浪费运动。顺便说一句,在发电方面也有类似的事情:发电的最后一步(涡轮机)只有20%的效率。不是所有的浪费只会让你发疯吗?!是时候成为一名工程师了。 ;)


您可以查看的一个很酷的项目是MenuetOS;有人在汇编程序中编写了一个操作系统。

更值得关注的可能是this guy,他们认为学习x86汇编语言实际上非常简单有趣。 (!)

punch card programmer http://blog.iqsdirectory.com/wp-content/uploads/files/punch-card%20operator.jpg

当软件和硬件之间的距离较短时(例如,使用穿孔卡编程),您也可以回顾过去的日子。值得庆幸的是,人们写的“高级”语言更像是人们说话和思考的方式,而不像移动一些磁带。数据结构可能不是日常会话中最明显的事情,但它们比[lists a sequence of GOTO and STORE instructions...]更抽象。

HTH