タグ

ブックマーク / ufcpp.net (16)

  • C# 8.0 null許容参照型 | ++C++; // 未確認飛行 C ブログ

    今日も C# 8.0 の新機能の話。 C# 8.0 の中でおそらく一番の目玉機能扱いになると思われる null許容参照型の話です。 参照型でもそのままでは null を認めない 要は、参照型に対しても、単にTと書くとnullを認めない型になり、 null許容にしたければT?と書くようにするという機能です。 #nullable enable // string には null が来ない // null が来ないなら s.Length で OK static int M1(string s) => s.Length; // string? には null が来る // null が来るのに s.Length (null チェックしてない)はダメ static int M2(string? s) => s.Length; // string? には null が来る // null が来ても ?

    C# 8.0 null許容参照型 | ++C++; // 未確認飛行 C ブログ
    sudo_vi
    sudo_vi 2018/12/16
  • RuntimeFeature クラス | ++C++; // 未確認飛行 C ブログ

    先日 C# 8.0 予告なブログで書いた通り、 C# 8.0 で入るインターフェイスのデフォルト実装は .NET ランタイム側の修正が必要な機能です。 今日は、そういう「ランタイム側機能」についての話を少し。 ランタイム側機能 C# の言語機能は、C# コンパイラーがちょこっと頑張ってよい具合にコード生成して、 古い .NET Framework ランタイム上でも動くものが多いです。 「古いランタイム上では動かない新機能」というと、実は .NET Framework 2.0 でのジェネリクスの導入まで遡ります。 .NET Framework 2.0 は2005年リリースですし、 C# 8.0 には実に13年ぶりにランタイムの方に修正を求める機能が入ったことになります。 契機となったのはやっぱり .NET Core の存在です。 .NET Core は、オープンソースで開発ペースも速く、 s

    RuntimeFeature クラス | ++C++; // 未確認飛行 C ブログ
    sudo_vi
    sudo_vi 2018/12/16
  • ✓DO、X DO NOT の誤訳事案

    だいぶ炎上してる例のあれ doの意味が全体的に逆になっています。 #118 対応ミスってるとはいえさすがにかわいそうなレベルでいいがかり付けられてる感じもするのでちょっと補足を。 元々の問題 マイクロソフトの機械翻訳がよくやらかすのはいつものことなんですが。 今回は何をやらかしたかというと、よくある ✓DO: 〇〇してください X DO NOT: 〇〇はしないでください みたいなやつを、DOもDO NOTもどっちも「しないで」と訳してしまっているという問題。 「しないで」も不自然だし、ましてDOの方は真逆の意味になっているという誤訳。 どうしてこうなる… みたいな気持ちはもちろんあるものの、こういう「普通の文章」になっていない部分の単語ってのは、機械翻訳では一番ミスを起こしがちな部分です。 たぶん、原文の時点で何らかのアノテーションでも付けておくとかしないと、今後も同様の誤訳は起こりまくる

    ✓DO、X DO NOT の誤訳事案
    sudo_vi
    sudo_vi 2018/07/24
  • ピックアップRoslyn 3/21: Design Notes一斉アップロード祭り

    昨日なんですけども、2018年に入ってからのC# Language Design Meetingの議事録(design notes)が一斉にアップロードされました。 C# Language Design Notes for 2018 読むの大変だった… 春分の日でよかった… 一通りなんとなくは目を通したんですけど、ブログ1回の内容じゃなさすぎるので、少しずつネタにしていこうかと。 ここ数時の状況 2週間前にVisual Studio 15.6が正式リリースされて、 その後ほどなくして15.7のプレビュー1もリリースされたわけですけども。 このプレビュー1の時点では 15.7 に C# 7.3 は入っていなかったわけですけども、 roslynリポジトリの15.7マイルストーンを見るとだいぶC# 7.3がらみの作業がマージされている状況です。 作業進捗を表すLanguage Feature S

    ピックアップRoslyn 3/21: Design Notes一斉アップロード祭り
    sudo_vi
    sudo_vi 2018/03/26
  • await って言う単語

    C# 5.0で非同期メソッドが導入されてから、 正式リリースを基準にしても5年以上、 最初の発表からだと7年以上経っています。 で、5年経っても、「なんて読むの」「asyncのaとawaitのaは違う」などなどが「定番ネタ」として定期的に出てくるわけですが。 特に、ECMAScript 2017がasync/awaitを導入したり、 Unity 2017がやっとC#のバージョンを6.0に上げれる感じになってきたり、 5年の断絶を経て去年からasync/awaitに触れる人が増えているようです。 5年も離れたら、世代断絶も起こりますよね… そりゃ、「定番ネタ」が改めて増えもしますよね… ということで、5年くらい前に同じようなことをどこかで書いてるはずなんですけど、改めて。 英単語 えいしんく まず読み方。 async: エイシンク await : アウェイト ってやつ。async の方が「ア

    await って言う単語
    sudo_vi
    sudo_vi 2018/01/08
  • 新しい csproj 形式

    Visual Studio 2017で、csproj 形式が新しくなりました。 背景としては、 一時期、脱msbuildをしようとしてた -脱msbuildのついでに、csprojを辞めて、project.json 形式にプロジェクト設定全部入れようとしてた時期があった 結局、msbuildに戻ったけども、既存のcsprojをもっとシンプルにしたいという要件だけが残った というものです。過渡期に関しては昔書いたブログ参照: .csproj + project.json 「project.json辞めます」の意味 最近、やっと新形式のcsprojの扱いに慣れてきたのでブログに書き残しておきます。 サンプル: https://github.com/ufcpp/UfcppSample/tree/master/Demo/2017/NewCsproj 新形式 これまで、Visual StudioでC

    新しい csproj 形式
    sudo_vi
    sudo_vi 2017/05/14
  • Commonly Rejected Changes

    twitterで見かけた話。きっかけはSwiftのものなんですが、「Commonly Rejected Changes」、つまり、「頻繁にリジェクトされる変更の提案」集がまとめられてるみたいです。これを見た感想は「ああ、あるある、C#でもよくある」だったので、それをネタにしてみようかと。 {} をやめて、Python風のインデント構文がほしい これ、SwiftやC#に限らずありとあらゆるプログラミング言語で発生すると思うんですが、必ず出てくるんですよね、インデントでブロックを切る構文を求めてくる人。SwiftにしろC#にしろ、基方針として「空白文字を除外しても意味が変わらない」を採用している言語に対してそういう要求をされましても… まあ、Swiftは「空白を抜いたら意味が変わる」構文あるんですけどね。?:の?の前にスペースを入れないと、型名?の?と区別がつかないそうで。 それを言い出すと

    Commonly Rejected Changes
    sudo_vi
    sudo_vi 2016/01/04
  • Windows 10 Mobile人柱中

    最近、「Surface Book買わない人」として有名なわけですが。だって、ノートPCとか重たくて持てない。スマホでいいよ、スマホで。 ということで、今週中、「リビングでWindows 10 Mobileを使って作業しよう強化週間を実施しております。 Continuum 最大の動機は、手元にContinuum対応端末があることです。 要するに、Lumia 950 XLを買ったから。 Continuumは、Windows 10 Mobile最大の売りになるかもしれない機能で、スマホとPCで同じアプリを同じように使える機能。普段スマホ上ではスマホ サイズに起動しますが、ディスプレイにつなぐとPCサイズなアプリとしてちゃんと起動するというもの。 Continuum対応のWindows 10 Mobile機をディスプレイにつなぐと、ディスプレイには見慣れたWindows 10 PCのような画面が現

    Windows 10 Mobile人柱中
    sudo_vi
    sudo_vi 2015/12/23
  • SystemかMicrosoftか、公式ライブラリの名前

    Windows用として生まれて、クロスプラットフォームに育った.NETの宿命というか。System名前空間から始まるライブラリと、Microsoft名前空間から始まるライブラリの話。 System or Microsoft Systemなんて名前、基的には標準ライブラリ用なわけですが。 「.NET系開発者はサードパーティ ライブラリにも平然とSystemの名前を付けることがある」みたいな問題もありますが、それは今回は置いておきます。今回は割かし標準に近いところ、マイクロソフトによる公式実装のライブラリの話です。 「.NET = マイクロソフト」(他のOSは「そのマイクロソフト.NETの移植」)だった頃には割かし何でもSystem名前空間にされていたわけですが、オープンソース、コミュニティによる推進、クロスプラットフォームなんかをうたうようになった最近はそれではまずいということで、Micr

    SystemかMicrosoftか、公式ライブラリの名前
    sudo_vi
    sudo_vi 2015/12/16
  • Visual Basicの全角キーワード

    Visual Basicでは、BASIC時代からずっとですが、アルファベットの大文字と小文字を区別しないことは皆さまもご存知かと思われます。 で、実は、大文字小文字だけじゃなくて、半角全角も区別しないという。以下のコード、コンパイルして実行することもできるし、Visual Studio上ではちゃんと、Moduleとかの部分が青色(キーワードの色)で表示されます。 Module Module1 Sub Main() Dim x = 10 Console.WriteLine(x) End Sub End Module まあ、今のVisual Studio上では、全角文字でキーワードを打つと、自動補完で打ったそばから半角CamelCaseに変換されていくんで、自動補完に直されるたびにCtrl+Zで元に戻したりしないとこのソースコードを作れなかったりはするんですが。 もちろんRoslynでもいまだ

    Visual Basicの全角キーワード
    sudo_vi
    sudo_vi 2015/11/09
  • ピックアップRoslyn 10/9 C# Interactive Window

    Visual Studio 2015 Update 1 CTPが出ました。VS 2015の上書きになるみたいなので試しにくいかもしれませんが、C# な人には待望の C# Interactive Window が追加されています。 C# チーム(.NET コンパイラー チーム)による説明は、ブログじゃなくて GitHub の wiki ページにしたみたいです: Interactive Window ちなみに、このページの 2015 SP1 CTP ダウンロードへのリンクは間違っているので、 VS チームのブログの方 を参照してください スクリプト独特の挙動 基的には通常の C# と同じコードが REPL で動きます。一部、特殊なのは以下のような挙動: 非同期コンテキストを持っている await したら Interactive Window 内で待機 バックグラウンド実行にはならないし、In

    ピックアップRoslyn 10/9 C# Interactive Window
    sudo_vi
    sudo_vi 2015/10/10
  • ピックアップ Roslyn 9/6

    Array.Empty 最適化 .Net 4.6 optimizations breaking on 4.5.2 servers #4889 Roslyn(C# コンパイラー)の問題か、msbuild(ビルド ツール)の問題化、JIT レイヤーに持っていくべき問題かとかいろいろたらいまわしになりそうな話。 Roslyn がやったこと まず、何をやろうとして問題が起きてるのか。 params 引数に対して何も引数を渡さなかったときに、C# コンパイラーが内部的に空の配列を作って引数に渡します。この時、Roslyn を使って .NET 4.6 以降をターゲットにすると、生成されるコードが少し変わります。 new StringBuilder().AppendFormat("") みたいなのを書くと、実際に生成されるコードは、 旧コンパイラー/古い .NET: new StringBuilder(

    ピックアップ Roslyn 9/6
    sudo_vi
    sudo_vi 2015/09/07
  • 【開催結果】Visual Studio 2015リリース記念勉強会

    WPF 4.6 and Visual Studio 2015, 亀谷 学人 WPF 4.6 and Visual Studio 2015, 亀谷 学人 (Speaker Deck の埋め込みリンク、うちのサイトのシステムで使えなかった) Universal Windows Platform app, 大田 一希

    【開催結果】Visual Studio 2015リリース記念勉強会
    sudo_vi
    sudo_vi 2015/08/11
  • Visual Studio 2015でのC#/VBの文字コード

    VSサポートチームのブログ記事が上がったことによって少々話題になっていますが、文字コード問題。 Visual Studio 2015 で Shift JIS エンコーディングされたソース ファイルをビルドするとコンパイラ エラーが発生する場合がある 症状 Shift JIS とか、Unicode 以前の各国文字コードで保存した C#/VB ファイルがコンパイルできない、できても文字列リテラルが狂うなどの問題が出ます。 日に限らず、中国語圏とかでも話題に。 原因 Roslynのせいではあります。 ぶっちゃけ、「by design (仕様です)」の類ではあったんですが。 クロスプラットフォーム対応のためにEncoding.Defaultを使うのをやめたというのがこの問題の原因です。 経緯を追って CoreFx 対応 最初にEncoding.Default撤廃をやったのは以下のpull req

    Visual Studio 2015でのC#/VBの文字コード
    sudo_vi
    sudo_vi 2015/08/06
  • Code-Awareなライブラリ

    .NET Compiler Platformによって、Code-Awareなライブラリを作れるようになりました。 Code-Aware、直訳すると「コードを理解している」「コードを意識している」という感じになります。ライブラリだけでなく、ライブラリ利用側のコードを理解して、問題点の指摘やその修正方法まで提供することを言います。 概要 コード アナライザー ライブラリ固有の事情の例 ライブラリ固有のコード アナライザーの例 Code-Aware ライブラリ 概要 Ver. 6 (C# 6の言語的な機能ではありませんが、C# 6と同世代(Visual Studio 2015世代)の技術なので、利用できるのはC# 6以降になります。) .NET Compiler Platformを使うことで、 コードを解析してその問題点の指摘やその修正方法を提供できる、コード アナライザーというものを作れます。

    Code-Awareなライブラリ
    sudo_vi
    sudo_vi 2015/05/14
  • C# によるプログラミング入門

    C# によるプログラミング入門です。C# 初心者の方はもちろん、これからプログラミングを始めようという方も対象としています。

    C# によるプログラミング入門
    sudo_vi
    sudo_vi 2011/04/24
  • 1