ทำไมไฟล์. Script สคริปท์จึงไม่ถูกบันทึกเป็นไฟล์ข้อความธรรมดา?


16

ตัวแก้ไขสคริปต์ (ก่อนหน้านี้คือ AppleScript Editor pre-Yosemite 10.10) บันทึก.scptไฟล์เป็นไฟล์ไบนารีไม่ใช่ไฟล์ข้อความธรรมดา

มันทำให้การทำงานกับพวกเขาในระบบควบคุมซอร์สโค้ดค่อนข้างยุ่งยาก

ไม่มีใครรู้ว่าทำไมเป็นกรณีนี้? มีประวัติอันยาวนานที่ต้องการรูปแบบไฟล์นี้เป็นอย่างอื่นนอกเหนือจากไฟล์ข้อความธรรมดาหรือไม่?


ฉันไม่รู้สาเหตุของมัน แต่ตามที่ได้แสดงความคิดเห็นไว้ที่นี่คุณสามารถเขียนแมโครฮอตคีย์ / สคริปต์เพื่อบันทึกเป็นข้อความแทน มันเป็นความเจ็บปวด แต่ doable ...
วิก

2
ในแผงการบันทึกคุณสามารถบันทึกสคริปต์ในหลายรูปแบบรวมถึงข้อความธรรมดา
Chris หน้า

"รับสคริปต์เป็นข้อความจากไฟล์ scpt หรือไม่": lists.apple.com/archives/applescript-users/2007/Mar/…
pkamb

คำตอบ:


20

บทความของ William R. Cook มีประวัติและความเข้าใจที่ยอดเยี่ยมจากผู้ที่เกี่ยวข้องกับ AppleScript ในปี 1989

สิ่งที่ตามมาคือความสนุกและการเก็งกำไร

การอนุรักษ์อวกาศและการแปรรูป

AppleScript ถูกเขียนขึ้นในเวลาที่ทุกไบต์และบิตมีค่า การเข้ารหัสขี้เกียจของ OS X ในฐานะรูปแบบรายการอสังหาริมทรัพย์นั้นจะสูญเปล่าในสายตาของผู้พัฒนารุ่นแรก ๆ

รูปแบบไบนารีจัดเตรียมรูปแบบการวิเคราะห์คำล่วงหน้าที่หลีกเลี่ยงการทำซ้ำขั้นตอนที่ซับซ้อนข้อผิดพลาดได้ง่ายและกระบวนการแยกวิเคราะห์ที่ใช้เวลาในการโหลดแต่ละครั้งจากดิสก์ ดีกว่าที่จะโหลดโดยตรงในหน่วยความจำและเรียกใช้

ปรับได้

การบันทึกในรูปแบบไบนารีอนุญาตให้ AppleScripts เชื่อมโยงกับรหัส AppleEvent พื้นฐานแทนที่จะเป็นพจนานุกรมที่มีคำศัพท์แบบยาว

สิ่งนี้จะอนุญาตให้ AppleScript เขียนและบันทึกกับแอปพลิเคชันหนึ่งเวอร์ชันเพื่ออัปเดตโดยอัตโนมัติเพื่อการเปลี่ยนแปลงคำศัพท์ระหว่างเวอร์ชันของแอปพลิเคชันเป้าหมาย

วัตถุจำนวนเต็มอาจเรียกว่า 'จำนวนเต็ม' ในสคริปต์ แต่บันทึกเป็นรหัสตัวอักษรสี่ตัว ' int ' ในการแทนแบบไบนารี่ รหัสอักขระสี่ตัวมาจากพจนานุกรม AppleScript ที่ระบบปฏิบัติการจัดทำ

หากคำศัพท์ AppleScript ในอนาคตตัดสินใจเปลี่ยนคำว่าผู้ใช้หันหน้าไปหาจำนวนเต็มการแทนฐานสองสามารถแมปกับชื่อที่ใหม่กว่า

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

อย่างน้อยในรุ่นที่ผ่านมาแสดงให้เห็น AppleScript แก้ไขบั้งรอบรหัสสี่ตัวละคร รหัสได้รับการจดจำและเน้น ไม่ใช่ผู้ใช้ที่ต้องเผชิญกับคำศัพท์

นี่อาจไม่ใช่ผลประโยชน์หลัก แต่เป็นประโยชน์ที่เป็นไปได้

Modern Bias

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

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

ประวัติและต้นกำเนิด

เรื่องราวของต้นกำเนิดของ AppleScript นั้นยอดเยี่ยม แต่ก็ยากที่จะติดตามในทุกวันนี้ AppleScript พยายามเป็นมิตรภาษาอังกฤษเหมือนภาษาและรู้สึกตื่นเต้นในวิสัยทัศน์ของตน การใช้งานจริงนั้นยากที่จะทำให้ถูกต้อง!


16

ในระยะสั้น.scptช่วยให้เข้ากันได้ย้อนหลัง นอกจากนี้ applescript / javascript (ฯลฯ ) สามารถบันทึกด้วยนามสกุลเดียวกันเนื่องจากScript Editorขณะนี้รองรับ javascript

ในการถอดรหัส.scptในเชลล์:

https://github.com/rupa/applescript/blob/master/decompile.sh

ส่วนที่เกี่ยวข้องมากที่สุด:

osadecompile

Textmate เป็นเครื่องมือแก้ไขของบุคคลที่สามที่สามารถอ่านได้.scpt:

https://github.com/textmate/textmate/blob/master/Applications/decompile_as/src/decompile_as.mm

ส่วนที่เกี่ยวข้องมากที่สุด:

[[OSAScript alloc] initWithCompiledData:];

ฟังก์ชั่นนี้มาจากOSAScript.hนอกเหนือจาก OS X SDK ในOSAScript.hมีความคิดเห็นยาวนี้:

กำหนด URL ที่หาสคริปต์ที่คอมไพล์แอปพลิเคชั่นสคริปต์หรือแหล่งสคริปต์สร้างและส่งคืนตัวอธิบายข้อมูลสคริปต์อัตโนมัติที่มีเนื้อหา คุณสามารถใช้ descriptor เพื่อสร้างสคริปต์ด้วย - [OSAScript initWithScriptDataDescriptor: ... ] สิ่งนี้ช่วยให้คุณสามารถสร้างสคริปต์ด้วย OSALanguageInstance เฉพาะ คุณอาจใช้ + [OSAL language languageForScriptDataDescriptor:] เพื่อรับภาษาสำหรับข้อมูลสคริปต์ซึ่งอาจถูกใช้เพื่อสร้างหรือเลือกอินสแตนซ์ภาษาที่เหมาะสมสำหรับ OSAScript ข้อมูลต้นฉบับของสคริปต์อาจถูกรวบรวมโดย - [OSAScript initWithScriptDataDescriptor: ... ] หรือคุณสามารถบีบบังคับตัวบอกข้อความให้กับสตริง (โดยใช้วิธี NSAppleEventDescriptor) และสร้าง OSAScript อย่างชัดเจนด้วยแหล่งที่มา + (NSAppleEventDescriptor *) scriptDataDescriptorWithContentsOfURL:

โดยทั่วไปเมื่อบันทึก.scptแล้วOSALanguageInstancedescriptor จะถูกบันทึกในไฟล์ด้วย

หากไฟล์ถูกบันทึกเป็น.applescript/ text ระบบจะทำการคอมไพล์ด้วยภาษา applescript เวอร์ชันล่าสุด ตัวอย่างเช่นสคริปต์ที่เขียนขึ้นสำหรับ OS X เวอร์ชั่นเก่าอาจไม่ทำงานในเวอร์ชันใหม่เนื่องจากบางฟังก์ชั่นล้าสมัย ด้วย.scptระบบ / แอปได้เลือกแอปพลิเคชันรุ่นใดที่มีไว้สำหรับ

จาก 10.10, จาวาสคริปต์สามารถบันทึก.scptและดำเนินการอย่างถูกต้อง


มี `errOSASourceNotAvailable (-1756) 'หมายความว่าอย่างไร
TCB13

1
+1 สำหรับลิงก์คอมไพล์ @ TCB13 ที่เกิดขึ้นเมื่อไฟล์. scpt ของคุณไม่ใช่แบบไบนารี่และควรเป็นเช่นนั้นเพื่อให้ผู้แก้ไขมีปัญหาในการแก้ไขคือการปิดหน้าต่างซึ่งจะขอให้คุณทำสำเนา สำเนาจะมีข้อมูลที่บันทึกในรูปแบบที่คอมไพล์ไปข้างหน้า อย่างไรก็ตามทั้งหมดนี้จะได้รับการแก้ไขในคำตอบที่ฉันจะโพสต์ซึ่งฉันได้เรียนรู้จากคำตอบที่ไกลออกไปนี้ที่มีคำสั่ง decompile
Michael Dimmitt

เพียงเพิ่มไปยังสิ่งนี้ยังasprintมีให้จาก < hasseg.org/asprint > ซึ่งจะช่วยให้คุณ 'พิมพ์ไฟล์สวย' ไฟล์. ข้อเสียเปรียบเพียงอย่างเดียวคือมันไม่ทำงานบนไฟล์ JavaScript .scpt, AppleScript เท่านั้น
TJ Luoma

1

หลังจากเห็นคำสั่ง decompile ที่แบ่งปันโดย Fartheraway ฉันค้นพบวิธีแก้ปัญหา หากคุณต้องการให้ไฟล์ applescript (.scpt) ไม่ใช่ไบนารี

@ ไกลออกไปยังกล่าวถึงในด้านล่างของคำตอบของเขา

เพียงแค่ทำการพัฒนาทั้งหมดด้วย. applescript extension

ตัวแก้ไขสคริปต์จะสามารถเรียกใช้รหัสและจะไม่บันทึกในรูปแบบที่รวบรวม

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