前一段时间, 我写了一篇短文, 大概就是说nim语言的jester 网站开发框架像坨屎, 原因我也写了一点. 最近我自己想用nim语言写个像django那样的框架, 有了一些想法和思考, 这里记录一下.

1. nim语言的web框架, 目前就是jester, 号称是最好的, 说是仿照ruby on rails的. 但是nim本身就不是很好用, jester 更是不怎么受我喜欢, 用过python的django之后, 或者flask, 或者tornado, 都觉得nim语言的jester真的不够优雅和简洁.

2.  想法:

1. 能不能实现异步响应?

2. 能不能很好的调用数据库, 或者说有没有一个ORM(定义几个model, 映射到数据库)

3. 有没有一个template框架, 类似django, 或者jinja2的?

4. 内存占用的问题.

想法1. 异步的问题.

nim应该可以实现异步, 不过我编程的时候, 最开始的想法就是先实现一个同步的web框架, 这个我水平不够, 以后再说.

想法2. ORM的问题

实际上不用ORM, 也可以使用sql语言来访问数据库, 可能还会更快. 或许是python那边有一切皆对象, 有大量的面向对象的代码, 而且面向对象很符合人类解决问题的思路, 所以, 有时候从python转过来, 就想有个ORM可以用. 可能nim语言的原生开发者, 就是喜欢sql语句加nim代码吧.  我在网上找到了一个orm, 很简单, 技巧用的很多, macros我研究了几个月, 有几个还没搞懂, 可能至上有限, 或者macros实在是太难搞了.

nim的难点就是, 你只要想开发一个功能稍强的软件, 你就会深入研究macros, templates, AST改写等等已经接近底层的代码技术了, 你想开发一个功能复杂点的软件, 或者你想法太深, 你就必须先做一个nim语言资深专家, 或者你要懂编译原理, 并开始自己写一个编译器.

orm问题, 不是那么容易解决, nim语言最近一直在更新升级, orm代码换个nim版本就不能用了.

最近碰到的问题就是, sql取出的数据, 你如何赋值给你的model的各个field?

在深入研究透 macros的写法, 用proc还是用macro, 还是用template, 你想清楚了再写, 或者先复制粘贴, 慢慢调试慢慢理解.

NimNode是啥? 研究透了再写macro, 再采用AST语法树改写技巧吧.

最近把大佬5年前的orm改写到适合nim-1.0的版本, 修复了一些bug, 有些macro和pragma很难理解, 而且死活报错不能编译通过, 没办法, 只能采用土办法, 笨办法, 实在是理解不了大佬的奇技淫巧, 代码行数是增加了, 智商要求降低了. 注释数量也增加了, 不看注释, 马上就看不懂为什么要这样写macro.

nim-orm  https://github.com/nanoant/nim-orm/

大佬已失踪, 不更新, 我只能当他可能已经挂了.

想法3. template的问题

也许在我心中, 我的orm, 能够在nim的世界里摩擦, 但是我后来又发现了一个制约我的大难题. 就是从数据库中获取的数据, 赋值给一个一个model之后, 不能像python那样在内存中以kwargs之类的形式传递给模板渲染器, 原因是:

3.1 python中的list是允许混杂的, 比如[1, "aaa", 3.22, (4,3)],  但是nim是静态语言, 不能这样搞, 每个list都是纯种数据类型. 完全没法不同数据类型.

3.2 python的dict, 每个key, 对应的value都可以是不同的数据类型, 但是nim的table就不行, key, value的类型早早的就定义好了.

也就是说, 问题在这里, nim的table, 不能有不同的value类型.

解决的办法就是采用json传递数据, json的JsonNode, 有个nodekind, 可以容纳不同的数据类型.

先把model转为json, 再传递给模板template render.

问题就是, model如果有method来处理, 也无法传递给template渲染了, 在模板中不能获取那些函数, 或者我觉得数据在进入template渲染的时候, 都被阉割了, 数据类型都变了,  都是JsonNode, 然后方法都丢了,  比如model.get_absolute_url()这个在django中最熟悉的方法都无法正常传递个模板渲染器. 可能我还没学会给函数传递另外一个函数.

ORM的model变json, 也是一个问题, json的%操作符, 要对各种数据类型进行编码, 现在无法给DateTime进行编码, 还是报错. 需要花大量的时间来进行调试.

想法4. 内存占用的问题.

我在nim-0.19版本的时候, 实现了一个粗糙的框架, 有各个handler, urls, settings, get和post分配, 最后, 我发现一个我很难解决的问题就是内存占用, 一直随着http请求数不断的增加, 就是说handler处理完之后, 有些内存没有释放. 虽然我的内存, 有8G, 但是也不敢说够用. 可能linux系统是不是会好点?

以上问题,, 我觉得是问题2和3制约了nim写出类似于django那样框架.

但是问题都是可以在日后逐步解决的, 随着nim的不断完善、稳定和libs的增加, 这些问题都能解决.

到时候, 我可能会关注异步和解决内存占用的问题.

nim语言为什么弄不出来django那样的web框架相关推荐

  1. Django基础—— 1.WEB框架介绍

    1.什么是框架? 框架,即framework,特指为解决一个开放性问题而设计的具有一定约束性的支撑结构,使用框架可以帮你快速开发特定的系统,简单说就是使用别人搭好的舞台,你来做表演. 2.常见的Pyt ...

  2. 为什么说Django作为Python Web框架一哥的地位不会变?

    对 Python 工程师来说,Web 开发可以选择的框架很多,比如 Django.Flask.Tornado 等等,而其中 Django 是最全面,也是最受欢迎的,我们熟知的 YouTube.Inst ...

  3. web框架总结(django、flask)

    1.MVC解读 M:Model,模型,和数据库进行交互 V:View,视图,负责产生Html页面 C:Controller,控制器,接收请求,进行处理,与M和V进行交互,返回应答. 1.用户点击注 2 ...

  4. web框架之Django

    web框架和Django流程 1.web框架要点 1.Web应用程序处理流程 2.Web应用程序框架的意义 用于搭建Web应用程序 免去不同Web应用相同代码部分的重复编写,只需关心Web应用核心的业 ...

  5. Go实战--也许最快的Go语言Web框架kataras/iris初识(basic认证、Markdown、YAML、Json)

    生命不止,继续 go go go !!! 接下来,想跟大家一起分享一些golang语言成熟的.知名度比较高的web框架. 我们从iris web框架开始,开始呢,我们先不去计较和比较谁的速度快,谁的性 ...

  6. Nim语言中的解析表达文法 pegs模块

    Pegs 模块 简单的PEG(解析表达文法)匹配.没有使用任何记忆,而是用superoperators和符号内联来提升性能.注意:PEG匹配性能是希望与正则表达式引擎竞争的. 更多的有关Nim语言的知 ...

  7. 一款nim语言的图形化免杀

    简介 使用偏门语言的shellcode加载器处理免杀,一直是很流行的方案,语言也一变在变,从最开始的python免杀,go免杀:到现在的nim语言免杀.nim语言生成的文件还是比较小的,大概400k左 ...

  8. python框架django书籍_有Python基础,刚接触web框架的Django初学者。

    本文面向:有Python基础,刚接触web框架的Django初学者. 环境:windows7 python3.5.1 pycharm Django 1.10版 pip3 一.Django简介 百度百科 ...

  9. python搭建django框架,Python之Web框架Django项目搭建全过程

    Python之Web框架Django项目搭建全过程 IDE说明: Win7系统 Python:3.5 Django:1.10 Pymysql:0.7.10 Mysql:5.5 注:可通过pip fre ...

最新文章

  1. python模块使用_PYthon模块使用教程(最新).doc
  2. C++中各种智能指针的实现及弊端(五)
  3. mysql 测试与mongodb 测试对比
  4. unity 是厘米还是米_身高差45厘米! 这对重庆小情侣拍短视频晒幸福火了
  5. Android 编译时:m、mm、mmm、mma、mmma的区别
  6. Mysql 替换字段的一部分内容
  7. java redis缓存使用_java使用redis缓存数据库
  8. 统计英文文本的字母个数
  9. CURL 错误码 中文翻译
  10. 用户 sa 登录失败。_Sqlserver2008R2特定用户只能查看管理指定的数据库
  11. zabbix3.2通过snmp v2采集Dell服务器iDRAC口信息监控硬件
  12. 网站性能测试工具Apache Benchmark的使用说明
  13. 分享:尝试构建轻量级架构设计工具
  14. php公众号后台,微信公众号后台管理系统
  15. 实操:直通车暴力打造爆款,0销量4天搜索访客800!
  16. 禁用Ctrl+alt+del
  17. 基于O-RAN的无线云网络
  18. OpenStack 企业私有云的若干需求(7):电信行业解决方案 NFV
  19. Windows: Ctrl,Alt, Shift等快捷键的含义
  20. Wireshark抓包及常用过滤方法

热门文章

  1. PL2303HX----Family Software Newsletter #37 - (Updated 08/05/2017)
  2. 干货|“区块链+物联网”的发展现状和应用案例
  3. 魔方机器人(基于OpenCV、Arduino)
  4. Bug管理工具——BugFree
  5. 老年大学计算机应用,老年大学电脑课程教案.doc
  6. 改改host,轻松登录dropbox!(For Windows)
  7. AutoCAD 2019 怎么设置经典模式(经典界面)?
  8. 《Scala入坑笔记》一、Scala简介
  9. 西游擎天一柱java,擎天一柱(神秘买点)指标源码-通达信公式 -程序化交易(CXH99.COM)...
  10. 笔记本和利用服务器算力直连,顺网云电脑技术突破:实现利用网吧空余算力