LINUX.ORG.RU

Все есть строка?

 , ,


0

1

Многие интерпретируемые ЯП, нпример тот же шелл, перл, декларируют красивый лозунг (сабж). Я попробовал программировать в таком стиле в JS, и это действительно великолепно! Не нужно забивать голову, например, тем, что массив имеет метод а строка или объект - нет, приходится создавать какие то велосипедные интерфейсы совместимости, и прочее. Если все есть строка - этих проблем просто не возникает, программировать приятно, ни на что лишнее не отвлекаешься. Метопрограммирование - вообще ништяк.

То есть, я хочу сказать, что все есть строка, действительно годный подход, только вот непонятно, почему же эти языки, которые кагбе провозглашают это, сами же активно уходят от этого принципа, в дебри типов. Это связано с оптимизацией кода? Упрощением компиляции? Или существуют другие причины, ведь кроме строки в ЯП, действительно ничего не нужно.

☆

Последнее исправление: cetjs2 (всего исправлений: 1)
Ответ на: комментарий от emulek

ты не объяснишь значения и свойства

А кто тебе не дает? Объясняй. Я вот захотел, шоб 1+1=5, и сделал, а ты?:)

anonimous ☆
() автор топика
Ответ на: комментарий от emulek

С какой скоростью будет работать твоя левая коллекция в питоне?

Как напишешь, с такой и будет. При желании/необходимости можно побайтодрочить на си. Так сделали авторы numpy, например.

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

BTW, для того чтоб получить это, тебе не нужна ни арифметика, ни числа, ни даже конкатенация (как сахар):

тут ты просто подменил абстракцию «число» на абстракцию «список».

Тут есть три проблемы:

1. сложение у тебя получилось потому, что списки аддитивные. Деление уже — увы.

2. Списки хоть и аддитивные, но (1,2) не эквивалентен (2,1). Т.ч. переместительный закон у тебя в общем случае не работает. А для чисел — должен.

3. сам понимаешь, сколько лет у тебя будет вычисляться даже сдача с 500 рублей по такому «алгоритму» (:

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

тут ты просто подменил абстракцию «число» на абстракцию «список».

Есть разница (в контексте получения 4)?

Деление уже — увы.

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

сам понимаешь, сколько лет у тебя будет вычисляться даже сдача с 500 рублей по такому «алгоритму»

Это проблема не алгоритма, а того, что недоязычки заполонили нишу низкокровнего программирования.

Списки хоть и...

Здесь ты вообще попутал мягкое с теплым. У тебя сам список/cтрока представляет число, а не то что внутри.

anonimous ☆
() автор топика

Пока ты работаешь в основном со строками - все нормально. А вот когда нужно работать с данными... Реализуй, например, какой-то алгоритм типа MD5, сжатие какой-то и т. п. Тогда поймешь.

Лично я ненавижу этот принцип. С ним больше проблем, чем проку. Я предпочитаю сам указать, строка это или массив байтов, целое, дробное и т. п. Зато, если я где-то сделаю ошибку, то компилятор меня проверит и кажет на нее, мол.

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

Так получилось. Сложилось исторически. Плюсом обозначают математическую операцию. Но погромисты пишут свою историю с конкатенацией, а завтра умник придумает делить строку пополам унарным минусом, и все это может быть когда-нибудь приживется.

очевидно, что ты плохо знаешь математику: математики только недавно договорились, какими значками что обозначать. А некоторые вещи до сих пор без значка. Вот хоть 0/0.

Т.ч. отсылки к истории выглядят неубедительно.

Потому что, как выявил наш анализ, значение слова «складывать» несколько шире традиционного толкования знака «+». Более того, это слово даже пытаются использовать там, где ему не место даже в повседневной жизни.

не только пытаются, но и используют сплошь и рядом. И это — обычная практика. Не нравится? Ищи другой глобус. Нет никаких «традиций связанных со знаком »+"", ты их придумал. Это просто значок, и не более того. Из которого в частности совсем НЕ следует коммутативность.

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

потому-что у идиотов намного меньше шаблонов, и мышление более свободное. А у не идиотов — шаблонов полно. Но если ты не дурак, ты должен уметь быстро, решительно отказаться от любого шаблона, ибо рискуешь остаться в дураках. У идиотского решения есть как минимум одно преимущество — неожиданность. Потому часто(но таки не всегда, ибо ты не первый, и возможно оно уже у кого-то в шаблоне) оно оптимальное.

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

потому что других нет. См. сабж.

Чего нет? Способов обозначить конкатенацию и сложение?

ты не помнишь, про что ты говорил? Не беда, я процитировал. Можешь перечитать. Я про системы типов данных. Тип данных «строка» не полон и потому неприменим IRL если он единственный.

О любом, который перемешивает понятия сложения и конкатенации.

а ты можешь определить сложение строк не как конкатенацию, а как нечто другое? И много вас таких, альтернативно одарённых?

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

Да, всё жду, когда же в PHP разрешат в типах аргументов функций и методов указывать не только пользовательские классы, но и базовые типы

зачем? А если я в функцию, которая хочет число отдам строку «2»? (:

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

ты не объяснишь значения и свойства

А кто тебе не дает? Объясняй. Я вот захотел, шоб 1+1=5, и сделал, а ты?:)

а что я? Ты давай ВСЮ таблицу, а не только 1+1. И объясняй, *зачем* это надо. Зачем нужна конкатенация строк я могу тебе рассказать.

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

Как напишешь, с такой и будет. При желании/необходимости можно побайтодрочить на си. Так сделали авторы numpy, например.

ОК. А зачем мне тогда нужен питон, если даже низкоуровневые коллекции и типы надо писать на сишечке? В чём профит?

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

тут ты просто подменил абстракцию «число» на абстракцию «список».

Есть разница (в контексте получения 4)?

конечно. Так ты и на умножение менять можешь, дескать «какая разница, всё равно 4!».

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

вряд-ли у тебя получится именно деление, а не многократное вычитание. А многократное вычитание — другое. У него сложность другая(намного выше).

Здесь ты вообще попутал мягкое с теплым. У тебя сам список/cтрока представляет число, а не то что внутри.

м... Когда ты наконец овладеешь абстрактным мышлением?

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

Пока ты работаешь в основном со строками - все нормально. А вот когда нужно работать с данными... Реализуй, например, какой-то алгоритм типа MD5, сжатие какой-то и т. п. Тогда поймешь.

не... Раньше. Возьми sed (это Тьюринг полный ЯП), и реализуй сложение целых чисел (не говори, что нельзя. Один чувак целый калькулятор осилил).

Лично я ненавижу этот принцип. С ним больше проблем, чем проку.

с этим согласен. Люто, неистово плюсую.

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

В чём профит?

Код на питоне, который собственно будет использовать эти коллекции, будет проще и понятнее кода на си.

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

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

Как это не печально, но это не только мое скромное мнение. Вы с ТС очень похожи, то же самое непомерное ЧСВ при нулевом знании матчасти.

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

Код на питоне, который собственно будет использовать эти коллекции, будет проще и понятнее кода на си.

значит ты плохо знаешь си.

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

в прошлый? Когда при отладке какой-то деструктор дважды вызывался для одного объекта. Сделал связанный список и нашёл ошибку в коде.

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

Как это не печально, но это не только мое скромное мнение.

как это не печально, но таких как ты 95%.

Вы с ТС очень похожи, то же самое непомерное ЧСВ при нулевом знании матчасти.

есть ещё желание узнать что-то новое, а у таких как вы — нету. Вы и так всё знаете.

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

значит ты плохо знаешь си

В питоне будут comprehensions, map, filter, reduce и подобное. В сишечке будут трёхэтажные for.

деструктор

Плюсопроблемы.

PolarFox ★★★★★
()
Последнее исправление: PolarFox (всего исправлений: 1)
Ответ на: комментарий от emulek

есть ещё желание узнать что-то новое

Точнее уныло вбросить и остаться при своем мнении.

а у таких как вы — нету

Знания на лоре получают только самые доньщики. Для которых даже Батя — авторитет.

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

В питоне будут comprehensions, map, filter, reduce и подобное. В сишечке будут трёхэтажные for.

в C++ (даже без ++11) ты можешь свернуть всё это в компактные и няшные классы. Не обязательно обязательно делать трёхэтажные for. И даже в простой сишечке ты можешь использовать например указатели на функции. Просто ты про них не знаешь...

Плюсопроблемы.

ты спросил — я ответил. Можно было сделать просто, как в твоих питонах. Но мне не понравилась производительность. А сделать нормально сразу не получилось. Пришлось разбираться и исправлять. Для этого и была накостылена по быстрому коллекция. Впрочем, подход питона лучше — срём везде где попало, GC потом всё уберёт. Вот только это не всегда годно, увы.

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

Точнее уныло вбросить и остаться при своем мнении.

у тебя есть, что сказать в тему? Нет? Иди в жопу.

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

математики только недавно договорились, какими значками что обозначать

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

не только пытаются, но и используют сплошь и рядом. И это — обычная практика.

Таких людей еще часто называют быдлом, это очень хорошо прослеживается по словарному запасу. Таки для описания большинства ситуаций вообще хватает трех слов и их вариаций.

Нет никаких «традиций связанных со знаком »+"", ты их придумал. Это просто значок, и не более того.

Просто значки рисуют на заборах. На языке математики этот значок имеет вполне конкретный смысл, который тянется, насколько я помню, еще с теории групп. В каком-нибудь другом языке, например ЯП, он конечно может иметь и другой смысл и даже множество смыслов, но, чем больше может быть толкований одного значка, тем язык искуственно усложняется.

Я про системы типов данных.

Я уже писал, повторю проще: если у тебя два разных языка, можешь в них закладывать разные смыслы одинаковым значкам.

О любом, который перемешивает понятия сложения и конкатенации.

а ты можешь определить сложение строк не как конкатенацию, а как нечто другое?

Тут опять загвоздки в значках и их смысле. Если ты хочешь перенести в язык повседневный смысл слова «складывать» (т.е. складывать в стопку, друг за дружкой и т.д.), тогда строки должны конкатенироваться, а числа вести себя по правилу A '+ B = A*10+B (в этом примере язык работает с десятичной формой записи числа, мне приходится это отмечать, видя твою дотошность). Тогда все логично, один значок — одно действие, добавление B в хвост А. Но ты же хочешь для разных типов ввести разное поведение одного оператора, в итоге запись A+B становится контекстно-зависимой, что усложняет как реализацию языка, так и понимание программ, написанных на нем.

а ты можешь определить сложение строк не как конкатенацию, а как нечто другое?

Да легко. Моя операция — мои правила, могу соединять посимвольно (абв+где=авбдге), могу сложить аски-коды символов. Вот последний вариант в контексте сложения массивов ([1,2,3]+[4,5,6]=[5,7,9]), вообще выглядит очень логично и даже обладает свойствами математического значка.

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

А зачем мне тогда нужен питон, если даже низкоуровневые коллекции и типы надо писать на сишечке?

потому что язык так и задуман, что если хочешь чего-то низкоуровневого и/или скорости, то обращаешься к Си

профит в том, что не везде нужны «низкоуровневые коллекции и типы», а, если они не нужны, на кой хрен байтами ворочать вручную, спрашивается(?)

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

Действительные через рациональные? O_o.

Но рациональные может и можно, не задумывался

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

Ну ясен пень. Ну и что, что не коммутативна? Обычное дело же.

ЗЫ. А такой вопрос:

А каким свойствам/аксиомам должна удовлетворять операция умножения, чтобы был обратный элемент (по умножению) в алгебре?

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

Во-вторых, у «сложения» есть свойство «коммутативность», которого нет у «конкатенации».

А то что умножение почти везде не коммутативно тебя не смущает?

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

Значит если в сишке это есть - значит разруливание происходит в рантайме компиляции.

В квотезы

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

Это проблема не алгоритма, а того, что недоязычки заполонили нишу низкокровнего программирования.

А ты изучи, как устроен ЦП, и поймешь, почему тебя с твоей идеей прокатили. Не, я понимаю, что в вакууме тут есть над чем подумать, но в реале это не канает

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

срём везде где попало, GC потом всё уберёт. Вот только это не всегда годно, увы.

С таким GC как у пистона замучаешься ждать, когда он чё уберет

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

Ой, сколько я наговорил!

Просто значки рисуют на заборах. На языке математики этот значок имеет вполне конкретный смысл, который тянется, насколько я помню, еще с теории групп. В каком-нибудь другом языке, например ЯП, он конечно может иметь и другой смысл и даже множество смыслов, но, чем больше может быть толкований одного значка, тем язык искуственно усложняется.

Ты некомпетентен, и нехрен вякать про группы. Уже сказали, что строки с операцией конкатенации - полугруппа.

Тогда все логично, один значок — одно действие, добавление B в хвост А. Но ты же хочешь для разных типов ввести разное поведение одного оператора, в итоге запись A+B становится контекстно-зависимой, что усложняет как реализацию языка, так и понимание программ, написанных на нем.

Про полиморфизм первый раз слышишь?

Моя операция — мои правила, могу соединять посимвольно (абв+где=авбдге), могу сложить аски-коды символов. Вот последний вариант в контексте сложения массивов ([1,2,3]+[4,5,6]=[5,7,9]), вообще выглядит очень логично и даже обладает свойствами математического значка.

А мы решили сделать конкатенацию. Why not?

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

Всего-то, что я имел в виду, то что этими своими списками он может заменить неотрицательные целые (ну если сильно исхитриться, то может быть, и неотрицательные рациональные), а вот действительные - уже никак. А без них уже ни один яп не яп.

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

С таким GC как у пистона замучаешься ждать, когда он чё уберет

ты уверен, что в питон встроили самый плохой GC?

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

А каким свойствам/аксиомам должна удовлетворять операция умножения, чтобы был обратный элемент (по умножению) в алгебре?

Ну вообще x * y = 1 (где 1 - нейтральный элемент для *) или x * y * x = x.

Но в принципе я, конечно, ошибся. Я имел в виду нулевой элемент, а не обратный.

Впрочем, у конкатенаии нет ни того, ни другого.

Вообще, аргументация «всё есть строка — не катит, потому что у меня в любимом ненужном языке плюс обозначает конкатенацию, и это правильно, потому что гладиолус полугруппа, а как отличить сложение от конкатенации, если всё — строка?» — это глупость какая-то. Очевидно, нужно обозначать конкатенацию другим знаком. В Lua, например, конкатенация обозначается "..", хотя там строгая типизация.

Вообще, из произвольного множества, ⋂, ⋃ и комплемента можно сделать булеву алебру. Почему-то однако во всех известных мне языках (кроме поддерживающих перегрузку операторов) «not пустой_массив» в лучшем случае возвращает true, false, 1 или 0.

ЗЫ. Оказывается в Юникоде есть не только символ «говно», но и символ «Жопа». Можно истории рассказывать в картинках.

TALKS 🚻 ⩊ 💩 🍞 🚎

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

А то что умножение почти везде не коммутативно тебя не смущает?

А тебя не смущает, что мы говорим о сложении?

Ты некомпетентен

ОК

и нехрен вякать про группы. Уже сказали, что строки с операцией конкатенации - полугруппа.

Вырываем кусочек фразы из контекста, хороший троллинг. Я тоже так умею.

Про полиморфизм первый раз слышишь?

Не, не слышал!

Моя операция — мои правила, могу соединять посимвольно (абв+где=авбдге), могу сложить аски-коды символов. Вот последний вариант в контексте сложения массивов ([1,2,3]+[4,5,6]=[5,7,9]), вообще выглядит очень логично и даже обладает свойствами математического значка.

А мы решили сделать конкатенацию. Why not?

Такая же глупая вещь.

...

Твои комментарии очень содержательны, спасибо за оказанное внимание.

staseg ★★★★★
()
Последнее исправление: staseg (всего исправлений: 1)
Ответ на: комментарий от vonenij

Возможно, это связано с тем, что там не приветствуются (идеологически) рекурсивные алгоритмы. Поэтому, Гвидо не хочет тратить время на то, что способно изменить стиль нписания прог. Типа непитоник. Но это так, чиста предположение.

anonimous ☆
() автор топика
Ответ на: комментарий от proud_anon

Впрочем, у конкатенаии нет ни того, ни другого.

Нейтральный элемент у конкатенации - пустая строка. a + «» = a (и с пустой строкой слева - то же самое).

Очевидно, нужно обозначать конкатенацию другим знаком. В Lua, например, конкатенация обозначается "..", хотя там строгая типизация.

Да в цепепе есть же перегрузка операторов, они могут так себе позволить. А в моём любимом CL сделали по-человечески: + для numbers, concatenate - для sequences.

Ну вообще x * y = 1 (где 1 - нейтральный элемент для *) или x * y * x = x.

Это больше похоже на определение. А меня интересует вот чё. Например, чтобы найти число, обратное a мы делим 1 на a и получаем 1/a.

1/a*a = 1

А забавное то, что есть системы с делителями нуля и обратными элементами. Это меня смущает и тревожит. В таких системах вот так в принципе можно отыскать обратный элемент?

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

А тебя не смущает, что мы говорим о сложении?

А какая разница? Есть некая бинарная операция и аксиомы для неё.

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

ЗЫ. Оказывается в Юникоде есть не только символ «говно», но и символ «Жопа». Можно истории рассказывать в картинках.

А ещё не было бы юникода, не было бы Zalgo!

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

Считай, что gc - средство для автоматического освобождения ресурсов (т.е. чтобы в ручную не надо было вызывать free)

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