デブサミ2020[13-E-8]でのセッションスライドです。

TL;DR 一行追加するだけで関数をメモ化するマクロを作った。 成果物はこちら https://docs.rs/memoise/ 背景 同じ引数に対して同じ値を返す関数(いわゆる参照透明だったり数学的だったりな関数)では、 関数の計算結果を保存しておくことによって計算を高速化したりすることができます。 このようなテクニックを関数のメモ化(memoise, memoize, memoization)などと呼びます。 特に再帰的に定義される関数についてメモ化を行うことによって、 動的計画法の実装をシンプルで直感的なものにできたりします。 しかし、関数のメモ化はやりたいことが自明なのにもかかわらず、 毎回手で書いていると微妙に面倒だったり、うっかりメモ化忘れで計算量が爆発してしまったり、 ちょっと辛いところがありました。 特にRustを使っていると、グローバル変数を雑に使うことを許して貰えないの
再帰が現実的でないBASICで「盤面が与えられた時にどのぷよが消えるか」を計算するアルゴリズムが当時どうしても思いつかず「ぷよぷよ」にハマった時からずっと考えていました。 そしてある授業中に突然アルゴリズムがひらめきました。 以下がそのアルゴリズムのご紹介です。 フィールドが以下の様になっていると想定します。形だけ見ると「連鎖を作ろうとしてたけどやらかしちゃった」形ですね。 この場合、赤い「ぷよ」が消えることになります。 基本的な方針としては「左上から注目する場所(セル)を右下まで走査する」「注目したセルにある「ぷよ」がいくつつながっているか調べる」です。 1. まず、左上のセルに注目します。 2. 左上のセルには何も無かったので次のセルに注目します。 このセルには赤い「ぷよ」が居ました。 これ以降はこの赤い「ぷよ」がいくつつながっているか(=消せるか)をチェックします。 3.「この「ぷよ
BlazorでiOS/Androidネイティブアプリケーションを開発可能にする「Mobile Blazor Bindings」、マイクロソフトが発表 マイクロソフトはWebアプリケーションフレームワーク「Blazor」を用いてiOSとAndroidに対応したネイティブアプリケーションを開発可能にする実験的なプロジェクト「Mobile Blazor Bindings」を、1月14日(日本時間1月15日未明)に開催されたオンラインインベント「.NET Conf Focus on Blazor」で発表しました。 Blazorは、C#と.NET Coreを用いてWebアプリケーションの開発を可能にするフレームワークです。JavaScriptを用いず、C#によるプログラミングだけでSPA(Single Page Application)のWebアプリケーションなどを開発できるため、.NETの知識や経
Creative Scala (日本語版) Dave Gurnell, Noel Welsh 著 Eugene Yokota 訳 May 2018 Creative Scala (日本語版) Copyright 2015-2019 Dave Gurnell, Noel Welsh 著 Eugene Yokota 訳. Licensed under Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. Published by Underscore Consulting LLP, Brighton, UK. Copies of this, and related topics, can be found at http://underscore.io/training. Team di
Javaで学ぶ、オブジェクト指向プログラミングの基礎知識。型とカプセル化が腹落ちすると、びっくりするくらいオブジェクト指向プログラミングがわかようになる/できるようになる
By koldunov Cascade Lakeを含む、Intelが2019年までに発売したCPUに影響を及ぼす脆弱性「ZombieLoad v2」が発見されたと、グラーツ工科大学の研究員であるマイケル・シュワルツ氏らにより報告されています。 New ZombieLoad v2 Attack Affects Intel's Latest Cascade Lake CPUs https://thehackernews.com/2019/11/zombieload-cpu-vulnerability.html 新たに発見された「ZombieLoad v2」と称される脆弱性は、Cascade Lakeを含む2019年までに登場したIntel CPUに影響を及ぼすとされています。ZombieLoad v2は、2019年5月に発見された「ZombieLoad」の変種だとのこと。ZombieLoadは
Although Rust incorporates many methodologies from functional programming, it can rather be "an imperative programming language 2.0", considering its fa…
プログラマーが自分につく9つの嘘をInfoWorldのPeter Wayner氏がまとめている(InfoWorldの記事)。 スラドでは2014年にITworldの同様の企画を紹介しているが、この記事では「手抜きでも大丈夫」系の嘘が中心だった。一方、今回のInfoWorldの記事ではマーク・トウェインの言葉とされる (が、確認されていない)「It ain't what you don't know that gets you into trouble. It's what you know for sure that just ain't so」を引用し、常に真であるとは限らないものを常に真だと思い込もうとする、といった内容になっている。 記事で取り上げられているのは以下のようなものだ。 プログラミング言語には違いがある (だからこの新しい言語を使えば何もかもうまくいくと思いたい)フレーム
/// <summary>契約コントローラー</summary> public class ContractController { private ContractAmount _contractAmount; /// <summary>税込金額を計算する。</summary> /// <param name="amountExcludingTax">税別金額。</param> /// <param name="salesTaxRate">消費税率。</param> /// <returns>税込金額。</returns> public int CalculateAmountIncludingTax(int amountExcludingTax, decimal salesTaxRate) { return (int)(amountExcludingTax * (1.0m + sales
Run your favourite programming languages online with myCompiler. Simple and easy to use IDE where you can edit, compile and run your code in the programming language of your choice
python.md Python is not a great programming language. It's great for beginners. Then it turns into a mess. What's good What should be good What's "meh" What's bad What's bad about the culture What's good A huge ecosystem of good third-party libraries. Named arguments. Multiple inheritance. What should be good It's easy to learn and read. However, it's only easy to learn and read at the start. Once
はじめに こんにちは。コミュニケーションアプリ「LINE」の Android クライアントチームの石川です。 先日、コードの可読性についてのプレゼンテーション (https://speakerdeck.com/munetoshi/code-readability) を公開しました。 今後、このプレゼンテーションについてのちょっとした解説を、本ブログ上で不定期に連載していきます。 今回は、このプレゼンテーションの概要と、最初の章 "導入と原則" についての解説を行います。 このプレゼンテーションについて このプレゼンテーションは、コードの可読性を向上するためのアイディアをまとめたもので、以下の8つの章からなります。 導入と原則: 可読性の高いコードの重要性、プログラミング原則 命名: 名前の示す内容、文法、語の選択 コメント: ドキュメンテーション、インラインコメント 状態: 状態遷移の管理
なぜ読みやすいコードが必要なのか - コードの可読性を高める手法をサンプルで学ぶ システム開発会社「アクシア」の代表として、自社・他社含め、さまざまなエンジニアのコードを読んできた米村歩さん。そんな米村さんの持論は、「コードの可読性は生産性に多大な影響を与える」ということ。可読性の低いコードはどんな弊害をもたらし、どうすれば改善できるのか――。チーム開発を効率化するコードの「可読性」について綴っていただきました。 プロフェッショナルのエンジニアには、「可読性」の高いコードを書くスキルは必要不可欠です。単に目的とする処理が実行できればよいわけではありません。しかし実際の開発業務の中では、可読性は意外と軽視されてしまいがちです。 経験の浅い駆け出しのエンジニアにとっては、可読性の重要さを肌感覚で理解するのは難しいかもしれません。また、新人エンジニアに対してプログラミング言語や開発ツールについて
jqはとても便利なコマンドです。 JSONを返すAPIを実装するときや、SaaSのAPIから特定の情報を抜き出してシェル変数に代入するときなど、web開発や運用には欠かせないツールとなっています。 しかし、私にとってjqのクエリを一発で書くのは容易ではなく、思い通りの出力が得られないことがよくありました。 難しいエラーメッセージに悩まされて、jqで書くのを諦めて別の言語で書き直すこともありました。 jqの十八番と思える場面で使いこなせないのは、なかなか悔しいものがあります。 ツールを使うのが難しいなら、同じものを作ってしまえばよいのです。 jqの全ての機能を実装する jqを言語としてきちんと書けるようになる jqを完全に理解する jqの全ての機能を自分で実装してしまえば、jqがどういうものか、クエリがどのように処理されるのか、詳しくなれるはずです。 jqを得意な言語と言えるようになって、ク
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く