https://en.wikipedia.org/wiki/Compiler [wikipedia.org] In computing, a compiler is a computer program that translates computer code written in one programming language (the source language) into another language (the target language). The name "compiler" is primarily used for programs that translate source code from a high-level programming language to a low-level programming language (e.g. assembly language, object code, or machine code) to create an executable program.
あと「the binary representation of a computer program which is actually read and interpreted by the computer」への変換という意味を厳密に解釈すると、通常のCコンパイラでさえコンパイラ扱いから外れますよ。 UNIX/Linux 上のコンパイラは通常 machine code を吐くわけではなく、アセンブラのソースコードを吐きますから。
[2] Compilers: Principles, Techniques, and Tools by Alfred V. Aho, Ravi Sethi, Jeffrey D. Ullman - Second Edition, 2007(表紙がドラゴンであることで有名な本)の1ページ目
[3] SUDARSANAM, ASHOK; MALIK, SHARAD; FUJITA, MASAHIRO (2002). "A Retargetable Compilation Methodology for Embedded Digital Signal Processors Using a Machine-Dependent Code Optimization Library".
コンパイル? (スコア:0)
ソースコードを機械語に変換することをコンパイルって言うんですよね
https://dictionary.cambridge.org/dictionary/english/compile [cambridge.org]
tsはjsに変換するんだからコンパイルではなくね?
Re:コンパイル? (スコア:0)
> ソースコードを機械語に変換することをコンパイルって言うんですよね
> https://dictionary.cambridge.org/dictionary/english/compile [cambridge.org]
Cambridge Dictionary は一般の辞書であって、IT用語の正確性については一歩劣ると思います。
こういうのは英語Wikipediaの方がむしろ正確で、そっちを見ると
https://en.wikipedia.org/wiki/Compiler [wikipedia.org]
In computing, a compiler is a computer program that translates computer code written in one programming language (the source language) into another language (the target language). The name "compiler" is primarily used for programs that translate source code from a high-level programming language to a low-level programming language (e.g. assembly language, object code, or machine code) to create an executable program.
日本語のWikipediaも英語版Wikipediaと同様な定義です。
https://ja.wikipedia.org/wiki/%E3%82%B3%E3%83%B3%E3%83%91%E3%82%A4%E3%83%AB [wikipedia.org]
コンパイル
(IT用語)高水準のプログラミング言語で書かれたプログラムをそれより低い水準の言語や機械語に変換すること。
となっています。
こっちの定義なら TypeScript から JavaScript への変換もコンパイルで問題ありません。
もちろん Java のソースコードから Java VM のバイトコードへの変換もコンパイルです。
Re: (スコア:0)
Wikipediaは二次ソースだと思うんですが一次ソースはどこから持ってきたものなんですか?
Re: (スコア:0)
Wikipedia のこの部分の記述には出典らしきものがないみたいなので(探し方が悪いかも?)
たぶん米国の Computer Science 系学科で習う内容そのまんまなのではないかと。
たとえば適当にググって出てきたブラウン大学 Computer Science 学科の講義資料がこれ
https://cs.brown.edu/courses/csci1260/spring-2021/lectures/what-is-a-c... [brown.edu]
A compiler is a program that takes in source code written in one language
(called the source lang
Re: (スコア:0)
たぶん米国の Computer Science 系学科で習う内容そのまんまなのではないかと。
プリンストン大学では違うみたいですよ
https://introcs.cs.princeton.edu/java/82compiler/ [princeton.edu]
Re: (スコア:0)
> プリンストン大学では違うみたいですよ
URLからわかるとおり、これは Java の講義のようで
Java VM byte code は machine language code (for some machine architecture) 扱いだし
javac はコンパイラ扱いです。
つまり machine language code は仮想機械の実行コードも含むわけです。
そして現代のブラウザでは JavaScript は JavaScript 仮想機械の実行コードであると見なせますから
そういう意味で machine language code 扱いでもいいわけですし
TypeScript もコンパイラでいいことになるのでは?
Re: (スコア:0)
そして現代のブラウザでは JavaScript は JavaScript 仮想機械の実行コードであると見なせます
これはあなたの感想ですよね
Re: (スコア:0)
> そして現代のブラウザでは JavaScript は JavaScript 仮想機械の実行コードであると見なせますから
この解釈が許されるなら人間が読めるソースコードも仮想機械の実行コードと見做せるから
最初からmachine codeからmachine codeの変換でしかなくなってしまうんだよね
そしてこれはmachine codeの定義と矛盾するので誤りとなる
https://en.wikipedia.org/wiki/Machine_code [wikipedia.org]
Re: (スコア:0)
そしてemacsは環境である。
Re: (スコア:0)
> この解釈が許されるなら人間が読めるソースコードも仮想機械の実行コードと見做せるから
いやいや、さすがに virtual machine が直接実行できないコードを仮想機械の実行コードとは呼べないでしょう。
あと「the binary representation of a computer program which is actually read and interpreted by the computer」への変換という意味を厳密に解釈すると、通常のCコンパイラでさえコンパイラ扱いから外れますよ。
UNIX/Linux 上のコンパイラは通常 machine code を吐くわけではなく、アセンブラのソースコードを吐きますから。
問題は JavaScript ほどに高級な
Re: (スコア:0)
利用者がある程度いるTypeScriptやRubyの人が定義を拡大したいだけだよね、それ
ただのポジショントークだな
Re: (スコア:0)
> 利用者がある程度いるTypeScriptやRubyの人が定義を拡大したいだけだよね
そうじゃないです。
https://www.hanselman.com/blog/javascript-is-assembly-language-for-the... [hanselman.com]
の「it is a little closer to the mark to say」以降の部分にありますが(以下DeepLによる和訳)、
> JavaScriptがウェブのVMである、と言った方が少し的を射ている。
> 私たちはずっとJavaのJVMがウェブのVMになると思っていたが、JavaScriptであることがわかった。
> JavaScriptのパーサーは、JVMのバイトコード・ベリファイアよりも効率的にコード・セキュリティを提供している。
Re: (スコア:0)
じゃあJavaScriptの人が定義を拡大したいだけだね
ポジショントークであることにかわりはない
Re: (スコア:0)
傍から見てると、それそんなに議論してまで決着せにゃならんことなの……コンパイルで大体意味通じるんだからいいじゃんとか思いますね。
トランスパイラをコンパイラと呼んだらプログラムが異常動作するとか暴走するとかあるんですかね。
正直、その議論に消費する時間を他のことに回したらいいんじゃないかなぁ……と思います。
Re: (スコア:0)
傍から見てると、それそんなに議論してまで決着せにゃならんことなの……コンパイルで大体意味通じるんだからいいじゃんとか思いますね。
トランスパイラをコンパイラと呼んだらプログラムが異常動作するとか暴走するとかあるんですかね。
正直、その議論に消費する時間を他のことに回したらいいんじゃないかなぁ……と思います。
と言いつつ参戦してしまう何でもコンパイル派
コンパイラをトランスパイラと呼んだらプログラムが異常動作するとか暴走するとかあるんですかね。
Re: (スコア:0)
> 傍から見てると、それそんなに議論してまで決着せにゃならんことなの……
> コンパイルで大体意味通じるんだからいいじゃんとか思いますね。
自分は #4526846 ですが同感で
コンパイラって呼ぶのが嫌な人がいるのは分かるけど
現状見る限り、もはやコンパイラって呼んでもいいじゃんくらいの立ち位置です。
ちなみにそういう立ち位置にいる理由は、初期のC++コンパイラ (cfront) が
実体は C++ to C のトランスレータだったという知識も影響してますね。
→ https://ja.wikipedia.org/wiki/Cfront [wikipedia.org]
高級言語 to
Re: (スコア:0)
言葉は生き物って主張なら、本来の意味に戻ることもまたありうることだから別にいいじゃん
むしろトランスレータって言い方があるんだったら無理に同一化する必要はないだろう
厳格に分けた方が文章が論理的でなくとも意味が伝わるという利点もあることだし
Re: (スコア:0)
えぇぇ……いきなりレッテル貼られたんですけど。
私はどっちでも良い派ですよ。一々使い分けるとか面倒くさい。ただどうでも良い話でスレが長くなっているから口を挟んだだけで。
トランスパイラって呼び分けるのが一般化したなら、それに合わせますよ。今はそうじゃないだけで。
お願いですから話の流れを見てから発言してくれませんか。一番最初の発言が「コンパイラは用語として間違いじゃない?」から始まっているので「別にコンパイラでも良いじゃん(どっちでも意味通じるんだし)」と発言しただけです。用語として正しいとか本気でどうでも良いので。コンパイルと呼べ!って強制した覚えもないですし。
>コンパイラをトランスパイラと呼んだらプログラムが異常動作するとか暴走するとかあるんですかね。
もしこれを気の利いた返しをしたと思ってるなら、少し考え直した方がよいですよ。
まず話の流れを読むようにしましょう。フローチャート眺めるのと同じですよ。
Re: (スコア:0)
初期のPascal(1970年代)は機械語でなくPコードを出力してたけど、当時からコンパイラ型言語に分類されてたよ
Re: (スコア:0)
Wikipedia のこの部分の記述には出典らしきものがないみたいなので(探し方が悪いかも?)
デスクトップ版表示ならその文に3つ出典がつけられていることが分かります。
Re: (スコア:0)
[2]の初版の訳書にはこう書かれています。
コンパイラは,簡単にいうと,ある言語で書かれたプログラムを読み込んで,
それを等価な別の言語のプログラムに翻訳するプログラムである.
前者の言語を原始言語,後者の言語を目的言語とよぶ.
(略)
目的言語も同様で,別のプログラム言語のこともあれば,機械語のこともある.
Re: (スコア:0)
Wikipediaは三次ソースです。