タグ

ブックマーク / ufcpp.wordpress.com (41)

  • Roslyn コンパイラー仕様

    まだ pull-req 通ってないんですが、Roslyn リポジトリ上にこんなものが。 https://github.com/dotnet/roslyn/pull/536 コンパイラー仕様のドキュメント化、始めました。 “コンパイラー仕様” コンパイラーを作っていると、標準化されている言語仕様では不十分な仕様ってものがどうしても出てきます。C# コンパイラーにもいくつかそういうものがあるんですが、「オープン化したんだからそういう隠れ仕様もドキュメント化しないとダメだよね」という感じで、その手始めに、コンパイラーチームの内部 OneNote で書かれていた仕様を .md 化してリポジトリに追加しようとしているみたい。pull-req が通った暁には、/docs/compilers フォルダー以下にこういう “コンパイラー仕様” が並びます。 具体的にどういうものをドキュメント化しようとしてい

    Roslyn コンパイラー仕様
  • C# 7に向けて(9): Method Contracts

    今 issue ページができてて大きめのものはこれが最後のはず。Method Contracts。メソッドに対する「契約」。 Proposal: Method Contracts #119 結構長かった… 結局、全9回に。今後は、「週刊ブログ」程度でよくなるはず。きっと。 契約プログラミング そもそも「contracts」とは何か的な話は、昔書いたスライド貼って済まそう。 (補足: このスライドでは非null制約を例に挙げて説明していますが、非null制約は契約でやるよりも、「非null参照型」を作る方がいいと思います。C# 7向けの提案の中にはこの「非null参照型」も含まれています。) 一応、.NET 4の頃から、ライブラリとツールでのサポートはありました。 This file contains bidirectional Unicode text that may be interp

    C# 7に向けて(9): Method Contracts
  • C# 7に向けて(2): 性能と信頼性

    C# 7の提案のうちいくつかを見た瞬間、思ったのは「C++ 11みたい」でした。 まあ、背景には、年々C#の適用範囲が広がっていること、そして、オープンソース化に伴って今後はさらに広がるであろうことがあります。 ゲーム開発の標準言語と言えばC# その広がった先の1つはゲーム開発でしょう。「ゲーム開発の標準言語と言えばC#」なんていう煽り(わりかしほんとに「煽り」ではあると思う。「話題にならないよりは炎上する方がマシ」くらいの覚悟の上の)もあります。まあ、割かし昔から、ゲーム開発者にもC#好きな人はいて、ゲーム会社の社内ツールなんかはC#で書かれることが結構あったみたいです。しかし、「ゲーム自体を」となると、これは割かし最近の話。「XNAがあったし(震え声)」と小声で主張もしたいところですが、実際のところ、割かし皮肉なことに、「C#でゲーム開発」が注目を浴びるようになったのはUnityのおか

    C# 7に向けて(2): 性能と信頼性
  • C# 7に向けて(1): 変数やフィールドの書き換え

    プログラムを書くときに、「値が書き変わらないことの保証」(不変性)がほしいことは結構あります。 C# だと、現状(6も含めて)では、const 修飾と、フィールドに対する readonly 修飾くらいしかなくて不便に思うことがありました。 もちろん課題があるからこそのこの現状なんですが、C# 7では、「less ambitious」(野心を抑えて。妥協的)でも、もう少し不変性の保証を増やそうという提案がされています。 Proposal: ‘readonly’ for Locals and Parameters #115 Proposal: Immutable Types #159 readonly は「浅い」不変性 「変数や引数にもreadonlyを付けれるようにしてくれ」という要望は昔からあるものの、これまでやらなかった理由は単純で、そこまで有用でもないから。有用は有用だと思うんですけど

    C# 7に向けて(1): 変数やフィールドの書き換え
  • サロゲートペア識別子

    C#は、識別子に使える文字をUnicodeのカテゴリーで判別しているわけですが。「○○Letter」カテゴリーなものはおおむね識別子に使えます。 𩸽(ほっけ) Letterなのに使わしてもらえないかわいそうな文字もあるわけですが。 𠮷(U+20BB7、下の線の方が長い吉)とか、𠮟(U+ 20B9F、口偏に七の「しかる」)とか、𩸽(U+29E3D、魚の「ほっけ」)とか。いわゆる、サロゲートペア文字。char型が16ビットのC#とかJavaでは結構はまるやつ。 現状のC#は、サロゲートペアの識別子を一切認めていません。Roslynの実装でもそう。 ということで、こいつを見てくれ。 http://ideone.com/jSRfqm using System; class Program { static void Main() { var ᛊ = 2; // ルーン文字識別子。Other

    サロゲートペア識別子
  • 今から始める、Windows 10&新.NETへの移行戦略

    変わらない 聞いてた方からの感想で「『変わらなくていい』なんですね(笑)」などというお言葉もいただきまして。 まあ、僕個人の意見は元々、「使いたくないやつが使う必要はない。」「LINQもvarも、使う・使わないとかで論争すること自体どうでもいい。」「でも、使いたいやつに使わせないような統制取るやつは滅びろ。」ですからね。もちろん、コードレビューなんかで「LINQ使うとこれだけシンプルになるよ」→「そっちの方がいいですね」ってような流れはあるけども、強制するものではないと思う(11ページで書いているように、privateな部分のコードはうるさく言ってもしょうがない。LINQやvarはそのprivateな部分の機能)。 選べる自由が大事。選ばせないやつは気で滅びろ。 変えれない 開発者の声としてよく聞くのは「変えたいんですけどもなかなか大変で」ってやつです。みんなほんとは新しいもの使いたい。

    今から始める、Windows 10&新.NETへの移行戦略
  • __makerefとか__arglistとか

    知る人ぞ知る機能の説明、今更追加。 http://ufcpp.net/study/csharp/sp_makeref.html 一応、C# 1.0の頃からあるけども、仕様外・ドキュメント一切なし(C#の仕様書にも書かれてないし、当然、標準化資料にも書かれてない。MSDN等の言語リファレンスにも説明なし)の隠し機能。かろうじて、「それ、仕様外の機能だよ」warningメッセージの解説ページ内に __arglist の文字が出てくる程度です。 みんな、どこでこんな隠し機能のこと調べてくるんだろう?(こんなどこにも説明のない機能なのに、なぜかStackOverflowとかには詳細に調べてる人がいる) 仕様外の機能だし、今まで書くかどうか迷ってて結局書いてなかったものの、思えば、COM特別扱い(COM限定のref省略とか引数付きプロパティとか)と比べたら大差ないなと思って記事化してしまうことにしま

    __makerefとか__arglistとか
  • WPF の {Binding Path=/}

    昨晩、こんな話が: コレ クションをバインドした時に何が起きているか WPFのBindingのPathの解決は結構複雑なことをしております。何のせいでそんなに複雑になるかというと、「マスター詳細シナリオ」とか言う概念のせいだったりします。 マスター詳細シナリオ 以下のページ参照: データ バインディングの概要 (ページ内を「マスター詳細シナリオ」で検索すれば該当箇所に) IsSynchronizedWithCurrentItem プロパティ DataContextに何かコレクションを与えた上で、選択項目の詳細を見たいという場合があります。こういう状況を指して「マスター詳細シナリオ」と呼んでいるようです。 データ バインディングでは、以下のように、Path=/ と書くことで、「コレクションの選択項目を参照しろ」という意味になります。 <ListBox ItemsSource=”{Bindin

    WPF の {Binding Path=/}
  • Visual Studio 2014 CTP

    Visual Studio 2014 CTPのプレビュー版出てた。 2013とside-by-sideで入らないとのことでちょっとさすがに触れずにいたものの、1日遅れでAzure VM Galleryに並ぶようになったんでそちらを使ってVM上で試すことに。 MSDNブログ情報 MSの各製品チームとかから一斉に情報が。 Somasegar’s blog Brian Harry’s blog Visual Studio .NET Web Development and Tools ADO.NET C# VB C++ side-by-side不可 もちろん最終的には他のバージョンのVisual Studioと共存できるようにするつもりだけども、今回は不具合が残っててできないということみたい。そのうち治るはず。 今は、そもそも別のバージョンが入っていたらインストーラーが警告出して止まる。回避方法も

    Visual Studio 2014 CTP
    daruyanagi
    daruyanagi 2014/06/06
    “null伝搬”は早く使えるようになってほしいなぁ
  • 本日のネタ画像

    Swiftが識別子に絵文字を使えると聞いて。 https://twitter.com/ufcpp/status/473693778029461505 https://twitter.com/ufcpp/status/473696462648274945 C#でも識別子に絵文字が! 何がネタかというと、Roslynのソースコードいじって、自分で識別子に使える文字を増やした(char.IsLowSurrogateとかIsHightSurrogateとか判定してる部分がそう)。 やってることは単純で、Unicodeのサロゲートペアを識別子として認識するように || で条件式を増やしただけ。 なので、もちろん、このままだとたぶんいろいろとやばい文字を受け付けてしまうのではないかと。ちゃんとやろうと思ったら、ちゃんと文字の範囲チェックが必要なものの、そこまでコストかけたいかといわれると、実装コスト的

    本日のネタ画像
  • Singleton

    こないだ見かけた話題。 singletonといえば? SingletonList Roslynのコード中に、こんなメソッドがあるみたいです。 /// <summary> /// Creates a singleton list of syntax nodes. /// </summary> /// <typeparam name=”TNode“>The specific type of the element nodes.</typeparam> /// <param name=”node“>The single element node.</param> /// <returns></returns> public static SyntaxList<TNode> SingletonList<TNode>(TNode node) where TNode : SyntaxNode { re

    Singleton
  • Universal Windows Apps

    ここ数日ブログに書いた話はCTP (Community Technology Preview: 要はアルファ版。リリース版は結構将来の話)なものばかりでしたが。 RC (Release Candidate: リリース間近。重大なバグフィックス除けばほぼそのままリリース)の話も1つ。 Visual Studio 2013 Update 2 RCを入れると、Windows Phone 8.1アプリの開発ができるようになります。 Windows Phone 8.1アプリは、以下で説明していくような意味でWindows 8.1アプリと“同一アプリ”として開発できて、この仕組みを「ユニバーサル アプリ」(universal Windows apps)って呼びます。 ユニバーサル アプリ Visual Studio上で、(ユニバーサル アプリ)と付いたプロジェクト テンプレートを使って新規プロジェクト

    Universal Windows Apps
  • C# before/after

    //build/ のセッション、やっとお目当てにあたりは見れたかなぁ。 「The Future of C#」のデモが、Roslyn使ったVisual Studio拡張とか次期C#の新機能紹介とかまとまっててよさげ。 で、このデモ中のコードが新機能紹介として優秀な感じだったので、before/after的に並べてみる。具体的にどういう文法なのかはこないだ書いたので今日は割愛。 (多少コードはいじってたり。いじった結果→ プロジェクト一式(ZIP圧縮)) 左がC# 5.0、右が次期C#で書き直したもの。

    C# before/after
  • .NET Compiler Platform (Roslyn) Preview

    Roslynが1年以上ぶりに公開されました。 オープンソース化 おまけにオープンソース化(ライセンスは Apache License 2.0)のニュース付き。 ポータル: http://roslyn.codeplex.com/ ソースコードはページ内からのダウンロードもできるし、git cloneも可能 git clone https://git01.codeplex.com/roslyn Roslynの成果物 End-User Preview Visual Studio上で、C#プロジェクトで使ってるコンパイラーとかリファクタリング機能がRoslyn版にさし変わる 後述するC# 6.0新機能(のうちのいくつか)も使えるようになる Roslyn SDK Project Template Roslynを使ったVisual Studio拡張を作るためのテンプレート集 Roslyn Syntax

    .NET Compiler Platform (Roslyn) Preview
  • .NET Native

    .NET Nativeとかいうものが公開された模様。.NET言語(さしあたってはC#のみがサポート対象)からNativeコードを直接作る仕組み。 公式ページ: Microsoft .NET Native MSDN Library 内のヘルプ: http://msdn.microsoft.com/en-us/library/dn584397.aspx 去年の暮ぐらいから噂にはなっていたもの。//build/ の初日キーノートでは出てこなかった(初日は OS 関連。WP8.1とかの話題)ので公開明日かと思ったらもう。 概要 以下のようなもの。 WP8が使ってるMDILに基いた技術 クライアントデバイスには完全にネイティブ化した状態で配布 クライアント上で余計な電力消費しないし、初回起動も早い 当面のターゲットはストアアプリのみ。ただし、ターゲットは今後広げていきたい 前にプロ生勉強会で話した通

    .NET Native
  • C#や>NETがやっていること

    OneDrive にもアップロード: http://1drv.ms/1jIwckw 約170ページ(正確には167+隠しスライド1だけども)。たぶん、普段のペースで話すと3~4時間余裕な内容。「一度気でみんな置いてきぼる登壇してみたい」という大変大人げない発想のためだけにこんな内容になりました。それでもBoost勉強会参加者なら… きっと何とかついてきてくれる(今回懇親会とか出れなかったんで、実際ついてきてくれてたかどうかは不明)。 ノリと勢いで作ったけども、正直、ちゃんとどこかで3~4時間かけてまじめに話さないと大変もったいない気もしている。

    C#や>NETがやっていること
  • C#とILとネイティブと

    SkyDriveにもアップロード: C#とILとネイティブと 日程被ってなかったらグラニの新オフィスにも遊びに行ってみたかったんだけどもなぁとかも思いつつ。 まあ、時間の制限もあるのでかなり簡素化した例ですが、.NETのメタデータ辺りに焦点を当てた内容。 もうちょっとガッツリやれるなら、「じゃあ、C++みたいな言語だとどうしてるの」「pimplパターンとかを使う理由」「COM」みたいな話も入っててもよかったかもと思いつつ。 ニコ生での質問 そういや、帰宅後、ニコ生の録画を見てみたりもしてるんですが。生放送中は放映担当の人越しに1個だけニコ生コメントの質問に答えたりもしましたが、他にも妙な質問いくつかコメント流れてるw いくつか回答。 Q. 彼女いますか! てか、新婚です Q. なんで未確認飛行なんですか ++o++ みたいなののこと、おっさんはUFO演算子とか呼ぶの 古いCコンパイラーだと

    C#とILとネイティブと
  • The Future of C#

    twitterで見かけた話題(1, 2)。ロンドンのイベントでMads(C#のプログラム マネージャー)がC#に追加するかもしれない(したいけど、まだ文法的に確定してない)機能について話したみたいですね。 The Future of C#(イベントのページ) Channel9の掲示板での話題、同 別エントリー 早期プレビュー C#ってこれまでのノリだと、コンパイラーとか仕様書までできた段階で情報を公開していたわけですけども、今回は「ご意見求む」なレベルでの情報公開。 MSDNブログとかChannel9でなくて、ヨーロッパ ローカルなイベントで初めて公にしたのも、ブログとかでまとめるような段階でない当に早期プレビューなせいなのかも。 C# 言語チームの開発体制自体の変化を感じたり。 新文法(候補) で、(twitter越しで見れる)スライド中の情報から読み取れる文法について。 primar

    The Future of C#
  • Xamarin 2.0

    Xamarin 2.0 のアナウンスがあったわけですが。 Xamarin 2.0 の内容 単に、メジャー バージョンアップに合わせて、ブランド名を統一したという内容。今まで、Mono Touch、Mono for Android だったものが、Xamarin.iOS、Xamarin.Android に。 メジャー バージョンアップによって、Visual Studio 使って Windows 上で iOS 開発できるようになったりも。新 IDE の Xamarin Sudio は世界で一番の Android UI ビルダーだという自信もあるそうで。 クロス プラットフォーム クロス プラットフォームというと割と夢見がちな意見と、それを警戒する意見にたどりつきがち。 Xamarin 2.0 のニュースを見て、知り合いから「こういうツールって使い物になるの?」とのご意見も求められてしまったので、

    Xamarin 2.0
  • C#、2012年の首位プログラミング言語に名が挙がる

    C# Named Top Programming Language of 2012 Eight Reasons C# is the Best Language for Mobile Development 集計方法1つ変えるだけで順位なんて変わるという話でもあったりはするのだけども。 ある指標では、2012年で一番伸びた言語はC#ということになるそうです。 去年、C#とか.NET周りで何があったかというと、MonoTouch/Mono for Android であったり、Unity(Monoベースのゲーム エンジンの)であったり、Windows 8であったり。 Windows 8 Windows 8、というか、WinRTで、ネイティブ(C++)の復権があったり、JavaScript+HTML5での開発もできたりで、世の中には「.NETは下火」なんていう人もいるにはいましたが。実際にWind

    C#、2012年の首位プログラミング言語に名が挙がる