Skip to content

Instantly share code, notes, and snippets.

.NET開発体験とエコシステム比較:互換性の視点から

1. .NETにおける互換性の実情

.NETは、Microsoftによる統合的なエコシステム管理により、標準ライブラリが充実し、フレームワーク間の整合性が比較的高く保たれています。しかし、プラットフォームの近代化とクロスプラットフォーム化を推進する過程で、時には破壊的変更を伴う進化を遂げてきた歴史も持ちます。

  • .NET Framework時代: この時期はバイナリ互換性が重視されました。しかし、依存関係の管理には課題がありました。単一のアプリケーションが参照する多数のライブラリ間で、推移的依存のバージョンが異なると競合が発生し、開発者は「bindingRedirect」という設定を手動で調整する必要がありました。これは複雑で間違いやすい作業でした。

  • .NET Core / .NET 5+ 時代: クロスプラットフォーム対応とパフォーマンス向上を目指した.NET Coreの登場により、APIの整理やアーキテクチャの刷新が行われました。この移行期には以下のような互換性の課題が顕在化しました:

  • Entity Framework 6 (EF6) と EF Coreの間には直接的な互換性がなく、コードの書き換えが必要

新しい新製品開発ゲーム

著者: 竹内弘高 および 野中郁次郎

『雑誌掲載記事』(1986年1月号)より


現代の急速に変化し、競争の激しい商業用新製品開発の世界において、スピードと柔軟性は不可欠です。多くの企業が、従来の逐次的な新製品開発アプローチではもはや十分に対応できないことを認識しつつあります。 これに対し、日本やアメリカの企業では、ラグビーのようにチームが一体となってフィールドを前進しながらボールをパスし合う、包括的な手法が採用されています。

@matarillo
matarillo / Falco.Program.fs
Last active September 20, 2025 07:26
compare giraffe with falco
open Falco
open Falco.Routing
open Microsoft.AspNetCore.Builder
let endpoints =
[ get "/weather" WeatherForecast.getRandom
get "/" (Response.ofPlainText "Hello World!") ]
[<EntryPoint>]
let main args =
@matarillo
matarillo / ConsList`1.cs
Last active June 23, 2025 12:47
Cons List for C# (before Type Unions)
using System.Collections;
using System.Text;
var xs = ConsList<int>.Create([7, 8, 9, 10]);
var ys = ConsList<int>.Create([0, 1, 2, 3]);
var product =
from x in xs
from y in ys
select $"{x * 10 + y}";
type Cont<'a, 'r> = { runCont: ('a -> 'r) -> 'r }
module Cont =
let toCont c = { runCont = c }
let runCont { runCont = c } = c
let return' a = toCont (fun k -> k a)
let (>>=) { runCont = c } f =
toCont (fun k -> c (fun a -> runCont (f a) k))
using NetVips;
if (ModuleInitializer.VipsInitialized)
{
Console.WriteLine(
$"Inited libvips {NetVips.NetVips.Version(0)}.{NetVips.NetVips.Version(1)}.{NetVips.NetVips.Version(2)}");
}
else
{
Console.WriteLine(ModuleInitializer.Exception.Message);

鉄道指向プログラミング(の安易な利用)に反対する

(原文:Against Railway-Oriented Programming)

2019年12月20日

この記事は、2019年のF#アドベントカレンダーの一部です。他の素晴らしい記事もぜひご覧ください。企画者のSergey Tihon氏に感謝します。

6年半前、私は「鉄道指向プログラミング」と呼ぶものに関する記事を書き、講演を行いました。これは、エラーを生成する関数を連結するために、Result / Either をどのように使用するかを、自分自身や他の人に説明するための手段でした。

@matarillo
matarillo / Linq.fs
Last active March 8, 2025 08:52
LINQ: Building an IQueryable provider series
module My.Linq
open System
open System.Collections.Generic
open System.Linq
open System.Linq.Expressions
open System.Reflection
// 条件に一致する最初の結果を返す関数
let rec tryFirst (funcs: ('a -> 'b option) list) (input: 'a) =

https://www.youtube.com/watch?v=1VgptLwP588

Mark RussinovichによるRustの技術セッションです。Markがどういう話をしているのか、およそ10分区切りで要約して。

Mark RussinovichのマイクロソフトにおけるRust採用についての講演要約

最初の10分 (0:00-10:00)

Markは、マイクロソフトがRustを採用した理由から話し始めています。マイクロソフトでは、過去10年間のセキュリティ脆弱性の約70%がC/C++でのメモリ安全性の問題に起因していることが明らかになりました。Markは個人的にC言語をシンプルで美しいと考えていますが、C++は複雑すぎると感じています。Rustは正確性を強制するシンプルでエレガントな言語だと彼は確信しています。

2022年9月、Markは「新しいC/C++コードはRustで書くべき」というツイートを投稿し、これが彼の中で最も反響の大きいツイートとなりました。このツイート後、サティア・ナデラCEOから電話があり、MarkはマイクロソフトのRust採用を推進することになりました。このムーブメントはマイクロソフト全体からの草の根の取り組みの一部であり、後に米国国家安全保障局(NSA)もC/C++からの移行を推奨することになります。

@matarillo
matarillo / Json.fs
Created November 26, 2024 10:38
コンピュテーション式を使わない書き方
module Json
open System.Text
[<AbstractClass>]
type JNode() =
abstract member Stringify: unit -> string
[<AbstractClass>]
type JValue() =