型チェッカーの歴史と性能比較について少しだけ掘り下げます
型チェッカーの歴史と性能比較について少しだけ掘り下げます
Swift Compilerとその周辺技術に関する勉強会,わいわいswiftcの中で開発合宿に行ってきました.場所は,湯河原のおんやど恵さんです. お題今回の合宿のお題は,「Swiftコンパイラの型推論を学ぶ」です.具体的には,おもちメタル氏お手製の型推論ライブラリの未実装の部分を各員が穴埋めし,すべてのテストをパスさせることがお題です.前回わいわいswiftcで発表された型推論のアルゴリズムの発表を聞いたメンバーは早速作業開始で,それ以外のメンバーは,おもち(メタルってかくの面倒だな)氏の発表をここで再度聞き,穴埋めスタートと相成りました. 今回のお題に関する発表資料 場所湯河原のおんやど恵という旅館でやりました.電源タップ,お茶,水が提供されます.オプションで,ホワイトボード,プロジェクタ,スクリーンを借りました.我々は,20人くらいが余裕で入る会議室を借りて,合宿を行いました.会議室
はじめに サプライチェーンリスク管理クラウドサービスResilireでエンジニアをしている奥村 @arashigaoka3です。 最近このxを拝見し、これをきっかけとしてHacker Newsのスレッドを見て、おもしろい内容だなと感じました。 Resilireではsqlcを採用しており、現状と今後の把握は非常に重要です。この記事では、sqlcで採用されているbuilt-in analyzerとdatabase-backed analyzerについて説明します。 built-in analyzer の狙いとメリット 私がsqlcに感じているメリットとして、SQLからコード生成する際、通信をしない点が素晴らしいなと思っています。これによって安定して高速な開発体験が可能になっていると感じています。 これはsqlcに内蔵されたbuilt-in analyzerが実現しています。すなわち、sqlcで
この記事は Rust Advent Calendar 2022 18日目の記事です。 みなさんはRust書いてますでしょうか?私も最速を目指して日々実装しています。 この記事では、RustでWebやスマホアプリ向けのライブラリを実装したときに頭を悩ませる、型の二度書きを解消してくれるツールである、typeshareの紹介をしていきたいと思います。 ここで書かれたコードはここに上がっています。 Rustは他の言語から呼ばれることが多い 自分だけかもしれないですが、Rustを採用するプロジェクトではすべてをRustで実装するのではないことが多いです。Webアプリではメインはtypescriptで実装、スマホアプリだったらメインはそのプラットフォームやdart(Flutter)でバックエンドの場合はPythonやRubyなどで実装して、速度・移植性・安全性などが必要な場合にワンポイントリリーフ的
ABEJA でプロダクト開発を行っている平原です。 先日、バックエンドで使っているGo言語のお勉強しようと「go言語 100Tips ありがちなミスを把握し、実装を最適化する」を読んでいました。その中でinterfaceは(パッケージを公開する側ではなく)受け側で定義するべきという記述を見つけてPythonでも同じことできないかと調べていると(PythonではProtocolを使うとうまくいきそうです。)、どうやら型ヒント機能がかなりアップデートされていることに気づき慌てて再入門しました。(3.7, 3.8あたりで止まってました。。) この記事では、公式ドキュメントを見ながら適当にコードを書き散らし、どの機能はどこまで使えるのか試してみたことをまとめてみました。 docs.python.org 環境 Python: 3.12.1 エディタ: Visual Studio Code Pylan
本記事はUzabase Advent Calendar 2023の19日目の記事です。 はじめに 株式会社ユーザベース BtoB SaaS Product Team(以下 Product Team)の山室です。 チームシャッフル[1]でこの10月から新しい開発チームに移籍したのですが、そこで初めて関数型プログラミング言語であるF#に触れました。 F#について学んでいく中で「代数的データ型」という概念を知り、普段の開発で使っていくほどに「めっちゃええやん」だったので、今回は代数的データ型についてまとめたいと思います! 代数的データ型 is 何? 代数的データ型(Algebraic Data Type: ADT)とは、特に関数型プログラミングで使われる、型を組み合わせることによって作られる型で、次の2種類から構成されます。 直積型 直積型(Product Types)は「積(AND)」を表現す
はじめに 1ヶ月後にモンスターハンターになる、ノベルワークスのりょうちん(ryotech34)です。 今回は、TypeScript向けに設計されたスキーマ宣言やバリデーションを助けてくれるライブラリである、zodを使用して条件分岐バリデーションを実装した際の備忘録です。 ドメインモデルとzodを組み合わせた実装方法として、下記の記事を参考にさせていただきました。ぜひ確認してみてください。 対象読者 zodに触れているもしくはこれから触ろうと思っている方 話さないこと zodの基本的な記法 本題 テーマ toB向けのサービスがあり、組織単位でベーシック、プロ、エンタープライズという3つのプランで契約できるとします。 そこでは、プランごとに毎月使用できるクレジットが制限されており、クレジットが制限値を超えると当該月では使用できないようにするという想定です。 やりたいこと 今回はプランが変更され
概要 Python には他の静的型付け言語のような明確な interface キーワードがありませんが、それに代わる Protocol という概念を最近知りました。 そこで、個人的に好んで使っている「Service クラスに Repository を注入する」という DI(依存性注入)パターンを、この Protocol を使って Python でどう実現できるか試してみることにしました。 この記事では、dependency-injector も組み合わせ、その具体的な実装方法をサンプルコードと共に備忘録として残します。 今回使ったコードは以下に置いてあります。 Protocol でインタフェースを定義する まずはインタフェースを Protocol を使って定義します。 Protocol とは Python の Protocol は、Go 言語の interface に非常によく似た概念です
Storybook の parameters Storybook の parameters は、Story や Component に静的なメタデータやパラメタを追加するための機能です。これらのパラメータは addon の設定や Story の表示方法のカスタマイズなどに利用されます。 // グローバルな parameters の設定 export const parameters = { backgrounds: { default: 'light', values: [ { name: 'light', value: '#f8f8f8' }, { name: 'dark', value: '#333333' }, ], }, }; // コンポーネントレベルでの設定 export default { component: Button, parameters: { background
トレイト(trait)すごい 「コンセプトから理解するRust」を読んで衝撃を受けました...。 トレイト(trait)は今まで自分が出会ったことがない概念です。 コンセプトから理解するRust 作者:原 旅人技術評論社Amazon 多くの言語ではinterfaceや基底クラスを作って「あなたはこの関数orメソッドを実装してください」というルールを定めることが出来ます。pythonであれば、以下のコードのように基底クラスを作成して、継承させることで実装が出来ます。 from abc import ABCMeta, abstractmethod # 基底クラス class MonsterInterface(metaclass=ABCMeta): @abstractmethod def name(self): # nameの実装をルール化 pass class Slime(MonsterInt
pydantic-graphの中のコードを読みながら、どのように実装されているかを見てみました。 概要 AIエージェントライブラリであるPydanticAIの機能の一部にpydantic-graphがあります。 これは、Python用の非同期グラフおよびステートマシンを作るためのライブラリですが、なかなかこの機能単体で使用する場面は少ないと思います。 今回はこのライブラリがどのように実装されているかをコードを追いながら見ていきます。 本文中のコード: https://github.com/hosimesi/code-for-techblogs/tree/main/pydanticai_graph PydanticAIとは PydanticAIは、生成AIのアプリケーションを作るためのPythonフレームワークです。前回の記事でも取り扱ったので、詳しくは公式ドキュメントとこちらを参照してくだ
概要 この記事ではDenoからリリースされた新しいパッケージレジストリであるJSRについて紹介します。JSRはTypeScriptとES Modulesで実装されたパッケージのためのレジストリです。 JSRを利用することで以下のようなメリットを享受しながらパッケージを利用した開発を行うことができます。 ソースコードをもとにした充実したドキュメント ライブラリの実装をエディタ上で直接確認 JSRの仕組み JSRにはTypeScriptとES Modulesで実装されたパッケージのソースコードを直接アップロードします。JSRのWebサイト上でこのソースコードやコメントから自動生成されたドキュメントを読むことができるようになっています。例えばWebサーバライブラリのoakのページを見てみましょう。 パッケージ内のモジュールやクラスなどが階層化されたページになっています。 それらのページで型情報や
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く