最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

計算機語言學(xué)習(xí)導(dǎo)論

2023-04-25 04:33 作者:幻の上帝  | 我要投稿

計算機語言學(xué)習(xí)導(dǎo)論

  因為 B 站限制,外部鏈接等格式無法顯示。略去部分歷史內(nèi)容。嵌套列表限制 2 層。

原文檔見以下地址:

https://github.com/FrankHB/pl-docs/blob/master/zh-CN/introduction-to-learning-computer-languages.md

引言

  因為近幾個月收到了較多計算機科學(xué)基礎(chǔ)尤其是編程語言入門指導(dǎo)的問題,之前也說過好幾回會匯總一起解答,是時候填坑了。

  但說實話這個坑挺大的,無法一次性填完,在這里會不定期更新。

  因為是填坑,所以請讀者當(dāng)讀到?TODO?注釋時不要感到奇怪。大部分這類注釋表示文檔中相對較低優(yōu)先級的部分,缺失可能會影響完成度,但不應(yīng)影響主旨的理解。

概述

  計算機語言是在計算機上為處理信息等目的而設(shè)計和實現(xiàn)的人工語言(artifical language)?,包括通用目的語言(general-purpose language)?和領(lǐng)域特定語言(DSL, domain-specific language)?兩類。

  人工語言和自然語言(natural language)?相對,最顯著的區(qū)別是人工被人為地設(shè)計(design)?而非演化(evolute)?。自然語言的演化過程中不排除正字法(orthography)?等的人為干預(yù),但主要的現(xiàn)象仍然來自演化的結(jié)果。而人工語言不需要遵從受到不可控環(huán)境演化規(guī)律的影響,原則上完全使用人為指定的規(guī)則(rule)?。

  一般地,GPL 具備可編程性(programming)?,能表達程序代碼。這類語言稱為編程語言(PL, programming language)?。DSL 可能是 PL 。其它的領(lǐng)域特定語言可能僅為了描述數(shù)據(jù)格式而不要求使其代碼被作為程序,因此不視為 PL 。

  廣義的語言學(xué)(linguistics)?同時以自然語言和人工語言兩者為研究對象,但初始的對象僅是自然語言。有的人工語言(如世界語)是人為創(chuàng)造的自然語言替代品;與此不同,計算機語言首要便于計算機處理,而非以自然語言的方式使用,它一定是書面語。語言學(xué)中,處理自然語言的一些分支,如語音學(xué)(phonetics)?,在計算機語言中不再適用。因此,可以認(rèn)為計算機語言是具有更大限制性的語言。

  但因為側(cè)重的目的過于不同,不僅研究對象的普遍規(guī)律不同,傳統(tǒng)的語言學(xué)的方法論也經(jīng)常不在計算機語言上生效;并且,完善的人為設(shè)計能排除重新發(fā)現(xiàn)和應(yīng)用外部規(guī)律的需要。因此,指導(dǎo)計算機的不是語言學(xué),而是編程語言理論(PLT, programming language theory)?,這可被認(rèn)為是一種數(shù)學(xué)分支。其它的不具有足夠可編程性的計算機語言,仍然能被 PLT 解釋。

入門策略

  要入門,首先需要看到門在哪里。

場景

  對初學(xué)者而言,一般首先通過某一門具體 PL 來接觸使用語言編寫程序這樣的主要場景。但是,盡管大多數(shù)學(xué)習(xí)者首要關(guān)心這個場景,學(xué)習(xí)語言和學(xué)習(xí)編寫程序?qū)嶋H上是兩回事。學(xué)習(xí)語言的知識至少還是改進語言設(shè)計這樣的任務(wù)場景的基本要求。因此,“門”的指涉也相應(yīng)地不同:

  • 如果只是想要編寫程序,入門可以是了解環(huán)境的搭建并實際寫出可以運行的程序。

  • 如果是學(xué)習(xí)語言,入門是掌握如何參照基本規(guī)則適應(yīng)不同的使用場景的一般方法。

  編寫程序是一個主要場景,但不是全部。作為更一般地情形,后者的要求顯然高于前者。對后者,“門”具體是指權(quán)威的語言規(guī)則。

規(guī)范

  作為人工語言,這些規(guī)則應(yīng)當(dāng)是明確的。一般計算機語言的規(guī)則通過語言規(guī)范(specification)?或稱為規(guī)格說明的文檔描述。由于計算機語言的實現(xiàn)(implementation)?通常是軟件,這同時也是語言實現(xiàn)的軟件規(guī)格說明書的公共組成部分——具體實現(xiàn)可能有更具體的擴展。例如:

  • Java 語言的語言規(guī)范是 JLS(Java language specification) ,通過 JVMS(Java virtual machine specification) 提供一些實現(xiàn)的更具體的規(guī)范。

  • C 語言的語言規(guī)范是國際標(biāo)準(zhǔn) ISO/IEC 9899 ,具體實現(xiàn)的規(guī)格說明由提供實現(xiàn)的各廠商自行維護。

  語言規(guī)范應(yīng)當(dāng)確保提供足夠完整的語言規(guī)則,這些規(guī)則定義了符合性(conformance)?,即判定一個實現(xiàn)是否構(gòu)成語言規(guī)范中的規(guī)則定義(define)?的語言。符合性規(guī)則包含了對實現(xiàn)的要求(requirement)?。因為實現(xiàn)不需要被無條件要求能接受任意輸入,語言規(guī)范通常也規(guī)定對實現(xiàn)可接受程序的要求。因此,語言規(guī)范能夠定義清楚什么樣的代碼才是符合要求的程序,而間接明確了如何寫出正確的程序的最低要求。

  因為語言規(guī)范中語言規(guī)則不依賴具體實現(xiàn)細(xì)節(jié),掌握語言規(guī)范和其它一些 PLT 和實現(xiàn)的知識,用戶應(yīng)當(dāng)就能自行實現(xiàn)語言。滿足符合性的語言實現(xiàn)之間允許存在實現(xiàn)環(huán)境要求和支持特性集等差異,而形成被實現(xiàn)的語言的不同的方言(dialect)?。語言規(guī)范中的符合性規(guī)則同時也是檢驗不同方言之間的兼容性的準(zhǔn)則。

  理解和掌握如何去尋找這些明確的語言規(guī)則,可以認(rèn)為是入門了。就那么簡單。

現(xiàn)實應(yīng)對

  然而實際情形更加復(fù)雜一些。有時語言只有一種實現(xiàn),可能不提供語言規(guī)范,而直接發(fā)布實現(xiàn)(如解釋器和編譯器),同時給出指導(dǎo)如何使用實現(xiàn)的參考手冊(reference manual)?。參考手冊是提供給用戶的具體實現(xiàn)的使用說明書,通常是規(guī)格說明的簡化版。此時權(quán)威來源只此一家,由于人工語言的特殊性,用戶沒法擅自添加規(guī)則(除非同時維護自己的實現(xiàn)),所以參考手冊會被勉為其難地被作為語言規(guī)范來使用。這樣的語言如 Python 和 Rust 。

  作為對比,參考手冊只需要描述具體實現(xiàn)的行為和使用方式,不一定提供完整的語言規(guī)則,因此通過參考手冊開發(fā)方言雖然不是不可能(如 Python 在 CPython 之外還有 PyPy 等),但因為規(guī)則不夠清晰,難度可能更大,出現(xiàn)更多的兼容性問題。

  嚴(yán)格來說,沒有語言規(guī)范的人工語言設(shè)計是殘缺的。不過,對實用計算機語言這樣復(fù)雜的情形,語言規(guī)范的起草要求較高,乃至工業(yè)語言的設(shè)計者自身都不一定有能力獨自完成(而需要專家委員會或志愿者協(xié)助),使用參考手冊湊數(shù)作為妥協(xié)也并不少見。

  其它的文獻,例如關(guān)于 PL 的教科書,一般都是二次開發(fā)作品,在描述什么是語言上權(quán)威性更弱。有少數(shù)的例外:語言的原始設(shè)計者在起草語言規(guī)范前提供的替代文獻。例如,C++ 標(biāo)準(zhǔn)的第一版(即 ISO/IEC 14882:1998 )之前,Bjarne Stroustrup 的?The Annotated C++ Reference Manual?雖然體例和名義上是參考手冊,實際起到了語言規(guī)范的作用(當(dāng)時已有多個語言實現(xiàn)),因為沒有更權(quán)威的完整語言規(guī)則的來源。

  遺憾的是,大多數(shù)新手只接觸到如何入門編寫程序的文獻,甚至這些文獻在編寫程序上的入門都很不完善,卻沒有意識到基礎(chǔ)的不完整。結(jié)果,先接觸這些文獻的用戶,可能了解在特定情形下如何寫出可運行的程序,但實際上沒有能力在最基本的情形保證總是按照預(yù)期運行。

  例如,首先試圖用編譯器生成的匯編代碼來解釋 C 程序如何運行的用戶,通常不會理解 C 的未定義行為(undefined behavior)?的具體外延和排除方法。一旦更換編譯器版本、操作系統(tǒng)、具體程序輸入甚至什么都不變,程序就可能罷工,但這種差異的來源并非是生成的代碼,而可能是因為按照語言規(guī)范(這里是 ISO C )源程序自身存在缺陷,連維持正確的最低要求都沒達到。

  一旦習(xí)慣這種思路,要進一步確保寫的程序能符合最低正確性要求的、可被人理解,往往比純新手入門還困難,因為首先要摒除錯誤姿勢的形成的思維定勢。

  因此,作為初學(xué)者,應(yīng)當(dāng)注意,即便僅是為了學(xué)習(xí)編寫程序而不是全面掌握語言的實用,這樣地一知半解入錯門還不如不入門。

局限性

  應(yīng)當(dāng)了解,語言規(guī)范規(guī)定關(guān)于語言的規(guī)則并不一定在語言外適用。特別地,它可能不適用于概括不同語言的不同規(guī)則,乃至術(shù)語都不通用。對要求多語言(ployglot)?理解的一般情形,通常應(yīng)了解 PLT 的慣例。

  但是,一般初學(xué)者不足以有條件分辨到底哪些語言中的定義符合一般慣例。這種情形下,須對具體語言提供的定義保持足夠的懷疑,即默認(rèn)不要把未經(jīng)確認(rèn)的術(shù)語和規(guī)則套用到其它語言中,以免形成錯誤理解和以訛傳訛。

  一些體現(xiàn)現(xiàn)有具體語言的復(fù)雜和混亂情形的實例:

  • 一些重要基本概念,如變量(variable)?和對象(object)?,定義在各個語言中存在出入。

    • JLS 規(guī)定變量(variable)?是帶類型的存儲,Go 語言規(guī)范也類似,而這實際相當(dāng)于 ISO C 和?ISO C++ 中對象(object)?的概念。

    • ISO C?沒有變量的正式定義。

    • ISO C++ 的變量總是具名的。這符合數(shù)學(xué)傳統(tǒng),同時和 ISO/IEC 2382 的定義兼容。

    • Java 和 Go 語言的定義和數(shù)學(xué)傳統(tǒng)以及遵循這個傳統(tǒng)(“變量的值不可變”)的純函數(shù)式語言(如 Haskell )中的定義(特別地,類型變量(type variable)?)是沖突的。

    • 事實上,JLS 中直接定義了類型變量,是符合數(shù)學(xué)傳統(tǒng)的;但類型變量不是變量,直觀上存在矛盾。

  • ISO C++ 規(guī)定多態(tài)類(polymorphic class)?是具有虛成員函數(shù)的類,但實際上這里的多態(tài)性(polymorphism)?在一般意義上在一般意義上的特殊情形,即[包含多態(tài)(inclusion polyrphism)?或稱子類型多態(tài)(subtype polymorphism)] 。

    • 盡管沒在語言規(guī)范中明確,C 和 C++ 的強制(coercion)?是一種特設(shè)多態(tài)(ad-hoc polymorphism)?。

    • C++ 的重載(overloading)?是另一種特設(shè)多態(tài)。

    • C++ 的類模板是參數(shù)多態(tài)(parametric polymorphism)?。

    • 上述其它形式的多態(tài)在歷史上早于包含多態(tài)的出現(xiàn)。

  此外,由于大多數(shù)語言的設(shè)計者未必具有足夠的 PLT 背景,他們的作品不一定能夠正確反映一般語言的知識。語言的實現(xiàn)者也未必足夠清楚關(guān)于設(shè)計上的知識。例如:

  • Python 的設(shè)計者承認(rèn)不清楚尾調(diào)用和循環(huán)的區(qū)別。

  • Go 語言的設(shè)計者看來不清楚名義類型(nominal typing)?。

  • Lisp 方言的一些編譯器作者使用尾調(diào)用優(yōu)化(TCO, tail call optimization)?但并不清楚真尾遞歸(proper tail recursion)?的一般性質(zhì),造成一些混亂?! ?/p>

  看起來可能是專家的語言設(shè)計和實現(xiàn)者尚且如此,沒有足夠參與語言維護工作的一般用戶的觀點同樣(如果不是更)可能是相當(dāng)?shù)夭豢煽康模?strong>這包括大多數(shù)的高校教師。因為大學(xué)的具體 PL 課通常是基礎(chǔ)課,可以理解通常難以配備足夠的專家作為師資。

  而可能出人意料的是,相當(dāng)一部分的教科書作者也不可靠。因為編寫教科書的要求和語言規(guī)范不同,為了容易理解,可能更難以保證正確性

  更困難的一個問題是,幾乎任何一個實用計算機語言其實都已經(jīng)復(fù)雜到不適合沒有完全沒有理論計算機背景知識的學(xué)習(xí)者。而很多基礎(chǔ)課(如關(guān)于體系結(jié)構(gòu)或者算法的)卻又經(jīng)常要求有學(xué)生有 PL 的基礎(chǔ),否則難以理解其中“為何如此設(shè)計”的原理——因為它們要么是適應(yīng) PL 的局限性要么是會使用 PL 的方法描述內(nèi)容,根本無法徹底抽象掉。

  所以真正的零基礎(chǔ)入門,無論只是為了學(xué)習(xí)編寫程序,還是更一般地掌握 PL ,唯一比較可行的就是選擇比較簡單的實用通用目的 PL ,然后了解如何使用 PL 的主要方式,再在必要時根據(jù)領(lǐng)域選擇不同的具體 PL 進一步學(xué)習(xí)。

文獻選擇

  如果有條件,例如已經(jīng)有其它類似的 PL 學(xué)習(xí)基礎(chǔ),且語言規(guī)范文檔容易獲得,那么應(yīng)當(dāng)直接使用語言規(guī)范。

  若研究需要,則優(yōu)先使用補充的第一手來源(論文、報告和專利等)。僅當(dāng)同行評審或教學(xué)需要時,才有必要參考二手資料。

  如果要僅針對特定的語言選讀非權(quán)威文獻,則一般建議選擇語言設(shè)計者的著作,這至少能接近原始的設(shè)計。

  而 PLT 則視為單獨的領(lǐng)域。但是,PLT 有非常多細(xì)分領(lǐng)域,即便是知名的著作也未必在每個方向上都保證可靠。如果需要了解,請務(wù)必做好考察原始文獻(主要是論文)的準(zhǔn)備

  對零基礎(chǔ)入門,實現(xiàn)上節(jié)的策略建議選擇?SICP 2nd edition?,這是 MIT 課程編號 6.001 的同名經(jīng)典課程的經(jīng)典教材(沒有之一)。理由是:


  • 此書使用?Scheme?作為教學(xué) PL 。

    • Scheme 的核心語言特性相對簡單但很靈活,程序代碼也較緊湊,不用花費多少時間學(xué)習(xí)即可以求解描述較復(fù)雜的問題,零基礎(chǔ)適應(yīng)編程方法這個目的性價比較高。這在書中有直接體現(xiàn)。

    • Scheme 語言規(guī)范?RnRS?以簡潔而緊湊著稱,篇幅較短信息集中,體例較為嚴(yán)謹(jǐn),質(zhì)量相對較高,適合初學(xué)者熟悉語言規(guī)范的寫作風(fēng)格以及練習(xí)從語言規(guī)范文檔檢索信息。

    • Scheme 要求支持真尾遞歸,確保尾遞歸和循環(huán)在計算復(fù)雜度上等價,避免一開始需要記憶過多的控制結(jié)構(gòu)語法,有助于養(yǎng)成對過程式范型(procedural paradigm)?的正確認(rèn)識。

    • 作為通用 PL ,Scheme 在函數(shù)式編程(functional programming)?、DSL 和動態(tài)語言等多個方面都可以作為典型的實例直接使用。

    • 作為早期 LISP 的演進,也和其它 Lisp 方言在很多特性上通用;同時還直接影響了一些流行語言如 JavaScript 。了解 Scheme 對學(xué)習(xí)這些語言有幫助。

    • Scheme 具有天然的 PLT 背景,是該方向的學(xué)習(xí)者入門的起點之一(盡管 SICP 并沒有詳細(xì)展開)。

    • 正確地展示了如何合理使用不同形式的遞歸,而非流于表面和糾結(jié)具體實現(xiàn)細(xì)節(jié)。

    • 涉及過程式、函數(shù)式和邏輯編程(logical programming)?等范型。

    • 明確了續(xù)延(continuation)?和求值器(evaluator)?等基礎(chǔ)概念。

    • 有的實用編程技巧(如 streams )經(jīng)常被誤認(rèn)為進階內(nèi)容,在此接觸有助于避免日后一些不必要的神秘感。

  • 作為入門教材,基本沒有局部錯誤和偏離主題的現(xiàn)象,不容易對其它領(lǐng)域或其它 PL 的進一步學(xué)習(xí)造成先入為主的負(fù)面影響。

    • 也許除了可能嫌棄其它語言不夠靈活……

    • 作者之一是 Scheme 的主要設(shè)計者,PL 上基本不用擔(dān)心專業(yè)性問題。

  • 作為經(jīng)典,久經(jīng)考驗。

  • 可以找到原作者教學(xué)的視頻資源。雖然其實看書就夠了。

  但同時要注意,除非直接在 MIT 上課,最好不要使用 Python 作為教學(xué) PL 的新版本:

  • 盡管也能完成基本的課程目標(biāo),Python 版本基本上缺乏所有以上 Scheme 具有的優(yōu)點。

    • Python 在零基礎(chǔ)的意義上沒有 Scheme 簡單,例如需要糾結(jié)語句和表達式。

    • Python 沒有正式語言規(guī)范只有語言參考文檔,體例質(zhì)量和通讀難度上都不如?RnRS?。

    • 在初期接觸 Python 的一些限制性設(shè)計(如 lambda 表達式只有一行,沒有真尾遞歸)不利于養(yǎng)成良好的編程習(xí)慣。

    • 學(xué)了 Python 再學(xué)別的語言可能不那么有參照性。

  • 新版質(zhì)量相對較差,例如關(guān)于語句和表達式直接并列的講法不嚴(yán)謹(jǐn),容易造成錯誤理解。

  • 新版替換掉了一些經(jīng)典內(nèi)容,雖然更接近當(dāng)前實用場景,但也意味著這部分內(nèi)容更容易被其它“現(xiàn)代”的參考文獻替換。

  • 使用這個版本的一個理由是和數(shù)據(jù)科學(xué)課程銜接,因為該領(lǐng)域流行使用 Python ,能減少學(xué)習(xí)工作量。

    • 不過這方面只會 Python 實際可能不大夠用(比如經(jīng)常還得會 C++ ),所以這個入門姿勢收益可能不一定明顯,而影響以后不太有機會糾正的基礎(chǔ)理解明顯是虧的。

  其它要點:

  • 如果日程緊湊,需要安排其它課程,可以只看前 3 章。

    • 因為這里的依賴不是線性的,前面的章節(jié)和入門這個目的相關(guān)性較高,后期的內(nèi)容可以作為進階內(nèi)容學(xué)習(xí)。這時可以針對性參考其它更詳細(xì)的文獻而非入門讀物。

  • 如果日程仍然緊湊,可以跳過習(xí)題。

    • 但需要自行另外驗證學(xué)習(xí)效果。

做題

  一般順序是靠譜的教材的題目做一部分或者全部。應(yīng)試隨意。

  有些題可以看看但不去解。在不解題的情況下理解出題的思路不一定比解題容易,可能比解題還重要。不過這要求正確判斷問題在涉及問題領(lǐng)域中的重要程度,對初學(xué)者較難。

  除非對競賽感興趣,刻意刷所謂的“算法題”對一般從業(yè)者沒多大必要。因為實際干活的場景比單純實現(xiàn)算法經(jīng)常麻煩得多,搞不好配個環(huán)境都有技術(shù)門檻,這種不容易訓(xùn)練的技能更該趁早對付。刷題除了有時間限制,某種意義上只是簡化了規(guī)則的舒適區(qū)。

  筆者的經(jīng)驗比較極端:因為入門就是從語言手冊和規(guī)范文檔開始,之后才參考普通的著作(包括 SICP ),原則上不是為了挑作者的錯就全部跳過題目,而直接用解決項目中的實際問題代替;偶爾興起直接出題再比較出題思路。這么做:

  • 首要好處是節(jié)約學(xué)習(xí)時間。特別地,減少訓(xùn)練正確高效地提出和總結(jié)問題這樣的(相對如何實現(xiàn)還可能更重要的)研究和工程技能所花費的時間。

  • 穩(wěn)定工作流:

    • 為什么重復(fù)造輪子,現(xiàn)成的不香?

    • 非要自己實現(xiàn)……如何實現(xiàn)?肌肉記憶不夠?

    • 剩下的……世界那么大,旮旯那么多,臨時找文獻都比回憶怎么做題快。

    • 找不到,沒人會,不得不自己整了,橫豎都別指望快哪去。(做題也不太容易練這個。)

  • 從提問入手,更容易發(fā)現(xiàn)現(xiàn)有的缺陷。

    • 有的需求就是假需求,有的問題壓根就不該存在。

    • 極大地提升了看穿過度設(shè)計的能力。

  • 主要壞處是對基礎(chǔ)的全面要求比較高。

    • 比較吃天賦,特別吃想象力:需要能預(yù)判沒經(jīng)驗的具體場景并承擔(dān)誤判風(fēng)險,免得浪費時間掌握個空氣還不如老實做題。

    • 入門時沒輕沒重,問題都怎么沒見識過所以不太會正確評價具體問題的重要程度,實操很容易在分配資源上跑偏。

  • 題外話:

    • 不是復(fù)雜或偏門到一定程度,如何寫出能跑的代碼其實是相對容易替代的沒那么智能的工作。(看看 AI 。)

    • 看代碼(發(fā)現(xiàn)問題或為代碼質(zhì)量背書)比寫代碼可能更有技術(shù)含量。

    • 在能確保可行的前提下,通常正確理解需求和提出設(shè)計比具體實現(xiàn)更關(guān)鍵。

    • 如果花了過多的時間在純粹的實現(xiàn)而非設(shè)計和驗證設(shè)計的過程上,可能就該懷疑干的是不是太偏體力活了。

    • 只接到體力活沒辦法?摸魚去學(xué)多點有技術(shù)含量的啊……其實調(diào) bug 可能倒不那么體力活。

  總之:

  1. 量力而為。

  2. 只做題死路一條。

  3. 有自信可以完全不做題。

語言律師

  有的人會把理解語言規(guī)則的人稱作語言律師(language lawyer)?,這并不怎么確切。律師通常需要執(zhí)業(yè)資格,而所謂語言律師并不是。并且,除了律師和法官等專業(yè)人士外,普通人也有必要了解一些法律常識;即便不是要維護語言的演化而只是利用語言來寫代碼的語言的普通用戶,掌握語言規(guī)則的最基本知識,也同樣有必要。

  另一方面,從法的位階來說,大部分語言規(guī)范并沒有經(jīng)過廣泛的公開程序評審而更像“地方自治法規(guī)”,公開的技術(shù)標(biāo)準(zhǔn)才更像是“法律”。

  這實際上確實在文本上有所體現(xiàn),例如,ISO/IEC directives, part 2?對情態(tài)動詞使用 shall 而非 must 表示強制要求(mandatory requirement)?以及 should 表示建議的規(guī)定,和實際的英語國家中的傳統(tǒng)法律的遣詞習(xí)慣一致。當(dāng)然,這種規(guī)范性主要強調(diào)形式統(tǒng)一,而具體表現(xiàn),也有與之相同和不同的做法:

  • RFC 2119?規(guī)定關(guān)鍵詞 MUST、REQUIRED 或 SHALL 都能表示上述 shall 的含義。

  • RFC 8174?更新 RFC 2119 ,進一步規(guī)定只有大寫形式才具有特殊含義。

  • 關(guān)于法律中的 shall 和 must ,存在一些長期誤用的歧義,因此學(xué)界存在爭議。

  • 英國法院裁定英國競爭和市場管理局終止對蘋果的反壟斷調(diào)查,因為蘋果上訴主張 shall 的含義是強制要求被法院支持。

  實際情況:入門階段不太容易遇到需要律師解決的問題。

  不要為逃避本該掌握的常識問題找借口。

TODO

TODO?補充其它進階話題。

TODO?補充和具體語言相關(guān)的問題。


計算機語言學(xué)習(xí)導(dǎo)論的評論 (共 條)

分享到微博請遵守國家法律
永嘉县| 西充县| 碌曲县| 武陟县| 财经| 湄潭县| 靖江市| 福建省| 广丰县| 吉木乃县| 大丰市| 忻州市| 云南省| 大连市| 塔城市| 鹿泉市| 民勤县| 渭南市| 右玉县| 封开县| 安平县| 凤凰县| 蒲江县| 华坪县| 尚义县| 收藏| 花莲县| 吉木乃县| 鄂尔多斯市| 遂川县| 阿克苏市| 资溪县| 庆云县| 武功县| 通化县| 普兰县| 武胜县| 中阳县| 休宁县| 诸暨市| 高安市|