- 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
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
class Functions //здесь функции
{
static void PrintInfo(String[] args) //инфа из стандартного ввода
{
try( BufferedReader br = new BufferedReader(new InputStreamReader(System.in)) )
{
int lines=0;
int words=0;
int symbols=0;
String s;
while( (s=br.readLine()) != null )
{
lines++;
words+=Functions.NumberWords(s);
symbols+=Functions.NumberSymbols(s);
}
if(args.length == 0) {
System.out.format("%7d%7d%7d\n", --lines, words, --symbols);
}
}
catch(IOException e) {
System.out.println("Ошибка: "+e);
}
}
static int NumberWords(String s) //количество слов в строке
{
char c='-';
int num=0;
boolean change=false; //сделано чтобы пустые строки не прибавляли значение num
for(int i=0; i<s.length(); i++) {
if( s.charAt(i)==' ' && (c!=' ' && c!='\t')
|| s.charAt(i)=='\t' && (c!=' ' && c!='\t') ) num++; //новое слово
c = s.charAt(i);
if(!change ) change=true;
}
if(change && c!=' ') num++; //последнее слово
return num;
}
static int NumberSymbols(String s)
{
int count=0;
for(int i=0; i<=s.length(); i++)
count++;
return count;
}
static void getInfo()
{
try( BufferedReader b = new BufferedReader(new FileReader("help")) )
{
String s;
while( (s=b.readLine()) != null )
System.out.println(s);
}
catch(IOException e) {
System.out.println("Файл справки отсутствует");
}
}
}
Переписываю все программы из linux на java, это говно-наработки
gost 30.09.2017 10:11 # 0
Какой замечательный пример Java-style и следования философии Java!
> class Functions //здесь функции
Блядь. Вот не понимаю я этого. class Functions, блядь. Functions - это класс. Класс чего, сука? Какой объект описывает класс Functions? Вот нахуя писать код, семантика которого полностью, мать его, контринтуитивна? Говно какое-то, пидоры, блядь, ебанные! Всех разъебал бы!
Извините, накипело.
bormand 30.09.2017 10:48 # +4
FrauSchweinhund 30.09.2017 11:43 # 0
roman-kashitsyn 30.09.2017 12:21 # +2
FrauSchweinhund 30.09.2017 12:28 # +2
mdaaa..
inkanus-gray 30.09.2017 13:17 # +1
2. Засираем оперативку лишними копиями входных данных.
3. Бизнес-логику внедряем в совершенно неподходящий по семантике метод intValue.
4. Экземпляр класса отдаём на съедение мусоросборщику.
5. Отравляем жизнь пользователям библиотеки уродским синтаксисом (необходимостью писать «new» и всё такое).
Всё посчитал или что-то забыл?
FrauSchweinhund 30.09.2017 14:59 # +2
А жава не умеет оптимизировать 1, 2 и 4? В плюсах от этого всего остается просто сравнение https://godbolt.org/g/spFscH
inkanus-gray 30.09.2017 16:25 # +1
Либо я не умею им пользоваться...
bormand 30.09.2017 16:30 # +3
inkanus-gray 30.09.2017 16:34 # +1
Значит, шансы найти оптимизирующий компилятор малы по причине идеологии Java?
Stallman 30.09.2017 17:45 # +5
subaru 30.09.2017 18:10 # +3
inho 02.10.2017 22:54 # 0
bormand 02.10.2017 23:19 # +1
И по этим таблицам и текущему instruction pointer'у вполне можно воссоздать подразумеваемые фреймы заинлайненных функций.
Разве что оптимизация хвостовой рекурсии необратимо портит бектрейс.
FrauSchweinhund 02.10.2017 23:22 # +2
После инлайна:
Из отладочной инфы отладчик знает, куда компилятор заинлайнил функцию f. Если он видит, что деление на ноль произошло между '// begin f()' и '// end f()', то может добавить вызов f() в стектрейс. Очевидно же.
bormand 02.10.2017 23:43 # +1
Но как первое приближение - сойдёт.
bormand 02.10.2017 23:56 # +1
Stallman 03.10.2017 00:06 # 0
bormand 03.10.2017 00:11 # +1
Stallman 03.10.2017 01:27 # 0
А вот определить такие уже задача не такая тривиальная, учитывая что ыксепшн может перехватываться в какой-нибудь другой библиотеке.
bormand 03.10.2017 07:38 # 0
bormand 03.10.2017 07:40 # 0
bormand 02.10.2017 22:50 # 0
vistefan 03.10.2017 15:20 # 0
subaru 03.10.2017 15:30 # +2
В примере выше информация о том, какой из двух рекурсивных вызовов сработал на каждой итерации, будет потеряна при оптимизации хвостовой рекурсии.
bormand 03.10.2017 16:17 # +1
roman-kashitsyn 03.10.2017 16:38 # +2
bormand 03.10.2017 16:39 # +1
А если там разные функции tail call'ятся - то и счётчик будет сложно хранить.
roman-kashitsyn 03.10.2017 17:23 # +1
Согласен. Кстати, в Scala/Clojure такая оптимизация не работает, там trampolines приходится использовать. Скала, правда, никакие счётчики для генерации стек-трейсов они не хранит, просто превращают рекурсию в цикл в байткоде.
roman-kashitsyn 03.10.2017 16:51 # +2
Что-то у вас, батенька, пример расходящийся
subaru 03.10.2017 17:01 # 0
bormand 30.09.2017 16:04 # +2
SemaReal 04.10.2017 03:24 # +1
MaxToIntConvertStrategy str = BeanLookupManager.getInstance().getBean( MaxToIntConvertStrategy.class);
MaxConvertedToInt toInt = str.convert(max);
int foo = toInt.asInt();
inkanus-gray 04.10.2017 03:51 # 0
SemaReal 04.10.2017 03:54 # 0
<? if ($a > $b)
{echo "<b>это число больше</b>"}?>
<? if ($a < $b)
{echo "<b>это число меньше</b>"}?>
gost 30.09.2017 22:16 # +3
Дали обезьяне молоток, обезьяна постучала по кокосу, попила молоко — вкусно!
С тех пор бегает она с одним молотком в лапе и пытается разжечь им костёр — ну, чтобы эволюционировать в человека. Пока не получилось — ни первого, ни второго.