在我的2016,感恩、乐观、努力一文中,说2017年要进行技术储备,开始写第一本书或者翻译第一本书,当时未免是夸下海口,但是很快机会就来了,在学scala基础的过程中碰到了shapeless框架,恰好其有一本英文官方指导,链接地址为The Type Astronaut's Guide to Shapeless,很薄的一本书,100多页,于是就想能不能将其翻译下来,权当练手,贻笑大方。本文主要是对shapeless以及该书做简单介绍,相当于序,具体翻译内容大概要到鸡年了。
shapeless是一款开源的scala类型处理框架,其Github地址为https://github.com/milessabin/shapeless,简介如下:
shapeless is a type class and dependent type based generic programming library for Scala. It had its origins in several talks by Miles Sabin (@milessabin), given over the course of 2011, on implementing scrap your boilerplate and higher rank polymorphism in Scala. Since then it has evolved from being a resolutely experimental project into library which, while still testing the limits of what's possible in Scala, is being used widely in production systems wherever there are arities to be abstracted over and boilerplate to be scrapped.
所以shapeless是用来在scala中进行type class处理和dependent type处理的框架。关于type class可以参考http://hongjiang.info/scala-type-classes-pattern/、dependent type可以参考http://hongjiang.info/scala-type-system-dependent-types/。
个人理解type class就是高阶的隐式参数,相当于对类型进行分类,常用的有Ordering Numeric、Manifest、TypeTag、ClassTag等,可以翻译为分类类型。dependent type指当type class中存在多个类型参数的时候,某一个类型参数可以由其他类型参数决定,可以翻译为依赖类型。
这本书是其官方指南,有没有中文版也不太清楚,借用一句话就是少一些功利主义,多一些不为什么的坚持。所以我仅仅就是想把他翻译下来,一是提高英语水平,二是更好的理解它。So,just do it!下面是我对该书1.2节About this book翻译。
1.2 关于该书
该书共分为两部分。
第一部分介绍类型类(type class)派生,它使我们仅用一些泛型规则来为任何代数数据类型(algebraic data type,简称ADT)创建类型类实例。第一部分包含四个章节。
第二部分介绍在shapeless.ops包中提供的“ops类型类”,它来源于一个处理泛型表示工具的扩展库。在接下来的三章仅为大家介绍入门理论,而不是介绍每一个操作(op)的细节。
不出意外,这应该是猴年的最后一篇博客,这篇文章说大一点,也为鸡年的奋斗开了一个头,希望接下来的人生能够扎扎实实静下心来干点事情、学点东西。当然水平有限,并且还没有深入研究该书,很多问题和知识点自己还理解的不够,所以难免会出现错误,欢迎批评指正!同时在这里感谢我的合伙人包亮——西北第一程序员——对我的翻译以及编码的精心校对和指导!在这里也预祝所有的人新年快乐,新的一年里能够心想事成,取得令自己满意的收获!