- 主题:现在做WEB的主流技术是哪些
c++ 支持多继承,所以我觉得需要一个一个初始化还有情可原。本来多继承就已经搞得很复杂了,一口气直接初始化难度太高了。
delphi 里不光 constructor 里可以调用 virtual method,而且连 constructor 本身都可以是虚的。并且在官方 vcl 库里属于标准操作,我记得当年李维的书还专门给起了个名字,叫汉堡包什么的,大概类似这样:
TFoo = class(TComponent)
construcor Create(parent: TComponent); override;
...
end;
constructor TFoo.Create(parent: TComponent)
begin
Self.Foo := 123;
Self.Bar();
inherited Create(parent);
Self.Baz();
end
inherited 相当于 super。delphi 里创建新 object 的时候,在分配好内存后,编译器直接把所有的 vmt(virtual method table)指针都设好,不光是 class 本身,还包括全部的 interface 指针,然后才调用 constructor。现在已经记不清是不是每个 class 其实都是静态数据,只要直接把 pointer[-1] 直接指向 class 这一个操作就完成了。另外,由于有些类型是 auto reference count 和 copy-on-write 的设计,所以对象初始化是有清零操作的。再加上
TFoo = class
private
FBar: Integer;
// ...
end;
是不支持 FBar: Integer = 42 这种语法的,所以压根就不存在类似问题。就算支持我觉得也不是啥问题,哪怕调用 class virtual method 来初始化,无非也就是清零对象、设好指针后,增加一个 method,然后再调用 constructor 而已。顺便一提,delphi 里 class 本身也是 object,所以 class method 也都可以 virtual/override。所以当年在看到号称非常 oo 的 java 居然连这都不支持的时候,我也是非常震惊的。delphi 里
type
TComponentClass = class of TComponent;
var
fooClass: TComponentClass;
fooInsance: TComponent;
begin
fooClass := bar(); // TFoo
fooInstance := fooClass.Create(parent);
这种常规操作跑到 java 里就非得靠 design pattern 才能完成
【 在 DoorWay 的大作中提到: 】
: 这就跟 js 为啥要抄 java.util.Date 一样,你一个带 gc 的语言,又不支持多继承,为啥非要抄 c++ 的实现?
: —— 这里是说java抄cpp吗?
: 基类构造函数里调虚函数,cpp调不到虚的,理由是没完成子类构造。是cpp著名的坑,还专门有个 two-phrase creation的idiom。基类构造内无法访问子类成员。
: ...................
--
修改:eGust FROM 203.184.25.*
FROM 203.184.25.*
看具体应用场景
如果是要做大型系统,无脑Java Spring全家桶,毕竟在当前算是zz正确,典型的是阿里,京东。。
有个性,可以换成go的,也有几个厂在用,比如字节,b站啥的。。
如果考虑到成本和开发速度,就用php或者python的。另外影响这二者的,还有是否前后端分离(目前前后端分离也是zz正确)。
上面这些都可以做前后端分离,前端框架中,VUE在国内肯定是最广的,犹如10年前的PHP。
还有一些半分离的UI框架,比如LayUI,不用特意招尊贵的前端人士,后端全包圆了,特适合屌丝公司。。
所以事情就很明显了,要是技术选型,就选Java+Vue/react好了,没人挑得出毛病。。至于其他的,是老板考虑的事,而且你可以用那套话术打败他,实在不行就走人吧,没钱还玩啥呢。。
【 在 plamancer 的大作中提到: 】
: 还是Java那套吗
: Django用于商用怎么样
: 开源好用的web管理系统有哪些
--
修改:huaxinjuedui FROM 183.69.214.*
FROM 183.69.214.*
设计要以最小惊讶原则我同意,可惜这只是理想,不是现实,计算机世界本来就不是直觉世界。我想现实中不存在任何这样一门语言靠常识就足够,要不然学习编程也太简单了。不要说计算机语言,连这样的自然语言都不存在。要论不违反直觉,java恰恰是违反直觉最少的语言之一。反而,js才是数一数二的违反这一原则的语言,里面奇葩之处多如牛毛,甚至还有人拿这些点专门出了本书。
至于什么看到a=3后面a就应该肯定等于3就是乱来了,照你这么说所有多线程的冲突都是违反直觉,或者多线程就不应该存在。这个世界上本来就是有复杂的东西,需要你花一定时间理解,不是你说我不想看到它它就不应该存在了。
【 在 eGust 的大作中提到: 】
: 这个世界除了 java 以外,还有种东西叫常识。
: 比如 php:
: > $a = md5('hello'); print $a == 5 ? 'yes' : 'no';
: ...................
--
修改:RuralHunter FROM 58.37.82.*
FROM 58.37.82.*
要按常识的话,我觉得=号就是判断两边是否相等,然而所有的语言都是赋值(sql除外)
【 在 RuralHunter 的大作中提到: 】
: 设计要以最小惊讶原则我同意,可惜这只是理想,不是现实,计算机世界本来就不是直觉世界。我想现实中不存在任何这样一门语言靠常识就足够,要不然学习编程也太简单了。不要说计算机语言,连这样的自然语言都不存在。要论不违反直觉,java恰恰是违反直觉最少的语言之一。反而,js才是数一数二的违反这一原则的语言,里面奇葩之处多如牛毛,甚至还有人拿这些点专门出了本书。
: 至于什么看到a=3后面a就应该肯定等于3就是乱来了,照你这么说所有多线程的冲突都是违反直觉,或者多线程就不应该存在。这个世界上本来就是有复杂的东西,需要你花一定时间理解,不是你说我不想看到它它就不应该存在了。
:
--
FROM 183.69.214.*
本来java搞web开发非常麻烦
后来有了前后端分离,这个问题不那么突出了
【 在 jimmycmh 的大作中提到: 】
: 标 题: Re: 现在做WEB的主流技术是哪些
: 发信站: 水木社区 (Thu May 5 00:48:48 2022), 站内
:
: 现在web开发流行的是前后台完全分离
:
: 后台只提供api,完全不管显示,用什么语言都行,主流是java spring,go也有一些,python很少,php除了旧系统基本没人用了。
:
: 前台那肯定是js一统天下,但也有很多框架,react、vue、angular比较常见
:
: 【 在 plamancer 的大作中提到: 】
: : 还是Java那套吗
: : Django用于商用怎么样
: : 开源好用的web管理系统有哪些
: : ...................
:
: --
:
: ※ 来源:·水木社区 mysmth.net·[FROM: 124.126.3.*]
--
FROM 121.69.90.*
spring boot,不是spring.
- 来自 水木社区APP v3.5.5
【 在 jacobson1 的大作中提到: 】
: 我十几年前用spring,现在还用这个啊
: --
:
--
FROM 116.230.31.*
一个语言特性能扯到多线程上,这思路也真是开阔到没谁了。java 做不到看到 a = 3,非得指三为零,不意味着别的语言也非得这样。比如 python,完全不存在这个问题。
我已经说了,这个世界上除了 java 以外,还有一种东西叫常识。因为只知道 java,理所当然的认为只有 java 世界里的知识是常识,其它语言只要跟 java 不一样就“奇葩之处多如牛毛”。这个问题纯粹是一个很简单的语言设计的问题,根本没有任何的复杂性。出于某种原因,java 选择直接抄了 c++ 的设计,而同期的其它语言(py、rb、delphi)根本就不存在这种问题。
我并不否认学编程是需要一定智商的,我个人觉得,如果连 js 里 this 这么简单的东西都搞不清楚的话,或者是理解不了 pure function、declarative ui 这些概念的话,智力水平是不太适合干这行的。js 因为历史包袱的原因,的确有很多坑存在,比如前面 sort 的例子,或者是 [...].map(parseInt) 这类东西。但是这些其实都是小问题,因为都是可以通过 linter 来解决的。靠 linter 解决不了的问题,除了 number 是 ieee-754 64位浮点数,而 json 标准又没规定 number 类型的精度这个坑以外,我还真想不出来什么。
顺便说一下,2010年后流行的新语言,除了历史原因需要 class 以外(kotlin、swift),几乎都不再选择 oop 的设计。java 设计的那么完美,为啥新语言都不再抄它了?
【 在 RuralHunter 的大作中提到: 】
: 设计要以最小惊讶原则我同意,可惜这只是理想,不是现实,计算机世界本来就不是直觉世界。我想现实中不存在任何这样一门语言靠常识就足够,要不然学习编程也太简单了。不要说计算机语言,连这样的自然语言都不存在。要论不违反直觉,java恰恰是违反直觉最少的语言之一。反而
: 琷s才是数一数二的违反这一原则的语言,里面奇葩之处多如牛毛,甚至还有人拿这些点专门出了本书。
: 至于什么看到a=3后面a就应该肯定等于3就是乱来了,照你这么说所有多线程的冲突都是违反直觉,或者多线程就不应该存在。这个世界上本来就是有复杂的东西,需要你花一定时间理解,不是你说我不想看到它它就不应该存在了。
: ...................
--
FROM 203.184.25.*
basic 里面 = 既是赋值运算符,又是比较运算符
pascal 里面 := 是赋值运算符,= 是比较运算符
都不是特别冷门的语言,这俩都不知道也敢说“所有的语言”
【 在 huaxinjuedui 的大作中提到: 】
: 要按常识的话,我觉得=号就是判断两边是否相等,然而所有的语言都是赋值(sql除外)
--
FROM 203.184.25.*
这不是未来。。这是过去。
【 在 hemin 的大作中提到: 】
: 未来的趋势是前后端完全分离。
--
FROM 117.24.206.*
没有人在扯什么java完美,只是你说的根本就没有一个语言能做到,就是吹毛求疵,典
型双标。一会说学语言要有点智商,那理解一下构造函数的执行顺序根本不难,这里逻辑也毫无奇怪之处,怎么到你那里就反直觉反人类了?java也许有奇葩的地方,但你说的这点显然算不上。
js的奇葩点我都懒得说了,网上随便一搜多如牛毛,this根本不算什么。随便搜一个:
https://github.com/denysdovhan/wtfjs/blob/master/README-zh-cn.md
【 在 eGust 的大作中提到: 】
: 一个语言特性能扯到多线程上,这思路也真是开阔到没谁了。java 做不到看到 a = 3,非得指三为零,不意味着别的语言也非得这样。比如 python,完全不存在这个问题。
: 我已经说了,这个世界上除了 java 以外,还有一种东西叫常识。因为只知道 java,理所当然的认为只有 java 世界里的知识是常识,其它语言只要跟 java 不一样就“奇葩之处多如牛毛”。这个问题纯粹是一个很简单的语言设计的问题,根本没有任何的复杂性。出于某种原因,java 选
: 裰苯映 c++ 的设计,而同期的其它语言(py、rb、delphi)根本就不存在这种问题。
: ...................
--
修改:RuralHunter FROM 58.37.82.*
FROM 58.37.82.*