Files
pages/2024/08/03/cangjie.html
2025-12-31 16:00:29 +00:00

350 lines
23 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<!-- Begin Jekyll SEO tag v2.8.0 -->
<title>华为仓颉语言使用体验 | Mayx的博客</title>
<meta name="generator" content="Jekyll v3.9.5" />
<meta property="og:title" content="华为仓颉语言使用体验" />
<meta name="author" content="mayx" />
<meta property="og:locale" content="zh_CN" />
<meta name="description" content="看看“自研”的轮子有什么特别之处?" />
<meta property="og:description" content="看看“自研”的轮子有什么特别之处?" />
<meta property="og:site_name" content="Mayx的博客" />
<meta property="og:type" content="article" />
<meta property="article:published_time" content="2024-08-03T00:00:00+08:00" />
<meta name="twitter:card" content="summary" />
<meta property="twitter:title" content="华为仓颉语言使用体验" />
<meta name="google-site-verification" content="huTYdEesm8NaFymixMNqflyCp6Jfvd615j5Wq1i2PHc" />
<meta name="msvalidate.01" content="0ADFCE64B3557DC4DC5F2DC224C5FDDD" />
<meta name="yandex-verification" content="fc0e535abed800be" />
<script type="application/ld+json">
{"@context":"https://schema.org","@type":"BlogPosting","author":{"@type":"Person","name":"mayx"},"dateModified":"2024-08-03T00:00:00+08:00","datePublished":"2024-08-03T00:00:00+08:00","description":"看看“自研”的轮子有什么特别之处?","headline":"华为仓颉语言使用体验","mainEntityOfPage":{"@type":"WebPage","@id":"/2024/08/03/cangjie.html"},"publisher":{"@type":"Organization","logo":{"@type":"ImageObject","url":"https://avatars0.githubusercontent.com/u/17966333"},"name":"mayx"},"url":"/2024/08/03/cangjie.html"}</script>
<!-- End Jekyll SEO tag -->
<link rel="canonical" href="https://mabbs.github.io/2024/08/03/cangjie.html" />
<link type="application/atom+xml" rel="alternate" href="/atom.xml" title="Mayx的博客" />
<link rel="alternate" type="application/rss+xml" title="Mayx的博客(RSS)" href="/rss.xml" />
<link rel="alternate" type="application/json" title="Mayx的博客(JSON Feed)" href="/feed.json" />
<link rel="stylesheet" href="/assets/css/style.css?v=1767196818" />
<!--[if !IE]> -->
<link rel="stylesheet" href="/Live2dHistoire/live2d/css/live2d.css" />
<!-- <![endif]-->
<link rel="search" type="application/opensearchdescription+xml" href="/opensearch.xml" title="Mayx的博客" />
<link rel="webmention" href="https://webmention.io/mabbs.github.io/webmention" />
<link rel="pingback" href="https://webmention.io/mabbs.github.io/xmlrpc" />
<link rel="preconnect" href="https://summary.mayx.eu.org" crossorigin="anonymous" />
<link rel="prefetch" href="https://www.blogsclub.org/badge/mabbs.github.io" as="image" />
<link rel="blogroll" type="text/xml" href="/blogroll.opml" />
<link rel="me" href="https://github.com/Mabbs" />
<script src="/assets/js/jquery.min.js"></script>
<!--[if lt IE 9]>
<script src="//cdnjs.cloudflare.com/ajax/libs/html5shiv/3.7.3/html5shiv.min.js"></script>
<script src="//cdnjs.cloudflare.com/ajax/libs/jquery-ajaxtransport-xdomainrequest/1.0.3/jquery.xdomainrequest.min.js"></script>
<script src="//cdnjs.cloudflare.com/ajax/libs/respond.js/1.4.2/respond.min.js"></script>
<![endif]-->
<script>
var lastUpdated = new Date("Thu, 01 Jan 2026 00:00:18 +0800");
var BlogAPI = "https://summary.mayx.eu.org";
</script>
<script src="/assets/js/main.js"></script>
<!--[if !IE]> -->
<!-- Global site tag (gtag.js) - Google Analytics -->
<script async="async" src="https://www.googletagmanager.com/gtag/js?id=UA-137710294-1"></script>
<script>
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('js', new Date());
gtag('config', 'UA-137710294-1');
</script>
<script src="/assets/js/instant.page.js" type="module"></script>
<!-- <![endif]-->
</head>
<body>
<!--[if !IE]> --><noscript><marquee style="top: -15px; position: relative;"><small>发现当前浏览器没有启用JavaScript这不影响你的浏览但可能会有一些功能无法使用……</small></marquee></noscript><!-- <![endif]-->
<!--[if IE]><marquee style="top: -15px; position: relative;"><small>发现当前浏览器为Internet Explorer这不影响你的浏览但可能会有一些功能无法使用……</small></marquee><![endif]-->
<div class="wrapper">
<header class="h-card">
<h1><a class="u-url u-uid p-name" rel="me" href="/">Mayx的博客</a></h1>
<img src="https://avatars0.githubusercontent.com/u/17966333" fetchpriority="high" class="u-photo" alt="Logo" style="width: 90%; max-width: 300px; max-height: 300px;" />
<p class="p-note">Mayx's Home Page</p>
<form action="/search.html">
<input type="text" name="keyword" id="search-input-all" placeholder="Search blog posts.." />&#160;<input type="submit" value="搜索" />
</form>
<br />
<p class="view"><a class="u-url" href="/Mabbs/">About me</a></p>
<ul class="downloads">
<li style="width: 270px; border-right: none;"><a href="/MayxBlog.tgz">Download <strong>TGZ File</strong></a></li>
</ul>
</header>
<section class="h-entry">
<small><time class="date dt-published" datetime="2024-08-03T00:00:00+08:00">3 August 2024</time> - 字数统计2126 - 阅读大约需要7分钟 - Hits: <span id="/2024/08/03/cangjie.html" class="visitors">Loading...</span></small>
<h1 class="p-name">华为仓颉语言使用体验</h1>
<p class="view">by <a class="p-author h-card" href="//github.com/Mabbs">mayx</a></p>
<div id="outdate" style="display:none;">
<hr /><p>
这是一篇创建于 <span id="outime"></span> 天前的文章,其中的信息可能已经有所发展或是发生改变。
</p>
</div>
<script>
daysold = Math.floor((new Date().getTime() - new Date("Sat, 03 Aug 2024 00:00:00 +0800").getTime()) / (24 * 60 * 60 * 1000));
if (daysold > 90) {
document.getElementById("outdate").style.display = "block";
document.getElementById("outime").innerHTML = daysold;
}
</script>
<hr />
<b>AI摘要</b>
<p id="ai-output">这篇文章主要介绍了作者尝试华为的仓颉编程语言的使用体验。仓颉语法与Python有较大差异作者通过编写乘法表和递归函数验证其运行性。然而编译后的程序在其他电脑上不能运行因为依赖的“libcangjie-runtime”和“libsecurec”库在测试版SDK中是动态链接且缺失静态编译版本。文章还提到仓颉语言融合了多种特性如Java的复杂性、TS的声明以及CJVM字节码支持但它似乎没有内置异步语法。虽然支持C和Python库调用但对于仓颉的特别之处暂无明显显现。作者提到鸿蒙Next的目标和可能存在的挑战指出其他开发者可能会倾向于使用成熟且生态丰富的语言。最后作者表达了对华为大规模投入不明朗项目的态度认为过多的营销可能对公司前景构成风险。</p>
<hr />
<ul><li><a href="#起因">起因</a></li><li><a href="#编写体验">编写体验</a></li><li><a href="#对仓颉语言的看法">对仓颉语言的看法</a></li><li><a href="#感想">感想</a></li></ul>
<hr />
<main class="post-content e-content" role="main"><p>看看“自研”的轮子有什么特别之处?<!--more--></p>
<h1 id="起因">
<a href="#起因"><svg class='octicon' viewBox='0 0 16 16' version='1.1' width='16' height='32' aria-hidden='true'><path fill-rule='evenodd' d='M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z'></path></svg></a> 起因
</h1>
<p>前段时间因为华为对它的仓颉编程语言开启了公测(公开内测),随后媒体又吹了一波。虽然华为最近也整了好多乱七八糟的东西,但至少我没有亲眼见过。既然这个仓颉的编译器公测了我就申请试试看呗,反正编译器又不需要特定的设备或者系统运行。 </p><p>
申请之后过了几天就通过了然后编译器的安装包就可以在GitCode上下载。目前看起来没有开源可以在Windows x64macOS和Linux的x64和aarch64上运行和编译另外也支持它的那个鸿蒙Next系统虽然我申请了那个插件也通过了但是毕竟没有真机而且那个IDE挺大的也就算有模拟器可以用也懒得试😂。</p>
<h1 id="编写体验">
<a href="#编写体验"><svg class='octicon' viewBox='0 0 16 16' version='1.1' width='16' height='32' aria-hidden='true'><path fill-rule='evenodd' d='M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z'></path></svg></a> 编写体验
</h1>
<p>首先我下了Windows版的编译器安装好之后看了看文档感觉语法倒是没什么复杂的不过和Python差别还是挺大的所以还是得看着文档写😂。看了一圈之后首先写个九九乘法表试试看</p>
<div class="language-kotlin highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nf">main</span><span class="p">()</span> <span class="p">{</span>
<span class="k">for</span> <span class="p">(</span><span class="n">i</span> <span class="k">in</span> <span class="mi">1</span><span class="o">..</span><span class="mi">10</span><span class="p">)</span> <span class="p">{</span>
<span class="k">for</span> <span class="p">(</span><span class="n">j</span> <span class="k">in</span> <span class="mi">1</span><span class="o">..</span><span class="n">i</span> <span class="p">+</span> <span class="mi">1</span><span class="p">)</span> <span class="p">{</span>
<span class="nf">print</span><span class="p">(</span><span class="s">"${j}*${i}=${i*j}\t"</span><span class="p">)</span>
<span class="p">}</span>
<span class="nf">println</span><span class="p">()</span>
<span class="p">}</span>
<span class="p">}</span>
</code></pre></div></div>
<p>编译之后运行倒是没什么问题,随后再写个递归版的试试看:</p>
<div class="language-kotlin highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="n">func</span> <span class="nf">row</span><span class="p">(</span><span class="n">i</span><span class="p">:</span> <span class="nc">Int</span><span class="p">):</span> <span class="nc">Unit</span><span class="p">{</span>
<span class="k">if</span><span class="p">(</span><span class="n">i</span> <span class="p">&lt;</span> <span class="mi">10</span><span class="p">){</span>
<span class="nf">col</span><span class="p">(</span><span class="n">i</span><span class="p">,</span> <span class="mi">1</span><span class="p">)</span>
<span class="nf">println</span><span class="p">()</span>
<span class="nf">row</span><span class="p">(</span><span class="n">i</span> <span class="p">+</span> <span class="mi">1</span><span class="p">)</span>
<span class="p">}</span>
<span class="p">}</span>
<span class="n">func</span> <span class="nf">col</span><span class="p">(</span><span class="n">i</span><span class="p">:</span><span class="nc">Int</span><span class="p">,</span> <span class="n">j</span><span class="p">:</span><span class="nc">Int</span><span class="p">):</span> <span class="nc">Unit</span><span class="p">{</span>
<span class="k">if</span><span class="p">(</span><span class="n">i</span> <span class="p">&gt;=</span> <span class="n">j</span><span class="p">){</span>
<span class="nf">print</span><span class="p">(</span><span class="s">"${j}*${i}=${i*j}\t"</span><span class="p">)</span>
<span class="nf">col</span><span class="p">(</span><span class="n">i</span><span class="p">,</span> <span class="n">j</span> <span class="p">+</span> <span class="mi">1</span><span class="p">)</span>
<span class="p">}</span>
<span class="p">}</span>
<span class="nf">main</span><span class="p">()</span> <span class="p">{</span>
<span class="nf">row</span><span class="p">(</span><span class="mi">1</span><span class="p">)</span>
<span class="p">}</span>
</code></pre></div></div>
<p>运行也没有问题那就试试看把编译的产物放别的电脑运行试试看结果就不能运行了。似乎是依赖了“libcangjie-runtime”和“libsecurec”这两个库即使是在编译选项里开了静态编译也没有用因为SDK里没有这两个的静态库文件而且也没有它们的源代码……像Golang都是静态编译没有什么乱七八糟的依赖的啊…… </p><p>
另外我在Github上搜了一下“libsecurec”这个库是有源代码的叫做<a href="https://github.com/openeuler-mirror/libboundscheck">libboundscheck</a>看名字是用来字符边界检查之类的库似乎华为很多产品里都有用在这个SDK里用的是<a href="https://github.com/openeuler-mirror/libboundscheck/tree/5701ca210dfb71037f3cb3340166d150917e8a4d">这个</a>版本。 </p><p>
不过如果仓颉主要是给鸿蒙Next用的话那个系统应该是预先有装仓颉的运行环境的应该不静态编译也行。</p>
<h1 id="对仓颉语言的看法">
<a href="#对仓颉语言的看法"><svg class='octicon' viewBox='0 0 16 16' version='1.1' width='16' height='32' aria-hidden='true'><path fill-rule='evenodd' d='M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z'></path></svg></a> 对仓颉语言的看法
</h1>
<p>单从我上面写的这点代码看的话这语法比C都复杂😂看了一下文档乱七八糟的概念还挺多毕竟是融合了各种各样的语言有Java的复杂支持什么注解和反射之类的还有TS的声明类型变量还要指定变不变啥的不过似乎没有关于异步的语法可能是用线程弥补吧其他近些年出的语言我没怎么接触过所以其他的不太清楚不过让AI看了看我写的那段代码它说像Kotlin然后讨论群里又说借鉴了50%的Rust🤣确实融合的有点多。另外据说除了编译成机器码CJNative外还能编译成字节码CJVM不过CJVM在内测不知道到时候会不会正式发布……除此之外也能调C和Python的库似乎是用的FFI调用可以不用单独开个进程然后去获得输出的值效率应该还是挺高的。 </p><p>
但是要说这个语言有什么特别之处目前似乎也看不出来不过毕竟仓颉语言算是给鸿蒙Next系统用的学着iOS/macOS整Swift那样吧但是在苹果系开发要想用苹果的框架可能Swift是最好的选项。鸿蒙Next除了这个还整的什么ArkTS那个可能算是小程序吧毕竟那个没见过不知道底层是怎么运行的至于鸿蒙Next能不能用其他语言开发目前也不知道倒是能用NDK要是能的话大家肯定是用现有已经开发好的改改然后移植到鸿蒙Next吧前提是这些公司认为用鸿蒙Next的人使用他们的软件有足够的收益如果不行从头开发成本就更高了估计得劝退一大堆公司。毕竟鸿蒙Next没有历史和Android以及iOS根本不能比而且相比也没有解决什么痛点另外其他手机厂商也不会考虑使用鸿蒙Next只能像苹果一样搞成仅自家使用的系统。但是用户量根本和iPhone不能比公司可不会听华为在网上的营销毕竟公司是要实实在在赚钱的靠营销只能忽悠普通人但要是普通人买来发现除了国内大厂的软件其他软件全不能用估计也没人买了🤣</p><p>
另外鸿蒙Next好像也会搞PC版就像Mac那样。不过Mac是正经啥语言写的都能运行而且相对还是挺开放的到时候如果PC版的鸿蒙Next连终端个也没有而且只能运行仓颉语言写的软件那怕是比其他Linux发行版还废了🤣。 </p><p>
不过如果用户侧如果搞不好的话说不定可以在服务器上用,毕竟服务器的话只在乎能不能写出这个软件,至于用什么语言写其实不重要,只要性能好就行,如果华为能整一批写仓颉的学生,还能把该整的库整好,也许会有公司考虑用,在做政府相关的项目说不定可以作为卖点🤣。</p>
<h1 id="感想">
<a href="#感想"><svg class='octicon' viewBox='0 0 16 16' version='1.1' width='16' height='32' aria-hidden='true'><path fill-rule='evenodd' d='M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z'></path></svg></a> 感想
</h1>
<p>虽然说华为整的这堆莫名其妙的东西也许没什么用,或者也可能会有些用,不过毕竟搞这些东西已经算是用公司的前景去赌未来了,虽然拿这些东西搞营销很恶心,但目前来看至少确实是有在也许没回报的东西上投真金白银的,还是挺厉害的。 </p><p>
但正因为它们营销搞太多了,到时候因为搞这些东西把公司玩死了我觉得也是大快人心的🤣🤣🤣。</p></main>
<small style="display: block">tags: <a rel="category tag" class="p-category" href="/search.html?keyword=%E5%8D%8E%E4%B8%BA"><em>华为</em></a> - <a rel="category tag" class="p-category" href="/search.html?keyword=%E4%BB%93%E9%A2%89"><em>仓颉</em></a> - <a rel="category tag" class="p-category" href="/search.html?keyword=%E4%BD%93%E9%AA%8C"><em>体验</em></a> <span style="float: right;"><a href="https://gitlab.com/mayx/mayx.gitlab.io/tree/master/_posts/2024-08-03-cangjie.md">查看原始文件</a></span></small>
<h4 style="border-bottom: 1px solid #e5e5e5;margin: 2em 0 5px;">推荐文章</h4>
<p id="suggest-container">Loading...</p>
<script>
var suggest = $("#suggest-container");
$.get(BlogAPI + "/suggest?id=/2024/08/03/cangjie.html&update=" + lastUpdated.valueOf(), function (data) {
if (data.length) {
getSearchJSON(function (search) {
suggest.empty();
var searchMap = {};
for (var i = 0; i < search.length; i++) {
searchMap[search[i].url] = search[i];
}
var tooltip = $('<div class="content-tooltip"></div>').appendTo('body').hide();
for (var j = 0; j < data.length; j++) {
var item = searchMap[data[j].id];
if (item) {
var link = $('<a href="' + item.url + '">' + item.title + '</a>');
var contentPreview = item.content.substring(0, 100);
if (item.content.length > 100) {
contentPreview += "……";
}
link.hover(
function(e) {
tooltip.text($(this).data('content'))
.css({
top: e.pageY + 10,
left: e.pageX + 10
})
.show();
},
function() {
tooltip.hide();
}
).mousemove(function(e) {
tooltip.css({
top: e.pageY + 10,
left: e.pageX + 10
});
}).data('content', contentPreview);
suggest.append(link);
suggest.append(' - ' + item.date + '<br />');
}
}
});
} else {
suggest.html("暂无推荐文章……");
}
});
</script>
<br />
<div class="pagination">
<span class="prev">
<a href="/2024/07/03/ai-summary.html">
上一篇使用Cloudflare Workers制作博客AI摘要
</a>
</span>
<br />
<span class="next">
<a href="/2024/08/17/mac-mini.html">
下一篇Mac mini 2018使用体验
</a>
</span>
</div>
<!--[if !IE]> -->
<link rel="stylesheet" href="/assets/css/gitalk.css">
<script src="/assets/js/gitalk.min.js"></script>
<div id="gitalk-container"></div>
<script>
var gitalk = new Gitalk({
clientID: '36557aec4c3cb04f7ac6',
clientSecret: 'ac32993299751cb5a9ba81cf2b171cca65879cdb',
repo: 'mabbs.github.io',
owner: 'Mabbs',
admin: ['Mabbs'],
id: '/2024/08/03/cangjie', // Ensure uniqueness and length less than 50
distractionFreeMode: false, // Facebook-like distraction free mode
proxy: "https://cors-anywhere.mayx.eu.org/?https://github.com/login/oauth/access_token"
})
gitalk.render('gitalk-container')
</script>
<!-- <![endif]-->
</section>
<!--[if !IE]> -->
<div id="landlord" style="left:5px;bottom:0px;">
<div class="message" style="opacity:0"></div>
<canvas id="live2d" width="500" height="560" class="live2d"></canvas>
<div class="live_talk_input_body">
<form id="live_talk_input_form">
<div class="live_talk_input_name_body" >
<input type="checkbox" id="load_this" />
<input type="hidden" id="post_id" value="/2024/08/03/cangjie.html" />
<label for="load_this">
<span style="font-size: 11px; color: #fff;">&#160;想问这篇文章</span>
</label>
</div>
<div class="live_talk_input_text_body">
<input name="talk" type="text" class="live_talk_talk white_input" id="AIuserText" autocomplete="off" placeholder="要和我聊什么呀?" />
<button type="submit" class="live_talk_send_btn" id="talk_send">发送</button>
</div>
</form>
</div>
<input name="live_talk" id="live_talk" value="1" type="hidden" />
<div class="live_ico_box" style="display:none;">
<div class="live_ico_item type_info" id="showInfoBtn"></div>
<div class="live_ico_item type_talk" id="showTalkBtn"></div>
<div class="live_ico_item type_music" id="musicButton"></div>
<div class="live_ico_item type_youdu" id="youduButton"></div>
<div class="live_ico_item type_quit" id="hideButton"></div>
<input name="live_statu_val" id="live_statu_val" value="0" type="hidden" />
<audio src="" style="display:none;" id="live2d_bgm" data-bgm="0" preload="none"></audio>
<input id="duType" value="douqilai" type="hidden" />
</div>
</div>
<div id="open_live2d">召唤伊斯特瓦尔</div>
<!-- <![endif]-->
<footer>
<p>
<small>Made with ❤ by Mayx<br />Last updated at 2026-01-01 00:00:18<br /> 总字数614622 - 文章数178 - <a href="/atom.xml" >Atom</a> - <a href="/README.html" >About</a></small>
</p>
</footer>
</div>
<script src="/assets/js/scale.fix.js"></script>
<!--[if !IE]> -->
<script src="/assets/js/main_new.js"></script>
<script src="/Live2dHistoire/live2d/js/live2d.js"></script>
<script src="/Live2dHistoire/live2d/js/message.js"></script>
<!-- <![endif]-->
</body>
</html>