Tại sao các tệp .scpt Script Editor không được lưu dưới dạng tệp văn bản thuần túy?


15

Trình chỉnh sửa tập lệnh (trước đây là Trình biên tập AppleScript trước Yosemite 10.10) lưu .scpttệp dưới dạng tệp nhị phân, không phải tệp văn bản thuần túy.

Nó làm cho việc làm việc với họ trong các hệ thống kiểm soát mã nguồn có phần cồng kềnh.

Có ai biết tại sao đây là trường hợp? Có một số lịch sử lâu dài đòi hỏi định dạng tệp này là một cái gì đó khác với các tệp văn bản thuần túy?


Tôi không biết lý do tại sao nhưng như đã nhận xét ở đây , bạn có thể viết một macro phím nóng / tập lệnh để lưu dưới dạng văn bản thay thế. Đó là một nỗi đau nhưng có thể làm được ...
Vic

2
Trong bảng Lưu, bạn có thể lưu tập lệnh ở một số định dạng khác nhau, bao gồm cả văn bản thuần túy.
Chris Trang

"Nhận tập lệnh dưới dạng văn bản từ các tập tin scpt?": List.apple.com/archives/applescript-users/2007/Mar/ Kẻ
pkamb

Câu trả lời:


19

Bài viết của William R. Cook chứa một lịch sử xuất sắc và cái nhìn sâu sắc từ những người liên quan đến AppleScript vào năm 1989.

Những gì tiếp theo là niềm vui và đầu cơ.

Bảo tồn không gian và chế biến

AppleScript được viết vào thời điểm mà mỗi byte và bit đều có giá trị. Mã hóa lười biếng của OS X vì các định dạng danh sách tài sản sẽ lãng phí trong mắt các nhà phát triển đầu tiên.

Định dạng nhị phân cung cấp một hình thức được phân tích cú pháp trước để tránh trùng lặp quá trình phân tích cú pháp phức tạp, dễ bị lỗi và tốn thời gian với mỗi lần tải từ đĩa. Tốt hơn để tải trực tiếp vào bộ nhớ và chạy.

Thích nghi

Việc lưu ở định dạng nhị phân cho phép AppleScripts được gắn với các mã AppleEvent cơ bản thay vì từ điển thuật ngữ dạng dài của chúng.

Điều này sẽ cho phép AppleScript được viết và lưu đối với một phiên bản của ứng dụng để tự động cập nhật các thay đổi thuật ngữ giữa các phiên bản của các ứng dụng được nhắm mục tiêu.

Một đối tượng số nguyên có thể được gọi là 'số nguyên' trong tập lệnh nhưng được lưu dưới dạng bốn ký tự ' int ' trong biểu diễn nhị phân. Mã bốn ký tự đến từ từ điển AppleScript do hệ điều hành cung cấp.

Nếu một thuật ngữ AppleScript trong tương lai quyết định thay đổi từ đối diện của người dùng thành số nguyên, biểu diễn nhị phân có thể ánh xạ sang tên mới hơn.

Một mặt trái của điều này là có thể nhìn thấy ngày hôm nay. Viết một AppleScript dựa vào từ điển của ứng dụng. Sau đó xóa ứng dụng hoàn toàn khỏi máy Mac của bạn. Bạn thấy gì trong Script Editor khi mở script?

Ít nhất là trong các phiên bản gần đây, AppleScript Editor đã hiển thị các chevron xung quanh mã bốn ký tự . Các mã đã được ghi nhớ và làm nổi bật. Không phải người dùng phải đối mặt với thuật ngữ.

Đây có lẽ không phải là lợi ích chính mà là một lợi ích có thể.

Xu hướng hiện đại

Đó là giá trị thừa nhận thiên vị hiện đại của chúng tôi cho các tài liệu văn bản. Kinh nghiệm đã dạy nhiều người trong chúng ta rằng lưu trữ nội dung có giá trị ở định dạng nhị phân mang rủi ro. Các định dạng nhị phân thường được ghi lại kém , không rõ ràng cho người dùng cuối và khó mở khi phần mềm sở hữu không được duy trì.

Khi AppleScript và định dạng nhị phân của nó được tạo, xu hướng này chưa được hình thành. Lưu trữ và giới hạn tính toán là rất thực tế và mỗi kilobyte hoặc hàng ngàn chu kỳ được lưu là đáng giá.

Lịch sử và nguồn gốc

Những câu chuyện về nguồn gốc của AppleScript rất tuyệt vời nhưng khó theo dõi những ngày này. AppleScript đã cố gắng trở thành một ngôn ngữ tiếng Anh thân thiện như ngôn ngữ và hơi thở trong tầm nhìn của nó; việc thực hiện đã khó hơn để có được quyền!


16

Tóm lại, .scptcho phép tương thích ngược. Ngoài ra, applescript / javascript (vv) có thể được lưu với cùng một phần mở rộng, với điều kiện là Script Editorhiện hỗ trợ javascript.

Để dịch ngược .scpttrong shell:

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

Phần có liên quan nhất:

osadecompile

Textmate là một biên tập viên bên thứ ba có thể đọc .scpt:

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

Phần có liên quan nhất:

[[OSAScript alloc] initWithCompiledData:];

Chức năng này đến từ OSAScript.h, ngoài OS X SDK. Trong OSAScript.hđó, có nhận xét dài dòng này:

Đưa ra một URL định vị tập lệnh được biên dịch, ứng dụng tập lệnh hoặc nguồn tập lệnh, tạo và trả về một bộ mô tả dữ liệu tập lệnh tự động với nội dung của nó. Bạn có thể sử dụng bộ mô tả để tạo tập lệnh với - [OSAScript initWithScriptDataDescriptor: ...]. Điều này cho phép bạn tạo một tập lệnh với một OSAL LanguageInstance cụ thể. Bạn có thể sử dụng + [Ngôn ngữ OSALForScriptDataDescriptor:] để lấy ngôn ngữ cho dữ liệu tập lệnh, sau đó có thể được sử dụng để tạo hoặc chọn một phiên bản ngôn ngữ phù hợp cho OSAScript. Dữ liệu nguồn tập lệnh có thể được biên dịch bởi - [OSAScript initWithScriptDataDescriptor: ...] hoặc bạn có thể ép buộc bộ mô tả thành một chuỗi (sử dụng các phương thức NSAppleEventDescriptor) và tạo rõ ràng một OSAScript với nguồn. + (NSAppleEventDescriptor *) scriptDataDescriptorWithContentsOfURL:

Về cơ bản, khi được lưu .scpt, một OSALanguageInstancemô tả cũng được lưu trong tệp.

Nếu một tệp được lưu dưới dạng .applescript/ văn bản, hệ thống sẽ biên dịch nó với phiên bản mới nhất của ngôn ngữ applescript. Ví dụ, tập lệnh được viết cho phiên bản OS X cũ hơn có thể không hoạt động trên phiên bản mới vì một số chức năng đã trở nên lỗi thời. Với .scpt, hệ thống / ứng dụng đã chọn ra phiên bản applescipt có nghĩa là gì.

Từ 10.10, javascript có thể được lưu vào .scptvà được thực thi chính xác.


Có `errOSASourceNotAv Available (-1756) .` Điều đó có nghĩa là gì?
TCB13

1
+1 cho liên kết dịch ngược. @ TCB13 xảy ra khi tệp .scpt của bạn không phải là nhị phân và do đó trình soạn thảo gặp sự cố, công việc xung quanh là đóng cửa sổ sẽ yêu cầu bạn tạo một bản sao. Bản sao sau đó sẽ có thông tin được lưu trong một định dạng được biên dịch trong tương lai. Tuy nhiên, tất cả điều này sẽ được giải quyết trong câu trả lời tôi sắp đăng mà tôi đã học được từ câu trả lời xa hơn này có chứa lệnh dịch ngược.
Michael Dimmitt

Chỉ cần thêm vào điều này, cũng asprintcó sẵn từ < hasseg.org/asprint > sẽ cho phép bạn 'in đẹp' các tệp .scpt. Hạn chế duy nhất là nó không hoạt động trên các tệp .scpt JavaScript, chỉ có các tệp AppleScript.
TJ Luoma

1

Sau khi thấy lệnh dịch ngược được chia sẻ bởi Fartheraway, tôi phát hiện ra giải pháp. Nếu bạn muốn tệp applescript (.scpt) không phải là nhị phân.

@fartheraway cũng đề cập đến nó trong phần dưới của câu trả lời của mình.

chỉ cần làm tất cả sự phát triển với phần mở rộng .applescript.

Script Editor sẽ có thể chạy mã và nó sẽ không lưu nó ở định dạng được biên dịch.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.