2018-02-04 AppleScript類自然語言與非英語語法設計

来源:https://www.cnblogs.com/program-in-chinese/archive/2019/03/07/10488701.html
-Advertisement-
Play Games

最早知曉是 "之前C 中文版的github討論" 里提到了AppleScript有多語言版. 昨天想起, 覺得它畢竟是為數不多(僅有的?)大公司開發的非英語語法的編程語言, 不禁好奇它的前世今生. 於是作了一點調研. 網上相關資料不多, 最早的一本AppleScript專著"AppleScript ...


最早知曉是之前C#中文版的github討論里提到了AppleScript有多語言版. 昨天想起, 覺得它畢竟是為數不多(僅有的?)大公司開發的非英語語法的編程語言, 不禁好奇它的前世今生. 於是作了一點調研.

網上相關資料不多, 最早的一本AppleScript專著"AppleScript in a Nutshell"也是2001年出版, 已經到了Mac 9. AppleScript Not Necessarily in English 提到早先支持日語,法語, 還討論過"a C dialect", 不知指哪個語言, 但在Mac 8.5版就放棄了(1998年左右)

接著有幸找到了2006年的論文"AppleScript", 更多介紹了多語言支持以及相關問題. 這篇論文其他內容也很有價值, 包括這個項目的起源, 相關項目, 以及這一語言系統從需求分析到實現的各階段細節. 本文只關註非英語語法部分, 對項目本身有興趣的不妨自行細閱.

下圖是不同"語種"(英語, 日語, 法語, "專業")的示例代碼:
2018_02_04_AppleScript語法示例

文中總結的貼近自然語言語法的語言設計的問題:

The experiment in designing a language that resembled natural languages (English and Japanese) was not successful. It was assume that scripts should be presented in “natural language” so that average people could read and write them. This lead to the invention of multi-token keywords and the ability to disambiguate tokens without spaces for Japanese Kanji. In the end the syntactic variations and flexibility did more to confuse programmers than to help them out. The main problem is that AppleScript only appears to be a natural language. In fact is an artificial language, like any other programming language. Recording was successful, but even small changes to the script may introduce subtle syntactic errors which baffle users. It is easy to read AppleScript, but quite hard to write it.

When writing programs or scripts, users prefer a more conventional programming language structure. Later versions of AppleScript dropped support for dialects. In hindsight, we believe that AppleScript should have adopted the Professional Dialect that was developed but never shipped.

Finally, readability was no substitute for an effect security mechanism. Most people just run scripts — they don’t read or write them.

大致是說, 類自然語言語法(包括英語和日語, 不知為何沒提法語)的嘗試失敗了. 為了實現接近自然語言的語法, 引入了多token的關鍵詞(猜測是類似於"在...中"這樣的用法), 以及日語的無空格語法. 問題是, 這樣"貌似"自然語言而實質仍然語法嚴格的後果之一是, 用戶誤認為小的改動, 其實會導致詞法解析的大變化. 也就是"易讀而難寫". 另一個結論是, "Professional Dialect", 即接近Java的語法被認為是最應該被保留的, 因為它最接近傳統編程習慣.

最後一段的意思是, 即使代碼可讀性好, 也不能取代一套有效的安全機制. 因為大多數人在運行腳本之前, 並不會先讀一遍, 確認它是否安全. 個人認為這個結論對語言設計的借鑒價值有限, 因為安全機制和可讀性應該沒有直接矛盾.

關於文中提到語法近自然語言導致的問題, 個人認為與目標用戶群有關. 文中提到"The language was primarily aimed at casual programmers."以及"make it accessible to non-programmers", 可見它的設計初衷和推廣目標都是非專業程式員, 而他們是最容易將自然語言和程式語言混淆的. 這個問題同樣可以適用於今天, 雖然技術上程式語言語法可以引入更多自然語言元素. 這也許是多數最新的通用型英語編程語言(求反例)仍然與自然語言保持相當距離的一個原因.

話雖如此, 現今的人機交互已經越來越普及, 即使是一般用戶, 對手機喊命令的時候也會清楚是對一個只懂得簡單語法的機器說話. 隨著大眾適應的過程, 上面這個混淆的問題也許會不那麼嚴重. 個人猜想, 編程語言的趨勢還是逐漸向靠近自然語言的方向發展, 尤其是適用於大眾編程的語言.

再回到開頭的那個討論, 提到AppleScript時將這一功能的失敗歸因於關鍵詞/語法支持多語言導致腳本內容混亂:

But it found limited adoption and where it was adopted scripts became a
mess of mixed languages and Apple eventually dropped support.

回頭看是需要考證的, 因為看起來最大的問題在於當時類似自然語言的語法, 即使只使用單純的英語語法.


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 這裡假設讀者已經搭建了ss服務。教程客戶端安裝客戶端可以通過GitHub上搜索,這裡就不寫太詳細了,避免文章被禁掉。比如對於mac的用戶,可以選擇這個客戶端配置點擊程式圖標以展開菜單欄 伺服器 - 伺服器設置,打開設置視窗。根據在ss伺服器上的/etc/shadowsocks.json文件里的配置,... ...
  • 安裝環境:ubuntu 16.04 (推薦使用此版本-2019年3月)本文假設讀者已經擁有一臺vps。安裝ss首先通過終端以root身份登錄vps$ ssh root@[IP Address]安裝 pip# apt-get install python-pip安裝ss程式# pip install ... ...
  • 一. filebeat.yml的配置 filebeat.prospectors:- input_type: log paths: - /tmp/logs/optimus-activity-api.log document_type: "czh-uat-activity" multiline: pat ...
  • tomcat簡介 tomcat就是常用的的中間件之一,tomcat本身是一個容器,專門用來運行java程式,java語言開發的網頁.jsp就應該運行於tomcat中。而tomcat本身的運行也依賴於jdk環境。 tomcat常應用於lnmt環境 Tomcat是Apache 軟體基金會(Apache ...
  • 1、【INS-13001】環境不滿足最低要求 如圖: oracle11g早於Windows Server 2012 R2 解決方法:找到解壓目錄../win64_11gR2_database\database\stage\cvu下的cvu_prereq.xml文件並增加如下 ​ 2、創建資料庫實例就 ...
  • 一、進入網卡配置目錄 cd /etc/sysconfig/network-scripts 二、備份原有網卡 mv ifcfg-em* /tmp/ 三、配置雙網卡 nmcli con add type bond ifname bond0 mode active-backup nmcli con add ...
  • Linux常用命令 系統,內核等相關命令 命令 信息 備註 arch 顯示機器了處理機構 即查看機器是X86_64還是X86_32 等同於uname -m uname [- optional parameter] 顯示使用的系統 查看使用的是Linux,可選參數有 -a ,-r,-m cat /et ...
  • OS X 10.13之後,新的airdrop需要硬體支持,需要藍牙4.0 以及Wi-Fi 5GHz 開啟!!!!對於 OS X 10.12 以下的舊系統。即使是有線網路也可以使用,通過以下命令開啟有線網路下的airdrop:defaults write com.Apple.NetworkBrowse... ...
一周排行
    -Advertisement-
    Play Games
  • 示例項目結構 在 Visual Studio 中創建一個 WinForms 應用程式後,項目結構如下所示: MyWinFormsApp/ │ ├───Properties/ │ └───Settings.settings │ ├───bin/ │ ├───Debug/ │ └───Release/ ...
  • [STAThread] 特性用於需要與 COM 組件交互的應用程式,尤其是依賴單線程模型(如 Windows Forms 應用程式)的組件。在 STA 模式下,線程擁有自己的消息迴圈,這對於處理用戶界面和某些 COM 組件是必要的。 [STAThread] static void Main(stri ...
  • 在WinForm中使用全局異常捕獲處理 在WinForm應用程式中,全局異常捕獲是確保程式穩定性的關鍵。通過在Program類的Main方法中設置全局異常處理,可以有效地捕獲並處理未預見的異常,從而避免程式崩潰。 註冊全局異常事件 [STAThread] static void Main() { / ...
  • 前言 給大家推薦一款開源的 Winform 控制項庫,可以幫助我們開發更加美觀、漂亮的 WinForm 界面。 項目介紹 SunnyUI.NET 是一個基於 .NET Framework 4.0+、.NET 6、.NET 7 和 .NET 8 的 WinForm 開源控制項庫,同時也提供了工具類庫、擴展 ...
  • 說明 該文章是屬於OverallAuth2.0系列文章,每周更新一篇該系列文章(從0到1完成系統開發)。 該系統文章,我會儘量說的非常詳細,做到不管新手、老手都能看懂。 說明:OverallAuth2.0 是一個簡單、易懂、功能強大的許可權+可視化流程管理系統。 有興趣的朋友,請關註我吧(*^▽^*) ...
  • 一、下載安裝 1.下載git 必須先下載並安裝git,再TortoiseGit下載安裝 git安裝參考教程:https://blog.csdn.net/mukes/article/details/115693833 2.TortoiseGit下載與安裝 TortoiseGit,Git客戶端,32/6 ...
  • 前言 在項目開發過程中,理解數據結構和演算法如同掌握蓋房子的秘訣。演算法不僅能幫助我們編寫高效、優質的代碼,還能解決項目中遇到的各種難題。 給大家推薦一個支持C#的開源免費、新手友好的數據結構與演算法入門教程:Hello演算法。 項目介紹 《Hello Algo》是一本開源免費、新手友好的數據結構與演算法入門 ...
  • 1.生成單個Proto.bat內容 @rem Copyright 2016, Google Inc. @rem All rights reserved. @rem @rem Redistribution and use in source and binary forms, with or with ...
  • 一:背景 1. 講故事 前段時間有位朋友找到我,說他的窗體程式在客戶這邊出現了卡死,讓我幫忙看下怎麼回事?dump也生成了,既然有dump了那就上 windbg 分析吧。 二:WinDbg 分析 1. 為什麼會卡死 窗體程式的卡死,入口門檻很低,後續往下分析就不一定了,不管怎麼說先用 !clrsta ...
  • 前言 人工智慧時代,人臉識別技術已成為安全驗證、身份識別和用戶交互的關鍵工具。 給大家推薦一款.NET 開源提供了強大的人臉識別 API,工具不僅易於集成,還具備高效處理能力。 本文將介紹一款如何利用這些API,為我們的項目添加智能識別的亮點。 項目介紹 GitHub 上擁有 1.2k 星標的 C# ...