CoffeeScriptは、Rubyに着想を得た簡潔な構文でJavaScriptに変換する言語です。パフォーマンスに妥協することなく、より読みやすいコードを可能にするCに移行する同様の言語はありますか?そのようなものが存在しない場合、それを作成しない理由はありますか?
CoffeeScriptは非常に単純な理由でJavaScriptにコンパイルされます。JavaScriptは事実上のクライアント側言語であり、ブラウザーベンダーが提供するすべてが代替構文である場合に、CoffeeScriptをネイティブでサポートすることを期待するのは不合理です。
ほぼすべてのプラットフォームに対応するCコンパイラと豊富なCライブラリがあるため、非常によく似た方法で、高水準言語からCトランスレータへの主要なポイントは即時移植性です。 Vala は、たとえば 設計された でした:
GNOMEは伝統的にC指向のプロジェクトであり、GObjectは特にCで記述されているため、友好的な性質(および構文)に関係なく、Valaがマシンコードにコンパイルされたとしても、GNOME開発者の間で大きな愛着は見られません。他の言語 Genie がそれを改善するために構築されたという点まで、誰もが構文を気に入っているようではありませんでした。
C++の例では、Facebookが開発した HipHop 、a PHPからC++へのトランスレータです。CPU使用率という非常に具体的な問題を解決するために、すべてを置き換える必要はありませんでした。 PHPコードを作成し、エンジニアを再トレーニングします(または最悪の場合、それらを置き換えます)。これははるかに具体的な例です。Facebookのスケーラビリティの問題は、非常にユニークであり、中間者へのアクセス権を持っています。 PHP拡張機能はCおよびC++で記述されているため、C++コードは有用です。
したがって、高水準言語から別の言語へのトランスレータは、中間コードへのアクセスが必要な場合に主に役立ちます。 CoffeeScriptの場合、ブラウザーが広く採用されているためJavaScriptコードが必要であり、Vala、Genie、およびHipHopの場合は既存のコードベースが必要です。明らかに、中間コードにアクセスできるということは、必要に応じてさらに最適化できることを意味します。
しかし、一般的に言えば、Cに翻訳する言語や他の言語を構築することは、そうしなかったとしても、あまり良い考えではありません。結果のコードを使用します。 Cに対応できない場合は、他の言語を選択してください。偶然にも、Bjarne Stroustrupによって作成された最初のC++コンパイラであるCFrontは、Classes to Cトランスレータを備えたCでしたが、それは主に、新しい言語として bootstrap C with Classesを実行できないためでした。
私はいくつかのポイントをカバーするつもりです Yannis Rizos 彼のそうでなければ素晴らしい答えにはありませんでした。
はい、多くの言語が存在します。 Cは非常に移植性が高く、大幅に最適化されているため、コンパイラバックエンドの一般的なターゲットですが、LLVMではあまり意味がありません。
これを行うことがわかっているいくつかの実装は次のとおりです。
オリジナルのCプログラムと同じ速さ
いいえ、それは中間言語としてCを使用しているからといって、その速度に到達するという意味ではありません。 Cが高速である理由は、他の言語では明らかに異なるコードの記述方法のためです。これは単なるポータブルアセンブリであり、特別なものはありません。
OCamlは、バイトコードやネイティブコードにコンパイルしたり、直接解釈したりできます Cにコンパイルできます 。