如何設計一門程式設計語言(十) Regex與領特定領域語言(DSL)

幾個月前就一直有博友關心DSL的問題,於是我想一想,我在gac.codeplex.com裡面也建立了一些DSL,於是今天就來說一說這個事情。建立DSL恐怕是很多人第設計一次一門語言的經曆,很少有人一開始上來就設計通用語言的。我自己第一次做這種事情是在高中寫這個傻逼ARPG的時候了。當時做了一個超簡單的指令碼語言,長的就跟彙編差不多,雖然每一個指令都寫成了調用函數的形態。雖然這個遊戲需要指令碼在劇情裡面控制一些人物的走動什麼的,但是所幸並不複雜,於是還是完成了任務。一眨眼10年過去了,現在在寫Ga

如何設計一門程式設計語言(六) exception和error code

我一直以來對於exception的態度都是很明確的。首先exception是好的,否則就不會有絕大多數的語言都支援他了。其次,error code也沒什麼問題,只是需要一個前提——你的語言得跟Haskell一樣有monad和comonad。你看Haskell就沒有exception,大家也寫的很開心。為什麼呢?因為只要把返回帶error

如何設計一門程式設計語言(五) 物件導向和訊息發送

物件導向這個抽象的特例總是有說不完的話題,更糟糕的是很多語言都錯誤地實現了物件導向——class居然可以當一個變數類型什麼的這隻是讓人們寫代碼寫的更糟糕而已。當然這個話題第三篇文章已經說過了,現在來談談人們喜歡拿來裝逼的另一個話題——訊息發送。按照慣例先來點題外話。說到訊息發送,有些人喜歡跳出來說,objective-c的訊息做得多優雅啊,代碼都可以寫成一句話[golang screw:you

自動化測試學習(九) WebDirver

關於什麼是WebDirver,上一節做了簡單的描述,環境也在上一章中搭建完成。下面我們拷貝了官網提供的一個執行個體。讓其在我們的eclipse中運行。Selenium WebDirver 代碼如下:package MySel20Proj; import org.openqa.selenium.By;import org.openqa.selenium.WebDriver;import org.openqa.selenium.WebElement;import

基於文本替換的解譯器:加入continuation,重構解譯器

或許在加入continuation之前要先講講費這麼大勁做這個有什麼意義。 畢竟用不用continuation的計算結果都是一樣的。 不過,這是一個興趣使然的系列,學習這些知識應該完全出於好奇與好玩的想法。 所以我才不會告訴你們通過控制continuation可以實現call-with-current-continuation和異常處理等功能呢。我先簡要描述一下加入continuation後解譯器是怎麼工作的。 加入continuation後的解譯器是以迭代的方式工作的。

基於文本替換的解譯器:遞迴定義與lambda演算的一些額外說明

這一篇接在第一篇lambda演算的後面。講講一些數學知識。經常有些看似很容易理解的東西,一旦要描述得準確無誤,就會變得極為麻煩。 軟體工程裡也有類似情況:20%的代碼實現了核心功能,剩下80%的代碼處理邊界情況。 於是,所謂的準確描述裡的大部分文字都在說明邊界情況,核心概念只有寥寥幾字——好比一件打滿補丁的衣服,完全看不出原來的樣子。 出現這種現象要麼是人類的大腦有缺陷,難以嚴謹而又準確的理解概念,也就是說人類太笨;

基於文本替換的解譯器:引入continuation

當我寫到這裡的時候,我自己都吃了一驚。 環境、儲存這些比較讓人耳熟的還沒講到,continuation先出來了。 維基百科裡對continuation的翻譯是“延續性”。 這翻譯看著總有些違和感而且那個條目也令人不忍直視。 總之continuation似乎沒有好的中文翻譯,彷彿中國的電腦科學裡沒有continuation這個概念似的。Continuation這個概念相當於過程式語言裡的函數調用棧。

基於文本替換的解譯器:遞迴,不動點,fix運算式,letrec運算式

這個系列有個顯著的特點,那就是標題越來越長。忽然發現今天是讀書節,讀書節多讀書。==下面是沒有意義的一段話我是一個喜歡從學習知識中獲得樂趣並樂於分享這種樂趣的人。我認為大部分知識只要花點時間都是能學會的。幾年前,我迷上微分幾何。我對每個朋友說這東西很有意思花點時間精力就能學會。他們回答說唉沒時間時間不知去哪兒了。後來,我迷上量子力學。我對每個朋友說這東西值得一學,只要花點時間精力。他們回答說唉煩心事太多沒精力去學。再後來,我迷上程式語言。我對每個朋友說只要使勁擠點時間就能掌握這個。他們回答說唉渾

基於文本替換的解譯器:遞迴,如何構造遞迴函式,Y組合子

遞迴。哦,遞迴。 遞迴在電腦科學中的重要性不言而喻。 遞迴就像女人,即令人煩惱,又無法拋棄。先上個例子,這個例子裡的函數double輸入一個非負整數$n$,輸出$2n$。 \[ {double} = \lambda n.({if} \; ({iszero} \; n) \; 0 \; (+ \; 2 \; ({double} \; (- \; n \; 1)))) \]現在的問題是,這個遞迴函式在我們的語言裡沒法直接定義。 我說的直接定義是指像這個用let運算式: \[ ({let} \;

基於文本替換的解譯器:加入整數類型

為了有條不紊地實現一個解譯器,我將按以下三個步驟走:1.明確文法2.針對文法描述求值過程3.根據求值過程編寫代碼實現文法\(\lambda\)演算不適合作為一門實際使用的程式語言。 \(\lambda\)演算只有變數和函數兩種類型,而其他常用類型如整數、布爾、字元等都沒有。 雖然可以通過編碼的方式表示這些常用類型,但這樣也很麻煩。 通常直接擴充\(\lambda\)演算,加入一些常用類型以及針對這些類型的基本運算。

基於文本替換的解譯器及lambda演算

最近比較閑,打算整理一下之前學習的關於程式語言的知識。主要的內容其實就是一邊設計程式語言一邊寫解譯器實現它。這些知識基本上來自Programming Languages and Lambda Calculi和Essentials of Programming Languages這兩本書。我還記得高中奧數競賽培訓時的老師這樣說過:“解題時一定要抓住定義。” 編程和解題一樣,也要抓住定義。 所以在寫解譯器前,得先定義好這門要解釋的程式語言。 這門程式語言基於Lambda演算。

解析精益產品開發:面向價值的可視化

使用者故事圖譜和任務看板、版本和迭代燃盡圖 (burndown chart),可視化已經成為敏捷和精益產品開發必選實踐。可視化真的重要嗎?我們將從一個真實團隊的實踐開始,探討可視化的作用,以及如何讓可視化發揮效用。1. 一個團隊執行個體這是一個50人左右的團隊,做企業級儲存和資料管理產品,他們通過實施產品開發中的價值、技術風險和價值流動過程的可視化,促進了團隊的溝通、決策、自我管理和持續改進。1.1 可視化價值圖1是團隊使用的使用者故事圖譜,它整合了產品目標、產品功能項以及產品的發布計劃。圖1

解析精益產品開發:產品開發中的價值

本文是《解析精益產品開發》系列的第二篇。第一篇中我們介紹了看板方法,看板方法協助組織持續改進,實現順暢和持續的價值流動。但是,只有基於正確價值的流動才有意義,這是精益產品開發的前提。在本篇中,我們將揭示產品開發中的價值本質,並以此為基礎,分享一個適合精益產品開發的價值定義和發現實踐——影響地圖(Impact Mapping)。1.

炸彈人遊戲開發過程(1) 準備工作

前言大家好!本系列博文記錄了我的炸彈人遊戲反覆式開發法的過程。在開發的過程中,代碼會不斷重構,領域模型會不斷演變,高層劃分也會不斷變化。博文重點在於記錄物件導向思想運用、重構、反覆式開發法的過程,對於遊戲的實現細節和原理不會深入討論。希望能與大家一起分享遊戲開發的過程和樂趣,為大家運用oo思想和實踐反覆式開發法提供力所能及的協助。關鍵詞物件導向、測試驅動開發、重構、迭代、領域模型、炸彈人遊戲最終成果下面是完成整個遊戲開發後的成果,大家可以先預覽一下。遊戲截圖示範地址:http://yang222

在設計思維過程中捕獲知識並使決策保持清晰性

1.摘要從我們經曆的幾個設計思維項目來看,這些項目會在非常短的時間內產生大量知識,採取很多決定。隨著時間的推移,這些知識會漸漸層得模糊,而當初為什麼做那樣的決定也就變得不太清楚了。由此產生的不確定性會給設計思維團隊造成困擾。在這篇文章中,我們會用一個執行個體來介紹如何用影響導圖(Impact Map,一種思維導圖)捕獲設計思維過程中收集到的知識,以及如何用影響導圖做出清晰的決策。2 動機設計思維已經成為一門完善的設計創新思想方法論。設計思維的一個重要優點就在於工作團隊可以非常迅速地做出一個原型,

(真實的)自我管理組織

敏捷世界裡幾乎所有的人都在討論自我組織團隊及自我管理價值。卻只有極少數人願意將自我組織推進到下一個層次:真正地在沒有經理,沒有協調員,沒有前輩的情況下工作。簡單地說,就是在沒有任何人(包括你自己)告訴其夥伴(包括你本身)必須要做什麼。造成這種現象自然有它的原因:自我組織並不是件容易的事,大家都知道它幾乎難以行之有效。我們/ut7也不比別人知道的更多,我們當時也沒有什麼保證。所以我們嘗試了自我管理。現實中,我們也學到了一些對自我管理和對生活的教訓。所有這些可以追溯到2011年7月,當我們將/ut7

GacUI與設計模式(二)渲染系統

所有關於渲染的部分的代碼可以在http://gac.codeplex.com下載下來之後,在\Libraries\GacUI\Source\GraphicsElement目錄下面找到。整個渲染系統的主要思想就是,圖元(IGuiGraphicsElement)和渲染器(IGuiGraphicsRenderer)分開,而且粒度根據效能的要求粗細都有。為什麼要這麼設計呢?在前言裡面說過,不同的渲染裝置,譬如GDI和DirectX,需要的渲染策略和cache資源的方法都不太一樣。因此為了讓各個渲染裝置的

LoadRunner指令碼編寫(二)

今天有朋友問我,關於loadrunner指令碼編第二篇什麼時候寫,我告訴他都沒什麼東西了。要學習一門語言,基本的文法和思想很重要。現在每個人都識字,那是不是每個識字的人都可以當作家。不可能,因為大多數人沒有作家的思想。編程是一門藝術,我們可以把代碼寫得很優美,而中國的程式員為什麼叫代碼工人呢?國為國外的程式員在寫一篇優美的“散文”,中國的程式員在寫“說明文”。中國的程式員只是根據需求把一個產品通過語言描述清楚。扯遠了,最近變囉嗦了,呵呵!我想表達的

LoadRunner指令碼編寫(一)

效能測試工程師要懂代碼嗎?答案是必須的。好多測試員認為在loadrunner中編寫指令碼很難很牛X ,主要是大多測試人員並未做過開發工作,大學的那點程式基礎也忘記的差不多了。還有非電腦專業出身的測試員,所以對代碼望都比較望而生畏。好多人認為loadrunner只支援C語言(包括我之前也一直這麼認為),因為loadrunner預設的指令碼是C語言的,其實它支援目前所有主流的語言,如:Java User、VB User、VB script User 、Javascript

JMeter的“集合點”

繼續上兩篇的文章內容和思路進行。(文思如尿崩,誰與我爭鋒----韓寒)哈哈!集合點:簡單來理解一下,雖然我們的“效能測試”理解為“多使用者並發測試”,但真正的並發是不存在的,為了更真實的實現並發這感念,我們可以在需要壓力的地方設定集合點,還拿那個使用者和密碼的地方,每到輸入使用者名稱和密碼登入的地方,所有的虛擬使用者都相互之間等一等,然後,一起訪問。(紅軍排長說:等一等!大家一起沖啊!這樣給敵人的壓力是很大的。嘻嘻!)1.接著之前建立的指令碼,右鍵

總頁數: 61357 1 .... 25555 25556 25557 25558 25559 .... 61357 Go to: 前往

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.