2014-12-23 151 views
2

這樣一個簡單的問題,但我還沒有找到合理的答案。我目前使用Python進行編程,這是一種解釋性語言。我總是聽說有人在程序中使用多種語言?然後我使用腳本語言聽到他們。在這裏,有人可以用簡單的英語向我解釋我所瞭解的編譯語言和腳本以及地球上人們如何一起使用多種語言之間的區別?這只是沒有任何意義。你如何一起使用編譯的編程語言和腳本語言?

某人如何一起使用JavaScript,PHP和ASP。或者用C/C++編寫遊戲並使用python作爲腳本?這對我來說沒有意義,我認爲它們是不同的語言,所以它們如何與對方發揮作用?

+2

好的問題在錯誤的地方我認爲。去這裏問問http://programmers.stackexchange.com。和語言差異閱讀這個http://stackoverflow.com/questions/17253545/scripting-language-vs-programming-language –

+0

好吧謝謝! – user3712563

+0

沒有單一的方法。你可以讓腳本執行C程序,就像執行命令一樣。你可以在Python中嵌入C代碼,讓它們作爲一個單獨的進程運行,允許你從Python中調用C函數。你可以有一個C進程和一個Python進程通過文件,套接字等進行通信。 – kec

回答

2

How do you use programming languages and scripting languages together?

腳本語言編程語言。您可能會想到腳本/解釋語言的典型替代方法:編譯語言。

I always hear of people using multiple languages in a program

語言有時在源代碼中混合在一起,因爲它們可以。有些語言是建立在舊版本的基礎上的,並且有可以使用舊版本的編譯器。如果您使用C++進行編程,那麼應該可以使用好舊的c語言。大多數C++編譯器還允許您輸入彙編代碼。這樣做的原因可以從一種語言自己無法完成的技術要求(性能等)到程序員僅僅感覺用其他語言解決特定問題更加舒適。即沒有共同的編譯器(或翻譯)

Othertimes語言一起使用,以建立一個單一的節目。這要歸功於可以將它們連接在一起的鏈接器。 DLL庫就是一個很好的例子。我不關心什麼是DLL庫,只要它能夠工作併發布我能理解的API。

有時,不同的語言會生成不同的可執行文件,這些可執行文件不會被鏈接程序連接。但只要他們可以跑步,並相互交流,他們可以一起工作。如果你有一個用java編寫的MP3錄音機和一個用C++編寫的播放器,他們可以一起工作,只需同意一個mp3是什麼。

... explain to me the difference between what I know as programming languages and scripts

編譯語言和解釋型語言,也被稱爲腳本之間的區別,它們是如何運行或執行。任何編譯語言在運行之前都必須進行編譯。解釋的語言不是。這裏有兩件令人驚訝的事情要理解:編譯意味着什麼以及爲什麼需要它。也就是說,爲什麼每種語言都沒有解釋。

編譯語言涉及許多步驟,但它的心臟是把一個TXT文件轉換成二進制文件。這個二進制文件將包含機器碼。機器代碼是您計算機說話的基本語言。這些都是大家都在談論但從未見過的着名的1和0。等一下,我會把它們展示給你。

一個文本文件,是人類的東西可以,如果你正在讀這篇文章,你正在閱讀的TXT文件,現在有實際上記事本(或六,或文字編輯,或者...)讀取。

的二進制文件是什麼,通常看起來像火星人寫的,當你在記事本中打開它。他們是這樣的:

an executable program opened in a text editor

在文本編輯器

這其中大部分看起來像廢話打開一個可執行程序。這是因爲它不是用人類語言編寫的。這是機器語言。這對計算機來說很容易理解。部分原因是因爲記事本認爲它是一個txt文件並試圖將其作爲一個文件呈現。只有可執行二進制文件中的實際txt才能被人讀取。在十六進制編輯器

打開

same executable program opened in a hex editor

相同的可執行程序在這裏,我們可以看到呈現爲一種叫做十六進制表示數量龐大相同的文件。我們顯示這樣的二進制文件,因爲以二進制顯示它們需要更多空間。

hex in calculator

在十六進制模式的計算器進入了數量龐大的小片段。

enter image description here

相同數量的片斷,但在二進制呈現。這裏是你着名的1和0。

如果你回頭看看十六進制編輯器的圖片,你會發現它有它一點東西,你可以讀到,「這個程序不能在DOS下運行」

也就是說文本字符串有已嵌入二進制可執行文件中。這是關於發生了什麼的一個重要暗示。事實證明,txt文件也是二進制文件。每個文件都是二進制計算機中的二進制文件。那真正的區別是什麼?編碼!

編碼是你如何編碼信息。 ascii txt文件使用範圍從0-127的數字。還有其他的txt文件代碼代碼,但ascii是一個流行的代碼。當您編寫腳本或編寫編譯(或解釋)語言的源代碼時,您使用ascii(或unicode或...)編碼信息。

編譯語言確實意味着將此txt文件翻譯成機器代碼文件。當運行時,計算機不會因再次進行翻譯而變慢。機器代碼文件也可以做得更小,因爲它可以更緊湊地編碼信息,編譯器會拋出它不需要的東西,比如變量名稱。

解釋型語言必須在嘗試運行該程序的同時進行相同的翻譯。儘管現代口譯員和虛擬機喜歡吹噓他們如何能夠更快地完成一些事情,但這通常會減慢速度,因爲他們擁有編譯語言所不具備的額外信息

由於計算機越來越快,速度越來越慢隨着越來越多的人採用基於口譯的語言來解決他們的問題,問題越來越少。

由於編譯和解釋之間的差異與源代碼txt文件翻譯成機器代碼的時間有關,您可能仍然想知道這些語言之間的區別是什麼。是什麼讓PHP如此特別以至於它可以被解釋,而C++必須被編譯?

答案不算什麼。對於每種解釋型語言而言,可以想象有人可以編寫一個編譯器來編譯機器代碼並將其作爲文件存儲,然後再運行計算機以避免重複執行該工作。同樣可以想象,有人可以爲每種編譯語言編寫解釋器。那他們爲什麼不呢?一些他們have。 Perl是一種可以編譯的解釋型語言。

當人們談論C++是一種編譯語言時,他們的意思是傳統的運行方式是將源代碼編譯爲機器代碼並執行(運行)機器代碼。即使有人編寫了可以處理C++的解釋器,人們仍然會將C++看作是一種編譯語言,因爲很長一段時間就是這樣,並且仍然是最經常使用的。這是傳統。

How can someone use Javascript, PHP, and ASP together.

PHP和ASP是網站通常都使用服務器端。他們一起使用的最典型的原因是因爲一家商店開始使用它並決定切換到另一個。或者他們確實需要一些第三方解決方案,這些解決方案是在另一方面編寫的,並且發現他們需要支持兩者的開發。 PHP可以支持網站上的一個頁面,而ASP則支持另一個頁面。

兩者都可以很容易地使用JavaScript。 JavaScript運行在客戶端。它的一部分甚至可能是由服務器端PHP或ASP編寫的。

Or program a game in C/C++ and use python as scripts? 我從來沒有使用過c/C++和python,但我會告訴你我已經使用perl和java在一起。我們使用perl在eclipse中自動設置我們的java項目。

不同的語言對解決某些類型的問題更好。對於需要強大文本處理的小型項目,Perl非常適用。對於需要可靠方法來解決依賴關係和控制複雜性的大規模多開發人員項目,Java非常適用。

您可能認爲沒有翻譯員,兩種語言不應該能夠相互溝通,但編程語言會使程序執行工作。只要一切工作正確而一致,他們實際上並不需要彼此交談。那麼,除非這是他們的工作:)

事實上,我敢打賭,你現在使用的計算機有很好的資金,它們有運行和使用多種語言編寫的程序。

+0

由於每個十六進制數字都是4位,因此不會在二進制中顯示可執行文件佔用四倍空間作爲十六進制? –

+2

是的。空間比例實際上比當你考慮組合數字所需的空間時更差。這就是爲什麼,儘管計算機中的每一塊信息都處於1和0的大部分時間,但您看到它們是某個藝術家參與的時候。很少有人直接在1和0的工作。他們學習讀取十六進制並保存屏幕空間。 – CandiedOrange