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
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.