タグ

ブックマーク / www.buildinsider.net (17)

  • nullが生まれた背景と現在のnullの問題点 ― null参照問題(前編)

    Cの系譜を継ぐC#ではnullが長らく使い続けられてきたが、最近ではその存在が大きな問題だと認識されている。前後編でこの問題を取り上げ、今回(前編)はnullを取り巻く事情について考察する。 ← 前回 連載 INDEX 次回 → 近年、nullの存在は、billion dollar mistake(10億ドル規模の損失をもたらす過ち)と呼ばれるくらい忌避されるものになっている。 nullは、低コストでそこそこ安全に参照を扱えるという意味で悪くない妥協ではあるが、技術が進歩した現在ではもう少し賢い参照の扱い方があるはずである。C#のように、これまでnullを認めてしまっているプログラミング言語で、今からそれを完全になくすというのは現実的ではないが、nullに起因する問題を少しでも避ける手段はこれからでも追加していけるだろう。 今回は、nullが生まれるに至った背景から始め、nullが抱える問

  • Swift 3.0でなぜ「Cスタイルのforループ」「++/--演算子」などの仕様が廃止されたのか

    大規模な破壊的変更が行われる最終的なバージョンといわれているSwift 3.0がついに正式リリース。多数の変更から「廃止」となった言語仕様にフォーカスを当て説明する。 ← 前回 連載 INDEX 次回 → 先日正式リリースされたSwift 3.0では数多くの変更が含まれたが、今回はその中から廃止となった言語仕様にフォーカスを当てる。 仕様廃止のProposal 第3回で紹介したSwift EvolutionリポジトリのProposalステータスページを見ると、それぞれのProposalが「承認されたが実装待ち/Swift 3.0に実装済み/Swift 2.2に実装済み/後回し/リジェクト済み」のどの状態にあるかが分かる。これらのProposalの中で仕様の廃止に関係しているものは、その名前に「remove」「eliminate」などを含むものである。 Swift 3.0で廃止された12件の

    Watson
    Watson 2016/09/21
  • Swift 3のリリース前に、これまでの進化の変遷をなぞる

    そこで、以下の4つの特徴を持つ言語として紹介された。 高速 モダン(クロージャー、オプショナル型、ジェネリクス、型推論、タプル……) 安全 インタラクティブ(REPL:対話実行環境、Playground) また、Cocoaフレームワーク・ランタイムをObjective-C言語環境と共有しており、Objective-C言語を使った場合と同様に何の制限もなくアプリ開発が可能で、SwiftコードとObjective-Cコードとの混在もできることなどが強調された。 この発表直後から、Swiftは洗練された言語仕様などから大きな注目を集めたが、そこから現時点で2年ほどの短期間で大きな進化を遂げている。 Swift 2.2までの進化の変遷 これまで短いスパンでSwiftにはさまざまな改善が繰り返されてきたが、その説明のためにも、現時点での正式版最新の2.2.1までの進化の変遷をざっと見ておこう。 Sw

    Watson
    Watson 2016/08/03
  • Jenkins 2の新機能「Pipeline」を使ってみよう

    何をやっているか分からない「Jenkinsおじさん」の作業を見える化しよう。Jenkins 2に新搭載されたPipelineを使えばパイプラインをコードで記述できるようになる。その基的な使い方を解説。 ← 前回 連載 INDEX Jenkins 2に搭載された新機能の目玉として、今までPipelineプラグイン(※第3回で解説したBuild Pipelineプラグインとは別物である)として提供されていたPipeline(以下、パイプライン)が標準搭載されたことが話題となっている。今回はこのパイプライン機能について掘り下げて解説していきたい。 Jenkinsおじさん 「Jenkinsおじさん」という言葉を聞いたことはあるだろうか? これはJenkinsを運用管理してくれている人をロゴにあしらわれている紳士に例えて表現した言葉だ。恐らくJenkinsが活発に利用されているチームに1人はJen

    Jenkins 2の新機能「Pipeline」を使ってみよう
  • C11の仕様-それ以外の主な機能強化点

    「無名」という言葉は、構造体/unionの識別子(いわゆるタグ名)が省略されていること(リスト1の(1))、メンバー名が省略されていること(リスト1の(2))の両方を指している。メモリ上での配置は通常の構造体/unionと変わらない。つまり、リスト1のintegerメンバーとfloatingメンバーは同一のアドレスに配置される。無名union/構造体内のメンバーへは、その無名union/構造体をメンバーとして持つunion/構造体のメンバーと同じようにアクセスできる。(3)を見ると分かるとおり、dataTypeメンバーと同じようにして、integerメンバーにアクセスできていることが分かる。 総称選択(§6.5.1.1) 総称選択(Generic selection)は、型に応じて分岐する式である(リスト2)。

    Watson
    Watson 2016/06/13
  • 次期C#とパフォーマンス向上(前編)―― 必要となった背景と改善内容

    機能や構文ばかりが注目されるが、プログラミング言語ではパフォーマンスも重要だ。パフォーマンス向上に対する要求が高まってきた背景と、向上のための改善方法を説明。C# 7以降で追加が検討されている新機能にも言及する。 ← 前回 連載 INDEX 次回 → 近年、さまざまなプログラミング言語では、ソフトウェア開発の生産性を向上するべく便利な機能が実装されてきた。その一方で、書かれたプログラムのパフォーマンスへの配慮も重要である。「確かに書きやすいが、出来上がったものが遅くてつらい」ということになっては言語の魅力は半減する。 C#では、これまでも、パフォーマンスに配慮した言語機能をいくつか提供してきている。例えば、値型(構造体)がその代表例だ。ジェネリックが型消去ではない実装になっているのもパフォーマンス上の理由である。利用場面によってはイテレーターや非同期メソッドなどもパフォーマンス向上に寄与す

    Watson
    Watson 2016/05/10
  • 特におすすめしたい、Sublime Textのパッケージ - Build Insider

    Sublime Textのさまざまなパッケージの中から、利用シーン別におすすめのものを紹介。また、Sublime Textのパッケージの基的な使い方として導入方法や有効化/無効化、削除の方法も説明する。 ← 前回 連載 INDEX 今回はSublime Textのさまざまなパッケージの中から、特におすすめのものを紹介する。 Sublime Textのパッケージ Sublime Text自体はオープンソース・ソフトウェアではないが、内部機能を操作するためのAPIAPI Reference - Sublime Text 3 Documentation)が公開されている。また、メジャーなスクリプト言語であるPythonのランタイムが搭載されているので、誰でもパッケージを作成できる。 そのため、パッケージの作成は盛んで、2014年12月時点登録されている公式パッケージは2600以上となっている

  • Xamarin.AndroidにおけるJava相互運用の仕組みと、Javaバインディング・プロジェクト

    Xamarin.AndroidJavaとの相互運用を実現するアーキテクチャについて、さらにメモリ管理などの注意点を説明。さらにXamarin.Androidの制限事項についても解説する。 ← 前回 連載 INDEX 次回 → 第7回からはXamarin.Androidについて取り上げている。前回の「Xamarin.Androidアプリの開発」に続き、今回はJavaとの相互運用などについて説明する。 Javaとの相互運用 Java相互運用のアーキテクチャ Android SDKでは、標準的なJavaではないが、ほぼJavaのやり方が通用する。AndroidアプリケーションのJavaコードは、開発者によっていったんJavaのバイトコードにコンパイルされた後、Android SDKに含まれるビルドツール「dx」によって、Dalvikが実行できる「dex(Dalvik Executable Fo

  • Jenkins+Vagrantでテストを分散しよう

    テストの分散は、環境を分けたい場合や速度を上げたい場合に役立つ。Vagrantで複数マシンのテスト環境を構築し、Jenkinsから複数マシンにまたがるテストジョブを実行してみよう。また、お勧めの便利なプラグインも紹介する。 ← 前回 連載 INDEX 次回 → 連載第3回「アプリケーションをデプロイしてみよう」では、Jenkinsからのさまざまな通知方法、およびテストの分割、Herokuへのデプロイを解説した。Jenkins以外についても多くのことを解説したが、いきなり全てを実践する必要はない。どのプロセスの優先順位が高いのか、プロジェクトメンバーで話し合って、着手する順番を決めていこう。 テストの分散とは? さて、今回は「テストの分散」の話である。「前回の連載で複数のジョブに分けたのが分散なのでは?」と気付いたあなたは鋭い。今回の「分散」とは、ジョブに分割することではなく、「複数マシンで

  • Xamarinの基盤となっている「Mono」と、C#コンパイラー「mcs」

    ← 前回 連載 INDEX 次回 → 前回は「Xamarinが何を提供しているのか?」について説明した。 Xamarinは、テクノロジーとしては.NET FrameworkとC#の上に成り立っているが、ソフトウェアの基盤はこれらの技術の独自実装であるMonoの上に成り立っている。Monoについての理解が深まれば、Xamarin製品の理解も深まることになろう。 そこで今回と次回は、このMonoについて解説しよう。 * Xamarin 2.0のリリースに際して、「Mono」の名前が「Xamarin」になったと思われていることもあるようだが、そうではなく、Monoは従来のままのオープンソースプロジェクトであり、XamarinはMonoを主にモバイル開発製品に適用しているということになる。 Monoの歴史的な成り立ち MonoプロジェクトのリーダーであるMiguel de Icazaは、来はLi

  • Jenkinsでアプリケーションをデプロイしてみよう

    継続的インテグレーションの手順のうち、デプロイに焦点を当てて、テストの実行から、GitによるHeroku環境へのデプロイまでを自動化する方法を解説。Mac向けのGrowlを使って実行結果を通知する方法も説明。 ← 前回 連載 INDEX 次回 → 連載第1回「Jenkinsを使ってみよう」ではMac(OS X)/LinuxWindowsへのインストール方法を、第2回「Jenkinsでテストを実行してみよう」ではユニットテストおよびインテグレーションテストを作成し、Jenkinsから実行する手法を解説した。ここまで読んでいただいた読者の皆さんもJenkinsをインストールして自分なりの使い方を模索していることと思う。 さて、連載第1回で「継続的インテグレーションとは次のような手順の繰り返しだ」と説明したのを覚えているだろうか? プログラミング テストの実行 リファクタリング デプロイ 今回

  • Xamarinを構成するソフトウェア。その主要な10要素とは?

    Xamarinは何を提供しているのか? その主要なソフトウェア構成要素として、Mono、Gtk#、MonoDevelopとXamarin Studio、Xamarin.iOS、Xamarin.AndroidXamarin.Mac、Visual Studioアドイン、Xamarin.Forms、Xamarinコンポーネント、Xamarin Test Cloudなどについて紹介。 連載 INDEX 次回 → はじめに 今回、Xamarinについて記事を書かせていただくことになった。Xamarin(カタカナで書けば「ザマリン」となるだろうが、何と読もうが皆さんの自由だ)は、iOSおよびAndroidを中心に.NET/C#を活用するモバイル開発フレームワークを開発・販売している米国の会社であり、同社が販売している一連の製品に冠せられた名前でもある。同社のチームは、10年以上前からオープンソースの

  • 開発環境までもWeb化?! Visual Studio Online “Monaco”機能徹底解説(Win&Mac対応)

    Visual Studioのオンライン版?! Webブラウザー上で動作する開発環境“Monaco”で開発はどう変わるのか? その全機能をさまざまなブラウザーで徹底的に試してみる。さらにデスクトップアプリ開発も実験してみる。 連載 INDEX 次回 → 先日(米国時間で11月13日に)開催されたオンラインイベント「Visual Studio 2013 Launch Event 」の中で、「Visual Studio Online」が発表された。この名前を文字通りに受け取るなら、「Visual Studioの“オンライン版”」という意味になるだろう。しかし実際に発表されたその内容は(筆者の理解では)、これまで「Team Foundation Service」と呼んでいたものを強化しつつ、名称変更したにすぎないものだった。 これでは「命名と実体が合っていない」ということになる。ところがこの命名の

  • Jenkins入門【2.0対応】 - オープンソース継続的インテグレーション(CI)ツール

    Jenkinsをインストールして使ってみよう[MacLinuxWindows] 継続的インテグレーションツール「Jenkins」の使い方を基礎から解説する連載がスタート。初回は、Jenkinsの概要とインストール手順、簡単なジョブの登録方法を説明する。 Jenkinsでテストを実行してみよう+Rubyテストの基礎(RSpec&Turnip使用) Jenkinsを使って小さなテストを自動実行して、開発スピードを飛躍的に向上させよう。また、MacでのRubyRails環境の構築方法から、テストフレームワーク「RSpec」とインテグレーションテスト環境「Turnip」を使ったテストの書き方までを解説する。

  • Leap Motionの座標系の変換とスクリーンを理解する[C++]

    稿はLeap Motion SDK バージョン1に基づいた記事です。すでにバージョン2の連載記事に改訂しており、その改訂の際に稿の内容はカットされました。同じLeap Motionデバイスで、最新のSDKバージョン2を利用できますので、最新版SDKをご利用ください。 前回は、Leap Motionを利用してタッチ入力を認識するアプリケーションを作成した。次回の最終回では、Leap Motionからのタッチ入力をWindows 8のタッチ入力として認識させる。今回はその準備として、Leap Motionの座標系の変換やスクリーンについて解説する。 今回のサンプル・コードは前回のコードに加える形になっている。サンプル・コードは次のリンク先で公開している。Windows環境ではVisual Studio Express 2012 for Windows Desktopで、Mac OS X環

  • 初めてのLeap Motion開発

    Leap Motion Developer SDKを利用してC++言語でLeapアプリを開発する方法を、サンプルコードを示しながら解説する連載(2015年改訂版)。SDK提供のサンプルコードを基にLeapアプリ開発の基的な流れを説明する。 連載 INDEX 次回 → 連載ではLeap Motion Developer SDKを利用してC++言語でLeap Motionのアプリケーションを開発する方法について、サンプルコードを示しながら解説する。稿の確認OSはWindows 8.1のみだが、ほぼ同じコードでMac OS Xでも記述できる。 また、連載でのサンプルコードは次のリンク先で公開しており、WindowsはVisual Studio Express 2013 for Windows Desktopでの動作確認を行い、プロジェクトファイルを含めてすぐに利用できるようにしてある。

  • C#開発者から見たLeap Motion開発のファースト・インプレッション

    手や指の動きを読み取って、さまざまな処理を行うアプリを作成できる「Leap Motion」の一般販売がついに開始された。その開発はどのようなものなのか? SDKに含まれる最も基的なソース・コードを眺めてみよう。 ※2013/07/29追記: C++言語向けの連載はこちらです。 ※2013/08/29追記: VB言語向けの連載はこちらです。 2013年7月22日(米国時間)、ついにLeap Motionの一般販売が開始された。Leap Motionとは、簡単にいえばKinectの機能を手と指だけ(+手に関連付けられた道具。例えばペンなど)に絞ったデバイスである。そのため、デバイスはフリスクのケース程度の大きさで(高さ:1.27cm、横幅:3cm、奥行き:7.62cm、重さ:45.4g)、価格も(執筆時点で)8200円程度(※税金や送料を含まない場合)とお手頃だ。 その内容や可能性は、言葉で

    C#開発者から見たLeap Motion開発のファースト・インプレッション
  • 1