LINUX.ORG.RU

Ответ на: комментарий от newKingOfTheBlock

В ИО в функцию можно передать только строку, ничего больше. В нормальных языках можно передавать все, что угодно - в том числе и строку.

anonymous
()
Ответ на: комментарий от newKingOfTheBlock

В JS и пистоне (в которых первоклассные функции) аргументы всегда выполняются, объект не имеет над ними контроля. А это не отвечает требованию о том, что объект сам волен решать, как ему поступать с пришедшим сообщением.

Еще раз для дебилов - в JS и пистоне никто не мешает тебе вызвать на объекте евал. Хочешь -вычисляй, не хочешь - не вычисляй. Разница в том, что в жс/пистоне ты можешь передать «2+2», а можешь передать 2+2. В ИО только первый вариант. Второго варианта разработчики тебя лишили.

anonymous
()
Ответ на: комментарий от newKingOfTheBlock

окей, покажи на примере как в ИО передать не-строку 2+2 (или чем там они АСТ представляют, не существенно).

anonymous
()
Ответ на: комментарий от Deleted

knowing that a string is immutable means we can allocate space for it at creation time,

как и в С++

and the storage requirements are fixed and unchanging

как и в С++

next_time ★★★★★
()
Ответ на: комментарий от beastie

Я скажу только одно слово, почему это плохая идея: UTF-8

UTF-8 тоже можно и нужно складывать и обрезать.

anonymous
()
Ответ на: комментарий от anonymous

В моем примере ничего не передается. там посылается собщение object message1(message2). Это фэкспры, выражаясь лисп-языком, но мощней, так как добавляется еще и ооп-style. Можно это все квотированием или строками имитировать, да, но мозг сломаешь парсить, что где вычисляется в какой момент, евалить, квотить, это будет говно, а не код. А если так все просто, то и никакие if'ы в языках были бы не нужны, пиши везде eval/quote, никто не запрещает.

newKingOfTheBlock
()
Ответ на: комментарий от f1xmAn

Иммутабельность это как минимум потокобезопасно

спецификатор const? не, не слышали.

причем без накладных расходов на синхронизацию, которых куда больше, чем при создании нового объекта.

проверить одну переменную тяжелее, чем создать отдельный объект? ну-ну.

next_time ★★★★★
()
Ответ на: комментарий от beastie

UTF-8

и что? если я в точности знаю индекс буквы, чем мне помешает utf8? если не знаю этого индекса, то мне и в ascii делать со строкой нечего.

next_time ★★★★★
()
Ответ на: комментарий от anonymous

как в ИО передать не-строку 2+2

что ты подразумеваешь под не-строкой, я хз,

m1 := method(expr,
  writeln("I don't know, what message I has received, but value is " .. expr) //  "fake-oop" semsntics
)
m2 := method(
  args := call message arguments
  writeln("message " .. args at(0) .. " evaluates to " .. doMessage(args at(0)) .. " in messanger's context")
)

m1(1 + 2) // pass value of expression 
m1("1 + 2") // pass string as value, same shit
m2(1 + 2) // send message



//I don't know, what message I has received, but value is 3
//I don't know, what message I has received, but value is 1 + 2
//message 1 +(2) evaluates to 3 in messanger's context

newKingOfTheBlock
()
Ответ на: комментарий от Legioner

константа это code point. А осмысленные символы могут состоять из более чем одного code point-а.

Однако, если речь идет о буквах европейских языков, то в нормализованной форме «композиция» все они представляются одним code point, так что тупая замена работает

annulen ★★★★★
()
Ответ на: комментарий от annulen

А уж если ограничиться буквами английского языка, то и вовсе одного байта хватит :)

Решение нормальное в смысле практичности, но желательно по возможности писать код, покрывающий все случаи, а не типичные.

Legioner ★★★★★
()
Ответ на: комментарий от annulen

и зачем тогда Unicode нужен? latin1 хватит всем.

Lincor
() автор топика
Ответ на: комментарий от tailgunner

это-то как раз понятно, непонятно, почему ты это сказал, наркоман. хотя чёрт с тобой.

Lincor
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.