В C у Вас на самом деле есть два различных варианта. Один, можно позволить системе управлять памятью для Вас. С другой стороны, можно сделать это собой. Обычно Вы хотели бы придерживаться первого максимально долго. Однако автоуправляемая память в C чрезвычайно ограничена, и необходимо будет вручную управлять памятью во многих случаях, такой как:
a. Вы хотите, чтобы переменная пережила функции, и Вы не хотите иметь глобальную переменную. исключая:
struct pair{ int val; struct pair *next; } struct pair* new_pair(int val){ struct pair* np = malloc(sizeof(struct pair)); np->val = val; np->next = NULL; return np; }
b. Вы хотите динамично выделить память. Наиболее распространенным примером является массив без фиксированной длины:
int *my_special_array; my_special_array = malloc(sizeof(int) * number_of_element); for(i=0; ic. You want to do something REALLY dirty. For example, I would want a struct to represent many kind of data and I don't like union (union looks soooo messy):
struct data{ int data_type; long data_in_mem; }; struct animal{/*something*/}; struct person{/*some other thing*/}; struct animal* read_animal(); struct person* read_person(); /*In main*/ struct data sample; sampe.data_type = input_type; switch(input_type){ case DATA_PERSON: sample.data_in_mem = read_person(); break; case DATA_ANIMAL: sample.data_in_mem = read_animal(); default: printf("Oh hoh! I warn you, that again and I will seg fault your OS"); }
Видят, длинного значения достаточно для содержания ЧЕГО-ЛИБО. Просто не забудьте освобождать его, или Вы будете сожалеть. Это среди моих любимых приемов, чтобы весело провести время в C: D.
Однако обычно, Вы хотели бы избегать своих любимых приемов (T ___ T). Вы повредите свою ОС, рано или поздно при использовании их слишком часто. Пока Вы не используете *выделение и свободный, безопасно сказать, что Вы являетесь все еще девственными, и что код все еще выглядит хорошим.
1) IronPython и CPython имеют почти идентичный синтаксис языка. Между ними очень небольшая разница. Переход должен быть тривиальным.
2) Библиотеки в IronPython сильно отличаются от CPython. Библиотеки Python немного отстают - довольно много библиотек, доступных для CPython, не будут работать (в настоящее время) в IronPython. Однако IronPython имеет чистый прямой доступ ко всей .NET Framework, а это означает, что он имеет одну из самых обширных библиотек, изначально доступных для него, поэтому во многих отношениях он намного опережает CPython. Некоторые из библиотек numpy / scipy не работают в IronPython, но из-за реализации .NET некоторые функции не нужны, поскольку файл perf. характеристики разные.
3) Доступ к Excel VBA будет проще с помощью IronPython, если вы делаете это из VBA. Если вы пытаетесь автоматизировать Excel, IronPython все еще проще, поскольку у вас есть доступ к первичным сборкам взаимодействия Execl и вы можете напрямую автоматизировать его, используя те же библиотеки, что и C # и VB.NET.
Что такое отношения между Реализация Python на C (основная версия с python.org) и IronPython с точки зрения языка совместимость? Это то же самое язык, и я, изучая один, сможет плавно перейти на другой, или это Java для JavaScript?
Тот же язык (на данный момент на уровне 2.5 - IronPython еще не 2.6 AFAIK).
Каков текущий статус Библиотеки IronPython? Сколько он отстает от библиотек CPython? я в основном интересуются numpy / scipy и f2py. Доступны ли они для IronPython? ?
Стандартные библиотеки в сегодняшнем IronPython находятся в отличном состоянии, огромные сторонние расширения, подобные упомянутым вами, далеки от этого. numpy
начинает становиться выполнимым благодаря ironclad , но не на уровне производства, поскольку numpy
от IronPython (как засвидетельствовано Номер версии 0.5 для Ironclad
и т. Д.). scipy
огромен, разрастается и переполнен расширениями на C и Fortran: у меня нет личного опыта, но я подозреваю, что менее половины из них будут даже работать, а тем более безупречно, при любой реализации, кроме CPython.
Как лучше всего получить доступ VB из Python и обратно (подключение некоторых библиотек Python к VBA в Excel, если быть точным)?
IronPython должен упростить задачу с помощью .NET, но CPython не так уж далек от реализации COM в win32all .
И последнее, но не менее важное, во что бы то ни стало ознакомьтесь с книгой IronPython в действии - как я говорю каждый раз, когда рекомендую его, я предвзято (из-за того, что был техническим рецензентом для него И по дружбе с одним автором), но я думаю, что объективно это лучшее введение в Python для разработчиков .NET И в то же время лучшее введение в .NET для Pythonistas.
Если вам нужно все scipy
(Ничего себе, но это немного » "Человек эпохи Возрождения", ученый-вычислитель! -), CPython - действительно единственный реальный вариант сегодня. Я уверен, что другие большие расширения (скажем, PyQt или Mayavi) находятся в аналогичном состоянии. Для глубокой интеграции с современной Windows однако я думаю, что у IronPython есть преимущество. Для универсального использования CPython может быть лучше (особенно благодаря множеству новых функций в 2.6), , если только вы действительно не хотите использовать много ядер в одном процессе, и в этом случае IronPython (который без GIL) может снова оказаться полезным.
Так или иначе (или даже на JVM через Jython, или в специфических средах через PyPy) Python, безусловно, отличный язык, какую бы реализацию (и) вы ни выбрали для данного приложения! -) Обратите внимание, что вам не нужно придерживаться ОДНОЙ реализации (хотя вы, вероятно, должны выбрать одну ВЕРСИЯ - 2.5 для максимальной совместимости с IronPython, Jython, Google App Engine и т. д .; 2.6, если вы этого не сделаете заботиться о любых вариантах развертывания, кроме «CPython на машине под моим собственным или виртуальным контролем»; -).
Я думаю, что у IronPython есть преимущество. Для универсального использования CPython может быть лучше (особенно благодаря множеству новых функций в 2.6), , если только вы действительно не хотите использовать много ядер в одном процессе, и в этом случае IronPython (без GIL) может снова оказаться полезным.Так или иначе (или даже на JVM через Jython, или в специфических средах через PyPy) Python, несомненно, отличный язык, какую бы реализацию (и) вы ни выбрали для данного приложения! -) Обратите внимание, что вам не нужно придерживаться ОДНОЙ реализации (хотя вы, вероятно, должны выбрать одну ВЕРСИЯ - 2.5 для максимальной совместимости с IronPython, Jython, Google App Engine и т. д .; 2.6, если вы этого не сделаете заботиться о любых вариантах развертывания, кроме «CPython на машине под моим собственным или виртуальным контролем»; -).
Я думаю, что у IronPython есть преимущество. Для универсального использования CPython может быть лучше (особенно благодаря множеству новых функций в 2.6), , если только вы действительно не хотите использовать много ядер в одном процессе, и в этом случае IronPython (который без GIL) может снова оказаться полезным.Так или иначе (или даже на JVM через Jython, или в специфических средах через PyPy) Python, безусловно, отличный язык, какую бы реализацию (и) вы ни выбрали для данного приложения! -) Обратите внимание, что вам не нужно придерживаться ОДНОЙ реализации (хотя вы, вероятно, должны выбрать одну ВЕРСИЯ - 2.5 для максимальной совместимости с IronPython, Jython, Google App Engine и т. д .; 2.6, если вы этого не сделаете заботиться о любых вариантах развертывания, кроме «CPython на машине под моим собственным или виртуальным контролем»; -).
1) Язык, реализованный в CPython и IronPython, один и тот же, или, самое большее, одна или две разные версии. Это совсем не похоже на ситуацию с Java и Javascript, которые являются двумя совершенно разными языками, которым в результате какого-то упрямого маркетингового решения даны похожие имена.
2) Сторонние библиотеки, реализованные на C (такие как numpy), должны быть оценены внимательно. IronPython имеет возможность выполнять расширения C (я забыл название), но есть много подводных камней, поэтому вам нужно проконсультироваться с сопровождающим каждой библиотеки
3) Понятия не имею.