Roslyn 笔记

本贴最后更新于 2524 天前,其中的信息可能已经时移世易

最近发现一些脚本语言很有意思,很想写一门新的脚本语言,所以找到了 C#的语法分析相关的内容
using Microsoft.CodeAnalysis.CSharp.Syntax;
using Microsoft.CodeAnalysis.CSharp;

namespace Microsoft.CodeAnalysis.CSharp
{
public enum SyntaxKind : ushort
{
None = 0,
List = 1,
TildeToken = 8193,
ExclamationToken = 8194,
DollarToken = 8195,
PercentToken = 8196,
CaretToken = 8197,
AmpersandToken = 8198,
AsteriskToken = 8199,
OpenParenToken = 8200,
CloseParenToken = 8201,
MinusToken = 8202,
PlusToken = 8203,
EqualsToken = 8204,
OpenBraceToken = 8205,
CloseBraceToken = 8206,
OpenBracketToken = 8207,
CloseBracketToken = 8208,
BarToken = 8209,
BackslashToken = 8210,
ColonToken = 8211,
SemicolonToken = 8212,
DoubleQuoteToken = 8213,
SingleQuoteToken = 8214,
LessThanToken = 8215,
CommaToken = 8216,
GreaterThanToken = 8217,
DotToken = 8218,
QuestionToken = 8219,
HashToken = 8220,
SlashToken = 8221,
SlashGreaterThanToken = 8232,
LessThanSlashToken = 8233,
XmlCommentStartToken = 8234,
XmlCommentEndToken = 8235,
XmlCDataStartToken = 8236,
XmlCDataEndToken = 8237,
XmlProcessingInstructionStartToken = 8238,
XmlProcessingInstructionEndToken = 8239,
BarBarToken = 8260,
AmpersandAmpersandToken = 8261,
MinusMinusToken = 8262,
PlusPlusToken = 8263,
ColonColonToken = 8264,
QuestionQuestionToken = 8265,
MinusGreaterThanToken = 8266,
ExclamationEqualsToken = 8267,
EqualsEqualsToken = 8268,
EqualsGreaterThanToken = 8269,
LessThanEqualsToken = 8270,
LessThanLessThanToken = 8271,
LessThanLessThanEqualsToken = 8272,
GreaterThanEqualsToken = 8273,
GreaterThanGreaterThanToken = 8274,
GreaterThanGreaterThanEqualsToken = 8275,
SlashEqualsToken = 8276,
AsteriskEqualsToken = 8277,
BarEqualsToken = 8278,
AmpersandEqualsToken = 8279,
PlusEqualsToken = 8280,
MinusEqualsToken = 8281,
CaretEqualsToken = 8282,
PercentEqualsToken = 8283,
BoolKeyword = 8304,
ByteKeyword = 8305,
SByteKeyword = 8306,
ShortKeyword = 8307,
UShortKeyword = 8308,
IntKeyword = 8309,
UIntKeyword = 8310,
LongKeyword = 8311,
ULongKeyword = 8312,
DoubleKeyword = 8313,
FloatKeyword = 8314,
DecimalKeyword = 8315,
StringKeyword = 8316,
CharKeyword = 8317,
VoidKeyword = 8318,
ObjectKeyword = 8319,
TypeOfKeyword = 8320,
SizeOfKeyword = 8321,
NullKeyword = 8322,
TrueKeyword = 8323,
FalseKeyword = 8324,
IfKeyword = 8325,
ElseKeyword = 8326,
WhileKeyword = 8327,
ForKeyword = 8328,
ForEachKeyword = 8329,
DoKeyword = 8330,
SwitchKeyword = 8331,
CaseKeyword = 8332,
DefaultKeyword = 8333,
TryKeyword = 8334,
CatchKeyword = 8335,
FinallyKeyword = 8336,
LockKeyword = 8337,
GotoKeyword = 8338,
BreakKeyword = 8339,
ContinueKeyword = 8340,
ReturnKeyword = 8341,
ThrowKeyword = 8342,
PublicKeyword = 8343,
PrivateKeyword = 8344,
InternalKeyword = 8345,
ProtectedKeyword = 8346,
StaticKeyword = 8347,
ReadOnlyKeyword = 8348,
SealedKeyword = 8349,
ConstKeyword = 8350,
FixedKeyword = 8351,
StackAllocKeyword = 8352,
VolatileKeyword = 8353,
NewKeyword = 8354,
OverrideKeyword = 8355,
AbstractKeyword = 8356,
VirtualKeyword = 8357,
EventKeyword = 8358,
ExternKeyword = 8359,
RefKeyword = 8360,
OutKeyword = 8361,
InKeyword = 8362,
IsKeyword = 8363,
AsKeyword = 8364,
ParamsKeyword = 8365,
ArgListKeyword = 8366,
MakeRefKeyword = 8367,
RefTypeKeyword = 8368,
RefValueKeyword = 8369,
ThisKeyword = 8370,
BaseKeyword = 8371,
NamespaceKeyword = 8372,
UsingKeyword = 8373,
ClassKeyword = 8374,
StructKeyword = 8375,
InterfaceKeyword = 8376,
EnumKeyword = 8377,
DelegateKeyword = 8378,
CheckedKeyword = 8379,
UncheckedKeyword = 8380,
UnsafeKeyword = 8381,
OperatorKeyword = 8382,
ExplicitKeyword = 8383,
ImplicitKeyword = 8384,
YieldKeyword = 8405,
PartialKeyword = 8406,
AliasKeyword = 8407,
GlobalKeyword = 8408,
AssemblyKeyword = 8409,
ModuleKeyword = 8410,
TypeKeyword = 8411,
FieldKeyword = 8412,
MethodKeyword = 8413,
ParamKeyword = 8414,
PropertyKeyword = 8415,
TypeVarKeyword = 8416,
GetKeyword = 8417,
SetKeyword = 8418,
AddKeyword = 8419,
RemoveKeyword = 8420,
WhereKeyword = 8421,
FromKeyword = 8422,
GroupKeyword = 8423,
JoinKeyword = 8424,
IntoKeyword = 8425,
LetKeyword = 8426,
ByKeyword = 8427,
SelectKeyword = 8428,
OrderByKeyword = 8429,
OnKeyword = 8430,
EqualsKeyword = 8431,
AscendingKeyword = 8432,
DescendingKeyword = 8433,
NameOfKeyword = 8434,
AsyncKeyword = 8435,
AwaitKeyword = 8436,
ElifKeyword = 8467,
EndIfKeyword = 8468,
RegionKeyword = 8469,
EndRegionKeyword = 8470,
DefineKeyword = 8471,
UndefKeyword = 8472,
WarningKeyword = 8473,
ErrorKeyword = 8474,
LineKeyword = 8475,
PragmaKeyword = 8476,
HiddenKeyword = 8477,
ChecksumKeyword = 8478,
DisableKeyword = 8479,
RestoreKeyword = 8480,
ReferenceKeyword = 8481,
OmittedTypeArgumentToken = 8492,
OmittedArraySizeExpressionToken = 8493,
EndOfDirectiveToken = 8494,
EndOfDocumentationCommentToken = 8495,
EndOfFileToken = 8496,
BadToken = 8507,
IdentifierToken = 8508,
NumericLiteralToken = 8509,
CharacterLiteralToken = 8510,
StringLiteralToken = 8511,
XmlEntityLiteralToken = 8512,
XmlTextLiteralToken = 8513,
XmlTextLiteralNewLineToken = 8514,
InterpolatedStringToken = 8515,
InterpolatedStringStartToken = 8516,
InterpolatedStringMidToken = 8517,
InterpolatedStringEndToken = 8518,
EndOfLineTrivia = 8539,
WhitespaceTrivia = 8540,
SingleLineCommentTrivia = 8541,
MultiLineCommentTrivia = 8542,
DocumentationCommentExteriorTrivia = 8543,
SingleLineDocumentationCommentTrivia = 8544,
MultiLineDocumentationCommentTrivia = 8545,
DisabledTextTrivia = 8546,
PreprocessingMessageTrivia = 8547,
IfDirectiveTrivia = 8548,
ElifDirectiveTrivia = 8549,
ElseDirectiveTrivia = 8550,
EndIfDirectiveTrivia = 8551,
RegionDirectiveTrivia = 8552,
EndRegionDirectiveTrivia = 8553,
DefineDirectiveTrivia = 8554,
UndefDirectiveTrivia = 8555,
ErrorDirectiveTrivia = 8556,
WarningDirectiveTrivia = 8557,
LineDirectiveTrivia = 8558,
PragmaWarningDirectiveTrivia = 8559,
PragmaChecksumDirectiveTrivia = 8560,
ReferenceDirectiveTrivia = 8561,
BadDirectiveTrivia = 8562,
SkippedTokensTrivia = 8563,
XmlElement = 8574,
XmlElementStartTag = 8575,
XmlElementEndTag = 8576,
XmlEmptyElement = 8577,
XmlTextAttribute = 8578,
XmlCrefAttribute = 8579,
XmlNameAttribute = 8580,
XmlName = 8581,
XmlPrefix = 8582,
XmlText = 8583,
XmlCDataSection = 8584,
XmlComment = 8585,
XmlProcessingInstruction = 8586,
TypeCref = 8597,
QualifiedCref = 8598,
NameMemberCref = 8599,
IndexerMemberCref = 8600,
OperatorMemberCref = 8601,
ConversionOperatorMemberCref = 8602,
CrefParameterList = 8603,
CrefBracketedParameterList = 8604,
CrefParameter = 8605,
IdentifierName = 8616,
QualifiedName = 8617,
GenericName = 8618,
TypeArgumentList = 8619,
AliasQualifiedName = 8620,
PredefinedType = 8621,
ArrayType = 8622,
ArrayRankSpecifier = 8623,
PointerType = 8624,
NullableType = 8625,
OmittedTypeArgument = 8626,
ParenthesizedExpression = 8632,
ConditionalExpression = 8633,
InvocationExpression = 8634,
ElementAccessExpression = 8635,
ArgumentList = 8636,
BracketedArgumentList = 8637,
Argument = 8638,
NameColon = 8639,
CastExpression = 8640,
AnonymousMethodExpression = 8641,
SimpleLambdaExpression = 8642,
ParenthesizedLambdaExpression = 8643,
ObjectInitializerExpression = 8644,
CollectionInitializerExpression = 8645,
ArrayInitializerExpression = 8646,
AnonymousObjectMemberDeclarator = 8647,
ComplexElementInitializerExpression = 8648,
ObjectCreationExpression = 8649,
AnonymousObjectCreationExpression = 8650,
ArrayCreationExpression = 8651,
ImplicitArrayCreationExpression = 8652,
StackAllocArrayCreationExpression = 8653,
OmittedArraySizeExpression = 8654,
InterpolatedString = 8655,
ImplicitElementAccess = 8656,
AddExpression = 8668,
SubtractExpression = 8669,
MultiplyExpression = 8670,
DivideExpression = 8671,
ModuloExpression = 8672,
LeftShiftExpression = 8673,
RightShiftExpression = 8674,
LogicalOrExpression = 8675,
LogicalAndExpression = 8676,
BitwiseOrExpression = 8677,
BitwiseAndExpression = 8678,
ExclusiveOrExpression = 8679,
EqualsExpression = 8680,
NotEqualsExpression = 8681,
LessThanExpression = 8682,
LessThanOrEqualExpression = 8683,
GreaterThanExpression = 8684,
GreaterThanOrEqualExpression = 8685,
IsExpression = 8686,
AsExpression = 8687,
CoalesceExpression = 8688,
SimpleMemberAccessExpression = 8689,
PointerMemberAccessExpression = 8690,
ConditionalAccessExpression = 8691,
MemberBindingExpression = 8707,
ElementBindingExpression = 8708,
SimpleAssignmentExpression = 8714,
AddAssignmentExpression = 8715,
SubtractAssignmentExpression = 8716,
MultiplyAssignmentExpression = 8717,
DivideAssignmentExpression = 8718,
ModuloAssignmentExpression = 8719,
AndAssignmentExpression = 8720,
ExclusiveOrAssignmentExpression = 8721,
OrAssignmentExpression = 8722,
LeftShiftAssignmentExpression = 8723,
RightShiftAssignmentExpression = 8724,
UnaryPlusExpression = 8730,
UnaryMinusExpression = 8731,
BitwiseNotExpression = 8732,
LogicalNotExpression = 8733,
PreIncrementExpression = 8734,
PreDecrementExpression = 8735,
PointerIndirectionExpression = 8736,
AddressOfExpression = 8737,
PostIncrementExpression = 8738,
PostDecrementExpression = 8739,
AwaitExpression = 8740,
ThisExpression = 8746,
BaseExpression = 8747,
ArgListExpression = 8748,
NumericLiteralExpression = 8749,
StringLiteralExpression = 8750,
CharacterLiteralExpression = 8751,
TrueLiteralExpression = 8752,
FalseLiteralExpression = 8753,
NullLiteralExpression = 8754,
TypeOfExpression = 8760,
SizeOfExpression = 8761,
CheckedExpression = 8762,
UncheckedExpression = 8763,
DefaultExpression = 8764,
MakeRefExpression = 8765,
RefValueExpression = 8766,
RefTypeExpression = 8767,
NameOfExpression = 8768,
QueryExpression = 8774,
QueryBody = 8775,
FromClause = 8776,
LetClause = 8777,
JoinClause = 8778,
JoinIntoClause = 8779,
WhereClause = 8780,
OrderByClause = 8781,
AscendingOrdering = 8782,
DescendingOrdering = 8783,
SelectClause = 8784,
GroupClause = 8785,
QueryContinuation = 8786,
Block = 8792,
LocalDeclarationStatement = 8793,
VariableDeclaration = 8794,
VariableDeclarator = 8795,
EqualsValueClause = 8796,
ExpressionStatement = 8797,
EmptyStatement = 8798,
LabeledStatement = 8799,
GotoStatement = 8800,
GotoCaseStatement = 8801,
GotoDefaultStatement = 8802,
BreakStatement = 8803,
ContinueStatement = 8804,
ReturnStatement = 8805,
YieldReturnStatement = 8806,
YieldBreakStatement = 8807,
ThrowStatement = 8808,
WhileStatement = 8809,
DoStatement = 8810,
ForStatement = 8811,
ForEachStatement = 8812,
UsingStatement = 8813,
FixedStatement = 8814,
CheckedStatement = 8815,
UncheckedStatement = 8816,
UnsafeStatement = 8817,
LockStatement = 8818,
IfStatement = 8819,
ElseClause = 8820,
SwitchStatement = 8821,
SwitchSection = 8822,
CaseSwitchLabel = 8823,
DefaultSwitchLabel = 8824,
TryStatement = 8825,
CatchClause = 8826,
CatchDeclaration = 8827,
CatchFilterClause = 8828,
FinallyClause = 8829,
CompilationUnit = 8840,
GlobalStatement = 8841,
NamespaceDeclaration = 8842,
UsingDirective = 8843,
ExternAliasDirective = 8844,
AttributeList = 8847,
AttributeTargetSpecifier = 8848,
Attribute = 8849,
AttributeArgumentList = 8850,
AttributeArgument = 8851,
NameEquals = 8852,
ClassDeclaration = 8855,
StructDeclaration = 8856,
InterfaceDeclaration = 8857,
EnumDeclaration = 8858,
DelegateDeclaration = 8859,
BaseList = 8865,
TypeParameterConstraintClause = 8866,
ConstructorConstraint = 8867,
ClassConstraint = 8868,
StructConstraint = 8869,
TypeConstraint = 8870,
ExplicitInterfaceSpecifier = 8871,
EnumMemberDeclaration = 8872,
FieldDeclaration = 8873,
EventFieldDeclaration = 8874,
MethodDeclaration = 8875,
OperatorDeclaration = 8876,
ConversionOperatorDeclaration = 8877,
ConstructorDeclaration = 8878,
BaseConstructorInitializer = 8889,
ThisConstructorInitializer = 8890,
DestructorDeclaration = 8891,
PropertyDeclaration = 8892,
EventDeclaration = 8893,
IndexerDeclaration = 8894,
AccessorList = 8895,
GetAccessorDeclaration = 8896,
SetAccessorDeclaration = 8897,
AddAccessorDeclaration = 8898,
RemoveAccessorDeclaration = 8899,
UnknownAccessorDeclaration = 8900,
ParameterList = 8906,
BracketedParameterList = 8907,
Parameter = 8908,
TypeParameterList = 8909,
TypeParameter = 8910,
IncompleteMember = 8916,
ArrowExpressionClause = 8917,
InterpolatedStringInsert = 8918
}
}
每一种 SyntaxNode node 都有一个 CSharpKind()表明自身的节点语法类型,而每一种节点语法类型,往往有一个相关的类来处理分析该语法类型的语法实例的参数和一些相关变量
类似如:Class 类型定义
SyntaxKind.ClassDeclaration 类型的语法节点,在 namespace Microsoft.CodeAnalysis.CSharp.Syntax 里有 ClassDeclarationSyntax 类型处理解析此语法节点

如何得到一个文件的语法树呢
SyntaxTree tree = CSharpSyntaxTree.ParseText("代码内容");//代码内容就是代码文件里的内容,或者直接的文本值
tree.GetRoot()就是语法树根节点
tree.GetRoot().ChildNodes()就是子节点,每一个子节点都是一颗语法子树
这样遍历语法树,就可以得到每一个语法节点的任意数据。
当控制了一个文件形成的语法树的全部语法节点时,那么就可以用这些信息做一些事情

做什么事情
1:在 C#工程里集成 Roslyn 编译器使得 C#自解释自己[这是一个想法,就是在 C#工程里集成 C#编译器 Roslyn 然后加载文本文件作为脚本,与原生工程里的 C#代码集成使用,也就是互相类型透明] 这个想法比较前端,未来肯定有这种技术,就是语言自身既是编译语言,也是解释语言,既可以编译成字节码使用,还可以调用外部自身语言语法规范的脚本,在 C#中 Microsoft.CodeAnalysis.Scripting 有对这方面的一些实现,不过后来好像移除了,这个部分也可以看出微软对这方面曾经有发力
2:写一些代码转换工具,大部分针对 Java 和 C#简单语法互相转换的.或者是拥有大量类成员的类的互相转换
3:可以仿造 C#的语法树类型以及各种类型的参数,来实现自己的语法树系统,这部分就与设计新的脚本语言类似,不过细节肯定是非常复杂的

题外话
人类语言就中国来说,普通话就是北京话,而程序语言似乎并没有一种语言可以把所有语言联通起来,在能使用一个程序语言的环境里,大部分情况下,调用其他程序语言,往往比较复杂,类似调用 dll,或者使用脚本语言,等
为什么不能做到一个工程里,几个 C 文件几个 C++ 文件几个 C#文件然后各按各自的编译然后生成呢。

相关帖子

回帖

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...

推荐标签 标签

  • Hexo

    Hexo 是一款快速、简洁且高效的博客框架,使用 Node.js 编写。

    21 引用 • 140 回帖 • 14 关注
  • OpenResty

    OpenResty 是一个基于 NGINX 与 Lua 的高性能 Web 平台,其内部集成了大量精良的 Lua 库、第三方模块以及大多数的依赖项。用于方便地搭建能够处理超高并发、扩展性极高的动态 Web 应用、Web 服务和动态网关。

    17 引用 • 41 关注
  • Shell

    Shell 脚本与 Windows/Dos 下的批处理相似,也就是用各类命令预先放入到一个文件中,方便一次性执行的一个程序文件,主要是方便管理员进行设置或者管理用的。但是它比 Windows 下的批处理更强大,比用其他编程程序编辑的程序效率更高,因为它使用了 Linux/Unix 下的命令。

    122 引用 • 73 回帖 • 1 关注
  • TGIF

    Thank God It's Friday! 感谢老天,总算到星期五啦!

    285 引用 • 4482 回帖 • 660 关注
  • SQLServer

    SQL Server 是由 [微软] 开发和推广的关系数据库管理系统(DBMS),它最初是由 微软、Sybase 和 Ashton-Tate 三家公司共同开发的,并于 1988 年推出了第一个 OS/2 版本。

    19 引用 • 31 回帖 • 2 关注
  • 大疆创新

    深圳市大疆创新科技有限公司(DJI-Innovations,简称 DJI),成立于 2006 年,是全球领先的无人飞行器控制系统及无人机解决方案的研发和生产商,客户遍布全球 100 多个国家。通过持续的创新,大疆致力于为无人机工业、行业用户以及专业航拍应用提供性能最强、体验最佳的革命性智能飞控产品和解决方案。

    2 引用 • 14 回帖
  • 博客

    记录并分享人生的经历。

    272 引用 • 2386 回帖
  • WiFiDog

    WiFiDog 是一套开源的无线热点认证管理工具,主要功能包括:位置相关的内容递送;用户认证和授权;集中式网络监控。

    1 引用 • 7 回帖 • 553 关注
  • CSDN

    CSDN (Chinese Software Developer Network) 创立于 1999 年,是中国的 IT 社区和服务平台,为中国的软件开发者和 IT 从业者提供知识传播、职业发展、软件开发等全生命周期服务,满足他们在职业发展中学习及共享知识和信息、建立职业发展社交圈、通过软件开发实现技术商业化等刚性需求。

    14 引用 • 155 回帖
  • OnlyOffice
    4 引用 • 16 关注
  • 机器学习

    机器学习(Machine Learning)是一门多领域交叉学科,涉及概率论、统计学、逼近论、凸分析、算法复杂度理论等多门学科。专门研究计算机怎样模拟或实现人类的学习行为,以获取新的知识或技能,重新组织已有的知识结构使之不断改善自身的性能。

    76 引用 • 37 回帖
  • 生活

    生活是指人类生存过程中的各项活动的总和,范畴较广,一般指为幸福的意义而存在。生活实际上是对人生的一种诠释。生活包括人类在社会中与自己息息相关的日常活动和心理影射。

    229 引用 • 1450 回帖
  • RIP

    愿逝者安息!

    8 引用 • 92 回帖 • 314 关注
  • Q&A

    提问之前请先看《提问的智慧》,好的问题比好的答案更有价值。

    6888 引用 • 31055 回帖 • 230 关注
  • 学习

    “梦想从学习开始,事业从实践起步” —— 习近平

    163 引用 • 473 回帖
  • GitHub

    GitHub 于 2008 年上线,目前,除了 Git 代码仓库托管及基本的 Web 管理界面以外,还提供了订阅、讨论组、文本渲染、在线文件编辑器、协作图谱(报表)、代码片段分享(Gist)等功能。正因为这些功能所提供的便利,又经过长期的积累,GitHub 的用户活跃度很高,在开源世界里享有深远的声望,并形成了社交化编程文化(Social Coding)。

    207 引用 • 2031 回帖
  • 微信

    腾讯公司 2011 年 1 月 21 日推出的一款手机通讯软件。用户可以通过摇一摇、搜索号码、扫描二维码等添加好友和关注公众平台,同时可以将自己看到的精彩内容分享到微信朋友圈。

    130 引用 • 793 回帖 • 1 关注
  • 快应用

    快应用 是基于手机硬件平台的新型应用形态;标准是由主流手机厂商组成的快应用联盟联合制定;快应用标准的诞生将在研发接口、能力接入、开发者服务等层面建设标准平台;以平台化的生态模式对个人开发者和企业开发者全品类开放。

    15 引用 • 127 回帖 • 4 关注
  • CodeMirror
    1 引用 • 2 回帖 • 126 关注
  • Sandbox

    如果帖子标签含有 Sandbox ,则该帖子会被视为“测试帖”,主要用于测试社区功能,排查 bug 等,该标签下内容不定期进行清理。

    379 引用 • 1221 回帖 • 589 关注
  • QQ

    1999 年 2 月腾讯正式推出“腾讯 QQ”,在线用户由 1999 年的 2 人(马化腾和张志东)到现在已经发展到上亿用户了,在线人数超过一亿,是目前使用最广泛的聊天软件之一。

    45 引用 • 557 回帖 • 181 关注
  • 深度学习

    深度学习(Deep Learning)是机器学习的分支,是一种试图使用包含复杂结构或由多重非线性变换构成的多个处理层对数据进行高层抽象的算法。

    40 引用 • 40 回帖 • 1 关注
  • 以太坊

    以太坊(Ethereum)并不是一个机构,而是一款能够在区块链上实现智能合约、开源的底层系统。以太坊是一个平台和一种编程语言 Solidity,使开发人员能够建立和发布下一代去中心化应用。 以太坊可以用来编程、分散、担保和交易任何事物:投票、域名、金融交易所、众筹、公司管理、合同和知识产权等等。

    34 引用 • 367 回帖
  • Rust

    Rust 是一门赋予每个人构建可靠且高效软件能力的语言。Rust 由 Mozilla 开发,最早发布于 2014 年 9 月。

    58 引用 • 22 回帖 • 1 关注
  • LeetCode

    LeetCode(力扣)是一个全球极客挚爱的高质量技术成长平台,想要学习和提升专业能力从这里开始,充足技术干货等你来啃,轻松拿下 Dream Offer!

    209 引用 • 72 回帖
  • Mac

    Mac 是苹果公司自 1984 年起以“Macintosh”开始开发的个人消费型计算机,如:iMac、Mac mini、Macbook Air、Macbook Pro、Macbook、Mac Pro 等计算机。

    164 引用 • 594 回帖 • 1 关注
  • DNSPod

    DNSPod 建立于 2006 年 3 月份,是一款免费智能 DNS 产品。 DNSPod 可以为同时有电信、网通、教育网服务器的网站提供智能的解析,让电信用户访问电信的服务器,网通的用户访问网通的服务器,教育网的用户访问教育网的服务器,达到互联互通的效果。

    6 引用 • 26 回帖 • 524 关注