- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
<?php
class Json_Encode {
public function Encode($obj) {
$str = "";
$type = gettype($obj);
if ($type == "array") {
$fst = 1;
if (array_keys($obj) !== range(0, count($obj) - 1)) {
$str .= "{";
foreach($obj as $id=>$el) {
if ($fst) {
$fst = 0;
} else {
$str .= ",";
}
$str .= "\"$id\":";
$str .= $this->Encode($el);
}
$str .= "}";
} else {
$str .= "[";
foreach($obj as $el) {
if ($fst) {
$fst = 0;
} else {
$str .= ",";
}
$str .= $this->Encode($el);
}
$str .= "]";
}
} else if ($type == "string") {
$str .= "\"$obj\"";
} else if ($obj == null) {
$str .= "null";
} else {
$str .= "$obj";
}
return $str;
}
}
Акадамики, бля буду иисусе, PhD сучий потрох ... Синдорм умного человека x)
Ну и в общем-то они ведут себя как значения, а не как ссылки:
- Ответствуйте олухи, что легче всего на свете?
Вовочка тянет руку.
- Говори отрок.
- Хй, батюшка!
- Обоснуй!
- От одной мысли встает!
- Озорно, но справедливо! Ответствуйте далее, олухи, что тяжелее всего на
свете?
Вовочка тянет руку.
- Говори отрок.
- Хй, батюшка!
- Обоснуй!
- Не захочет, и краном не поднимешь!
- Ох, озорно, но справедливо! Ответствуйте далее, олухи, что быстрее
всего на свете?
Вовочка тянет руку.
- Уймись отрок, так ты мне на х*ю всю физику построишь
1) иммутабельные (аля python, java, haskell, js, c# и т.п.);
2) мутабельные с полным копированием (аля c++'ный std::string, PHP ниже 5.0, perl?);
3) мутабельные с COW(copy-on-write) (строки в Qt, delphi, PHP 5.0+).
P.S. Про PHP могу гнать, в одному комменте со стековерловочки про COW в 5.0+ прочел, глубоким анализом не занимался.
> подавляющем большинстве
Ну да, так оно и есть. Ну только не всех языков, а именно используемых в настоящее время.
Ну в жабе и питоне, к примеру, они именно так и устроены :) Просто они там иммутабельны, поэтому всем похуй.
И в питоне тоже? А в чем тайная выгода? Что бы стек не корежило когда строка из 0б внезапно увеличивалась до 9000?
Во-вторых строки передаются достаточно часто, а меняются реже, а если и меняются, то как правило целиком. Поэтому глупо было бы 10 раз целиком копировать строку, при протаскивании ее через 10 функций.
В-третьих у таких строк очень дешевые слайсы.
> стек
А причем тут стек? В той же жабе на стеке только ссылка на строку, лежащую в куче.
P.S. Вообще, в инете довольно часто ведутся холивары, насчет того, какие строки лучше - иммутабельные, полностью копируемые или cow :) Тут они когда-то тоже были.
Если про кресты - то нет. Там с этим свободней. В крестах юзают и cow строки (c++ builder, qt) и просто копируемые по значению (std::string).
А в пыхе она и является одним из примитивов.
А в java даже структур нету - классы да примитивы
Можно и в других местах, если очень хочется...
Не, ну не настолько же... Хотя если размещать объекты в маленьком пуле, который не выжимает из кеша из-за того, что его часто юзают, то так оно и будет.
В расшаренной памяти например, или в заmap'анном в память файле, или в самопальном пуле, память под которую выпросили у оси в обход менеджера кучи...
http://ideone.com/lNtdHl
Но так не будет, т.к. строки ведут себя как значения.
Это пример на гипотетическом пыхе, в котором строки бы передавались как в яве по ссылке без копирования и cow, но при этом оставались бы мутабельными.