タグ

programmingと言語に関するvanbraamのブックマーク (120)

  • Go言語の例外を必ず扱うような言語機能のありがたさ - 日記マン

    僕はGo言語が好きだ。そのGoがもたらす恩恵のひとつとして、例外周りのセマンティクスがある。 Goでは例外はerrorという型の値に抽象化され関数の返り値として記述することが多いというのはご存知だと思う。 func GetUser(id int) (*User, error) { // do some thing ... if err != nil { return nil, err } return user, nil } 上記の例のように、複数の返り値を設定できる言語機能を利用して、 第一にその関数に期待する主要な出力のデータ、第二に関数内で発生した例外(error型の値)を伝播させるのが一般的な記述だ。 この if err != nil {return err} を毎回書くのが(たとえコピペでも) 「めんどくさい」、「冗長だ」という意見を持つプログラマもスクなくはない。 個人的には気

    Go言語の例外を必ず扱うような言語機能のありがたさ - 日記マン
    vanbraam
    vanbraam 2018/08/31
    例外処理を強制する,という意味では,Javaの検査例外も同じなのだが,Goだと擁護する人もいるのにJavaの方は(今は)ほぼ批判一色なのは何故なのだろう?(この記事の擁護はJavaの検査例外には余り当てはまらないが)
  • Go言語のGCについて - LINE ENGINEERING

    なぜGo言語はコンパクションを採用していないのか GoogleのRick Hudson氏によるISMM 2018 Keynote “Getting To Go”を参照すると、以下のことがわかります。 2014年の時点では”Read barrier free concurrent copying GC”を計画していた しかし期間的な制約から断念し、CMSに舵を切った(この時期に彼らは、ランタイムをCからGoに書き換える作業も行う必要がありました。Changes to the runtime) TCMallocをベースとしたメモリアロケーターを採用することで、断片化およびアロケーションの速度の問題を解決した Go言語のメモリアロケーションについては、ランタイムのコードのコメントにも詳しく記載されています。 malloc.go This was originally based on tcmal

    Go言語のGCについて - LINE ENGINEERING
    vanbraam
    vanbraam 2018/08/09
    「Goにこれがない(からダメ)」という論を述べる人は,その前に(この記事にある様に)なぜそういう設計/実装になっているのか,を調べるべき.その種のWhyはだいたい公開されてるので
  • C++入門書で再帰について解説しようとしたら思わぬ最適化できないコードに出くわした

    C++入門書を書き始めて早数カ月、すでに文章量が「江添亮の詳説C++17」の半分近くに達しているが、まだようやくループを説明したところだ。 ループの章を一通り書き終えて、ついでに再帰によってループを実現する方法について軽く触れて章を閉じようと、以下のようなコードを書いた。 void hello() { std::cout << "hello\n"s ; hello() ; } すると何故かsegmentation faultを起こすではないか。GCCでもClangでも同じ挙動になる。なぜC++コンパイラーはこの程度の末尾再帰を最適化できないのだろうか。 不思議に思って以下のコードも試すと、こちらは問題なく末尾再帰の最適化が行われる。 void hello() { std::cout << "hello\n" ; hello() ; } 違いは文字列だ。今回の入門書では、初心者に簡単にするた

    vanbraam
    vanbraam 2018/04/24
    C++はimplicitな仕様は余りない印象だが,仕様がexplicitでも場合分けが複雑過ぎて結局使いこなせない.この例は問題が仕様か実装かはまだ不明だが,こういう言語で自分の足を撃たずにコードを書くのは記憶力が良くないと無理
  • http://www.pllab.riec.tohoku.ac.jp/education/lectures/compiler/compilerSlides.pdf

  • Pythonのリスト内包表記はチューリング完全だから純LISPだって実装できる - Qiita

    まえがき Pythonにはリストに対する操作をさっと書ける、リスト内包表記というものが存在します。こんなやつです: >>> [2*n for n in range(5)] [0, 2, 4, 6, 8] # 等価なfor文 >>> lis = [] >>> for n in range(5): ... lis.append(2*n) ... >>> lis [0, 2, 4, 6, 8] ところでこのリスト内包表記、チューリング完全だって知ってましたか? こちらの記事でそのことが示されています。 リスト内包表記の活用と悪用 by @KTakahiro1729 あああっ! 開かれるPythonワンライナー&難読化の世界!! ステキすぎる!!! 超カッコいい!!!! ……でも、われわれはbrainfxxkだけで満足していてよいのでしょうか。ぼくは、もっと抽象的で、カッコよくて、とっても使いやす

    Pythonのリスト内包表記はチューリング完全だから純LISPだって実装できる - Qiita
    vanbraam
    vanbraam 2018/03/28
    XX信者:"それXXでできるよ!". Lisper:"それでLISPできるよ!"; Lisperは変態のレベルが違う
  • ラムダ計算基礎文法最速マスター - 貳佰伍拾陸夜日記

    ラムダ計算は, 多くのプログラミング言語, とくに関数型言語の原形になっています. ラムダ計算について理解しておくことは, 多くのプログラミング言語の習得に役立つでしょう. ラムダ計算はチューリング完全で, 計算能力としてはふつうのプログラミング言語と同じです. ラムダ計算で計算を書く訓練をしておくことは, 任意の計算を関数のみを使って(他の制御構文を用いずに)書くときに役立ちます. ふつうに書いたら煩雑な処理を, 関数型言語のやり方で書くとすっきりすることが多々あり, コードを自由自在に書くためには必須の考え方と言えるでしょう. 項 ラムダ計算の式を項(term)と言います. 項は変数, 抽象, 適用のいずれかです. 変数 変数(variable)はふつう1文字で書きます. 変数には関数内の束縛変数(bound variable)か自由変数(free variable)かという区別があり

    ラムダ計算基礎文法最速マスター - 貳佰伍拾陸夜日記
  • 「型」のお気持ち 〜 「型なし」と「動的型」って同じ?違う? - Qiita

    はじめに 「『型なし』と『動的型』って同じ?違う?」「ピピーッ!JavaScriptRubyを『型なし言語』と呼ぶのは間違いです!」 ツイッターを見ていると、このように「型」という言葉の用法に混乱がみられるので、私見で整理してみたいと思います。 まず、「型」という言葉の用法には、大きく分けて2つあります: 変数や関数についての静的にわかる性質 静的型言語では「型」と言ったら主にこちらを指します。 値の種類を区別するための実行時のタグ付け(型タグ) 「動的型言語」と言った場合の「型」はこちらです。 静的型言語でも「実行時型情報」という名前で、値にタグがついている場合があります。 前者の立場では、「動的型言語」は「型がない」ように見えて、後者の立場では、「動的型言語」にも「型がある」ように見えます。 「静的型 vs 動的型」(あるいは「型あり vs 型なし」)の議論をする際は、「型」という言

    「型」のお気持ち 〜 「型なし」と「動的型」って同じ?違う? - Qiita
    vanbraam
    vanbraam 2018/03/02
    とても勉強になった;"型について語る前に『型システム入門』を読め","「型」という語の多義性"<我が身を振り返って反省.type systemは最終的には数学だから,ちゃんと数学やらんといかんのだろうなぁ
  • 型付き ⊄ 型なし - soutaroブログ

    最近、TypeScriptについて考えることが多い。SideCIでWebフロントエンドの開発に使いはじめたこともあるし、Steepの開発をしていて「TypeScriptだとどうなるんだっけ??」などと言いながら試してみることもある。 TypeScriptは型付きのJavaScriptである。構文はほとんど同じで、使えるライブラリもかなり近い。JavaScriptへの変換はかなり自明で、ランタイムは全く同じ。性能の差はない。Webpackやnpmを初めとするツール群もかなり共通しているし、アプリケーションも似たようなもん。書いている気分には、ほとんど差がない。つまり、TypeScriptJavaScriptでプログラミングしているときに、なにか違いを感じるとすれば、それは(ほとんど)型付きの言語と型なしの言語の差と考えて良い。 RubyJavaを比較するのとは、全然話が違う。構文も意味も

    型付き ⊄ 型なし - soutaroブログ
    vanbraam
    vanbraam 2018/02/07
    JavaScriptって動的型付き言語では? "型なし"や"型検査器がない"と書くのは違う様な;静的型付き言語の方が,実行前に計算機が型の整合性をチェックしてくれる分,安心して書ける&実行できるという点には同意するが
  • 🐟日本語入力の落とし穴 #burikaigi - みずぴー日記

    BuriKaigi2018で発表した。 入力メソッドについてのテキストを書いてる途中なので、それを流用する目論見だったが、まったく別のものになった。 🎤原稿 あいさつ このセッションはJava+αだと聞いてるので、+α部分の寛容さに賭けて日本語入力の話をする。 日語を受け取るアプリケーションがおちいりがちな落とし穴についての話をするので、テキスト入力を受けつけるアプリケーションを作るときとかに役に立つと嬉しく思う。 会社の紹介 ボクはMisocaという請求書を管理するWebサービスを作っている会社に勤めている。 日本語入力の重要性 Misocaの開発には、様々なサービス・ソフトウェアを使っている。RubyRailsSlackGithubなどは使っている会社も多いと思う。 この図には記載されていないが日本語入力の使用頻度も極めて高い。 アンケート さて、ここでちょっとアンケートを取

    🐟日本語入力の落とし穴 #burikaigi - みずぴー日記
    vanbraam
    vanbraam 2018/02/05
    面白かった;Input method周りの難しさはしばしば感じる.例えば辞書登録時の入力文字列の定義はキー入力列ではない(例:macOSではkk=>株式会社の"入力文字列"は"っk"になる);英語圏の人の入力/文字列周りへの無理解は常々感じる
  • Amberで検討されているJava構文の変更 - Qiita

    Amberとは Java言語を拡張するプロジェクトです http://openjdk.java.net/projects/amber/ Amberのブランチ records データ保持用のクラスです sealed-types シールドタイプ newesapes line blockのエスケープ対応 patterns パターンマッチの全体的な開発 patterns-deconstruction パターンマッチでのデコンストラクション patterns-stage-1 instanceofのみのパターンマッチ pattern-runtime パターンマッチのランタイム? local-methods ローカルメソッド lambda-leftovers ラムダで_使えるようにする concise-method-declarations メソッド定義の簡略化 enhanced-enums 拡張enu

    Amberで検討されているJava構文の変更 - Qiita
    vanbraam
    vanbraam 2018/01/28
    予想より小幅な修正だった(Perl6比);recordは簡易classみたいなものか.やりたいことはわからなくもないがscopeを人間が理解しやすいように定義しないと死にそうな予感;他はまあ細かい改善
  • languagehealth.com - Domain Name For Sale | Dan.com

    VAT overview )Value Added TaxThe Value Added Tax (VAT) is a consumption tax applied in the European Union (EU) to all goods and services. All consumers in the EU are charged VAT on the purchase of goods and services. Businesses in the EU buying from a business in the same country are also charged VAT. Businesses in the EU buying from a business in a different EU country are not charged VAT. Consum

    languagehealth.com - Domain Name For Sale | Dan.com
    vanbraam
    vanbraam 2018/01/23
    "currently we look at the percentage of commits all to public projects on GitHub"<コミット数なのか,コミット量(行数?文字数?)なのか
  • C++作者によるC++否定声明、その元になったC作者によるC否定声明(もちろんネタ) - 仮想と現実

    1999年にネット上に現れた、C++の作者、ビャーネ・ストロヴストルップのインタビュー記事と称するものがある。まあネット上の怪文書の類といっていいかと思う。 Bjarne Stroustrup インタビュー (?) ようするに、C++という言語は、ただいたずらに難しく、プログラマを混乱させ、ソフトウェアを鈍重に巨大化させるものであり、ストロヴストルップはそれを狙って設計したというもの。なぜそんなことをしたかといえば、プログラミングが簡単になった結果、プログラマの給料は下がってしまったから、誰も使えない難しい言語を作ったのだという話。もちろんこれはストロヴストルップ人のインタビューではありえなくて、誰かのネタであるのだが、実際C++はちゃんと学習しようとすると嫌になる複雑さを持っているので、C++に挫折し続けている僕のような人間には「全く納得だ」と思えてしまうところがたちが悪いのだ。 この

    C++作者によるC++否定声明、その元になったC作者によるC否定声明(もちろんネタ) - 仮想と現実
    vanbraam
    vanbraam 2017/12/29
    自分はC++使いこなせない.例えば,変数の初期化syntaxが4種程あって,各々semacticsが微妙に異なり,使うべきcontextが違う.その差異はほぼ全て性能の為で,使いこなせれば多分強い;自分の能力不足と言語の複雑さは分けて考えたい
  • Tabs or Spaces

    The Top Starred repositories in Github have been analysed to understand which are the most common whitespace types in different programming languages.

    vanbraam
    vanbraam 2017/11/16
    tab派/space派勢力比を,言語ごとに,各110のリポジトリーを分析して計測.知らない言語を書き始める時,微妙に助かる
  • 社内開発環境の紹介 ~社内製プログラミング言語Mintについて~ | ハル研ブログ | ハル研究所

    はじめに こんにちは、プログラマーの鶴岡です。 今日は普段あまり表に出ることのない、ゲーム開発に使われている開発環境についての紹介をします。 今回紹介するのは、社内製プログラミング言語の「Mint」です。 なんとハル研では、ゲーム開発のために独自のプログラミング言語を仕様策定からコンパイラやVMの実装も含め、自社で開発しているのです。変わってるでしょ? Mintは以下のような特徴を持っています。 ・エラーに気づきやすい静的型付け言語 ・C++経験者が理解しやすい言語仕様 ・OSに依存しない高速なC#製コンパイラ ・実行環境に依存しないC++の仮想マシン ・C/C++の関数・クラスが簡単にバインド可能 今はオープンな実装の素晴らしいプログラミング言語がたくさんあり、それらを使うメリットも数多くあります。 それでも社内独自の言語を使うのはさまざまな利点があるからです。 一番大きなものは「ハル研

    社内開発環境の紹介 ~社内製プログラミング言語Mintについて~ | ハル研ブログ | ハル研究所
    vanbraam
    vanbraam 2017/11/10
    "似たような(しかもコピーする必要がある)クラスを、 名前を変えながら数十、数百と増やしていく"<この一文を読んだだけだとモジュール化ができないプログラミング言語の様に思えてしまう
  • 『なぜ私達は Python から Go に移行したのか - Frasco』へのコメント

    ブックマークしました ここにツイート内容が記載されます https://b.hatena.ne.jp/URLはspanで囲んでください Twitterで共有

    『なぜ私達は Python から Go に移行したのか - Frasco』へのコメント
    vanbraam
    vanbraam 2017/10/26
    Javaが遅いと言っている/思っている人へ:Javaはプログラムの起動に時間がかかるだけで処理性能は高い.例えばhttp://benchmarksgame.alioth.debian.org/u64q/java.htmlから各テスト(k-nucleotide,etc)のリンクを辿ればJavaの処理性能の高さがわかる
  • なぜ多くの開発者が今なお Swift よりも Objective-C を好むのか - Frasco

    iOS SDK がアナウンスされてから数年間、アプリ開発ゴールドラッシュの恩恵を得ようと、開発者たちは Objective-C の世界に群がっていました。しかしその時代は去りました。Swift が我々の前に現れて3年以上、それは古い同種の言語を主役の座から押しやりました。 Objective-C - かつてはアプリ開発の世界で人気急上昇のスター的存在でしたが - は、Apple の開発環境の中では2級の扱いになっていきました。そうです、それは時おり WWDC にて1枚か2枚のスライドに引っ張り出されることはあるかもしれませんが、カンファレンスの大部分は Swift に関してです。AppleSwift教育を推進しており、主要な言語の機能はまず Swift に対応するようになっています。 しかし、まだ Objective-C を使ってるなら、あなたは一人ではありません。たくさんの開発

    なぜ多くの開発者が今なお Swift よりも Objective-C を好むのか - Frasco
    vanbraam
    vanbraam 2017/10/25
    多くの人がSwiftを使わない理由として挙げているのは,"コンパイル時間の長さ(Objective-C比)","ABIの安定性の問題",そして勿論"Objective-C資産の大きさ(含む自身のスキル)"辺りか
  • Kotlinのスキルを持たないAndroid開発者は恐竜のようになるリスクに直面。モバイルアプリプラットフォームのRealmが予測

    Kotlinのスキルを持たないAndroid開発者は恐竜のようになるリスクに直面。モバイルアプリプラットフォームのRealmが予測 「明確に、(Androidにおける)Javaは死にかかっている」。 モバイルアプリケーションのためのプラットフォームを提供するRealmは、モバイル開発者を対象とした調査結果をもとに、2018年12月にはAndroidにおけるプログラミング言語としてKotlinJavaのシェアを超えるという内容を含むレポート「Realm Report」を発表しました。 Kotlinのスキルを持たないAndoproidデベロッパーは恐竜になる レポートの中では、KotlinAndroidの正式な開発言語になると発表されたGoogle I/Oのあとから、Kotlinのシェアは急速に伸びていると指摘。 Google I/Oの時点で約8%程度だったシェアは、その後4わずかカ月で1

    Kotlinのスキルを持たないAndroid開発者は恐竜のようになるリスクに直面。モバイルアプリプラットフォームのRealmが予測
    vanbraam
    vanbraam 2017/10/23
    これが正しい予測なら,KotlinがAndroid外にも広がってもおかしくないと思うのだが,そうならない理由は何なのだろう?
  • ソ連の宇宙開発で使われていたプログラミング言語は?

    stackexchange.com上のソビエトの宇宙開発でどんなプログラミング言語が使われているのか?という話題で興味深い議論が展開されています。 投稿者は「ソビエトの宇宙開発プログラムの宇宙船ブランでProLogが使われていたのを知りましたが、それ以前でどのようなプログラミング言語が使われていたのか誰か知りませんか?」という質問を投稿します。 それに対して「ソース出せ」というツッコミがつくと、投稿者は公開されたCIAの調査資料にProLogが使われていたと記載があったと返信します。 その後の回答で最も支持されているのはロシア語の書籍「 First computers for space applications (Герман Носкин, Первые БЦВМ космического применения)」を持っている方からの回答です。著者自身が宇宙開発に参加していたという事も

    ソ連の宇宙開発で使われていたプログラミング言語は?
    vanbraam
    vanbraam 2017/10/12
    "水城徹"氏のコメントも含めて興味深い;旧ソ連のプログラミング言語は,ガラパゴスの生物の様な進化を遂げたのだろうか?西側の情報は(党が許せば)かなり入手可能だろうから,外界から全く影響を受けない訳でもなさそう
  • Javaのジェネリクスは「まがい物」ではない - kmizuの日記

    先日、自分が書いた kmizu.hatenablog.com に対する反応として、「Javaのようなまがい物のジェネリクスと比較するのは適切でない」「Javaのジェネリクスと比較するのは適切でない」(おそらくC#や(C++等(2017/09/24追記))の言語と比較して)といった コメントをいくつか見かけました(はてなブックマークコメントやツイッターなどで)。しかし、ここでは、そのような言説こそが適切でない、ということを言いたいです。なお、methane氏との 対話については既に終わったものなので、それとは関係ありません。 そもそも、Javaジェネリクスは、静的型付き関数型言語で既に一般的であったパラメータ多相をJavaに追加する目的で導入されました(C++テンプレートのようなものをJavaに追加するためだと思っている人がいるかもしれませんが、それは実態にあっていません)。実際、Java

    Javaのジェネリクスは「まがい物」ではない - kmizuの日記
    vanbraam
    vanbraam 2017/09/25
    全く文脈の異なる記事だが,b:id:entry:286074513の時も思ったのは,何かを"まがい物"という人物は"本物"の定義を明示すべき,という事.定義が違ってたら議論以前の問題だし,オレオレ定義に基づく言葉は感想でしかない
  • むかしむかし、あるところにチェック例外という機能があったそうな | システムアーキテクトのごった煮

    ってことで、例外のお話です。 どうも僕の知っている限りでは、チェック例外という言語機能をもっているのはJavaだけみたいです。 僕個人としては、すばらしい機能なんですが。 Javaで最初にチェック例外を学んだ時、「そうそう、これこれ、これが欲しかったのよ!」 って思ったあの頃の想いは今も色あせていません。 「ずっと好きだったんだぜ~♪」って斉藤和義の曲を口ずさむくらいに、今もチェック例外を愛しています。 しかし、このチェック例外、他の言語からdisられまくって、最近の言語には取り込まれないという悲しいお話になっています。 過去に様々な議論があった中で、結論としてチェック例外は役に立たないってことになったらしいです。 経緯は知らんがね、そんなん。僕には役立ってるんだから。 ってことで、僕の立場から見た、チェック例外についての考察と扱いを書きます。 反論したい方、自重をお願いします。 だって、

    むかしむかし、あるところにチェック例外という機能があったそうな | システムアーキテクトのごった煮
    vanbraam
    vanbraam 2017/09/24
    例外=大域脱出の手段,検査例外=例外も戻り値の一種なので静的に型を把握,という認識.利点はある&コストも(IDEを使えば)大きいと思わないので,忌避される理由に納得感が余りない;Goの様に大域脱出を否定する方が理解できる