2014-05-09 22 views
7

tôi recetly xem một bài giảng SICP trong đó Sussman đã chứng minh như thế nào đó là có thể thực hiện Đề án của gì conscarcdr sử dụng nhưng procudures.Cấu trúc dữ liệu ở mức thấp nhất là gì?

Nó đã đi một cái gì đó như thế này:

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

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

này tôi đã suy nghĩ; Excatly gì là cấu trúc dữ liệu? Khi một ngôn ngữ được tạo ra, các cấu trúc dữ liệu có được thực hiện như các trừu tượng được xây dựng bởi các thủ tục không? Nếu chúng chỉ là các thủ tục, thủ tục thực sự ở mức thấp nhất là gì?

Tôi đoán những gì tôi muốn biết là những gì là ở dưới cùng của chuỗi trừu tượng (trừ khi nó xảy ra là trừu tượng tất cả các con đường xuống). Tại điểm nào nó trở thành phần cứng?

Trả lời

8

Bí quyết là bạn không phải quan tâm. cons, cdrcarabstractions và do đó triển khai cơ bản của chúng không thành vấn đề.

Những gì bạn có ở đó được gọi là "cặp Giáo hội", chúng tôi xây dựng mọi thứ từ các chức năng. Trong các máy móc hiện đại, chúng tôi xây dựng mọi thứ từ các chuỗi 1 và 0, nhưng thực sự, nó không quan trọng.

Bây giờ, nếu bạn đang tự hỏi như thế nào tất cả các khái niệm trừu tượng được thực hiện tại trong việc thực hiện cụ thể của bạn, điều đó phụ thuộc. Trong tất cả khả năng trình biên dịch/interpeter của bạn nhảy qua hoops phía sau các cảnh phân bổ cons các ô như một cặp con trỏ được đóng chặt (hoặc tương tự) và chuyển các hàm của bạn thành chuỗi 0 và 1 tạo thành mã máy phù hợp và ghép nối nó với con trỏ môi trường của nó.

Nhưng như tôi đã nói, toàn bộ vẻ đẹp của việc xây dựng những khái niệm trừu tượng là bạn không cần phải chăm sóc như một người dùng :)

+0

Tôi biết điểm trừu tượng là không phải quan tâm đến việc triển khai, nhưng người ta không thể không tò mò. – RednBlack

+0

thực sự, các hoạt động của 'eq?'dễ hiểu hơn với con trỏ bình đẳng trong tâm trí. Và 'cons' thực sự là một hàm tạo của dữ liệu' struct {void *; void * link} 'nút, hoặc một cái gì đó. Rất có thể. –

0

Có tồn tại một vài đáy cho chuỗi trừu tượng. Tùy thuộc vào các nhà khoa học máy tính nhiệm vụ cơ bản có thể chọn một, phù hợp với tốt hơn. Phổ biến nhất là Turing MachineLambda Calculus.

2

Các chất nền ở dưới cùng của chuỗi trừu tượng thay đổi tùy theo phần cứng, nhưng nó có lẽ sẽ là một số loại máy đăng ký, trong đó sẽ có một số loại tập lệnh mẹ đẻ.

SICP của last chapter là tất cả về lớp này. Cuốn sách không trình bày bất kỳ phần cứng thực tế nào, nhưng một máy đăng ký trừu tượng (ahem!) Đăng ký tương tự như những gì thực sự có thể xảy ra ... điều này sẽ được mô hình hóa trong Đề án, chỉ để có thêm niềm vui metacircular . Tôi thấy nó khó đọc, nhưng đáng giá.

Nếu bạn quan tâm đến loại nội dung này, bạn cũng có thể muốn xem Knuth.

0

Câu hỏi hay!

Nó trở thành phần cứng mỗi khi ai đó đưa cho nó đi để cuộc gọi đến bộ vi xử lý (CPU). Nếu bạn phải đọc hướng dẫn sử dụng từ nhà sản xuất chip để hiểu cách thực hiện những gì bạn muốn làm, bạn đang ở cấp độ bạn mô tả.

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

Dưới đây là một tổng quan về các đường đi từ vật lý đến phần cứng mã cho người sử dụng: http://ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-002-circuits-and-electronics-spring-2007/video-lectures/lecture-1/ mặc dù tôi không nghĩ rằng đó là để làm với phép tính lambda. (Nhưng bạn chỉ đang nói đó là điều đã truyền cảm hứng cho câu hỏi - đó không phải là câu hỏi, phải không?)

Có một bước mà người viết ngôn ngữ phải giao tiếp với hướng dẫn của bộ vi xử lý, ví dụ: https://en.wikipedia.org/wiki/X86_instruction_listings || https://en.wikipedia.org/wiki/X86_calling_conventions.

Peek tại kernel programming hoặc suy nghĩ về các hệ thống nhúng (trong lò vi sóng, trên cánh máy bay), ARMs hoặc thiết bị di động — đây là những thứ mọi người có chương trình có chipset không phải máy tính xách tay.

Những người viết BLAS (thư viện giải mã đại số tuyến tính) đôi khi xuống cấp chi tiết này. Ví dụ: https://en.wikipedia.org/wiki/Math_Kernel_Library hoặc https://en.wikipedia.org/wiki/Automatically_Tuned_Linear_Algebra_Software. Khi họ nói BLAS được "điều chỉnh" nghĩa là gì? Họ đang nói về việc tìm hiểu sự thật về bộ vi xử lý của bạn và thay đổi cách vòng bên trong bên trong đưa ra quyết định của họ để lãng phí ít thời gian hơn với cách vật lý được cấu hình.

north bridge

Nếu tôi nhớ chính xác, ngôn ngữ cấp cao lập trình (như C;)) làm cho không có giả định về những gì hệ thống chúng sẽ chạy trên để họ thực hiện cuộc gọi bất khả tri mà chạy như mười lần † chậm hơn so với họ nếu họ biết trước thời gian đó là loại gọi. Mỗi. Thời gian. Đây là loại điều có thể khiến bạn phát điên, nhưng đó là sự cân bằng kỹ thuật cổ điển của thời gian của người kĩ thuật so với hiệu suất của người dùng cuối. Tôi đoán nếu bạn trở thành một lập trình viên hạt nhân hoặc lập trình viên hệ thống nhúng, bạn có thể giúp chấm dứt tất cả các chu kỳ đồng hồ bị lãng phí trên máy tính trên toàn cầu - bộ vi xử lý trở nên nóng khi chúng lãng phí rất nhiều việc quay trở lại. (Mặc dù có những điều tồi tệ hơn rõ ràng xảy ra trên thế giới.)

†: Tôi chỉ nhanh chóng tìm kiếm bao nhiêu tăng tốc BLAS và vâng, nó có thể là một yếu tố như 15 hoặc 20. Vì vậy, tôi không nghĩ Tôi đang phóng đại/hiểu sai những gì tôi nghe về chuyển động lãng phí. BTW, có một cái gì đó tương tự đi vào trong sản xuất điện: bước cuối cùng (tuabin) trong sản xuất điện chỉ là 20% hiệu quả. Không phải tất cả những thứ đó đều khiến bạn phát điên à ?! Thời gian để trở thành một kỹ sư. ;)


Một dự án tuyệt vời mà bạn có thể xem là MenuetOS; ai đó đã viết một hệ điều hành trong assembler.

Tuy nhiên, các nội dung thú vị khác để xem xét có thể là this guy, người thực sự dễ dàng và thú vị khi học ngôn ngữ lắp ráp x86. (!)

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

Bạn cũng có thể đọc lại những ngày xưa khi có ít khoảng cách giữa phần mềm và phần cứng (ví dụ lập trình với một punchcard). Rất may mọi người đã viết các ngôn ngữ "cấp cao" giống như cách mọi người nói và suy nghĩ và ít giống như di chuyển một số băng xung quanh. Cấu trúc dữ liệu có thể không phải là điều rõ ràng nhất từ ​​cuộc trò chuyện hàng ngày nhưng chúng trừu tượng hơn [lists a sequence of GOTO and STORE instructions...].

HTH

Các vấn đề liên quan