Rebol เป็นภาษาโปรแกรมที่ใช้งานได้หรือไม่?


9

ฉันวิ่งเข้าไปในRebolและฉันก็สงสัยเกี่ยวกับมัน

ฉันพบสคริปต์ต่อไปนี้จากที่นี่ :

 use [feed questions answers][
    feed: load-xml/dom http://stackoverflow.com/feeds/tag/rebol
    questions: map-each entry feed/get-by-tag <entry> [
        find/match entry/get <id> "http://stackoverflow.com/q/"
    ]

    answers: make block! length? questions

    foreach question questions [
        question: load-xml/dom join http://stackoverflow.com/feeds/question/ question
        foreach entry next question/get-by-tag <entry> [append answers entry/tree]
    ]

    insert clear feed/find-element <entry> answers
    feed/flatten
 ]

การดำเนินการจัดการคอลเลกชันทั้งหมดเช่นmap-eachเตือนฉันเกี่ยวกับ JavaScript และ C # ซึ่งทั้งสองอย่างมีความสามารถในการทำงาน

Rebol เป็นภาษาที่ใช้งานได้หรือไม่? มันรองรับการตั้งโปรแกรมการทำงานหรือไม่? มันจะจัดเป็นภาษาบริสุทธิ์ (PFL) หรือไม่


5
นี่คือคำตอบจากผู้สร้าง REBOL: REBOL เป็นภาษาที่ใช้งานได้จริงหรือไม่?
Greg Hewgill

1
@GregHewgill ขอบคุณสำหรับทรัพยากรนั้น ฉันถามคำถามนี้หลังจากการแชทในห้องสนทนา StackOverflow Rebol ( chat.stackoverflow.com/transcript/message/7836761#7836761 ) พวกเขา (เรา) คิดว่าเนื่องจากไม่มีข้อมูลเกี่ยวกับเรื่องนี้ในโปรแกรมเมอร์หรือเว็บไซต์อื่น ๆ ใน StackExchange ฉันควรถามที่นี่เพื่อใช้อ้างอิงในอนาคต ลิงค์นั้นยอดเยี่ยม แต่มันสามารถขยายและอธิบายได้ที่นี่เพื่อให้ผู้ใช้ที่ไม่มีประสบการณ์โปรแกรมเมอร์ Rebol สามารถเข้าใจได้ คำตอบที่มีการอ้างอิงจากบทความและประสบการณ์การพัฒนาส่วนบุคคลจะได้รับการชื่นชม
Benjamin Gruenbaum

คุณสมบัติปรับปรุงสถานการณ์ XML ของ Carl: คุณยังคงมีเมทาดาทาส่วนเกิน (ชื่อแอตทริบิวต์) และค่าที่ไม่ได้พิมพ์ (เนื้อหาของแอตทริบิวต์) ข้อมูลเมตาโดยนัยของ Rebol จัดทำโดยประเภทที่กำหนดอย่างระมัดระวังจะช่วยลดภาระการตีความที่เป็นธรรม ด้วย XML คุณต้องปลดล็อคค่าก่อนแล้วถอดรหัสมัน (วันที่ที่กำหนดใน XML จะเป็นอย่างไรฉันจะตรวจสอบข้อมูลจำเพาะของ RSS หรือ Atom ได้หรือไม่คุณสามารถแสดงคำจำกัดความใน XML ได้หรือไม่) จากนั้นตรวจสอบความถูกต้องแล้ว สามารถประเมินบริบทของพวกเขา ** มีจุดประสงค์เพื่อแสดงความคิดเห็นในการตอบสนองต่อ [ความคิดเห็นนี้] ( programmers.stackexchange.com/questions/1

คำตอบ:


13

" เพียวหน้าที่ Programming" ในความหมายอย่างเป็นทางการของมันเป็นเรื่องเกี่ยวกับความคิดของการออกแบบเครื่องคอมพิวเตอร์ที่มีการส่งออกเป็นอย่างหมดจด"ฟังก์ชั่นของการป้อนข้อมูลไปยังเครื่อง" หากคุณป้อนอินพุตเดียวกันลงในเครื่องมันจะสร้างเอาต์พุตเดียวกัน แต่ละอินพุตมีชื่ออย่างชัดเจนเพื่อให้คุณรู้ว่าการอ้างอิงคืออะไร ภาษาโปรแกรมที่ใช้งานได้จริงบังคับใช้สิ่งนี้อย่างจริงจัง

แต่ ... ในพื้นฐาน "Rebol" คุณสามารถเขียนสิ่งที่ชอบ:

foo: function [value [integer!]] [
    either now/date = 20-Feb-2013 [
        value + 1
    ] [
        value
    ]
]

ที่นี่เราเห็นฟังก์ชั่นที่คืนค่าอินพุตจำนวนเต็มทุกวัน แต่วันนี้ที่คุณได้รับค่าบวกหนึ่ง มันรวมถึงการพึ่งพาที่มองไม่เห็นในวันที่ไม่ได้ระบุอย่างเป็นทางการเป็นข้อโต้แย้งกับฟังก์ชั่น มันเป็นสิ่งที่ทำให้คน Haskell และเจ้าหน้าที่ทางการซอฟต์แวร์อย่างผมกรีดร้องด้วยการฆาตกรรมนองเลือด

ดังนั้น REBOL ไม่บริสุทธิ์ออกจากการทำงานของกล่อง (... แต่อ่านต่อ ... )

คำจำกัดความที่เข้มงวดน้อยกว่าของการโปรแกรมมิงฟังก์ชันคือเมื่อฟังก์ชันสามารถทำหน้าที่เป็นค่าในภาษา ดังนั้นคุณสามารถกำหนดฟังก์ชั่นให้กับตัวแปรและใช้มันในภายหลัง ในแง่นั้นคุณสามารถไปอ่านสิ่งที่ชอบได้คือจาวาสคริปต์เป็นภาษาที่ใช้งานได้และดูว่าคำจำกัดความที่ทำให้คนบางคนพูดว่า Javascript เป็นภาษาที่ใช้งานได้ หากคุณกำลังจะหลวมที่มีความหมายแล้วนี่จะเป็น "การทำงาน":

>> foo: does [a + 10]

>> a: 20

>> print foo
== 30

(หมายเหตุ: DOES เป็นความสะดวกสบายสำหรับการกำหนดฟังก์ชันโดยไม่มีอาร์กิวเมนต์ที่มีเพียงเนื้อหา)

ฉันไม่รู้ว่าฉันจะพิจารณาว่า (หรือ JavaScript) เพื่อให้เหมาะกับสิ่งที่ผู้คนที่ฉันคุยด้วยจะเรียกการเขียนโปรแกรมใช้งานได้ YMMV

หากคุณใช้เวลาในวิชาวิทยาศาสตร์คอมพิวเตอร์คุณจะได้เรียนรู้เกี่ยวกับสิ่งต่าง ๆ เช่นทัวริงทาร์พิทและความสามารถในการคำนวณและหลักการเรียงลำดับเหล่านี้ที่ "ถ้าคุณสามารถเชื่อมต่อ X กับ Y แล้ว Z จะเป็นจริง" และเช่นเดียวกับที่คุณเขียนการติดตั้ง Haskell ใน C และจากนั้น จำกัด ตัวคุณเองเพียงแค่ใช้การโทร C ที่แมปไว้ในไลบรารี Haskell คุณอาจอ้างว่าคุณกำลังทำ "ฟังก์ชันการเขียนโปรแกรม" และถูกต้องทางเทคนิค

ดังนั้นถ้าคุณต้องการที่จะบอกว่า Rebol สามารถโค้งงอกับรูปแบบการเขียนโปรแกรมที่ใช้งานได้คุณอาจเป็นคนมองโลกในแง่ร้ายและพูดว่า"มันไม่ดีไปกว่าการแสร้งทำคุณกำลังทำ C เมื่อคุณใช้ชุดย่อยของภาษา กำลังใช้ Haskell ด้วยพร็อกซี " . เคล็ดลับแขนเสื้อของ Rebol นั้นง่ายแค่ไหนที่คุณลื่นหลุดจากกระบวนทัศน์ "การหมุน" หนึ่งไปยังอีก การเขียนภาษาเฉพาะโดเมนเล็ก ๆ น้อย ๆ ที่เกิดขึ้นเพื่อการใช้งานนั้นง่ายและเป็นธรรมชาติที่ไม่รู้สึกว่าคุณกำลังบิดภาษาของคุณออกจากการร่วมทำ ความสามารถในการที่จะทำให้ภาษาเฉพาะโดเมนที่มีโอกาสในการขายตัวละครที่ทำงานเพื่อการติดฉลากของ REBOL เป็น"กระบวนทัศน์เป็นกลาง"

หลายคนรวมกัน Rebol กับภาษาถิ่นที่พบบ่อยที่สุด (ภาษา DO) และคิดว่า "นั่นคือสิ่งที่ Rebol เป็น" แต่ "สาระสำคัญ" ของ Rebol นั้นเหมือนกับ XML มันเป็นรูปแบบการแลกเปลี่ยนข้อมูลที่บังเอิญ(โอเคไม่ได้เกิดขึ้นโดยบังเอิญ)มีโค้ดที่ปรับให้เหมาะสมมากเกินไปโดยมุ่งเน้นที่การประมวลผลในบางวิธีนอกกรอบ สำหรับการอ่านพื้นหลังที่ดีเกี่ยวกับวิธีการตีกางเกงออกจาก XML ดูว่า XML มีข้อบกพร่องจากการเริ่มต้นโดย Carl Sassenrath ของ AmigaOS (และตอนนี้ชื่อ Rebol) มีชื่อเสียง


1
นั่นเป็นคำตอบที่ดี แต่ฉันคิดว่าบทความ "XML มีข้อบกพร่องตั้งแต่เริ่มต้น" ค่อนข้างแย่ ก่อนอื่นเขาใช้ XML ที่ไม่ดี (ทุกสิ่งที่เขาแสดงพร้อมกับการซ้อนสามารถถูกแสดงด้วยคุณลักษณะ) ประการที่สองภาษาจะแสดงโดยโครงสร้างต้นไม้อย่างที่คล้ายกับ XML เมื่อคุณแยกวิเคราะห์ประโยคที่คุณได้รับแผนผังการแยกวิเคราะห์มันไม่ยุติธรรมที่จะเปรียบเทียบ XML ซึ่งมีข้อมูล grammer กับสตริงที่เป็นโดเมนเฉพาะ ขอบคุณสำหรับคำตอบ :)
Benjamin Gruenbaum

2
ฉันเป็น Rebol n00b และอย่างที่คุณพูดฉันก็คิดเหมือนตอนนี้ว่า Rebol เป็นภาษาถิ่นของ DO หวังว่าจะแยกออกจากความคิดนี้ :-)
KK

1
@BenjaminGruenbaum ถ้าฉันสามารถแก้ไขเว็บไซต์ของ Carl เชื่อฉันฉันจะ :-)
HostileFork พูดว่าอย่าเชื่อถือ SE

@BenjaminGruenbaum แต่ไม่ใช่ทุกภาษาสามารถจัดการโครงสร้างของต้นไม้ได้อย่างอิสระ Rebol นั้นกระเพื่อมอย่างมากในเรื่องนั้น
Izkata
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.