LINUX.ORG.RU

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

 , ,


0

1

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

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



Последнее исправление: cetjs2 (всего исправлений: 1)

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

Подменяет то, что в числах, как отдельном типе днных, во многих случаях нет нужды вообще.

Ололо, какие далеко идущие выводы на базе абстрактных построений.

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

далеко идущие выводы

Я написал

во многих случаях

не всегда, возможно, да

И это не только абстракции, отчасти, я на практике в этом убедился.

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

а с действительными?

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

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

Ладно, я спать.

Всем чмоке в этом чяте

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

Это дает возможность абстрагироваться от типов, иногда полезно. Ну и для понимания сути, хорошая практика.

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

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

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

Да. Но при чем тут строки, конкатенации и сложение?

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

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

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

В данном случае, строки/списки представляют из себя значение в форме длин.

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

Это же полугруппа. Как целые числа со сложением.

Это полугруппа, и даже моноид, но операция не коммутативна, в отличие от сложения, и не имеет обратного элемента, в отличие от умножения.

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

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

Все наоборот про костыли. Например тебе надо посчитать, а у тебя все строка? Вот и выкручивайся с мудреными алгоритмами, дабы просто сделать 5+5, или юзай сторонние костыли.

TGZ ★★★★
()

Это связано с оптимизацией кода?

this

эти твои баши и так люто тормозят, если они ещё и циклы начнут так крутить...

вот сравни по времени два идентичных скрипта

#!/bin/bash

I=9001
S=0

while true; do
	(( S += I ))
	(( I-- ))
	if [ $I == "0" ]; then
		break
	fi
done

echo $S


#!/bin/bash

S=0


for (( I=9001; I; I-- )); do
	(( S += I ))
done

echo $S

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

Какая может быть разница, если для строк нет сложения по определению.

про конкатенацию слышал?

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

Это проблемы убожества этих языков. Это не сложение.

это ты — убожество. Дай определение слова «сложение».

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

Лол, мы говорим про то, чтобы обозначать конкатенацию плюсом. Мы имеем полное право это делать.

я плюсом называю то, что мне хочется. Да, C++.

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

Но проблема в том, что у тебя множество чисел счетное, так?

ты упоролся — не бывает ЯП со счётными множествами вместо чисел.

emulek
()

Или существуют другие причины, ведь кроме строки в ЯП, действительно ничего не нужно.

процессоры не умеют складывать/отнимать/делить и умножать строки. Они работают с байтами в двоичной кодировке.

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

Разница между «5» и 5 проявляется уже на операции сложения.

select 5 + '5' from sometable
select 5 - '5' from sometable
select 5 * '5' from sometable
select 5 / '5' from sometable
TEX ★★★
()
Последнее исправление: TEX (всего исправлений: 1)
Ответ на: комментарий от emulek

Я был о тебе лучшего мнения
Почувствуй наконец разницу между двумя словами на латыни:
concatenation
additio
Как нагуглиш - приходи
Задолбали, понапишут шелухи в языках, а потом у них все разваливается

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

процессоры не умеют складывать/отнимать/делить и умножать строки.

ваще-то операции со строками есть в процессорах начиная с i8086. (что-то даже в Z80 было).

Также и большие числа раньше в процессоре представлялись как строки из меньших чисел. Вплоть до 4х битных тетрад и BCD арифметики.

Они работают с байтами в двоичной кодировке.

они работают не с байтами, а с группами байтов. Группы называются «строки», а байты называются «символами». Учи матчасть.

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

Ещё у одного похапе погромиста сорвало башню?

кстати в похапе принцип «всё есть число». Например "5" + "5" == 10. А для конкатенации выделена специальная операция «точка».

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

ваще-то операции со строками есть в процессорах начиная с i8086. (что-то даже в Z80 было).

Я правильно понимаю что ты сейчас про операции складывание/отнимание/деление и умножение строк ?

они работают не с байтами, а с группами байтов.

зануда

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

Я был о тебе лучшего мнения

мне насрать на мнение идиота, который даже подписаться под своими словами не может.

Почувствуй наконец разницу между двумя словами на латыни:

я знаю, что значат эти слова. Дай определение «сложению», потом обсудим, что есть «сложение», а что не есть. Иначе со своими друзьями-олигофренами общайся.

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

Я правильно понимаю что ты сейчас про операции складывание/отнимание/деление и умножение строк ?

нет, неправильно. Для строк элементарная операция — поиск символа. Ну и копирование конечно. А вот определять остальные операции можно по разному.

Они работают с байтами в двоичной кодировке.

зануда

да, ты зануда.

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

сравни по времени два идентичных скрипта

Разница - чуть больше чем x2. Не такой уж и ошеломляющий результат, между прочим.

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

Как будто это чем-то лучше

то же самое говно, которое называется «нечёткая типизация». Делаем один тип, а остальные — костылями.

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

нет, неправильно.

Тогда какого хрена ты вклинился в беседу ?

Для строк элементарная операция — поиск символа.

А я специально сделал акцент именно на арифметику (+-*/) в CPU и чего умное ты, со своим поиском, сказать хотел ? Опять что то своё в голове услышал ?

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

Разница - чуть больше чем x2. Не такой уж и ошеломляющий результат, между прочим.

ошеломляющий будет если ты эти числа представишь КАК ЧИСЛА. На сишечке например. А с говном — да, не очень впечетляюще. Молоток из говна закручивает шурупы не хуже, чем отвёртка из говна.

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

Между словами разница есть да, но между значениями этих слов - это хз. Скорей надумана. Есть разница между словами пенис и х*й? Канешна есть. Тока какая именно - вот в чем вопрос.

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

Тогда какого хрена ты вклинился в беседу ?

мне нельзя, да? Иди настучи модераторам на чё-нить, что я тебя опять обидел.

А я специально сделал акцент именно на арифметику (+-*/) в CPU и чего умное ты, со своим поиском, сказать хотел ?

для тех кто в танке: операции разные бывают, и данные разные. Для разных данных есть поддержка как на уровне железа, так и на уровне ЯП. То, что «процессоры умеют только считать» — сказки, из разряда сказок про Деда Мороза. Они годны для школьников, которые только-только начали изучать информатику. На самом деле, данные разные бывают, и каждый вид данных нуждается в своём способе обработки.

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

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

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

нечёткая типизация

Ты имеешь в виду утиную?

ИМХО мешаешь ты(и не только ты) утят с говном незаслуженно. Только говно способно принимать любую форму. А утята тут только лишь при том, что когда они только вылупились, у них в башке только говно.

Ну и «твоя» идея «всё строка» равносильна идее «всё говно». Годно, что-бы по быстрому сляпать чё-нить.

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

Во-первых, по определению «сложение» — арифметическая операция. Во-вторых, у «сложения» есть свойство «коммутативность», которого нет у «конкатенации». То, что некоторые языки программирования используют знак арифметического сложения для конкатенации строк, еще приравнивает две эти операции.

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

мешаешь ты

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

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

Во-первых, по определению «сложение» — арифметическая операция.

с какого перепуга? Школьник что-ли, и ничего кроме арифметики не знаешь? Ну дык ВНЕЗАПНО ты, школьник, ещё и рюкзак свой СКЛАДЫВАЕШЬ, или это по твоему «не сложение»?

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

с какого перепугу оно «есть»? Обоснуй.

А вот вика пишет: «Сложение обладает следующими свойствами: коммутативностью (переместительный закон): a + b = b + a ... В других системах (чисел, объектов) любое из этих свойств может не выполняться». Врёт?

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

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

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

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

«конкатенация» это частный случай сложения. Если при сложении вообще ты просто всё валишь в одну кучу, то при конкатенации добавляешь к хвосту башку. Если у объекта нет «хвоста» и «башки», то конкатенация равносильна сложению (как для натуральных чисел). А если есть разница, то результат обмена операндов получится разным, всё зависит от того, к какому именно хвосту ты прикладываешь башку. Если в строке оба конца одинаковые, то разницы тоже нет: "ффф"+"ффффф"=="ффффф"+"ффф".

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

А еще рюкзак внезапно - СОБИРАЮТ и УКЛАДЫВАЮ
Но твой лексикон видимо к таким «внезапностям» не привык
Но с темы съехал лихо, про ЯП он не говори, так какого ты сюда приперся, зеленый?

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