LINUX.ORG.RU

Опущу пост выше, про ненужность ТС'а сообществу и перейду к сабжу.

Если есть желание не ваять говнокод, то начинать надо с 3-томника Кнута «Искусство программирования». После этого зубрить как «Отче наш» K&R (не мертвого страуса). Затем, по-хорошему, ассемблер целевой платформы. После этого вопроса о языке возникать не должно.

ЗЫ, Выпад в сторону Страустрппа обусловлен тем, что я не знаю (скорее всего нет) плаьформы, аппаратно заточенной под Ц++.

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

> на яве кнопку «Запустить Garbage Collector»

Это делают люди, которые не умеют программировать.

Garbage Collector не отменяет утечек памяти. Мне известно как минимум две основных возможности:

ссылка из какой-нибудь static переменной

исключение брошенное из метода finalize

И кстати кучу тоже можно отлаживать - по крайней мере в 6-ой яве есть для этого удобные средства.

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

> потому что GC запускается по своему усмотрению по очень хитрому алгоритму, а кнопкой ты его запускаешь принудительно

Основной смысл GC в амортизации стоимости оператора free + возможность дефрагментации кучи. Принудительный запуск GC приводит только к потере производительности. Специально для защиты от «умных» программистов, которые любят запускать его принудительно сделали настроечный параметр, который запрещает ручной запуск GC.

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

Да я помню типов которые разрабатывали какойто софт важный у нас для немецкого банка. Я с ними курил в туалете иногда и даже пришлось немного пожить с ними. Это просто улет, Я так никогда их и не понял. =))

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

> Теперь вопрос, для чего пихать кнопку GC в продукт написанный на яве, где якобы все идеально со сборкой мусора?

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

Если ты под Windows минимизируешь приложение она берет и всю кучу выгружает в swap. Потом когда пытаешься открыть приложение у тебя срабатывает gc и получаются феерические тормоза, потому что gc поднимает весь своп в оперативную память. Если бы операционная система взаимодействовала с java машиной и перед тем, как выгружать ее в своп вызвала сборку мусора, таких проблем бы не было. Но такого API нет ни в одной операционной системе.

sign
()

> Какой язык лучше изучать, по крайней мере для начала?

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

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

> Серьезные приложения на Питоне

Это какие такие приложения? Уж не Zope ли? А еще что-нибудь есть?

Питон отличный клей для склеивания библиотек. Но ref-counting gc + global interpreter lock + slow dynamic dispatch - делают свое черное дело.

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

> Ну скажем, прикладное программирование в Linux...

Зачем искусственно ограничивать себя одной платформой?

Для прикладного программирования неплохо было бы освоить Linux+Windows.

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

> Скажи, дорогой спаситель, а там можно будет бегать по массиву int-ов и процессить их как byte, не делая сотни раз int >> 24 & 0xff и обратных int << 24 | ? Копирование массивов с изменением типа не предлагать

В java - нет.

А еще там нет unsigned int.

Также отсутствует возможность выделять объекты в стэке.

Псевдо дженерики - которых лучше бы не было.

Отсутствует понятие const объектов.

Одним словом - ищу новый язык программирования на ближайшие 10 лет (.Net не предлагать, C++).

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

Имхо, проблема/достижение современных ЯП - снижение уровня вхождения. Чем дальше, тем больше языки отрываются от платформ. С одной стороны это может привести к созданию «математически чистого», универсального языка. С другой стороны, плка это приводит к созданию разнообразнейших стандартов, технологий, методов написания ПО. Каждая из этих технологий вводится для (реклама) «упрощения/ускорения» разработки, а по факту - приводит к большим (иногда чрезмерно) временным затратам на освоение.

Случай из собственного опыта. Имея очень солидный багаж знаний/разработок на, как говорится, Pure C, понадобилось освоить «красивую», «простую» технологию OPC (васед на OLE). Для создания первого работающего (hello world) OPC-сервера понадобилось потратить пол года рабочего времени на изучения COM, OLE и, собственно, OPC-specification. При том, что функционал этого сервера на уровне набора функций, собранных в динамическую библиотеку, был написан за 40 минут.

Другой пример. По наследству мне досталась примитивная учётная система, которая требовала 2-х .net фреймворков и волшебной платной билдовой (borland) библиотеки компонентов для отрисовки закладок. Портирование на Qt заняло неделю (правда нормальной многостраничной печати из webkit'а до сих пор не хватает).

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

> привести к созданию «математически чистого», универсального языка

Ну да - было бы хорошо. Какой-нибудь lisp 2.0 ;)

Сейчас активно изучаю специализацию алгоритмов.

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

абстрактные алгоритмы описанные для абстрактных типов данных.

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

При этом хотелось бы иметь больше гибкости - чтобы реализация объектов могла динамически изменяться во время выполнения программы. Сейчас это можно сделать только через создание прокси объекта для объекта реализации. Получается лишняя ссылка при доступе + лишний объект. Хотя ничего не мешало сделать что-вроде оператора substitute object implementation

object a <- object b то есть инициализуется новый объект b (в данном случае на основании данных объекта a) и подставляется вместо объекта a.

И все, кто раньше ссылался на реализацию объекта a, автоматически начинают обращаться к реализации объекта b.

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

> 2-х .net фреймворков

Да - вот это обычно пугает. Хотя у явы начинаются похожие проблемы.

Сейчас, как минимум, две явы: 4 и 5/6.

На подходе еще две: 7 и 7+ext.

Буквально в пятницу хотел прикрутить что-нибудь скриптовое к java 4. Взял JRuby - оказалось что последняя версия, которая работает с четверкой - это 1.0.3. Что тут можно сказать?

Вот такой write once - run anywhere...

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

>начинать надо с 3-томника Кнута «Искусство программирования»
И ты наверное даже и сам начинал с него свое изучение программирования?

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

>С одной стороны это может привести к созданию «математически чистого», универсального языка

Эээ. Если под «универсальным» ты понимаешь «не привязанный к конкретной аппаратуре», то они (языки) почти все такие и в первую очередь Си. Конечно, если ты из тех долбодятлов, что пишут «int*a=malloc(a_len*4)», то может сложиться неверное впечатление о ситуации с переносимостью. Касательно «математической чистоты» же, скажи пожалуйста, где в существующих функциональных и приближенных к ним языках недостаточно «чисто»? В хаскеле приходится байты считать? В ерланге путаница с таблицей прерываний? Утечки памяти в прологе? Недостаточная поддержка IEEE-754 в машине Беббиджа?

legolegs ★★★★★
()

Решил пока что изучать Си и какой-нибудь скриптовый язык. Начал проходить учебник по Си Кернигана-Ричи, но он выглядит очень устаревшим. Примеры приходится переделывать, главным образом капслок переделывать на нижний регистр, ну и не всё правильно работает в Линуксе)) Так, /* FAHRENHEIT-CELSIUS TABLE */ при запуске выдаёт довольно-таки странный результат:

%4D    0.0
%4D   20.0
%4D   40.0
%4D   60.0
%4D   80.0
%4D  100.0
%4D  120.0
%4D  140.0
%4D  160.0
%4D  180.0
%4D  200.0
%4D  220.0
%4D  240.0
%4D  260.0
%4D  280.0
%4D  300.0
Явно не совсем то, что имел в виду автор. И то после замены int на double, о чём просил gcc, до этого было ещё более странно. А есть учебник такого же уровня, но новее?

И ещё вот это, уже про Линукс: http://www.linuxcenter.ru/lib/books/zlp/004.phtml но чувствую, это немногому научит, там только про консольные программы

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

Качай третье издание, на торрентах есть.

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

А еще там нет unsigned int.

Use BigDecimal, Luke!

Также отсутствует возможность выделять объекты в стэке.

man Escape-анализ в Mustang

Псевдо дженерики - которых лучше бы не было.

Промолчу.

Отсутствует понятие const объектов.

Не для всех. Строки всё же иммутабельны. Данные примитивных типов при передаче в методы остаются неизменными в вызывающем коде.

Одним словом - ищу новый язык программирования на ближайшие 10 лет.

Clojure.

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

> Одним словом - ищу новый язык программирования на ближайшие 10 лет (.Net не
предлагать, C++).

Если на 100 лет, тогда Arc: http://arclanguage.org/

CL-USER
()
Ответ на: комментарий от exception13

Баян столетний, уже не смешно. А думаешь, наверное, что что-то умное написал.

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

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

>Если ты под Windows минимизируешь приложение она берет и всю кучу выгружает в swap.

Но такого API нет ни в одной операционной системе.


Вы точно знаете о чем говорите? :) Я разве говорил про Windows или другую ОС? Факт: все крутится на тру-солярке.

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

>Это делают люди, которые не умеют программировать.

Эти люди делают деньги и уверен, что весьма приличные.

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

>И давно это UI зависит от языка программирования?

Где-то это сделано удобно, где-то нет. Взять тот же ассемблер и Си++.

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


Без этого не стать профессиональным программистом.

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

Полностью согласен

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

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