GithubHelp home page GithubHelp logo

d-manual's People

Contributors

k3kaimu avatar kyontan avatar tom-tan avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

d-manual's Issues

ライセンスについての意見

ライセンスには、
「このページを含め、原則としてd-manualのすべての記事(ソースコードを含む)にはCC BY-NC-SAを適用します。
」とありますが、ソースコードを再利用しようとした際にこれがプロジェクトの意図しない結果になる可能性があります。
ドキュメント自体のライセンスはそのままでよいと思うのですが、ドキュメント中のソースコードはほかのソフトウェアライセンス(GPLライセンスなど)のコードと混ぜて利用することができません。このことが、GNUクリエイティブ・コモンズジャパンcreativecommons FREQUENTLY ASKED QUESTIONS (英語)にも同じようなことが書かれています。具体的には、ソフトウェアで利用することを想定してライセンスが設計されていないので、二次利用が難しくなるということです。
そこで、ドキュメント中のソースコードはオープンソースライセンスで利用許諾することを提案します。

GitHub Pagesとその他公開方法

現在のd-manualを閲覧する方法としては、唯一GitHub上でmarkdownを閲覧できるだけである。
GitHubにはGitHub Pagesという優れた機能があるので、これを活用すべきである。

また、PDFやEPUBなど他のフォーマットでも配布できるような態勢を作らなければいけない。
そのためには、Markdownの文法をPandocに統一し、Pandocから全て生成させる方法が良い。

結論として、文法をPandocスタイルに改め、PandocによってGFM含めた他のフォーマットへ変換したものを提供すべきである。
また、HTMLやMarkdownとして生成したものについてはGitHub Pagesで閲覧できるようにすべきである。

「共用体」の執筆

共用体の使用機会はほとんど無いので、少し触れる程度に書きます。

「標準入力と文字と文字列」の分割と書き直し

具体的には、配列の次の章として文字と文字列操作の章を構成し、関数の章の次の章としてメイン関数と入出力に関する章を書きます。

  • 「文字と文字列操作」の章の追加
    • std.string
    • std.algorithm
  • 「メイン関数」の章の追加
    • std.getopt.getopt
  • 「ファイルと標準入出力」の章の追加
    • std.stdio
    • std.file
  • readme.md, answer.mdの修正(章題, 章番号など)
  • 前後の章の文章の修正(「おわりに」などの節で咬み合わない場所の修正)

main.md 内で,args[0] がプログラム名と違う

https://github.com/k3kaimu/d-manual/blob/master/main.md#%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89%E3%83%A9%E3%82%A4%E3%83%B3%E5%BC%95%E6%95%B0%E3%81%A8stdgetopt

の実行例に

$ dmd io_main
$ ./io_main foo bar
[".\\test.exe", "foo", "bar"]

とありますが,./io_main の出力結果の args[0] の値は "./io_main" になると思います.
手元にWindows環境が無いため確認できていないのですが,確認できましたら修正していただければ嬉しいです.

"007 その他の制御文"の追加

goto文やラベル, switch文やcaseについて言及。

switch文ではfinal switchについては軽く触れるか触れないでおく。
final switchについてはenumの項で記述予定

訳語や語句の統一と訳語一覧表

現在のd-manualでは、特に語句についての規定はなく、例えばreturn valueを「返り値」もしくは「戻り値」のどちらで書いても良い。
しかし、その場合には読者が混乱する可能性がある。

よって、必要最低限の語句に関する規定と、訳語一覧が必要である。

boolと評価される式 について

boolと評価される式の以下の一文ですが

文字列型だったら、文字列の長さが0であればfalseになります。

現状は配列がif文やassertの条件式に出現する場合、真偽値はarr.ptr !is nullによって評価されるため、上記記述は正しくありません。この挙動自体は公式forumでもよく議論に上っており(最近も大きなスレッドが立ってたはずです)、将来的にはarr.length != 0に変わるかもしれませんが、今のところはこの一文は削除したほうが無難だと思われます(言語の隅をつつくようなことはこのドキュメントの目的ではないと思うので)。

記述を削除した穴を埋めるものとしては、ポインタやクラス参照の場合についてのサンプルがいいかなと思います。

rdmd に与えられる引数に拡張子が付いているものと付いてないものがある

例えば,hello_world.md の最初の実行例では,

$ rdmd helloworld

とファイル名から拡張子を省いたものを rdmd の引数として使っていますが,writefwriteflnの解説部分では,

$ rdmd helloworld.d
1 : 2
2 : 4

のようにファイルを拡張子付きのまま rdmd に引数を渡しています.

どちらでも意図したとおりに動作するため間違いではないのですが,どちらかに統一したほうが混乱が少ないと思います.

/+
個人的には拡張子付きのほうが好きですが(tab でファイル名補完できる),統一されていればどちらでもいいと思います.
+/

Lambda syntaxの説明について

関数のリテラルとラムダ で、以下の様なサンプルコードが出てきていますが

void function() //f1 = {},          // これはNGみたい
                f2 = {;},           // こっちはOK
                f3 = (){};

void delegate() d1 = {},
                d2 = {;},
                d3 = (){};

NGケースを受け付けるようにするためのIssue 11661がgit-headで修正されましたので、2.065から上記コードが全て通るようになります。

function.md の「純粋性の強弱」の説明に間違いがある

  • 記事内で「strong purity」の例としてあげられている bar 関数は strong pure ではなく constant pure のはずです.
  • constinによって書き換え不可能なことを明示しておけば、その関数は強い純粋性を示す」と「強い純粋関数が返す返り値はすべての修飾子付き型へ暗黙変換可能」という記述に従うと以下のコードが動いてしまいます.
// 引数が in で修飾されているので strong pure
const(int[]) foo(in int[] arr)
{
  return arr;
}

void main()
{
    auto ar = [1,2,3];
    immutable a = foo(ar); // 任意の修飾子を付けても大丈夫?
    ar[1] = 3; // !!
}

  • 現在暗黙変換ができるのは2.063のchangelog にある,new/dup された配列だけです.

    DIP49のUnique Expressionの定義に,(まだ提案段階ですが)暗黙変換可能な式の定義があります.
    pure 関数が Unique Expression 中で重要になることは確かだと思うので,暗黙変換の例の後ろで「将来 Unique Expression で暗黙変換できるように,可能であれば関数をpure関数として定義しましょう」のような記述を追加するのがいいかもしれません.

  • weak pure な関数でも,返り値を暗黙変換できるものは考えられるため,purity の種類の記述を残す場合は,ユニットテストのしやすさに関する記述を追加するのがいいと思います(weak pureな関数では返り値と引数の両方を確認する必要がありますが,constant/strong pureな関数は返り値の確認だけで十分です).

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.