タグ

コンパイラに関するItisangoのブックマーク (19)

  • C++でうっかり無限ループを書くと鼻から悪魔が出てくる - Qiita

    C++で副作用のない無限ループを書くと未定義動作になります。 「未定義動作」というのは口に出すだけでC++プログラマーを震え上がらせる力を持った言葉です。「鼻から悪魔が出てくる」という言葉で説明されるように、未定義動作を含むコードを実行した結果は何も保証することができず、バグの発見やデバッグすら困難にさせます。未定義動作下においてはコンパイラの気分によってコード片が消え、trueとfalseが同時に成立し、タイムトラベルを引き起こします1。 そのためC++ではうっかり未定義動作が埋め込まれないよう注意が払われるのが普通です。 さて、以下のC++のコードは未定義動作を引き起こします。 下の例は実際にclang/LLVMで最適化を有効にしてコンパイルするとでたらめな値を返す関数ができました。 この話をしたところ、何人かに驚かれたり異論を受け取ったりしたので、この話題について少しまとめてみました

    C++でうっかり無限ループを書くと鼻から悪魔が出てくる - Qiita
  • もしコンパイラを全世界で同時にうっかり削除してしまったら、元の状態に復旧できるのだろうか?|Rui Ueyama|note

    思考実験として、全世界の人が同時に、自分の持っているコンパイラやインタープリタなどの実行ファイルをうっかり全部消してしまったとしよう。そうするとそれ以降、ソースコードが残っていても、コンパイラ自身も含めてどのようなプログラムもコンパイルできなくなってしまう。この状況から人類は元のコンピュータ文明を復旧することができるのだろうか? 僕は結論としては、かなり簡単に復旧できると思う。ここではその手順についてちょっと考えてみよう。 コンパイラのバイナリファイルが全部消えてしまった後、復旧のために目指すべきマイルストーンは、おそらくCコンパイラを元に戻すことになるだろう。Cで書かれたプログラムはOSやコンパイラ自身を含めてたくさんあるので、そこを起点にすれば、たくさんのプログラムを芋づる式に復旧していけるからだ。 ほとんどのCコンパイラはCかC++で書かれている。最近のGCCやClangは巨大かつC

    もしコンパイラを全世界で同時にうっかり削除してしまったら、元の状態に復旧できるのだろうか?|Rui Ueyama|note
  • プログラミング言語「Kuin」 - くいなちゃん

    Kuinのダウンロードと紹介 2024年07月01日くいなちゃん 簡単で高速な実用プログラミング言語「Kuin」です。 以下は、実行環境に依らない共通のページです。 Kuinのダウンロードと紹介 Kuinのソースコード Kuinの更新履歴 Webブラウザ上でコンパイルできるKuin 言語仕様 Kuin言語仕様1 命名と予約語 Kuin言語仕様2 型とリテラル Kuin言語仕様3 演算子 Kuin言語仕様4 変数と関数 Kuin言語仕様5 文とブロック Kuin言語仕様6 列挙型 Kuin言語仕様7 クラス Kuin言語仕様8 組み込みメソッド Kuin言語仕様9 スコープとファイル Kuin言語仕様10 その他の構文 Kuin言語仕様11 コンパイラとIDE Kuin言語仕様12 Kuin略語辞典 Kuin言語仕様13 Kuinコンパイルエラー Kuin言語仕様14 Kuin例外コード K

  • OpenJDKは使い物になるか?OpenJDKの実際と今後 (NTTデータ オープンソースDAY 2015 Autumn 講演資料)

    OpenJDKは使い物になるか?OpenJDKの実際と今後 (NTTデータ オープンソースDAY 2015 Autumn 講演資料)

    OpenJDKは使い物になるか?OpenJDKの実際と今後 (NTTデータ オープンソースDAY 2015 Autumn 講演資料)
  • Cクイックリファレンス 第2版

    書はプログラミング言語Cの機能を網羅したリファレンスです。言語仕様やライブラリはもちろんのこと、コンパイラやデバッガ、make、IDEまで、およそCプログラミングに関わる事項すべてを網羅します。最新のC11に準拠していますが、歴史的背景や古い時代に使われていた文法にも触れています。日語版では可能な限りコード例をESCRコーディング規約に従うように書き直し、高品質なコードを書く上での参考となるようにしました。書はその質、量ともに、C言語リファレンスの決定版です。 日語版まえがき まえがき 第Ⅰ部言語 1章 言語の基 1.1 Cの特徴 1.2 Cプログラムの構造 1.3 ソースファイル 1.4 コメント 1.5 文字集合 1.6 識別子 1.7 Cコンパイラの働き 2章 型 2.1 型分類 2.2 整数型 2.3 浮動小数点型 2.4 複素浮動小数点型 2.5 列挙型 2.6 型vo

    Cクイックリファレンス 第2版
  • コラッツの問題を用いた難読化は脅威なのか | 一生あとで読んでろ

    TL;DR: ソフトウェアの多くは外部からの入力に依存する実行パス(trigger-based code)をもつ. これを記号的実行(symbolic execution, シンボリック実行)などの解析手法から隠蔽する手法として,コラッツの問題を用いた線型難読化(linear obfuscation)がある[1]. 稿ではしかし,線型難読化されたコードはコンパイラ最適化によってある程度除去できることを示す. コラッツの問題 コラッツの問題は数論の未解決問題のひとつである. 任意の1でない自然数nに対して,nが偶数ならば2で割り,nが奇数ならば3倍して1を足す.この操作を繰り返していくと,どのような自然数nから出発しても,有限回の操作のうちに必ず1に到達する. この定理は経験則的に正しいと考えられているが,いまだ証明はなされていない. 線型難読化 たとえば次のプログラムtr.cは外部からの

    コラッツの問題を用いた難読化は脅威なのか | 一生あとで読んでろ
  • 夏のインターン講義「1営業日で書くJavaScriptコンパイラ」の設計と実装 - クックパッド開発者ブログ

    今年、クックパッドでは夏のインターンと題して20名弱のインターンを受け入れました。 このインターンは前半と後半に大きく分かれており、 後半が社員に混じって業務をするいわゆる普通のインターンで、 前半は7日間にわたってプログラミング関連の講義を受けるという仕組みです。 わたし(青木)はその前半の過程において、「プログラミングパラダイム」という 1 日の講義を担当し、 JavaScriptの処理系を書くという、ツッコミどころの多い課題を実施しました。 稿では、その講義を開発する際に考慮したこと、特に難易度調整についてお話しします。 また講義のために開発したJavaScript処理系「JetSpider」についても軽くふれます。 ▼講義資料 Cookpad Summer Intern 2015 - Programming Paradigm from Minero Aoki JetSpiderコ

    夏のインターン講義「1営業日で書くJavaScriptコンパイラ」の設計と実装 - クックパッド開発者ブログ
  • Unix v6 の C コンパイラが面白かった話 - 兼雑記

    Unix v6 の C コンパイラをいじってみようと見てたのですが、これがなかなかすごい物体でした。 読んでて、「いやいくらなんでもこんな作りなわけが…」と思って説明文を探して、 http://plan9.bell-labs.com/7thEdMan/v7vol2b.pdf の「A Tour through the UNIX C Compiler」に説明あるよと教えてもらって読んでみたら、当にそんな作りだった、みたいな。 コンパイラの1段目はプリプロセスして構文木的なものをファイルに吐いて終わりです。2段目は構文木を読みつつコード生成していく。 構文木のノードの種類に対して switch してやること決める…的なものが、データドリブンな方法で書かれてます。データを保存するフォーマットは、 JSON とかではなく、時代が時代ですのでアセンブリです。こういうやつ https://github

    Unix v6 の C コンパイラが面白かった話 - 兼雑記
  • Big Sky :: Goプログラマであるかを見分ける10の質問

    下記質問にそれぞれ50文字以内を目安に簡単に説明すること。 パッケージ内に定義した関数を外部に公開するにはどうすれば良いか? 非同期に処理を行う為の命令は? 関数を抜けた際に処理を実行するにはどうするか? goroutineの同時実行数を変更するにはどうするか? コンパイラやリンカが8g/6g/5g、8l/6l/5lという名前になっている理由は? Goのガベージコレクションの実装は一般的に何と呼ばれている類か? レシーバがnilの場合にメソッドを呼び出すと何が起きるか? 可変個引数はどの様に定義するか? 関数内で定義されるローカル変数のアドレスを戻り値として外部から参照するとどうなるか? interfaceとstructの違いは何か? panicを補足して強制終了させない為にはどうするか? 答え パッケージ内に定義した関数を外部に公開するにはどうすれば良いか? 関数名の先頭を大文字にします

    Big Sky :: Goプログラマであるかを見分ける10の質問
    Itisango
    Itisango 2013/10/15
    “パッケージ内に定義した関数を外部に公開するにはどうすれば良いか?→関数名の先頭を大文字にします。”
  • きつねさんでもわかるLLVM - 達人出版会

    内容紹介書は趣味でLLVMを触っている著者二人のLLVMをもっと普及させていきたいと思いから生まれたLLVM解説です。 LLVMは今非常に注目されていますが、度重なるAPI仕様の変更や公式ドキュメントの充実さなどが理由で、まとまった解説がなされたものはありませんでした。書によりまとまった情報が日語で手に入るようになり、多くの方にLLVMを知って頂けると幸いです。 書ではLLVMを使用したコンパイラの作り方を順を追って説明しLLVMへの理解を深めてもらおうというのがコンセプトになっています。フロントエンド(中間表現出力まで)、ミドルエンド(最適化)、バックエンド(オブジェクト生成)と幅広く解説していますので多くの方に有用な内容を含んでいるのではないでしょうか。 LLVMの用途は多岐にわたり,書では解説できていない部分もありますが,初心者向けの情報としてLLVMを利用するための基礎

    きつねさんでもわかるLLVM - 達人出版会
  • GCC 4.7、並列プログラミング技術「Cilk Plus」導入 | エンタープライズ | マイコミジャーナル

    The GNU Compiler Collection includes front ends for C, C++, Objective-C, Fortran, Java, and Ada, as well as libraries for these languages. 開発段階にある「GCC 4.7」に「Intel Cilk Plus」のマージが開始されたことが発表された。Cilk Plusは並列プログラミングを実現するための言語拡張。マルチコアやベクタプロセッサにおいてタスクパラレルプログラミングやデータパラレルプログラミングを可能にするための機能を提供している。 Cilk Plusの特徴は学習すべき内容が少ないためすぐに習得できること、追加されるキーワードは3つだけであり扱いやすいこと、配列関連の機能が拡張されており、より少ない記述で配列関連の操作を実施できること、効率の高い並

  • LLVM - Wikipedia

    LLVM(エルエルヴィーエム、 またはエルエルブイエム)とは、コンパイル時、リンク時、実行時などあらゆる時点でプログラムを最適化するよう設計された、任意のプログラミング言語に対応可能なコンパイラ基盤である。当初は、LLVMの名称の由来は、Low Level Virtual Machine (低水準仮想機械) の略であるとしていたが[3]、現在は、何の頭文字でもないとしている[4]。 概要[編集] LLVMは、プラットフォームに依存しない中間表現であるLLVM-IRを生成し、LLVM-IRを特定のマシンの機械語などに変換する。LLVM-IRの段階で、言語やプラットフォームとは独立した最適化を行う。この方法によってLLVMは言語からもアーキテクチャからも独立しており、それぞれに特化した、プログラミング言語固有のモジュールと、マシン向けコード生成部を用意することにより様々な言語アーキテクチャーに

  • C# リファレンス

    このセクションでは、C# のキーワード、演算子、特殊文字、プリプロセッサ ディレクティブ、コンパイラ オプション、およびコンパイラのエラーと警告に関する参考資料を紹介します。 このセクションの内容 C# のキーワード C# のキーワードと構文に関する情報へのリンクを示します。 C# 演算子 C# の演算子と構文に関する情報へのリンクを示します。 C# 特殊文字 C# のコンテキスト特殊文字とその使用方法に関する情報へのリンクを提供します。 C# プリプロセッサ ディレクティブ C# ソース コード内に埋め込むためのコンパイラ コマンドに関する情報へのリンクを提供します。 C# コンパイラ オプション コンパイラ オプションとその使用方法について取り上げます。 C# コンパイラ エラー C# コンパイラのエラーや警告の原因と修正法を示すコード スニペットを示します。 C# 言語仕様 C# 6

  • コンパイラの本: なつたん

    誰も作ってくれなかったので、自分でまとめてみた。 目次からざくっと拾っただけなので、間違いあるかも。を買うときは自分で中身確認してくださいね。 ドラゴンブック、タイガーブック、中田先生の、optimizing compilers modern architecturesの4冊は、コンパイラで使われる技術について、最適化まで含めてひととおり書いてある。 あとは作ってみよう系で適当にまとめた。当は「○○という最適化が載ってる載ってない」までまとめたいけど、まだそこまで理解が進んでない。

    コンパイラの本: なつたん
  • Island Life - 「Cで書くコードの方がCommon Lispで書くより速いって人がいたら、それは彼のCの技量が高すぎるってことだね。」

    About 南の島のプログラマ。 たまに役者。 Practical Schemeの主。 WiLiKi:Shiro 最近のエントリ 無限cxr高校受験Defense振り返ってみると2019年は色々学んで楽...覚えるより忘れる方が難しい(こともある)眼鏡のつると3DプリンタIris Klein Acting ClassSAG-AFTRA conservatory: Voice Acting創作活動って自分を晒け出さねばならないと...ループを使わずに1から100までMore... 最近のコメント shiro on 歳を取ると時間が速く過ぎるのは、新しいことに挑戦しないから? (2023/03/14)1357 on 歳を取ると時間が速く過ぎるのは、新しいことに挑戦しないから? (2023/03/01)ベアトリーチェ on ハイポハイポハイポのシューリンガン (2022/04/02)ベアトリーチ

    Island Life - 「Cで書くコードの方がCommon Lispで書くより速いって人がいたら、それは彼のCの技量が高すぎるってことだね。」
  • SECDマシン - Wikipedia

    SECDマシンとは、関数型言語のコンパイラのターゲット(目的機械)を意図し、後に大きな影響を与えた抽象機械である。SECD は Stack(スタック)、Environment(環境)、Code(コード)、Dump(ダンプ)の略であり、それぞれ仮想機械にあるレジスタの名称となっている。これらのレジスタはメモリ上の連結リストを指している。 Peter J. Landinの考案によるもので、1964年のComputer Journal誌が初出である。ラムダ計算式を評価するものだが、Landin の発表した説明は非常に抽象的で、(操作的意味論のように)実装にかなりの自由度が与えられていた。SECDマシンはより詳細化された形態で説明されることが多く、例えば Peter Henderson の Lispkit Lisp コンパイラは SECDマシンをベースとして1980年に登場している。以降、いくつか

  • GCC開発者ら、GCCの開発にC++を導入することを決定、利用する機能を制限して複雑さを軽減 | OSDN Magazine

    コンパイラ「GNU Compiler Collection(GCC)」の開発者は5月30日、開発元のFree Software Foundation(FSF)とGCC Steering CommitteeがGCCでのC++利用を承認する決定を下したことを発表した。目的は「ユーザーに優れたコンパイラを提供するため」とし、「GCCをC++コードベースにすることが目的ではない」と説明している。 GCCはCおよびC++Javaなど多数の言語に対応するコンパイラ。GCCそのものはCで実装されているが、これからはC++による機能実装も許可される。ただし、C++に精通していないGCC開発者に配慮するため、利用するC++の機能に制限を設けるべきだとGCC開発者は記している。その後、適切だと判断されれば利用できる機能を拡充していくという方針を提案している。 GCCの開発者であるMark Mitchell氏

    GCC開発者ら、GCCの開発にC++を導入することを決定、利用する機能を制限して複雑さを軽減 | OSDN Magazine
  • コンパイラを作ってみて - 七誌の開発日記

    コンパイラ開発(id:n7shi:20090310)を通して物の見方がどう変わったかについて書いてみます。一般的な見解(と私が認識しているもの)、私の見解(過去・現在)などの視点が入り乱れるため、箇条書きを中心に記述します。何かを主張しようとしているわけではないので、特に結論のようなものはないことを、あらかじめ断っておきます。 【追記】私が作成したコンパイラはSilverlight上で動作確認できます。 ⇒ id:n7shi:20090727 アセンブラ アセンブラをいじることに対する一般的な見解(と私が認識しているもの) コンピュータの動作についてよりよく理解するため。 カリカリにチューニングするため。 これらに対して以下のような意見があります。 CPU内部で更にマイクロコードに分解されるのだから、アセンブリだけ見ていてもパイプラインの動作などは分からないし、不十分 これはその通りなので

    コンパイラを作ってみて - 七誌の開発日記
  • Go言語は良い言語です - Yet Another Ranha

    http://atnd.org/events/2115 というイベントがありました。11月14日に、Google渋谷オフィスでありました。 まずはじめに、Googleさんには場所を提供してもらった上にGoogleの中の人にも参加してもらって結果盛り上がったので当にありがとうございましたとしか。ありがとうございました。 で、次に、Go言語のマスコットキャラクターの名前は一部の賛同を得て勝手に「たわしくん(TAWASHI-KUN)」という事にしておきました。ダメだと思います。でもなんという名前なんでしょう。 今調べると、ちゃんと名前があったので、駄目です。 (http://japan.cnet.com/special/story/0,2000056049,20403390,00.htm) 取りあえずgoコンパイラ(8g)が落とせたかどうかですけどまぁ落とせませんでした。 どういう方向で攻めた

    Go言語は良い言語です - Yet Another Ranha
  • 1