LINUX.ORG.RU

Qt доступна теперь и под LGPL

 , ,


0

0

Компания Nokia объявила о том, что, начиная с версии 4.5, кросс-платформенная библиотека Qt будет доступна также под лицензией LGPL.

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

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

Коммерческая лицензия и лицензия GPL также останутся доступными.

Nokia таким образом рассчитывает качественно повысить популярность библиотеки и сохранить ее статус как лучшей в классе кросс-платформенных библиотек для разработки приложений и пользовательского интерфейса.

>>> Подробности

★★★★★

Проверено: Dimez ()

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

>> Ну подними ёмае. Я докажу опять что удобнее носить круглое и катать квадратное

>починил во имя истины

Виляние.

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

> А кроме C, какие еще есть байндинго-легко-написательные языки?

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

ЗЫ. А за изобретение сищных строк (заканчивающихся нулем) K&R вообще следует гнать из профессии ссаными тряпками.

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

> ЗЫ. А за изобретение сищных строк (заканчивающихся нулем) K&R вообще следует гнать из профессии ссаными тряпками.

А что, уже что-то лучше и переносимее придумали? Неужто паскалевские строки со смехотворным ограничением в 255 символов?

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

>А за изобретение сищных строк (заканчивающихся нулем) K&R вообще следует гнать из профессии ссаными тряпками.

На PDP это был тип данных поддерживающийся аппаратно.

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

>> А что, уже что-то лучше и переносимее придумали?

>структура длинна строки + указатель

Фрагментированная куча на компьютере с 8Кб памяти не привела бы ни к чему хорошему.

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

Паскалевские строки более вменяемые, так как имеют вид
<Длина_строки><Сама_строка>

В досовском турбопаскале на длину отводился 1 байт, но ведь никто не мешает дать 4 байта или сколько нужно. Зато длину строки не нужно проверять обходя саму строку и ища 0. А эта операция нужно немногим более чем почти всегда при работе со строками.

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

>А за изобретение сищных строк (заканчивающихся нулем) K&R вообще следует гнать из профессии ссаными тряпками.

За изобретение листов, стало быть, тоже гнать тряпками?

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

> немногим более чем почти

хорошо задвинул.

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

> Фрагментированная куча на компьютере с 8Кб памяти не привела бы ни к чему хорошему

ЛОЛШТО? Надо всего-то встроить в язык value-тип
struct StringRef
{
    size_t length;
    char   *text;
};

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

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

Нужна очень редко. Разве что, если вы писали на поцкале/барсике.

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

>В досовском турбопаскале на длину отводился 1 байт, но ведь никто не мешает дать 4 байта или сколько нужно. Зато длину строки не нужно проверять обходя саму строку и ища 0. А эта операция нужно немногим более чем почти всегда при работе со строками.

А как сделать срез подстроки? В Си например всегда ставили '\0' в конце среза и передавали адрес начала среза в другую подпрограмму. После окончания работы другой подпрограммы '\0' изымали и ставили на его место изначальный символ. В условиях PDP это наверно было важно.

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

>> Фрагментированная куча на компьютере с 8Кб памяти не привела бы ни к чему хорошему

>ЛОЛШТО? Надо всего-то встроить в язык value-тип
>struct StringRef
>{
>    size_t length;
>    char   *text;
>};

А где *text размещать планируешь? Через malloc() в куче наверное?

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

> В досовском турбопаскале на длину отводился 1 байт, но ведь никто не мешает дать 4 байта или сколько нужно.

Нет, это тоже фейловая идея. Как хранится строка это ворос реализации. Вся беда в том что в нищебродском языке Си нет нормального указателя на массив. иными словами указатель на обьект должен из себя представлять просто указатель, а указатель на массив должен содержать в себе числдо элементов и указатель. тогда не нужно никаких отдельных функций для работы со строками. В си все через жопу. слеплена куча нелепых функций str*, а функций для работы с массивами в crt вообще нет.

Обьект строка может быть устроен как угодно в зависимости языка, а передаватся должен указатель + размер. Сейчас стандарт дефакто - сишная строка, т.е. самый нелепый вариант из всех возможных.

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

> структура длинна строки + указатель
Угу, а через 10 елт все программы понадобится переписать, потому что 2(4,8...) байтов хватать не будет. Грызите pascal-строки, они вкусные!

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

> А где *text размещать планируешь? Через malloc() в куче наверное?

*text где угодно. эта структура - срез строки. за хранение *text она не отвечает.

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

>> А где *text размещать планируешь? Через malloc() в куче наверное?

>*text где угодно. эта структура - срез строки. за хранение *text она не отвечает.

Ну где-то text надо аллокировать. Твои предложения:

a) статическая память b) стек c) куча.

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

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

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

> Ну где-то text надо аллокировать

где хочешь там и храни. передавать изволь указатель+длинну. Просто в Си указатель на обьект и на срез массива - это одно и тоже. и это фейлдизайн.

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

>> Ну где-то text надо аллокировать

>где хочешь там и храни. передавать изволь указатель+длинну.

А нахрена долбаться со стрингами если есть lex/yacc например? И pcre? Лично я ручками по char-ам никогда не бегаю.

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

> Вся беда в том что в нищебродском языке Си нет нормального указателя на массив

Друх, в Си даже массивов нет :)

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

> А нахрена долбаться со стрингами если есть lex/yacc например

Ты что же совсем не понимаешь бенефитов от представления строк как срезов массивов?

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

>> Друх, в Си даже массивов нет

> тамбовский волк тебе друх. а массивы в си есть.

Только указатели и арифметика над ними :D

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

> Ты что же совсем не понимаешь бенефитов от представления строк как срезов массивов?

И я не понимаю. Огласи!

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

> тамбовский волк тебе друх. а массивы в си есть.

Это ты неконсистентное ушлёпство, у которого sizeof отваливается при передаче в функцию?

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

> А нахрена долбаться со стрингами если есть lex/yacc например? И pcre? Лично я ручками по char-ам никогда не бегаю.

Ну чтобы в одной строке одновременно хранить полный путь к файлу и его basename. Для этого и побегать придётся, да и pcre не поможет.
Хотя случай нищебродский и вырожденный.

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

> Это ты неконсистентное ушлёпство, у которого sizeof отваливается при передаче в функцию?

"ТО", разумеется. Это было не оскорбление собеседника :)

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

> я чтоже должен обьяснять очевидные вещи?
Были бы очевидными, я б не переспрашивал.

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

>> А нахрена долбаться со стрингами если есть lex/yacc например

>Ты что же совсем не понимаешь бенефитов от представления строк как срезов массивов?

Как-то особо не отягощаюсь работой со строками. Если мне нужен батч на баше я пишу батч на баше. Если мне надо распарсить текстовой файл в Си я беру lex/yacc. Если мне нужно распарсить xml я беру какой-нибудь SAX или expat. Если у тебя есть какой-то еще класс задач где надо очень сильно ковыряться со строками давай рассмотрим.

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

> int a[10];

> int s = sizeof(a);

> подумай вот над этим

И что тут думать? Где массив-то? Это область памяти, выяснить ее размер в рантайме невозможно :D

> и больше не появляйся в этом треде.

Ты запрещаешь, да? %)

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

>>> Друх, в Си даже массивов нет

>> тамбовский волк тебе друх. а массивы в си есть.

>Только указатели и арифметика над ними :D

В книжке Deep C Secrets недавно обсуждавшейся в /Development утверждается что как минимум linkage у глобального указателя и глобального массива разные.

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

> > Это то неконсистентное ушлёпство, у которого sizeof отваливается при передаче в функцию?

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

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

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

Мой пост о том что на PDP-11 ASCIIZ-строка была аппаратным типом данных ты конечно же отбросил.

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

>> Это то неконсистентное ушлёпство, у которого sizeof отваливается при передаче в функцию?
> Отваливатся он не должен ни у массивов не у строк которые по сути одно и тоже.


У массивов в си он _отваливается_. А должен он тебе что-то или нет, этого мы знать не можем. Вот у меня языки программирования, массивы и прочие сущности никогда денег не занимали.

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


По всем законам жанра дальше должна начаться проповедь Универсального Языка Для Решения Всех Проблем, Который Только Из-За Коррупции Не Вытеснил Си. Ждём-с.

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

> Угу, а через 10 елт все программы понадобится переписать, потому что 2(4,8...) байтов хватать не будет. Грызите pascal-строки, они вкусные!

Зачем чтото переписывать? Индексировать строку всегда с 0 а нужный сдвиг (2, 4, 8...) добавлять к индексу при компиляции.

С передачей же части строки точе проблем нет. Если передаём куда-то кусок с начала строки - уменьшаем длину, передаём "хвост" - записываем длину куда нужно, как сишники записывают 0, и передаём, потом востанавливаем. При чём желательно всё перечисленое желать прозрачно но всё же неявно для проргаммиста, чтобы глупых ошибок меньше было.

Кстати как вы будете делать конкатенацию строк без длины? Эта операция нужна только в паскале/васике чтоли?

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

>> Угу, а через 10 елт все программы понадобится переписать, потому что 2(4,8...) байтов хватать не будет. Грызите pascal-строки, они вкусные!
> Зачем чтото переписывать? Индексировать строку всегда с 0 а нужный сдвиг (2, 4, 8...) добавлять к индексу при компиляции.


Да-да, а либ тоже иметь n экземпляров каждой по количеству байт в заголовке строки?

> Кстати как вы будете делать конкатенацию строк без длины? Эта операция нужна только в паскале/васике чтоли?

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

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

> Мой пост о том что на PDP-11 ASCIIZ-строка была аппаратным типом данных ты конечно же отбросил.

ты что же собрался всю жизнь равнятся на всякое говно?

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

>С передачей же части строки точе проблем нет. Если передаём куда-то кусок с начала строки - уменьшаем длину, передаём "хвост" - записываем длину куда нужно, как сишники записывают 0, и передаём, потом востанавливаем. При чём желательно всё перечисленое желать прозрачно но всё же неявно для проргаммиста, чтобы глупых ошибок меньше было.

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

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

> По всем законам жанра дальше должна начаться проповедь Универсального Языка Для Решения Всех Проблем, Который Только Из-За Коррупции Не Вытеснил Си

если бы такой был я бы сам его использовал а пока приходится юзать С++ и хаскелл

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

>> Мой пост о том что на PDP-11 ASCIIZ-строка была аппаратным типом данных ты конечно же отбросил.

>ты что же собрался всю жизнь равнятся на всякое говно?

Ну K&R приходилось равняться, а ты их ссаными тряпками погнал из профессии.

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

Как вариант можно и срез с указателями на конец/начало использовать. Тоже вполне не плохое решение.

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

> Ну K&R приходилось равняться, а ты их ссаными тряпками погнал из профессии.

тем более. вместо того чтобы сделать правильно, K&R решили равнятся на всякое говно.

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

>Как вариант можно и срез с указателями на конец/начало использовать. Тоже вполне не плохое решение.

Я бы сказал что оно еще и реэнтерабельное и потоково-безопасное в отличие от.

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

> В языках, где идёт интенсивная работа со строковыми данными (hint: это ни в коем разе не может быть си), в типе "строка" хранится много дополнительной информации, в т.ч. длина строки в байтах и символах.

Так почему бы и нет? Длина - всего лишь минимально необходимое, что нужно хранить. Но к Си это никак не относится, там мужественно перелопатят char'ы пока нолик найдут.

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

>> В языках, где идёт интенсивная работа со строковыми данными (hint: это ни в коем разе не может быть си), в типе "строка" хранится много дополнительной информации, в т.ч. длина строки в байтах и символах.
> Так почему бы и нет? Длина - всего лишь минимально необходимое, что нужно хранить.

Так везде уж это есть.

> Но к Си это никак не относится, там мужественно перелопатят char'ы пока нолик найдут.

И в чём проблема?

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

> Да-да, а либ тоже иметь n экземпляров каждой по количеству байт в заголовке строки?

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

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

> > Но к Си это никак не относится, там мужественно перелопатят char'ы пока нолик найдут. > И в чём проблема?

В чём проблема найти конец 2х гигабайтной строки? В ДНК проблема, в ДНК..

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